Exemplo n.º 1
0
        public void BuildStatisticsRaw(ISelectedTimeFrame timeFrame)
        {
            ApplicationStatistics = new ApplicationStatistics();

            ThreadsStatisticsRaw = new Dictionary <ulong, IThreadStatisticsRaw>();

            _applicationData = new StatisticsData();

            foreach (var thread in _sessionThreads.Values)
            {
                if (thread.InternalId == Thread.FakeThreadId)
                {
                    continue;
                }

                var threadStatistics = new ThreadStatisticsData
                {
                    CpuUtilization = thread.CpuUtilization
                };
                foreach (var s in PDataContainer.Samples[thread.InternalId])
                {
                    if (s.TimeMilliseconds >= timeFrame.Start)
                    {
                        if (s.TimeMilliseconds > timeFrame.End)
                        {
                            break;
                        }

                        ProcessSample(threadStatistics, s);
                    }
                }

                ThreadsStatisticsRaw.Add(thread.InternalId, BuildThreadStatisticsRaw(threadStatistics));
            }

            ApplicationStatistics = BuildApplicationStatistics();
        }
Exemplo n.º 2
0
        private void UpdateStatisticsData(StatisticsData data, Sample sample)
        {
            data.SamplesTotal += sample.Samples;
            data.TimeTotal    += sample.Time;
            data.MemoryTotal  += sample.AllocatedMemory;

            for (int i = 0, e = sample.StackItems.Count; i < e; i++)
            {
                var si       = sample.StackItems[i];
                var function = PDataContainer.GetFunction(si.FunctionIntId);
                if (function != null)
                {
                    IMethodStatistics ms;
                    if (!data.Methods.TryGetValue(function.InternalId, out ms))
                    {
                        ms = new MethodStatistics
                        {
                            Name      = function.Name,
                            Signature = function.Signature
                        };
                        data.Methods.Add(function.InternalId, ms);
                    }

                    ms.SamplesInclusive         += sample.Samples;
                    ms.TimeInclusive            += sample.Time;
                    ms.AllocatedMemoryInclusive += sample.AllocatedMemory;

                    if (i == 0)
                    {
                        ms.SamplesExclusive         += sample.Samples;
                        ms.TimeExclusive            += sample.Time;
                        ms.AllocatedMemoryExclusive += sample.AllocatedMemory;
                    }
                }

                if (si.SourceLineId.HasValue && si.SourceLineId.Value != 0)
                {
                    var line = PDataContainer.GetSourceLine(si.SourceLineId.Value);
                    if (line != null)
                    {
                        ISourceLineStatistics ls;
                        if (!data.Lines.TryGetValue(line.InternalId, out ls))
                        {
                            ls = new SourceLineStatistics
                            {
                                StartLine    = line.StartLine,
                                EndLine      = line.EndLine,
                                StartColumn  = line.StartColumn,
                                EndColumn    = line.EndColumn,
                                FunctionName = line.FunctionName,
                                SourceFileId = line.SourceFileIntId
                            };
                            data.Lines.Add(line.InternalId, ls);
                        }

                        ls.SamplesInclusive         += sample.Samples;
                        ls.TimeInclusive            += sample.Time;
                        ls.AllocatedMemoryInclusive += sample.AllocatedMemory;

                        if (i == 0)
                        {
                            ls.SamplesExclusive         += sample.Samples;
                            ls.TimeExclusive            += sample.Time;
                            ls.AllocatedMemoryExclusive += sample.AllocatedMemory;
                        }
                    }
                }
            }

            foreach (var ai in sample.AllocationItems)
            {
                if (ai.SourceLineId.HasValue && ai.SourceLineId.Value != 0)
                {
                    var line = PDataContainer.GetSourceLine(ai.SourceLineId.Value);
                    if (line != null)
                    {
                        ISourceLineStatistics ls;
                        if (!data.Lines.TryGetValue(line.InternalId, out ls))
                        {
                            ls = new SourceLineStatistics
                            {
                                StartLine    = line.StartLine,
                                EndLine      = line.EndLine,
                                StartColumn  = line.StartColumn,
                                EndColumn    = line.EndColumn,
                                FunctionName = line.FunctionName,
                                SourceFileId = line.SourceFileIntId
                            };
                            data.Lines.Add(line.InternalId, ls);
                        }

                        ls.AllocatedMemoryExclusive += ai.MemorySize;
                    }
                }
            }
        }