Skip to content
Snippets Groups Projects
Commit 67ac6e7a authored by Richard Linden's avatar Richard Linden
Browse files

SH-3275 FIX interesting Update viewer metrics system to be more flexible

streamlined fast timer delta tracking
parent f19254e6
No related branches found
No related tags found
No related merge requests found
...@@ -256,16 +256,12 @@ void TimeBlock::processTimes() ...@@ -256,16 +256,12 @@ void TimeBlock::processTimes()
while(cur_timer && cur_timer->mParentTimerData.mActiveTimer != cur_timer) while(cur_timer && cur_timer->mParentTimerData.mActiveTimer != cur_timer)
{ {
U64 cumulative_time_delta = cur_time - cur_timer->mStartTime; U64 cumulative_time_delta = cur_time - cur_timer->mStartTime;
U64 child_time = stack_record->mChildTime accumulator->mTotalTimeCounter += cumulative_time_delta - (accumulator->mTotalTimeCounter - accumulator->mStartTotalTimeCounter);
- (accumulator->mSelfTimeCounter - cur_timer->mStartSelfTimeCounter) accumulator->mSelfTimeCounter += cumulative_time_delta - stack_record->mChildTime;
- (accumulator->mChildTimeCounter - cur_timer->mStartChildTimeCounter);
accumulator->mChildTimeCounter += child_time;
accumulator->mSelfTimeCounter += cumulative_time_delta - child_time;
stack_record->mChildTime = 0; stack_record->mChildTime = 0;
cur_timer->mStartTime = cur_time; cur_timer->mStartTime = cur_time;
cur_timer->mStartSelfTimeCounter = accumulator->mSelfTimeCounter; cur_timer->mStartTotalTimeCounter = accumulator->mTotalTimeCounter;
cur_timer->mStartChildTimeCounter = accumulator->mChildTimeCounter;
stack_record = &cur_timer->mParentTimerData; stack_record = &cur_timer->mParentTimerData;
accumulator = stack_record->mTimeBlock->getPrimaryAccumulator(); accumulator = stack_record->mTimeBlock->getPrimaryAccumulator();
...@@ -404,10 +400,9 @@ void TimeBlock::writeLog(std::ostream& os) ...@@ -404,10 +400,9 @@ void TimeBlock::writeLog(std::ostream& os)
////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
TimeBlockAccumulator::TimeBlockAccumulator() TimeBlockAccumulator::TimeBlockAccumulator()
: mChildTimeCounter(0), : mTotalTimeCounter(0),
mSelfTimeCounter(0), mSelfTimeCounter(0),
mStartChildTimeCounter(0), mStartTotalTimeCounter(0),
mStartSelfTimeCounter(0),
mCalls(0), mCalls(0),
mLastCaller(NULL), mLastCaller(NULL),
mActiveCount(0), mActiveCount(0),
...@@ -417,8 +412,8 @@ TimeBlockAccumulator::TimeBlockAccumulator() ...@@ -417,8 +412,8 @@ TimeBlockAccumulator::TimeBlockAccumulator()
void TimeBlockAccumulator::addSamples( const TimeBlockAccumulator& other ) void TimeBlockAccumulator::addSamples( const TimeBlockAccumulator& other )
{ {
mChildTimeCounter += other.mChildTimeCounter - other.mStartChildTimeCounter; mTotalTimeCounter += other.mTotalTimeCounter - other.mStartTotalTimeCounter;
mSelfTimeCounter += other.mSelfTimeCounter - other.mStartSelfTimeCounter; mSelfTimeCounter += other.mSelfTimeCounter;
mCalls += other.mCalls; mCalls += other.mCalls;
mLastCaller = other.mLastCaller; mLastCaller = other.mLastCaller;
mActiveCount = other.mActiveCount; mActiveCount = other.mActiveCount;
...@@ -429,12 +424,12 @@ void TimeBlockAccumulator::addSamples( const TimeBlockAccumulator& other ) ...@@ -429,12 +424,12 @@ void TimeBlockAccumulator::addSamples( const TimeBlockAccumulator& other )
void TimeBlockAccumulator::reset( const TimeBlockAccumulator* other ) void TimeBlockAccumulator::reset( const TimeBlockAccumulator* other )
{ {
mCalls = 0; mCalls = 0;
mSelfTimeCounter = 0;
if (other) if (other)
{ {
mStartSelfTimeCounter = other->mSelfTimeCounter; mStartTotalTimeCounter = other->mTotalTimeCounter;
mSelfTimeCounter = mStartSelfTimeCounter; mTotalTimeCounter = mStartTotalTimeCounter;
mStartChildTimeCounter = other->mChildTimeCounter;
mChildTimeCounter = mStartChildTimeCounter;
mLastCaller = other->mLastCaller; mLastCaller = other->mLastCaller;
mActiveCount = other->mActiveCount; mActiveCount = other->mActiveCount;
...@@ -443,8 +438,7 @@ void TimeBlockAccumulator::reset( const TimeBlockAccumulator* other ) ...@@ -443,8 +438,7 @@ void TimeBlockAccumulator::reset( const TimeBlockAccumulator* other )
} }
else else
{ {
mStartSelfTimeCounter = mSelfTimeCounter; mStartTotalTimeCounter = mTotalTimeCounter;
mStartChildTimeCounter = mChildTimeCounter;
} }
} }
......
...@@ -76,8 +76,7 @@ class BlockTimer ...@@ -76,8 +76,7 @@ class BlockTimer
private: private:
U64 mStartTime; U64 mStartTime;
U64 mStartSelfTimeCounter; U64 mStartTotalTimeCounter;
U64 mStartChildTimeCounter;
BlockTimerStackRecord mParentTimerData; BlockTimerStackRecord mParentTimerData;
}; };
...@@ -283,8 +282,7 @@ LL_FORCE_INLINE BlockTimer::BlockTimer(TimeBlock& timer) ...@@ -283,8 +282,7 @@ LL_FORCE_INLINE BlockTimer::BlockTimer(TimeBlock& timer)
BlockTimerStackRecord* cur_timer_data = ThreadTimerStack::getIfExists(); BlockTimerStackRecord* cur_timer_data = ThreadTimerStack::getIfExists();
TimeBlockAccumulator* accumulator = timer.getPrimaryAccumulator(); TimeBlockAccumulator* accumulator = timer.getPrimaryAccumulator();
accumulator->mActiveCount++; accumulator->mActiveCount++;
mStartSelfTimeCounter = accumulator->mSelfTimeCounter; mStartTotalTimeCounter = accumulator->mTotalTimeCounter;
mStartChildTimeCounter = accumulator->mChildTimeCounter;
// keep current parent as long as it is active when we are // keep current parent as long as it is active when we are
accumulator->mMoveUpTree |= (accumulator->mParent->getPrimaryAccumulator()->mActiveCount == 0); accumulator->mMoveUpTree |= (accumulator->mParent->getPrimaryAccumulator()->mActiveCount == 0);
...@@ -304,11 +302,8 @@ LL_FORCE_INLINE BlockTimer::~BlockTimer() ...@@ -304,11 +302,8 @@ LL_FORCE_INLINE BlockTimer::~BlockTimer()
BlockTimerStackRecord* cur_timer_data = ThreadTimerStack::getIfExists(); BlockTimerStackRecord* cur_timer_data = ThreadTimerStack::getIfExists();
TimeBlockAccumulator* accumulator = cur_timer_data->mTimeBlock->getPrimaryAccumulator(); TimeBlockAccumulator* accumulator = cur_timer_data->mTimeBlock->getPrimaryAccumulator();
U64 child_time = cur_timer_data->mChildTime
- (accumulator->mSelfTimeCounter - mStartSelfTimeCounter)
- (accumulator->mChildTimeCounter - mStartChildTimeCounter);
accumulator->mCalls++; accumulator->mCalls++;
accumulator->mChildTimeCounter += child_time; accumulator->mTotalTimeCounter += total_time - (accumulator->mTotalTimeCounter - mStartTotalTimeCounter);
accumulator->mSelfTimeCounter += total_time - cur_timer_data->mChildTime; accumulator->mSelfTimeCounter += total_time - cur_timer_data->mChildTime;
accumulator->mActiveCount--; accumulator->mActiveCount--;
......
...@@ -444,9 +444,8 @@ namespace LLTrace ...@@ -444,9 +444,8 @@ namespace LLTrace
// //
// members // members
// //
U64 mStartChildTimeCounter, U64 mStartTotalTimeCounter,
mStartSelfTimeCounter, mTotalTimeCounter,
mChildTimeCounter,
mSelfTimeCounter; mSelfTimeCounter;
U32 mCalls; U32 mCalls;
class TimeBlock* mParent; // last acknowledged parent of this time block class TimeBlock* mParent; // last acknowledged parent of this time block
......
...@@ -183,14 +183,14 @@ void Recording::mergeRecording( const Recording& other) ...@@ -183,14 +183,14 @@ void Recording::mergeRecording( const Recording& other)
LLUnit<LLUnits::Seconds, F64> Recording::getSum(const TraceType<TimeBlockAccumulator>& stat) const LLUnit<LLUnits::Seconds, F64> Recording::getSum(const TraceType<TimeBlockAccumulator>& stat) const
{ {
const TimeBlockAccumulator& accumulator = (*mStackTimers)[stat.getIndex()]; const TimeBlockAccumulator& accumulator = (*mStackTimers)[stat.getIndex()];
return (F64)(accumulator.mSelfTimeCounter - accumulator.mStartSelfTimeCounter + accumulator.mChildTimeCounter - accumulator.mStartChildTimeCounter) return (F64)(accumulator.mTotalTimeCounter - accumulator.mStartTotalTimeCounter)
/ (F64)LLTrace::TimeBlock::countsPerSecond(); / (F64)LLTrace::TimeBlock::countsPerSecond();
} }
LLUnit<LLUnits::Seconds, F64> Recording::getSum(const TraceType<TimeBlockAccumulator::SelfTimeAspect>& stat) const LLUnit<LLUnits::Seconds, F64> Recording::getSum(const TraceType<TimeBlockAccumulator::SelfTimeAspect>& stat) const
{ {
const TimeBlockAccumulator& accumulator = (*mStackTimers)[stat.getIndex()]; const TimeBlockAccumulator& accumulator = (*mStackTimers)[stat.getIndex()];
return (F64)(accumulator.mSelfTimeCounter - accumulator.mStartSelfTimeCounter) / (F64)LLTrace::TimeBlock::countsPerSecond(); return (F64)(accumulator.mSelfTimeCounter) / (F64)LLTrace::TimeBlock::countsPerSecond();
} }
...@@ -203,7 +203,7 @@ LLUnit<LLUnits::Seconds, F64> Recording::getPerSec(const TraceType<TimeBlockAccu ...@@ -203,7 +203,7 @@ LLUnit<LLUnits::Seconds, F64> Recording::getPerSec(const TraceType<TimeBlockAccu
{ {
const TimeBlockAccumulator& accumulator = (*mStackTimers)[stat.getIndex()]; const TimeBlockAccumulator& accumulator = (*mStackTimers)[stat.getIndex()];
return (F64)(accumulator.mSelfTimeCounter - accumulator.mStartSelfTimeCounter + accumulator.mChildTimeCounter - accumulator.mStartChildTimeCounter) return (F64)(accumulator.mTotalTimeCounter - accumulator.mStartTotalTimeCounter)
/ ((F64)LLTrace::TimeBlock::countsPerSecond() * mElapsedSeconds); / ((F64)LLTrace::TimeBlock::countsPerSecond() * mElapsedSeconds);
} }
...@@ -211,7 +211,7 @@ LLUnit<LLUnits::Seconds, F64> Recording::getPerSec(const TraceType<TimeBlockAccu ...@@ -211,7 +211,7 @@ LLUnit<LLUnits::Seconds, F64> Recording::getPerSec(const TraceType<TimeBlockAccu
{ {
const TimeBlockAccumulator& accumulator = (*mStackTimers)[stat.getIndex()]; const TimeBlockAccumulator& accumulator = (*mStackTimers)[stat.getIndex()];
return (F64)(accumulator.mSelfTimeCounter - accumulator.mStartSelfTimeCounter) return (F64)(accumulator.mSelfTimeCounter)
/ ((F64)LLTrace::TimeBlock::countsPerSecond() * mElapsedSeconds); / ((F64)LLTrace::TimeBlock::countsPerSecond() * mElapsedSeconds);
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment