summaryrefslogtreecommitdiff
path: root/indra/llcommon/llfasttimer.h
diff options
context:
space:
mode:
authorRichard Linden <none@none>2012-11-29 00:43:25 -0800
committerRichard Linden <none@none>2012-11-29 00:43:25 -0800
commit02d503bf8f8890c6d4b57dd09a1fde2973715b75 (patch)
tree046bbdcf3ff2d3d5ea36b616a00aa442ca5bdc5d /indra/llcommon/llfasttimer.h
parent0e1283cf6d17514a9a32595fc29df38a4b4b2d3a (diff)
SH-3406 WIP convert fast timers to lltrace system
moved runtime timer tree topology information to separate array instead of recording stack
Diffstat (limited to 'indra/llcommon/llfasttimer.h')
-rw-r--r--indra/llcommon/llfasttimer.h34
1 files changed, 19 insertions, 15 deletions
diff --git a/indra/llcommon/llfasttimer.h b/indra/llcommon/llfasttimer.h
index cfe2cf5371..9f981480f2 100644
--- a/indra/llcommon/llfasttimer.h
+++ b/indra/llcommon/llfasttimer.h
@@ -37,11 +37,13 @@ class LLMutex;
namespace LLTrace
{
+
struct CurTimerData
{
class Time* mCurTimer;
class BlockTimer* mTimerData;
U64 mChildTime;
+ TimerTreeNode* mTimerTreeData;
};
class Time
@@ -269,20 +271,20 @@ public:
// tree structure
BlockTimer* mParent; // BlockTimer of caller(parent)
std::vector<BlockTimer*> mChildren;
- bool mCollapsed; // don't show children
- bool mNeedsSorting; // sort children whenever child added
+ bool mCollapsed, // don't show children
+ mNeedsSorting; // sort children whenever child added
// statics
static std::string sLogName;
- static bool sMetricLog;
- static bool sLog;
+ static bool sMetricLog,
+ sLog;
static LLThreadLocalPointer<CurTimerData> sCurTimerData;
static U64 sClockResolution;
- static S32 sCurFrameIndex;
- static S32 sLastFrameIndex;
+ static S32 sCurFrameIndex,
+ sLastFrameIndex;
static U64 sLastFrameTime;
- static bool sPauseHistory;
- static bool sResetHistory;
+ static bool sPauseHistory,
+ sResetHistory;
};
@@ -291,13 +293,12 @@ LL_FORCE_INLINE Time::Time(BlockTimer& timer)
#if FAST_TIMER_ON
mStartTime = BlockTimer::getCPUClockCount64();
- TimerAccumulator& accumulator = timer.getPrimaryAccumulator();
- accumulator.mActiveCount++;
- accumulator.mCalls++;
+ CurTimerData* cur_timer_data = BlockTimer::sCurTimerData.get();
+ TimerTreeNode& tree_node = cur_timer_data->mTimerTreeData[timer.getIndex()];
+ tree_node.mActiveCount++;
// keep current parent as long as it is active when we are
- accumulator.mMoveUpTree |= (timer.mParent->getPrimaryAccumulator().mActiveCount == 0);
+ tree_node.mMoveUpTree |= (cur_timer_data->mTimerTreeData[timer.mParent->getIndex()].mActiveCount == 0);
- CurTimerData* cur_timer_data = BlockTimer::sCurTimerData.get();
// store top of stack
mLastTimerData = *cur_timer_data;
// push new information
@@ -313,13 +314,16 @@ LL_FORCE_INLINE Time::~Time()
U64 total_time = BlockTimer::getCPUClockCount64() - mStartTime;
CurTimerData* cur_timer_data = BlockTimer::sCurTimerData.get();
TimerAccumulator& accumulator = cur_timer_data->mTimerData->getPrimaryAccumulator();
+ TimerTreeNode& tree_node = cur_timer_data->mTimerTreeData[cur_timer_data->mTimerData->getIndex()];
+
+ accumulator.mCalls++;
accumulator.mSelfTimeCounter += total_time - cur_timer_data->mChildTime;
accumulator.mTotalTimeCounter += total_time;
- accumulator.mActiveCount--;
+ tree_node.mActiveCount--;
// store last caller to bootstrap tree creation
// do this in the destructor in case of recursion to get topmost caller
- accumulator.mLastCaller = mLastTimerData.mTimerData;
+ tree_node.mLastCaller = mLastTimerData.mTimerData;
// we are only tracking self time, so subtract our total time delta from parents
mLastTimerData.mChildTime += total_time;