diff options
author | Morph <39850852+Morph1984@users.noreply.github.com> | 2022-01-30 18:36:56 +0100 |
---|---|---|
committer | Morph <39850852+Morph1984@users.noreply.github.com> | 2022-01-30 18:36:56 +0100 |
commit | 4e766280c4481d23a64a1c80c0ec40d7cf1ff378 (patch) | |
tree | 85f078d686978b4b27fc44c7cf0b95a90a6cc4bf /src | |
parent | Merge pull request #7791 from german77/wall_clock (diff) | |
download | yuzu-4e766280c4481d23a64a1c80c0ec40d7cf1ff378.tar yuzu-4e766280c4481d23a64a1c80c0ec40d7cf1ff378.tar.gz yuzu-4e766280c4481d23a64a1c80c0ec40d7cf1ff378.tar.bz2 yuzu-4e766280c4481d23a64a1c80c0ec40d7cf1ff378.tar.lz yuzu-4e766280c4481d23a64a1c80c0ec40d7cf1ff378.tar.xz yuzu-4e766280c4481d23a64a1c80c0ec40d7cf1ff378.tar.zst yuzu-4e766280c4481d23a64a1c80c0ec40d7cf1ff378.zip |
Diffstat (limited to 'src')
-rw-r--r-- | src/common/wall_clock.cpp | 4 | ||||
-rw-r--r-- | src/common/wall_clock.h | 4 | ||||
-rw-r--r-- | src/common/x64/native_clock.cpp | 6 |
3 files changed, 9 insertions, 5 deletions
diff --git a/src/common/wall_clock.cpp b/src/common/wall_clock.cpp index ffa282e88..081e0562f 100644 --- a/src/common/wall_clock.cpp +++ b/src/common/wall_clock.cpp @@ -73,8 +73,8 @@ std::unique_ptr<WallClock> CreateBestMatchingClock(u32 emulated_cpu_frequency, rtsc_frequency = EstimateRDTSCFrequency(); } - // Fallback to StandardWallClock if rtsc period is higher than a nano second - if (rtsc_frequency <= 1000000000) { + // Fallback to StandardWallClock if the hardware TSC does not have nanosecond precision. + if (rtsc_frequency <= WallClock::NS_RATIO) { return std::make_unique<StandardWallClock>(emulated_cpu_frequency, emulated_clock_frequency); } else { diff --git a/src/common/wall_clock.h b/src/common/wall_clock.h index cef3e9499..4d132c531 100644 --- a/src/common/wall_clock.h +++ b/src/common/wall_clock.h @@ -13,6 +13,10 @@ namespace Common { class WallClock { public: + static constexpr u64 NS_RATIO = 1'000'000'000; + static constexpr u64 US_RATIO = 1'000'000; + static constexpr u64 MS_RATIO = 1'000; + virtual ~WallClock() = default; /// Returns current wall time in nanoseconds diff --git a/src/common/x64/native_clock.cpp b/src/common/x64/native_clock.cpp index 82ee2c8a1..91b842829 100644 --- a/src/common/x64/native_clock.cpp +++ b/src/common/x64/native_clock.cpp @@ -47,9 +47,9 @@ NativeClock::NativeClock(u64 emulated_cpu_frequency_, u64 emulated_clock_frequen _mm_mfence(); time_point.inner.last_measure = __rdtsc(); time_point.inner.accumulated_ticks = 0U; - ns_rtsc_factor = GetFixedPoint64Factor(1000000000, rtsc_frequency); - us_rtsc_factor = GetFixedPoint64Factor(1000000, rtsc_frequency); - ms_rtsc_factor = GetFixedPoint64Factor(1000, rtsc_frequency); + ns_rtsc_factor = GetFixedPoint64Factor(NS_RATIO, rtsc_frequency); + us_rtsc_factor = GetFixedPoint64Factor(US_RATIO, rtsc_frequency); + ms_rtsc_factor = GetFixedPoint64Factor(MS_RATIO, rtsc_frequency); clock_rtsc_factor = GetFixedPoint64Factor(emulated_clock_frequency, rtsc_frequency); cpu_rtsc_factor = GetFixedPoint64Factor(emulated_cpu_frequency, rtsc_frequency); } |