From b3d83388ef116c292869668d749fdfca92320358 Mon Sep 17 00:00:00 2001 From: superp00t Date: Fri, 11 Apr 2025 02:32:39 -0400 Subject: [PATCH] feat(time): change TimingMethod enum names, add OsTimeGetTimingMethodName for Windows --- common/time/Time.hpp | 16 ++++++++++------ common/time/win/Time.cpp | 19 +++++++++++++++++-- common/time/win/TimeManager.cpp | 16 ++++++++-------- 3 files changed, 35 insertions(+), 16 deletions(-) diff --git a/common/time/Time.hpp b/common/time/Time.hpp index a3e08d8..9374d73 100644 --- a/common/time/Time.hpp +++ b/common/time/Time.hpp @@ -4,12 +4,10 @@ #include enum TimingMethod { - NotSet = -1, - BestAvailable = 0, - // GetTickCount (Windows), mach_absolute_time (MacOS) - SystemMethod1 = 1, - // QueryPerformanceCounter (Windows), Carbon Microseconds (MacOS) - SystemMethod2 = 2 + Timing_NotSet = -1, + Timing_BestAvailable = 0, + Timing_GetTickCount = 1, + Timing_QueryPerformanceCounter = 2 }; void OsTimeStartup(TimingMethod timingMethod); @@ -24,4 +22,10 @@ int64_t OsGetAsyncClocksPerSecond(); void OsSleep(uint32_t duration); +#if defined(WHOA_SYSTEM_WIN) + +const char* OsTimeGetTimingMethodName(TimingMethod timingMethod); + +#endif + #endif diff --git a/common/time/win/Time.cpp b/common/time/win/Time.cpp index 578bea9..4c2487d 100644 --- a/common/time/win/Time.cpp +++ b/common/time/win/Time.cpp @@ -11,7 +11,7 @@ static OsTimeManager* s_OsTimeMgr; void OsTimeManagerCreate(TimingMethod timingMethod) { auto m = SMemAlloc(sizeof(OsTimeManager), __FILE__, __LINE__, 0x8); if (m) { - s_OsTimeMgr = new (m) OsTimeManager(timingMethod); + s_OsTimeMgr = new(m) OsTimeManager(timingMethod); } } @@ -30,6 +30,21 @@ void OsTimeShutdown() { OsTimeManagerDestroy(); } +const char* OsTimeGetTimingMethodName(TimingMethod timingMethod) { + switch (timingMethod) { + case Timing_BestAvailable: + return "[Best Available]"; + case Timing_GetTickCount: + return "GetTickCount"; + case Timing_QueryPerformanceCounter: + return "QueryPerformanceCounter"; + case Timing_NotSet: + return "[Not Set]"; + default: + return "[Unknown]"; + } +} + uint64_t OsGetAsyncTimeMsPrecise() { return s_OsTimeMgr->Snapshot(); } @@ -39,7 +54,7 @@ uint64_t OsGetAsyncTimeMs() { } int64_t OsGetAsyncClocksPerSecond() { - if (s_OsTimeMgr->timingMethod == SystemMethod2) { + if (s_OsTimeMgr->timingMethod == Timing_QueryPerformanceCounter) { return s_OsTimeMgr->performanceFrequency; } else { return 1000LL; diff --git a/common/time/win/TimeManager.cpp b/common/time/win/TimeManager.cpp index 99d4b1f..d943638 100644 --- a/common/time/win/TimeManager.cpp +++ b/common/time/win/TimeManager.cpp @@ -7,19 +7,19 @@ #include OsTimeManager::OsTimeManager(TimingMethod tm) { - this->timingMethod = NotSet; + this->timingMethod = Timing_NotSet; auto method = this->Calibrate(); - if (tm != BestAvailable && method != timingMethod) { - if (tm == SystemMethod2 && method == SystemMethod1) { + if (tm != Timing_BestAvailable && method != timingMethod) { + if (tm == Timing_QueryPerformanceCounter && method == Timing_GetTickCount) { this->timingTestError = 5; } method = tm; } this->timingMethod = method; - auto freq = method == SystemMethod2 ? this->performanceFrequency : static_cast(1000LL); + auto freq = method == Timing_QueryPerformanceCounter ? this->performanceFrequency : static_cast(1000LL); this->scaleToMs = 1000.0 / static_cast(freq); this->timeBegin = 0; } @@ -27,12 +27,12 @@ OsTimeManager::OsTimeManager(TimingMethod tm) { TimingMethod OsTimeManager::Calibrate() { if (!QueryPerformanceFrequency(reinterpret_cast(&this->performanceFrequency))) { this->timingTestError = 1; - return SystemMethod1; + return Timing_GetTickCount; } if (this->performanceFrequency == 0) { this->timingTestError = 2; - return SystemMethod1; + return Timing_GetTickCount; } auto process = GetCurrentProcess(); @@ -95,11 +95,11 @@ TimingMethod OsTimeManager::Calibrate() { SetPriorityClass(process, priorityClass); SetThreadPriority(thread, threadPriority); OsSleep(0); - return this->timingMethod == BestAvailable ? SystemMethod2 : SystemMethod1; + return this->timingMethod == Timing_BestAvailable ? Timing_QueryPerformanceCounter : Timing_GetTickCount; } uint64_t OsTimeManager::Snapshot() { - if (this->timingMethod != SystemMethod2) { + if (this->timingMethod != Timing_QueryPerformanceCounter) { return static_cast((static_cast(GetTickCount()) * this->scaleToMs) + this->timeBegin); }