Ejemplo n.º 1
0
        public void TestFrame()
        {
            DebuggerTracer.EntityFrameTrace frame = new DebuggerTracer.EntityFrameTrace();

            // _ _ 3
            frame.PadAndInsert(stepOffset: 2, nodeId1: 3, nodeId2: 3);
            AssertNodeIds(frame, 0, 0, 3);

            // 1 _ 3
            frame.SetNextStep(1, 1);
            AssertNodeIds(frame, 1, 0, 3);

            // 1 2 3
            frame.SetNextStep(2, 2);
            AssertNodeIds(frame, 1, 2, 3);

            // 1 2 3 4
            frame.SetNextStep(4, 4);
            AssertNodeIds(frame, 1, 2, 3, 4);

            // 1 2 3 4 _ _ 7
            frame.PadAndInsert(2, 7, 7);
            AssertNodeIds(frame, 1, 2, 3, 4, 0, 0, 7);

            // 1 2 3 4 5 _ 7
            frame.SetNextStep(5, 5);
            AssertNodeIds(frame, 1, 2, 3, 4, 5, 0, 7);

            // 1 2 3 4 5 6 7
            frame.SetNextStep(6, 6);
            AssertNodeIds(frame, 1, 2, 3, 4, 5, 6, 7);
        }
Ejemplo n.º 2
0
 static void AssertNodeIds(DebuggerTracer.EntityFrameTrace frame, params ulong[] ids)
 {
     Assert.That(frame.steps.Count, Is.EqualTo(ids.Length));
     for (int i = 0; i < ids.Length; i++)
     {
         Assert.That(frame.steps[i].nodeId1, Is.EqualTo(ids[i]));
     }
 }
Ejemplo n.º 3
0
    protected override void OnUpdate()
    {
        foreach (GraphStream graphStream in m_GraphStreams)
        {
            graphStream.CompleteInputDependencies();
            DebuggerTracer.GraphTrace graphTrace = DebuggerTracer.GetGraphData(graphStream.GraphId, createIfAbsent: true);
            var reader = graphStream.AsReader();
            var frame  = Time.frameCount;

            DebuggerTracer.FrameData frameData = null;
            for (int i = 0; i < reader.ForEachCount; i++)
            {
                reader.BeginForEachIndex(i);
                DebuggerTracer.EntityFrameTrace entityData = null;
                while (reader.RemainingItemCount > 0)
                {
                    if (frameData == null)
                    {
                        frameData = graphTrace.GetFrameData(frame, createIfAbsent: true);
                    }

                    var   callFrame = reader.Read <DataType>();
                    ulong nodeId1, nodeId2;
                    switch (callFrame)
                    {
                    case DataType.Entity:
                        var e = ReadEntity(ref reader);
                        entityData = frameData.GetEntityFrameTrace(e.Index, createIfAbsent: true);
                        break;

                    case DataType.Step:
                        Assert.IsTrue(entityData != null);
                        ReadStepRecord(ref reader, out nodeId1, out nodeId2, out var stepOffset, out var progress);
                        entityData.SetLastCallFrame(nodeId1, nodeId2, stepOffset, progress);
                        break;

                    case DataType.Data:
                    {
                        Assert.IsTrue(entityData != null);
                        ReadValueRecord(ref reader, out nodeId1, out nodeId2, out var value);
                        entityData.RecordValue(value, nodeId1, nodeId2);
                        break;
                    }
                    }
                }

                reader.EndForEachIndex();
            }

            graphStream.Dispose();
        }
        m_GraphStreams.Clear();
    }
Ejemplo n.º 4
0
        public void TestCircularBufferHasRightValues()
        {
            DebuggerTracer.GraphTrace recorder = new DebuggerTracer.GraphTrace(10);
            const int entityId = 0;

            for (int i = 0; i < 20; i++)
            {
                DebuggerTracer.FrameData        frameData  = recorder.GetFrameData(i, true);
                DebuggerTracer.EntityFrameTrace entityData = frameData.GetEntityFrameTrace(entityId, true);
                entityData.RecordValue(i, 0, 0);
            }
            for (int i = 0; i < 20; i++)
            {
                if (i < 10)
                {
                    Assert.That(recorder.GetFrameData(i, false), Is.Null);
                }
                else
                {
                    Assert.That(recorder.GetFrameData(i, false).GetEntityFrameTrace(entityId, false).values[0].Single().readableValue, Is.EqualTo(i.ToString()));
                }
            }
        }
Ejemplo n.º 5
0
        public void TestCircularBufferIsWorking()
        {
            DebuggerTracer.EntityFrameTrace recorder = new DebuggerTracer.EntityFrameTrace();
            Assert.That(recorder.values?.ContainsKey(1) ?? false, Is.False);
            recorder.Record("a", 1, 0);

            Check(1, "a");

            Assert.That(recorder.values?.ContainsKey(2) ?? false, Is.False);
            recorder.Record("b", 2, 0);
            Check(2, "b");

            Assert.That(recorder.values?.ContainsKey(3) ?? false, Is.False);
            recorder.Record("c", 3, 0);
            Check(3, "c");

            void Check(ulong anodeId, object value)
            {
                var valueRecord = recorder.values.Last().Value.Last();

                Assert.That(valueRecord.nodeId1, Is.EqualTo(anodeId));
                Assert.That(valueRecord.readableValue, Is.EqualTo(value.ToString()));
            }
        }
Ejemplo n.º 6
0
        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);
        }