Retired Document
Important: This sample code may not represent best practices for current development. The project may use deprecated symbols and illustrate technologies and techniques that are no longer recommended.
Relevant replacement documents include:
PublicUtility/CAHostTimeBase.cpp
/* |
<codex> |
<abstract>CAHostTimeBase.h</abstract> |
<\codex> |
*/ |
//============================================================================= |
// Includes |
//============================================================================= |
#include "CAHostTimeBase.h" |
Float64 CAHostTimeBase::sFrequency = 0; |
Float64 CAHostTimeBase::sInverseFrequency = 0; |
UInt32 CAHostTimeBase::sMinDelta = 0; |
UInt32 CAHostTimeBase::sToNanosNumerator = 0; |
UInt32 CAHostTimeBase::sToNanosDenominator = 0; |
UInt32 CAHostTimeBase::sFromNanosNumerator = 0; |
UInt32 CAHostTimeBase::sFromNanosDenominator = 0; |
bool CAHostTimeBase::sUseMicroseconds = false; |
bool CAHostTimeBase::sIsInited = false; |
#if Track_Host_TimeBase |
UInt64 CAHostTimeBase::sLastTime = 0; |
#endif |
//============================================================================= |
// CAHostTimeBase |
// |
// This class provides platform independent access to the host's time base. |
//============================================================================= |
void CAHostTimeBase::Initialize() |
{ |
// get the info about Absolute time |
#if TARGET_OS_MAC |
struct mach_timebase_info theTimeBaseInfo; |
mach_timebase_info(&theTimeBaseInfo); |
sMinDelta = 1; |
sToNanosNumerator = theTimeBaseInfo.numer; |
sToNanosDenominator = theTimeBaseInfo.denom; |
sFromNanosNumerator = sToNanosDenominator; |
sFromNanosDenominator = sToNanosNumerator; |
// the frequency of that clock is: (sToNanosDenominator / sToNanosNumerator) * 10^9 |
sFrequency = static_cast<Float64>(sToNanosDenominator) / static_cast<Float64>(sToNanosNumerator); |
sFrequency *= 1000000000.0; |
#elif TARGET_OS_WIN32 |
LARGE_INTEGER theFrequency; |
QueryPerformanceFrequency(&theFrequency); |
sMinDelta = 1; |
sToNanosNumerator = 1000000000ULL; |
sToNanosDenominator = *((UInt64*)&theFrequency); |
sFromNanosNumerator = sToNanosDenominator; |
sFromNanosDenominator = sToNanosNumerator; |
sFrequency = static_cast<Float64>(*((UInt64*)&theFrequency)); |
#endif |
sInverseFrequency = 1.0 / sFrequency; |
#if Log_Host_Time_Base_Parameters |
DebugMessage( "Host Time Base Parameters"); |
DebugMessageN1(" Minimum Delta: %lu", sMinDelta); |
DebugMessageN1(" Frequency: %f", sFrequency); |
DebugMessageN1(" To Nanos Numerator: %lu", sToNanosNumerator); |
DebugMessageN1(" To Nanos Denominator: %lu", sToNanosDenominator); |
DebugMessageN1(" From Nanos Numerator: %lu", sFromNanosNumerator); |
DebugMessageN1(" From Nanos Denominator: %lu", sFromNanosDenominator); |
#endif |
sIsInited = true; |
} |
Copyright © 2012 Apple Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2012-10-08