コード例 #1
0
        protected override void UpdateNode(BtNode node, long ellapsedMilliseconds)
        {
            // TODO: use context pool
            var context = new BtContext(node.Entity, Engine, ellapsedMilliseconds);

            node.BehaviourComponent.BehaviourTree.Tick(context);
        }
コード例 #2
0
        public void ReadEvents(TraceFolder traceFolder)
        {
            using (var context = new BtContext())
            {
                var traces = Directory.GetFiles(traceFolder.Path, "metadata", SearchOption.AllDirectories);
                foreach (var trace in traces)
                {
                    context.AddTrace(Path.GetDirectoryName(trace));
                }

                ReadEvents(context, traceFolder.IgnorePids);
            }
        }
コード例 #3
0
        private void ReadEvents(BtContext context, int[] ignorePids)
        {
            ReportCollector previousCollector = null;

            foreach (var ev in context.GetEvents())
            {
                int vpid = ev.Scope(CtfScope.StreamEventContext).Field("vpid").GetInt32();

                // Check if ignoring this pid
                for (int i = 0; i < ignorePids.Length; i++)
                {
                    if (vpid == ignorePids[i])
                    {
                        continue;
                    }
                }

                // Find collector
                ReportCollector collector;
                if (previousCollector != null && previousCollector.Pid == vpid)
                {
                    // Same collector as previous event
                    collector = previousCollector;
                }
                else
                {
                    if (!_pidReportCollectors.TryGetValue(vpid, out collector))
                    {
                        collector = new ReportCollector(vpid);
                        _pidReportCollectors.Add(vpid, collector);
                    }
                    previousCollector = collector;
                }

                switch (ev.Name)
                {
                case DotNetEvents.RuntimeInformationStart:
                {
                    collector.NewProcess = true;
                    break;
                }

                case DotNetEvents.GCAllocationTick_V3:
                {
                    string typeName;
                    EventFieldReader.ReadGCAllocationTickV3(ev, out typeName);
                    collector.AddAllocationSample(typeName);
                    break;
                }

                case DotNetEvents.GCStart_V2:
                {
                    int depth;
                    EventFieldReader.ReadGCStart_V2(ev, out depth);
                    collector.AddGC(depth);
                    break;
                }

                case DotNetEvents.GCHeapStats_V1:
                {
                    ulong gen0Size;
                    ulong gen1Size;
                    ulong gen2Size;
                    EventFieldReader.ReadGCHeapStats_V1(ev, out gen0Size, out gen1Size, out gen2Size);
                    // convert to MB
                    gen0Size = gen0Size >> 16;
                    gen1Size = gen1Size >> 16;
                    gen2Size = gen2Size >> 16;
                    collector.AddHeapStats(gen0Size, gen1Size, gen2Size);
                    break;
                }

                case DotNetEvents.ExceptionThrown_V1:
                {
                    string typeName;
                    string message;
                    EventFieldReader.ReadExceptionThrown_V1(ev, out typeName, out message);
                    collector.AddExceptionThrown(typeName, message);
                    break;
                }

                case DotNetEvents.MethodJitInliningFailed:
                {
                    string methodBeingCompiled;
                    string inlinee;
                    bool   failsAlways;
                    string failReason;
                    EventFieldReader.ReadMethodJitInliningFailed(ev, out methodBeingCompiled, out inlinee, out failsAlways, out failReason);
                    collector.AddJitInlineFail(methodBeingCompiled, inlinee, failsAlways, failReason);
                    break;
                }
                }
            }
        }