Switch from Float to Integer Time Values

- Use fast data types where possible so the compiler can optimize for speed based on platform
    - for example, 128 bits might be fastest on ARM
    - good future-proofing

- Refactor GetTimeSinceStart() to be a bit faster
    - multiplication is much faster than division

- Implement a RageTimer method to get the seconds value as a plain int, for the places which cast the seconds value to an int

- Changing from GetTimeSinceStartFast() to GetTimeSinceStart() where accuracy is important

- Changing from GetTimeSinceStart() to GetUsecsSinceStart() for timestamp diffs

- Adjust RageThreads to accomodate an unsigned timestamp value
   - a constant for the maximum value of `uint_fast64_t` replaces `-1` to accommodate the change from signed to unsigned for the `locked_at` variable
   - i have separate constants for `std::numeric_limits<std::uint_fast64_t>::max()` and `static_cast<std::uint_fast64_t>(-1)`, so the reader understands -1 represents an error code, though they evaluate to the same value, so i could remove one of the two

- Add two methods to calculate the MMSSMsMs / MMSSMsMsMs time value from usecs directly instead of inferring it from a seconds value, in RageUtil

- Use a similar counter/modulo based method for WheelNotifyIcon, similar to what i did for text_glow in NoteField in 2eeee03

- Make `g_iStartTime` static const for safety

Rename two timer functions:
GetUsecsSinceStart -> GetTimeSinceStartMicroseconds
GetMicrosecondsSinceStart -> GetSystemTimeAsMicroseconds

Remove std prefix from uint_fast64_t
This commit is contained in:
sukibaby
2024-09-08 23:13:50 -07:00
committed by teejusb
parent 53cd968b90
commit eb35a9b9af
24 changed files with 95 additions and 55 deletions
+9 -5
View File
@@ -662,7 +662,7 @@ LockMutex::LockMutex( RageMutex &pMutex, const char *file_, int line_ ):
mutex( pMutex ),
file( file_ ),
line( line_ ),
locked_at( RageTimer::GetTimeSinceStart() ),
locked_at( RageTimer::GetTimeSinceStartMicroseconds() ),
locked(false) // ensure it gets locked inside.
{
mutex.Lock();
@@ -682,11 +682,15 @@ void LockMutex::Unlock()
mutex.Unlock();
if( file && locked_at != -1 )
constexpr uint_fast64_t THRESHOLD_USEC = 15000;
if (file && locked_at != FAST_ULL_MAX)
{
const float dur = RageTimer::GetTimeSinceStart() - locked_at;
if( dur > 0.015f )
LOG->Trace( "Lock at %s:%i took %f", file, line, dur );
const uint_fast64_t current_usecs = RageTimer::GetTimeSinceStartMicroseconds();
const uint_fast64_t dur_usecs = current_usecs - locked_at;
if (dur_usecs > THRESHOLD_USEC)
LOG->Trace("Lock at %s:%i took %llu microseconds", file, line, dur_usecs);
}
}