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(); }
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; } } } }