diff options
author | Tofu Linden <tofu.linden@lindenlab.com> | 2010-01-25 12:07:25 -0800 |
---|---|---|
committer | Tofu Linden <tofu.linden@lindenlab.com> | 2010-01-25 12:07:25 -0800 |
commit | 563daa96a873ef627ca42d24e0f6de6bb359326d (patch) | |
tree | 8801ead4b59b4eddc29437fd7e8f196c85bc8660 /indra/llcommon | |
parent | 471b8f71cd01176ad5deb1b1e6d8cec738d09d0c (diff) |
pull in the linux+solaris fast-timers impl from snowglobe, fit it into viewer2, start moving headers around.
Diffstat (limited to 'indra/llcommon')
-rw-r--r-- | indra/llcommon/llfasttimer_class.h (renamed from indra/llcommon/llfasttimer.h) | 103 |
1 files changed, 5 insertions, 98 deletions
diff --git a/indra/llcommon/llfasttimer.h b/indra/llcommon/llfasttimer_class.h index 8af79c90fd..93d2d0494d 100644 --- a/indra/llcommon/llfasttimer.h +++ b/indra/llcommon/llfasttimer_class.h @@ -1,5 +1,5 @@ /** - * @file llfasttimer.h + * @file llfasttimer_class.h * @brief Declaration of a fast timer. * * $LicenseInfo:firstyear=2004&license=viewergpl$ @@ -30,108 +30,14 @@ * $/LicenseInfo$ */ -#ifndef LL_FASTTIMER_H -#define LL_FASTTIMER_H +#ifndef LL_FASTTIMER_CLASS_H +#define LL_FASTTIMER_CLASS_H #include "llinstancetracker.h" #define FAST_TIMER_ON 1 #define TIME_FAST_TIMERS 0 -#if LL_WINDOWS -#define LL_INLINE __forceinline - -// -// NOTE: put back in when we aren't using platform sdk anymore -// -// because MS has different signatures for these functions in winnt.h -// need to rename them to avoid conflicts -//#define _interlockedbittestandset _renamed_interlockedbittestandset -//#define _interlockedbittestandreset _renamed_interlockedbittestandreset -//#include <intrin.h> -//#undef _interlockedbittestandset -//#undef _interlockedbittestandreset - -//inline U32 get_cpu_clock_count_32() -//{ -// U64 time_stamp = __rdtsc(); -// return (U32)(time_stamp >> 8); -//} -// -//// return full timer value, *not* shifted by 8 bits -//inline U64 get_cpu_clock_count_64() -//{ -// return __rdtsc(); -//} - -// shift off lower 8 bits for lower resolution but longer term timing -// on 1Ghz machine, a 32-bit word will hold ~1000 seconds of timing -inline U32 get_cpu_clock_count_32() -{ - U32 ret_val; - __asm - { - _emit 0x0f - _emit 0x31 - shr eax,8 - shl edx,24 - or eax, edx - mov dword ptr [ret_val], eax - } - return ret_val; -} - -// return full timer value, *not* shifted by 8 bits -inline U64 get_cpu_clock_count_64() -{ - U64 ret_val; - __asm - { - _emit 0x0f - _emit 0x31 - mov eax,eax - mov edx,edx - mov dword ptr [ret_val+4], edx - mov dword ptr [ret_val], eax - } - return ret_val; -} -#else -#define LL_INLINE -#endif - -#if (LL_LINUX || LL_SOLARIS || LL_DARWIN) && (defined(__i386__) || defined(__amd64__)) -inline U32 get_cpu_clock_count_32() -{ - U64 x; - __asm__ volatile (".byte 0x0f, 0x31": "=A"(x)); - return (U32)x >> 8; -} - -inline U32 get_cpu_clock_count_64() -{ - U64 x; - __asm__ volatile (".byte 0x0f, 0x31": "=A"(x)); - return x >> 8; -} -#endif - -#if ( LL_DARWIN && !(defined(__i386__) || defined(__amd64__))) || (LL_SOLARIS && defined(__sparc__)) -// -// Mac PPC (deprecated) & Solaris SPARC implementation of CPU clock -// -// Just use gettimeofday implementation for now - -inline U32 get_cpu_clock_count_32() -{ - return (U32)get_clock_count(); -} - -inline U32 get_cpu_clock_count_64() -{ - return get_clock_count(); -} -#endif class LLMutex; @@ -352,6 +258,7 @@ private: static S32 sLastFrameIndex; static U64 sLastFrameTime; static info_list_t* sTimerInfos; + static U64 sClockResolution; U32 mStartTime; LLFastTimer::FrameState* mFrameState; @@ -361,4 +268,4 @@ private: typedef class LLFastTimer LLFastTimer; -#endif // LL_LLFASTTIMER_H +#endif // LL_LLFASTTIMER_CLASS_H |