From 572722ce136c3783c11b80eccc84c5f0ee8ee5d4 Mon Sep 17 00:00:00 2001 From: Anonymous Maarten Date: Wed, 25 Dec 2024 21:00:40 +0100 Subject: [PATCH] Use SDL_GetPerformance(Counter|Frequency) in MxStopWatch --- LEGO1/mxdirectx/mxstopwatch.h | 50 ++++++++++++----------------------- 1 file changed, 17 insertions(+), 33 deletions(-) diff --git a/LEGO1/mxdirectx/mxstopwatch.h b/LEGO1/mxdirectx/mxstopwatch.h index fcd761a6..d5b1daa6 100644 --- a/LEGO1/mxdirectx/mxstopwatch.h +++ b/LEGO1/mxdirectx/mxstopwatch.h @@ -5,6 +5,8 @@ #include // ULONG_MAX #include +#include +#include #include ////////////////////////////////////////////////////////////////////////////// @@ -29,73 +31,55 @@ class MxStopWatch { double ElapsedSeconds() const; protected: - unsigned long TicksPerSeconds() const; + Uint64 TicksPerSeconds() const; private: - LARGE_INTEGER m_startTick; // 0x00 + Uint64 m_startTick; // 0x00 // ??? when we provide LARGE_INTEGER arithmetic, use a // LARGE_INTEGER m_elapsedTicks rather than m_elapsedSeconds double m_elapsedSeconds; // 0x0c - unsigned long m_ticksPerSeconds; // 0x14 + Uint64 m_ticksPerSeconds; // 0x14 }; // FUNCTION: BETA10 0x100d8ba0 inline MxStopWatch::MxStopWatch() { Reset(); - m_ticksPerSeconds = TicksPerSeconds(); + m_ticksPerSeconds = SDL_GetPerformanceCounter(); } // FUNCTION: BETA10 0x100d8be0 inline void MxStopWatch::Start() { - QueryPerformanceCounter(&m_startTick); + m_startTick = SDL_GetPerformanceCounter(); } // FUNCTION: BETA10 0x100d8f50 inline void MxStopWatch::Stop() { - LARGE_INTEGER endTick; - BOOL result; + Uint64 endTick; - result = QueryPerformanceCounter(&endTick); - assert(result); + endTick = SDL_GetPerformanceCounter(); - if (endTick.HighPart != m_startTick.HighPart) { - // LARGE_INTEGER arithmetic not yet provided - m_elapsedSeconds = HUGE_VAL_IMMEDIATE; - } - else { - m_elapsedSeconds += ((endTick.LowPart - m_startTick.LowPart) / (double) m_ticksPerSeconds); - } + m_elapsedSeconds = (double)(endTick - m_startTick) / (double)m_ticksPerSeconds; } // FUNCTION: BETA10 0x100d8c10 inline void MxStopWatch::Reset() { - m_startTick.LowPart = 0; - m_startTick.HighPart = 0; - m_elapsedSeconds = 0; + m_startTick = 0; + m_elapsedSeconds = 0.; } // FUNCTION: BETA10 0x100d8c60 -inline unsigned long MxStopWatch::TicksPerSeconds() const +inline Uint64 MxStopWatch::TicksPerSeconds() const { - LARGE_INTEGER ticksPerSeconds; - BOOL result; + Uint64 ticksPerSeconds; - result = QueryPerformanceFrequency(&ticksPerSeconds); - assert(result); + ticksPerSeconds = SDL_GetPerformanceFrequency(); + assert(ticksPerSeconds); - if (ticksPerSeconds.HighPart) { - // LARGE_INTEGER arithmetic not yet provided - - // timer is too fast (faster than 32bits/s, i.e. faster than 4GHz) - return ULONG_MAX; - } - else { - return ticksPerSeconds.LowPart; - } + return ticksPerSeconds; } // FUNCTION: BETA10 0x100d9020