public ThreadWorkSpan(ThreadWorkSpan span) { ProcessName = span.ProcessName; ThreadId = span.ThreadId; ProcessId = span.ProcessId; ProcessorNumber = span.ProcessorNumber; AbsoluteTimestampMsc = span.AbsoluteTimestampMsc; DurationMsc = span.DurationMsc; Priority = span.Priority; WaitReason = span.WaitReason; }
public void AddServerGcThreadSwitch(ThreadWorkSpan cswitch) { if (cswitch.ProcessorNumber >= 0 && cswitch.ProcessorNumber < ServerGcHeapHistories.Count) ServerGcHeapHistories[cswitch.ProcessorNumber].AddSwitchEvent(cswitch); }
public void AddServerGcSample(ThreadWorkSpan sample) { if (sample.ProcessorNumber >= 0 && sample.ProcessorNumber < ServerGcHeapHistories.Count) ServerGcHeapHistories[sample.ProcessorNumber].AddSampleEvent(sample); }
public GcWorkSpan(ThreadWorkSpan span) : base(span) { }
private WorkSpanType GetSpanType(ThreadWorkSpan span) { if (span.ThreadId == GcWorkingThreadId && span.ProcessId == ProcessId) return WorkSpanType.GcThread; if (span.ProcessId == 0) return WorkSpanType.Idle; if (span.Priority >= GcWorkingThreadPriority || span.Priority == -1) return WorkSpanType.RivalThread; else return WorkSpanType.LowPriThread; }
public void AddSwitchEvent(ThreadWorkSpan switchData) { GcWorkSpan lastSpan = SwitchSpans.Count > 0 ? SwitchSpans[SwitchSpans.Count - 1] : null; if (switchData.ThreadId == GcWorkingThreadId && switchData.ProcessId == ProcessId) { //update gc thread priority since we have new data GcWorkingThreadPriority = switchData.Priority; } if (lastSpan != null) { //updating duration of the last one, based on a timestamp from the new one lastSpan.DurationMsc = switchData.AbsoluteTimestampMsc - lastSpan.AbsoluteTimestampMsc; //updating wait readon of the last one lastSpan.WaitReason = switchData.WaitReason; } SwitchSpans.Add(new GcWorkSpan(switchData) { Type = GetSpanType(switchData), RelativeTimestampMsc = switchData.AbsoluteTimestampMsc - TimeBaseMsc, Priority = switchData.Priority }); }
public void AddSampleEvent(ThreadWorkSpan sample) { GcWorkSpan lastSpan = SampleSpans.Count > 0 ? SampleSpans[SampleSpans.Count - 1] : null; if (lastSpan != null && lastSpan.ThreadId == sample.ThreadId && lastSpan.ProcessId == sample.ProcessId) { lastSpan.DurationMsc++; } else { SampleSpans.Add(new GcWorkSpan(sample) { Type = GetSpanType(sample), RelativeTimestampMsc = sample.AbsoluteTimestampMsc - TimeBaseMsc, DurationMsc = 1 }); } }