diff options
Diffstat (limited to 'tier0/fasttimer.cpp')
| -rw-r--r-- | tier0/fasttimer.cpp | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/tier0/fasttimer.cpp b/tier0/fasttimer.cpp new file mode 100644 index 0000000..a4a7696 --- /dev/null +++ b/tier0/fasttimer.cpp @@ -0,0 +1,51 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// + +#include "pch_tier0.h" + +#include <stdio.h> +#include "tier0/fasttimer.h" + +// g_dwClockSpeed is only exported for backwards compatibility. +PLATFORM_INTERFACE unsigned long g_dwClockSpeed; + +uint64 g_ClockSpeed; // Clocks/sec +// Storing CPU clock speed in a 32-bit variable is dangerous and can already overflow +// on some CPUs. This variable is deprecated. +unsigned long g_dwClockSpeed; +#if defined( _X360 ) && defined( _CERT ) +unsigned long g_dwFakeFastCounter; +#endif +double g_ClockSpeedMicrosecondsMultiplier; +double g_ClockSpeedMillisecondsMultiplier; +double g_ClockSpeedSecondsMultiplier; + +// Constructor init the clock speed. +CClockSpeedInit g_ClockSpeedInit CONSTRUCT_EARLY; + +void CClockSpeedInit::Init() +{ + const CPUInformation& cpuinfo = *GetCPUInformation(); + + g_ClockSpeed = cpuinfo.m_Speed; + + // cycle counter runs as doc'd at 1/64 Xbox 3.2GHz clock speed, thus 50 Mhz + if ( IsX360() ) + { + g_ClockSpeed /= 64L; + } + + // Avoid integer overflow when writing to g_dwClockSpeed + if ( g_ClockSpeed <= ULONG_MAX ) + g_dwClockSpeed = (unsigned long)g_ClockSpeed; + else + g_dwClockSpeed = ULONG_MAX; + + g_ClockSpeedMicrosecondsMultiplier = 1000000.0 / (double)g_ClockSpeed; + g_ClockSpeedMillisecondsMultiplier = 1000.0 / (double)g_ClockSpeed; + g_ClockSpeedSecondsMultiplier = 1.0 / (double)g_ClockSpeed; +} |