From 909e73150c56bd718e00172222669f00291cb6e8 Mon Sep 17 00:00:00 2001 From: Barinade Date: Sun, 1 Dec 2019 19:33:59 -0600 Subject: [PATCH] Fix odd RageTimer inconsistencies causing broken framerate caps and probably some other stuff nobody caught because this is basically the difference between 0.0013333 seconds and 0.00130000 seconds --- src/arch/ArchHooks/ArchHooks_MacOSX.mm | 21 +----------------- src/arch/ArchHooks/ArchHooks_Unix.cpp | 22 +------------------ src/arch/ArchHooks/ArchHooks_Win32Static.cpp | 23 +++++++------------- 3 files changed, 10 insertions(+), 56 deletions(-) diff --git a/src/arch/ArchHooks/ArchHooks_MacOSX.mm b/src/arch/ArchHooks/ArchHooks_MacOSX.mm index ac069b14ba..036d1fb4f2 100644 --- a/src/arch/ArchHooks/ArchHooks_MacOSX.mm +++ b/src/arch/ArchHooks/ArchHooks_MacOSX.mm @@ -24,17 +24,6 @@ #import -static bool g_bTimerInitialized; -static std::chrono::steady_clock::time_point g_momentInitialized; - -static void InitTimer() -{ - if (g_bTimerInitialized) - return; - g_bTimerInitialized = true; - g_momentInitialized = std::chrono::steady_clock::now(); -} - static bool IsFatalSignal( int signal ) { switch( signal ) @@ -309,15 +298,7 @@ static bool DoEmergencyShutdown( int signal, siginfo_t *si, const ucontext_t *us std::chrono::microseconds ArchHooks::GetChronoDurationSinceStart() { - if (!g_bTimerInitialized) - InitTimer(); - - std::chrono::steady_clock::time_point now = - std::chrono::steady_clock::now(); - auto us = std::chrono::duration_cast( - now - g_momentInitialized); - - return us; + return std::chrono::microseconds(GetMicrosecondsSinceStart()); } #include "RageUtil/File/RageFileManager.h" diff --git a/src/arch/ArchHooks/ArchHooks_Unix.cpp b/src/arch/ArchHooks/ArchHooks_Unix.cpp index 852bba0720..f8305a9a37 100644 --- a/src/arch/ArchHooks/ArchHooks_Unix.cpp +++ b/src/arch/ArchHooks/ArchHooks_Unix.cpp @@ -37,18 +37,6 @@ extern "C" { #include -static bool g_bTimerInitialized; -static std::chrono::steady_clock::time_point g_momentInitialized; - -static void -InitTimer() -{ - if (g_bTimerInitialized) - return; - g_bTimerInitialized = true; - g_momentInitialized = std::chrono::steady_clock::now(); -} - static bool IsFatalSignal(int signal) { @@ -183,15 +171,7 @@ ArchHooks::GetMicrosecondsSinceStart() std::chrono::microseconds ArchHooks::GetChronoDurationSinceStart() { - if (!g_bTimerInitialized) - InitTimer(); - - std::chrono::steady_clock::time_point now = - std::chrono::steady_clock::now(); - auto us = std::chrono::duration_cast( - now - g_momentInitialized); - - return us; + return std::chrono::microseconds(GetMicrosecondsSinceStart()); } #else int64_t diff --git a/src/arch/ArchHooks/ArchHooks_Win32Static.cpp b/src/arch/ArchHooks/ArchHooks_Win32Static.cpp index 70dc46505e..baa175ad40 100644 --- a/src/arch/ArchHooks/ArchHooks_Win32Static.cpp +++ b/src/arch/ArchHooks/ArchHooks_Win32Static.cpp @@ -15,7 +15,6 @@ #include static bool g_bTimerInitialized; -static std::chrono::steady_clock::time_point g_momentInitialized; static void InitTimer() @@ -23,7 +22,9 @@ InitTimer() if (g_bTimerInitialized) return; g_bTimerInitialized = true; - g_momentInitialized = std::chrono::steady_clock::now(); + + // Set Windows clock resolution to 1ms + timeBeginPeriod(1); } int64_t @@ -32,13 +33,7 @@ ArchHooks::GetMicrosecondsSinceStart() if (!g_bTimerInitialized) InitTimer(); - std::chrono::steady_clock::time_point now = - std::chrono::steady_clock::now(); - auto us = std::chrono::duration_cast( - now - g_momentInitialized); - int64_t ret = us.count(); - - return ret; + return timeGetTime() * int64_t(1000); } std::chrono::microseconds @@ -47,12 +42,10 @@ ArchHooks::GetChronoDurationSinceStart() if (!g_bTimerInitialized) InitTimer(); - std::chrono::steady_clock::time_point now = - std::chrono::steady_clock::now(); - auto us = std::chrono::duration_cast( - now - g_momentInitialized); - - return us; + // You may be thinking "why dont we use ::now() compared with a duration and + // return that?" well, that didnt work, is all i can say right now. maybe + // rewriting it later will work + return std::chrono::microseconds(GetMicrosecondsSinceStart()); } static RString