public void FlagTime(TimingFlagType flagType) { int flagId = (int)flagType; _timingFlags[_timingFlagIndex] = new TimingFlag() { FlagType = flagType, Timestamp = PerformanceCounter.ElapsedTicks }; _timingFlagCount = Math.Max(_timingFlagCount + 1, _maxFlags); // Work out average if (_timingFlagLast[flagId] != 0) { _timingFlagLastDelta[flagId] = _timingFlags[_timingFlagIndex].Timestamp - _timingFlagLast[flagId]; _timingFlagAverages[flagId] = (_timingFlagAverages[flagId] == 0) ? _timingFlagLastDelta[flagId] : (_timingFlagLastDelta[flagId] + _timingFlagAverages[flagId]) >> 1; } _timingFlagLast[flagId] = _timingFlags[_timingFlagIndex].Timestamp; // Notify subscribers _timingFlagCallback?.Invoke(_timingFlags[_timingFlagIndex]); if (++_timingFlagIndex >= _maxFlags) { _timingFlagIndex = 0; } }
public TimingFlag[] GetTimingFlags() { int count = Math.Max(_timingFlagCount, _maxFlags); TimingFlag[] outFlags = new TimingFlag[count]; for (int i = 0, sourceIndex = _timingFlagIndex; i < count; i++, sourceIndex++) { if (sourceIndex >= _maxFlags) { sourceIndex = 0; } outFlags[i] = _timingFlags[sourceIndex]; } return(outFlags); }