private void AddTrace(VirtualizingStackPanel vsp, ScrollTraceOp op, ScrollTracingInfo sti, params object[] args) { ScrollTraceRecord record = new ScrollTraceRecord(op, vsp, sti.Depth, sti.ItemIndex, _depth, BuildDetail(args)); _traceList.Add(record); switch (op) { default: break; case ScrollTraceOp.BeginMeasure: Push(); break; case ScrollTraceOp.EndMeasure: Pop(record); record.Snapshot = vsp.TakeSnapshot(); Flush(sti.Depth); break; case ScrollTraceOp.BeginArrange: Push(); break; case ScrollTraceOp.EndArrange: Pop(record); record.Snapshot = vsp.TakeSnapshot(); Flush(sti.Depth); break; case ScrollTraceOp.BSetAnchor: Push(); break; case ScrollTraceOp.ESetAnchor: Pop(record); break; case ScrollTraceOp.BOnAnchor: Push(); break; case ScrollTraceOp.ROnAnchor: Pop(record); break; case ScrollTraceOp.SOnAnchor: Pop(); break; case ScrollTraceOp.EOnAnchor: Pop(record); break; case ScrollTraceOp.RecycleChildren: case ScrollTraceOp.RemoveChildren: record.RevirtualizedChildren = args[2] as List<String>; break; } if (_flushDepth < 0) { Flush(_flushDepth); } }
private void Pop(ScrollTraceRecord record) { --_depth; record.ChangeOpDepth(-1); }