Final fix for fast timer reshuffle.

meow-7.2.2
Tofu Linden 2010-01-25 13:24:45 -08:00
parent ec7b204ed6
commit 3d0ff2585e
2 changed files with 16 additions and 19 deletions

View File

@ -37,7 +37,6 @@
#include "llfasttimer_class.h"
#if LL_WINDOWS
#define LL_INLINE __forceinline
//
// Windows implementation of CPU clock
//
@ -53,21 +52,21 @@
//#undef _interlockedbittestandset
//#undef _interlockedbittestandreset
//inline U32 get_cpu_clock_count_32()
//inline U32 LLFastTimer::getCPUClockCount32()
//{
// 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()
//inline U64 LLFastTimer::getCPUClockCount64()
//{
// 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()
inline U32 LLFastTimer::getCPUClockCount32()
{
U32 ret_val;
__asm
@ -83,7 +82,7 @@ inline U32 get_cpu_clock_count_32()
}
// return full timer value, *not* shifted by 8 bits
inline U64 get_cpu_clock_count_64()
inline U64 LLFastTimer::getCPUClockCount64()
{
U64 ret_val;
__asm
@ -97,8 +96,6 @@ inline U64 get_cpu_clock_count_64()
}
return ret_val;
}
#else
#define LL_INLINE
#endif
@ -111,7 +108,7 @@ inline U64 get_cpu_clock_count_64()
// to synchronize this value between cores at kernel start. It should not be affected
// by CPU frequency. If not available use the REALTIME clock, but this may be affected by
// NTP adjustments or other user activity affecting the system time.
inline U64 get_cpu_clock_count_64()
inline U64 LLFastTimer::getCPUClockCount64()
{
struct timespec tp;
@ -123,9 +120,9 @@ inline U64 get_cpu_clock_count_64()
return (tp.tv_sec*LLFastTimer::sClockResolution)+tp.tv_nsec;
}
inline U32 get_cpu_clock_count_32()
inline U32 LLFastTimer::getCPUClockCount32()
{
return (U32)get_cpu_clock_count_64();
return (U32)LLFastTimer::getCPUClockCount64();
}
#endif // (LL_LINUX || LL_SOLARIS))
@ -133,14 +130,14 @@ inline U32 get_cpu_clock_count_32()
#if (LL_DARWIN) && (defined(__i386__) || defined(__amd64__))
//
// Mac x86 implementation of CPU clock
inline U32 get_cpu_clock_count_32()
inline U32 LLFastTimer::getCPUClockCount32()
{
U64 x;
__asm__ volatile (".byte 0x0f, 0x31": "=A"(x));
return (U32)x >> 8;
}
inline U32 get_cpu_clock_count_64()
inline U32 LLFastTimer::getCPUClockCount64()
{
U64 x;
__asm__ volatile (".byte 0x0f, 0x31": "=A"(x));
@ -155,12 +152,12 @@ inline U32 get_cpu_clock_count_64()
//
// Just use gettimeofday implementation for now
inline U32 get_cpu_clock_count_32()
inline U32 LLFastTimer::getCPUClockCount32()
{
return (U32)get_clock_count();
}
inline U32 get_cpu_clock_count_64()
inline U32 LLFastTimer::getCPUClockCount64()
{
return get_clock_count();
}

View File

@ -56,7 +56,7 @@
S32 LLFastTimer::sCurFrameIndex = -1;
S32 LLFastTimer::sLastFrameIndex = -1;
U64 LLFastTimer::sLastFrameTime = get_cpu_clock_count_64();
U64 LLFastTimer::sLastFrameTime = LLFastTimer::getCPUClockCount64();
bool LLFastTimer::sPauseHistory = 0;
bool LLFastTimer::sResetHistory = 0;
LLFastTimer::CurTimerData LLFastTimer::sCurTimerData;
@ -426,7 +426,7 @@ void LLFastTimer::NamedTimer::buildHierarchy()
//static
void LLFastTimer::NamedTimer::accumulateTimings()
{
U32 cur_time = get_cpu_clock_count_32();
U32 cur_time = getCPUClockCount32();
// walk up stack of active timers and accumulate current time while leaving timing structures active
LLFastTimer* cur_timer = sCurTimerData.mCurTimer;
@ -556,7 +556,7 @@ void LLFastTimer::NamedTimer::reset()
// walk up stack of active timers and reset start times to current time
// effectively zeroing out any accumulated time
U32 cur_time = get_cpu_clock_count_32();
U32 cur_time = getCPUClockCount32();
// root defined by parent pointing to self
CurTimerData* cur_data = &sCurTimerData;
@ -649,7 +649,7 @@ std::vector<LLFastTimer::NamedTimer*>& LLFastTimer::NamedTimer::getChildren()
void LLFastTimer::nextFrame()
{
countsPerSecond(); // good place to calculate clock frequency
U64 frame_time = get_cpu_clock_count_64();
U64 frame_time = getCPUClockCount64();
if ((frame_time - sLastFrameTime) >> 8 > 0xffffffff)
{
llinfos << "Slow frame, fast timers inaccurate" << llendl;
@ -738,7 +738,7 @@ const LLFastTimer::NamedTimer* LLFastTimer::getTimerByName(const std::string& na
LLFastTimer::LLFastTimer(LLFastTimer::FrameState* state)
: mFrameState(state)
{
U32 start_time = get_cpu_clock_count_32();
U32 start_time = getCPUClockCount32();
mStartTime = start_time;
mFrameState->mActiveCount++;
LLFastTimer::sCurTimerData.mCurTimer = this;