@ -65,16 +65,20 @@ private:
# ifdef ARCHITECTURE_x86_64
std : : unique_ptr < WallClock > CreateBestMatchingClock ( u 32 emulated_cpu_frequency ,
u 32 emulated_clock_frequency ) {
std : : unique_ptr < WallClock > CreateBestMatchingClock ( u 64 emulated_cpu_frequency ,
u 64 emulated_clock_frequency ) {
const auto & caps = GetCPUCaps ( ) ;
u64 rtsc_frequency = 0 ;
if ( caps . invariant_tsc ) {
rtsc_frequency = EstimateRDTSCFrequency ( ) ;
}
// Fallback to StandardWallClock if the hardware TSC does not have nanosecond precision.
if ( rtsc_frequency < = WallClock : : NS_RATIO ) {
// Fallback to StandardWallClock if the hardware TSC does not have the precision greater than:
// - A nanosecond
// - The emulated CPU frequency
// - The emulated clock counter frequency (CNTFRQ)
if ( rtsc_frequency < = WallClock : : NS_RATIO | | rtsc_frequency < = emulated_cpu_frequency | |
rtsc_frequency < = emulated_clock_frequency ) {
return std : : make_unique < StandardWallClock > ( emulated_cpu_frequency ,
emulated_clock_frequency ) ;
} else {
@ -85,8 +89,8 @@ std::unique_ptr<WallClock> CreateBestMatchingClock(u32 emulated_cpu_frequency,
# else
std : : unique_ptr < WallClock > CreateBestMatchingClock ( u 32 emulated_cpu_frequency ,
u 32 emulated_clock_frequency ) {
std : : unique_ptr < WallClock > CreateBestMatchingClock ( u 64 emulated_cpu_frequency ,
u 64 emulated_clock_frequency ) {
return std : : make_unique < StandardWallClock > ( emulated_cpu_frequency , emulated_clock_frequency ) ;
}