public void AddCPUSample(double timeRelativeMSec, TraceThread thread, SampleProfilerThreadTimeComputer computer) { // Log the last sample if it was present if (LastCPUStackRelativeMSec > 0) { var sample = computer.m_sample; sample.Metric = (float)(timeRelativeMSec - LastCPUStackRelativeMSec); sample.TimeRelativeMSec = LastCPUStackRelativeMSec; var nodeIndex = computer.m_cpuFrameIndex; sample.StackIndex = LastCPUCallStack; sample.StackIndex = computer.m_outputStackSource.Interner.CallStackIntern(nodeIndex, sample.StackIndex); computer.m_outputStackSource.AddSample(sample); // CPU } }
public void LogThreadStack(double timeRelativeMSec, StackSourceCallStackIndex stackIndex, TraceThread thread, SampleProfilerThreadTimeComputer computer, bool onCPU) { if (onCPU) { if (ThreadUninitialized) // First event is onCPU { AddCPUSample(timeRelativeMSec, thread, computer); LastBlockStackRelativeMSec = -1; // make ThreadRunning true } else if (ThreadRunning) // continue running { AddCPUSample(timeRelativeMSec, thread, computer); } else if (ThreadBlocked) // unblocked { AddBlockTimeSample(timeRelativeMSec, thread, computer); LastBlockStackRelativeMSec = -timeRelativeMSec; } LastCPUStackRelativeMSec = timeRelativeMSec; LastCPUCallStack = stackIndex; } else { if (ThreadBlocked || ThreadUninitialized) // continue blocking or assume we started blocked { AddBlockTimeSample(timeRelativeMSec, thread, computer); } else if (ThreadRunning) // blocked { AddCPUSample(timeRelativeMSec, thread, computer); } LastBlockStackRelativeMSec = timeRelativeMSec; LastBlockCallStack = stackIndex; } }
public void LogThreadStack(double timeRelativeMSec, StackSourceCallStackIndex stackIndex, TraceThread thread, SampleProfilerThreadTimeComputer computer, bool onCPU) { if (onCPU) { if (ThreadRunning) // continue running { AddCPUSample(timeRelativeMSec, thread, computer); } else if (ThreadBlocked) // unblocked { AddBlockTimeSample(timeRelativeMSec, thread, computer); LastBlockStackRelativeMSec = -timeRelativeMSec; } LastCPUStackRelativeMSec = timeRelativeMSec; LastCPUCallStack = stackIndex; } else { if (ThreadBlocked) // continue blocking { AddBlockTimeSample(timeRelativeMSec, thread, computer); } else if (ThreadRunning) // blocked { AddCPUSample(timeRelativeMSec, thread, computer); } LastBlockStackRelativeMSec = timeRelativeMSec; LastBlockCallStack = stackIndex; } }