diff --git a/src/i_time.cpp b/src/i_time.cpp index 8fd058723..a2c2e6055 100644 --- a/src/i_time.cpp +++ b/src/i_time.cpp @@ -75,7 +75,8 @@ CUSTOM_CVAR(Float, i_timescale, 1.0f, CVAR_NOINITCALL) static uint64_t GetClockTimeNS() { using namespace std::chrono; - return (uint64_t)((duration_cast(steady_clock::now().time_since_epoch()).count()) * (uint64_t)(TimeScale * 1000)); + if (TimeScale == 1.0) return (uint64_t)(duration_cast(steady_clock::now().time_since_epoch()).count()); + else return (uint64_t)((duration_cast(steady_clock::now().time_since_epoch()).count()) * (uint64_t)(TimeScale * 1000)); } static uint64_t MSToNS(unsigned int ms) @@ -164,11 +165,21 @@ uint64_t I_msTime() return NSToMS(I_nsTime()); } +double I_msTimeF(void) +{ + return I_nsTime() / 1'000'000.; +} + uint64_t I_msTimeFS() // from "start" { return (FirstFrameStartTime == 0) ? 0 : NSToMS(I_nsTime() - FirstFrameStartTime); } +uint64_t I_GetTimeNS() +{ + return CurrentFrameStartTime - FirstFrameStartTime; +} + int I_GetTime() { return NSToTic(CurrentFrameStartTime - FirstFrameStartTime); diff --git a/src/i_time.h b/src/i_time.h index 63c4586f1..09a496528 100644 --- a/src/i_time.h +++ b/src/i_time.h @@ -7,6 +7,8 @@ void I_SetFrameTime(); // Called by D_DoomLoop, returns current time in tics. int I_GetTime(); +// same, but using nanoseconds +uint64_t I_GetTimeNS(); double I_GetTimeFrac(); @@ -22,6 +24,9 @@ void I_FreezeTime(bool frozen); // [RH] Returns millisecond-accurate time uint64_t I_msTime(); +// [RH] Returns nanosecond-accurate time in milliseconds +double I_msTimeF(void); + // [SP] Returns millisecond-accurate time from start uint64_t I_msTimeFS();