diff options
| author | richard <none@none> | 2009-12-21 16:05:41 -0800 | 
|---|---|---|
| committer | richard <none@none> | 2009-12-21 16:05:41 -0800 | 
| commit | 06fb97735d9ffab2b438be5513160ba24b829c82 (patch) | |
| tree | fefd4fbf7e24257ab587124b04a5dd926e0b7b55 | |
| parent | 7012b7e5a7b6fc4a1ff2e04713105eb56b4dc9ca (diff) | |
| parent | 4a460a1dcf610fd52d91acb7cfd2749e008a7486 (diff) | |
merge
| -rw-r--r-- | indra/llcommon/llfasttimer.h | 27 | ||||
| -rw-r--r-- | indra/newview/llfasttimerview.cpp | 16 | ||||
| -rw-r--r-- | indra/newview/llfasttimerview.h | 1 | 
3 files changed, 36 insertions, 8 deletions
| diff --git a/indra/llcommon/llfasttimer.h b/indra/llcommon/llfasttimer.h index 45b84ea3ea..f5c90291b8 100644 --- a/indra/llcommon/llfasttimer.h +++ b/indra/llcommon/llfasttimer.h @@ -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(); @@ -256,10 +260,17 @@ 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; diff --git a/indra/newview/llfasttimerview.cpp b/indra/newview/llfasttimerview.cpp index 0b27001f10..effa57b1ef 100644 --- a/indra/newview/llfasttimerview.cpp +++ b/indra/newview/llfasttimerview.cpp @@ -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);  	} diff --git a/indra/newview/llfasttimerview.h b/indra/newview/llfasttimerview.h index 2bb023ab14..f5c8f23818 100644 --- a/indra/newview/llfasttimerview.h +++ b/indra/newview/llfasttimerview.h @@ -91,6 +91,7 @@ private:  	S32 mHoverBarIndex;  	LLFrameTimer mHighlightTimer;  	S32 mPrintStats; +	S32 mAverageCyclesPerTimer;  };  #endif | 
