Example #1
0
 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;
 }
Example #2
0
 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;
 }
Example #3
0
 public void AddServerGcThreadSwitch(ThreadWorkSpan cswitch)
 {
     if (cswitch.ProcessorNumber >= 0 && cswitch.ProcessorNumber < ServerGcHeapHistories.Count)
         ServerGcHeapHistories[cswitch.ProcessorNumber].AddSwitchEvent(cswitch);
 }
Example #4
0
 public void AddServerGcSample(ThreadWorkSpan sample)
 {
     if (sample.ProcessorNumber >= 0 && sample.ProcessorNumber < ServerGcHeapHistories.Count)
         ServerGcHeapHistories[sample.ProcessorNumber].AddSampleEvent(sample);
 }
Example #5
0
 public GcWorkSpan(ThreadWorkSpan span)
     : base(span)
 {
 }
Example #6
0
            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;
            }
Example #7
0
            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
                });
            }
Example #8
0
 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
         });
     }
 }