added optional timing of fast timers themselves
parent
5d8442f056
commit
4a460a1dcf
|
|
@ -36,6 +36,7 @@
|
|||
#include "llinstancetracker.h"
|
||||
|
||||
#define FAST_TIMER_ON 1
|
||||
#define TIME_FAST_TIMERS 0
|
||||
|
||||
#if LL_WINDOWS
|
||||
|
||||
|
|
@ -56,7 +57,7 @@ inline U32 get_cpu_clock_count_32()
|
|||
return ret_val;
|
||||
}
|
||||
|
||||
// return full timer value, still shifted by 8 bits
|
||||
// return full timer value, *not* shifted by 8 bits
|
||||
inline U64 get_cpu_clock_count_64()
|
||||
{
|
||||
U64 ret_val;
|
||||
|
|
@ -69,7 +70,7 @@ inline U64 get_cpu_clock_count_64()
|
|||
mov dword ptr [ret_val+4], edx
|
||||
mov dword ptr [ret_val], eax
|
||||
}
|
||||
return ret_val >> 8;
|
||||
return ret_val;
|
||||
}
|
||||
|
||||
#endif // LL_WINDOWS
|
||||
|
|
@ -242,6 +243,9 @@ public:
|
|||
LLFastTimer(NamedTimer::FrameState& timer)
|
||||
: mFrameState(&timer)
|
||||
{
|
||||
#if TIME_FAST_TIMERS
|
||||
U64 timer_start = get_cpu_clock_count_64();
|
||||
#endif
|
||||
#if FAST_TIMER_ON
|
||||
NamedTimer::FrameState* frame_state = &timer;
|
||||
U32 cur_time = get_cpu_clock_count_32();
|
||||
|
|
@ -255,11 +259,18 @@ public:
|
|||
|
||||
mLastTimer = sCurTimer;
|
||||
sCurTimer = this;
|
||||
#endif
|
||||
#if TIME_FAST_TIMERS
|
||||
U64 timer_end = get_cpu_clock_count_64();
|
||||
sTimerCycles += timer_end - timer_start;
|
||||
#endif
|
||||
}
|
||||
|
||||
~LLFastTimer()
|
||||
{
|
||||
#if TIME_FAST_TIMERS
|
||||
U64 timer_start = get_cpu_clock_count_64();
|
||||
#endif
|
||||
#if FAST_TIMER_ON
|
||||
NamedTimer::FrameState* frame_state = mFrameState;
|
||||
U32 cur_time = get_cpu_clock_count_32();
|
||||
|
|
@ -276,6 +287,11 @@ public:
|
|||
U32 total_time = cur_time - mStartTotalTime;
|
||||
last_timer->mStartSelfTime += total_time;
|
||||
#endif
|
||||
#if TIME_FAST_TIMERS
|
||||
U64 timer_end = get_cpu_clock_count_64();
|
||||
sTimerCycles += timer_end - timer_start;
|
||||
sTimerCalls++;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -297,11 +313,12 @@ public:
|
|||
static const NamedTimer* getTimerByName(const std::string& name);
|
||||
|
||||
public:
|
||||
static bool sPauseHistory;
|
||||
static bool sResetHistory;
|
||||
static bool sPauseHistory;
|
||||
static bool sResetHistory;
|
||||
static U64 sTimerCycles;
|
||||
static U32 sTimerCalls;
|
||||
|
||||
private:
|
||||
typedef std::vector<LLFastTimer*> timer_stack_t;
|
||||
static LLFastTimer* sCurTimer;
|
||||
static S32 sCurFrameIndex;
|
||||
static S32 sLastFrameIndex;
|
||||
|
|
|
|||
|
|
@ -98,6 +98,7 @@ LLFastTimerView::LLFastTimerView(const LLRect& rect)
|
|||
mHoverBarIndex = -1;
|
||||
FTV_NUM_TIMERS = LLFastTimer::NamedTimer::instanceCount();
|
||||
mPrintStats = -1;
|
||||
mAverageCyclesPerTimer = 0;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -306,8 +307,9 @@ void LLFastTimerView::draw()
|
|||
S32 height = (S32) (gViewerWindow->getWindowRectScaled().getHeight()*0.75f);
|
||||
S32 width = (S32) (gViewerWindow->getWindowRectScaled().getWidth() * 0.75f);
|
||||
|
||||
// HACK: casting away const. Should use setRect or some helper function instead.
|
||||
const_cast<LLRect&>(getRect()).setLeftTopAndSize(getRect().mLeft, getRect().mTop, width, height);
|
||||
LLRect new_rect;
|
||||
new_rect.setLeftTopAndSize(getRect().mLeft, getRect().mTop, width, height);
|
||||
setRect(new_rect);
|
||||
|
||||
S32 left, top, right, bottom;
|
||||
S32 x, y, barw, barh, dx, dy;
|
||||
|
|
@ -321,6 +323,10 @@ void LLFastTimerView::draw()
|
|||
S32 xleft = margin;
|
||||
S32 ytop = margin;
|
||||
|
||||
mAverageCyclesPerTimer = llround(lerp((F32)mAverageCyclesPerTimer, (F32)(LLFastTimer::sTimerCycles / (U64)LLFastTimer::sTimerCalls), 0.1f));
|
||||
LLFastTimer::sTimerCycles = 0;
|
||||
LLFastTimer::sTimerCalls = 0;
|
||||
|
||||
// Draw some help
|
||||
{
|
||||
|
||||
|
|
@ -328,6 +334,10 @@ void LLFastTimerView::draw()
|
|||
y = height - ytop;
|
||||
texth = (S32)LLFontGL::getFontMonospace()->getLineHeight();
|
||||
|
||||
#if TIME_FAST_TIMERS
|
||||
tdesc = llformat("Cycles per timer call: %d", mAverageCyclesPerTimer);
|
||||
LLFontGL::getFontMonospace()->renderUTF8(tdesc, 0, x, y, LLColor4::white, LLFontGL::LEFT, LLFontGL::TOP);
|
||||
#else
|
||||
char modedesc[][32] = {
|
||||
"2 x Average ",
|
||||
"Max ",
|
||||
|
|
@ -342,7 +352,6 @@ void LLFastTimerView::draw()
|
|||
|
||||
tdesc = llformat("Full bar = %s [Click to pause/reset] [SHIFT-Click to toggle]",modedesc[mDisplayMode]);
|
||||
LLFontGL::getFontMonospace()->renderUTF8(tdesc, 0, x, y, LLColor4::white, LLFontGL::LEFT, LLFontGL::TOP);
|
||||
|
||||
textw = LLFontGL::getFontMonospace()->getWidth(tdesc);
|
||||
|
||||
x = xleft, y -= (texth + 2);
|
||||
|
|
@ -352,6 +361,7 @@ void LLFastTimerView::draw()
|
|||
|
||||
LLFontGL::getFontMonospace()->renderUTF8(std::string("[Right-Click log selected] [ALT-Click toggle counts] [ALT-SHIFT-Click sub hidden]"),
|
||||
0, x, y, LLColor4::white, LLFontGL::LEFT, LLFontGL::TOP);
|
||||
#endif
|
||||
y -= (texth + 2);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -91,6 +91,7 @@ private:
|
|||
S32 mHoverBarIndex;
|
||||
LLFrameTimer mHighlightTimer;
|
||||
S32 mPrintStats;
|
||||
S32 mAverageCyclesPerTimer;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Reference in New Issue