public virtual void OptionsMenu(GenericMenu menu) { MenuItem("Tracing/Clear", false, () => DebuggerTracer.LoadData(null)); MenuItem("Tracing/Load", false, () => { if (!GetAssetAndTracePath(out var assetModel, out var _, out var traceName)) { return; } TraceDump traceDump; using (var traceStream = File.OpenRead(traceName)) traceDump = TraceDump.Deserialize(new BinaryReader(traceStream)); var graphTrace = new DebuggerTracer.GraphTrace(traceDump.FrameData); DebuggerTracer.GraphReference graphReference = DebuggerTracer.GraphReference.FromId(assetModel.GetInstanceID()); DebuggerTracer.LoadData(new Dictionary <DebuggerTracer.GraphReference, DebuggerTracer.GraphTrace> { [graphReference] = graphTrace }); });
public static TraceDump Deserialize(BinaryReader reader) { var version = reader.ReadInt16(); Assert.AreEqual(k_Version, version); var path = reader.ReadString(); var frameCount = reader.ReadInt32(); var frameData = new DebuggerTracer.FrameData[frameCount]; TraceDump graphData = new TraceDump(path, frameData); for (int i = 0; i < frameCount; i++) { frameData[i] = new DebuggerTracer.FrameData(reader.ReadInt32()); var entityCount = reader.ReadInt32(); var entityData = new Dictionary <DebuggerTracer.FrameData.EntityReference, DebuggerTracer.EntityFrameTrace>(entityCount); frameData[i].EntityFrameData = entityData; for (int j = 0; j < entityCount; j++) { DebuggerTracer.FrameData.EntityReference entityRef = new DebuggerTracer.FrameData.EntityReference { EntityIndex = reader.ReadInt32() }; var entityFrameTrace = new DebuggerTracer.EntityFrameTrace(); { entityFrameTrace.steps = new List <DebuggerTracer.EntityFrameTrace.NodeRecord>(reader.ReadInt32()); for (int k = 0; k < entityFrameTrace.steps.Capacity; k++) { entityFrameTrace.steps.Add(new DebuggerTracer.EntityFrameTrace.NodeRecord { nodeId1 = reader.ReadUInt64(), nodeId2 = reader.ReadUInt64(), progress = reader.ReadByte(), type = reader.ReadBoolean() ? DebuggerTracer.EntityFrameTrace.StepType.Exception : DebuggerTracer.EntityFrameTrace.StepType.None, }); } } { var valueCount = reader.ReadInt32(); entityFrameTrace.values = new Dictionary <int, List <DebuggerTracer.EntityFrameTrace.ValueRecord> >(valueCount); for (int k = 0; k < valueCount; k++) { var step = reader.ReadInt32(); List <DebuggerTracer.EntityFrameTrace.ValueRecord> values = new List <DebuggerTracer.EntityFrameTrace.ValueRecord>(reader.ReadInt32()); for (int l = 0; l < values.Capacity; l++) { values.Add(new DebuggerTracer.EntityFrameTrace.ValueRecord { nodeId1 = reader.ReadUInt64(), nodeId2 = reader.ReadUInt64(), readableValue = reader.ReadString(), }); } entityFrameTrace.values.Add(step, values); } } entityData.Add(entityRef, entityFrameTrace); } } return(graphData); }