static uint64_t GetPerformanceFreq() { static LARGE_INTEGER freq; if (!freq.QuadPart) QueryPerformanceFrequency(&freq); return freq.QuadPart; } static uint64_t GetPerformanceTicks() { LARGE_INTEGER counter; QueryPerformanceCounter(&counter); return counter.QuadPart; } static uint64_t TicksTo(uint64_t ticks, uint64_t scale) { uint64_t hi; uint64_t lo = UMul128(ticks, scale, hi); uint64_t rem; return UDiv128(hi, lo, GetPerformanceFreq(), rem); } static uint64_t GetMonoTimeMillis() { return TicksTo(GetPerformanceTicks(), 1'000ULL); } static uint64_t GetMonoTimeMicros() { return TicksTo(GetPerformanceTicks(), 1'000'000ULL); } static uint64_t GetMonoTimeNanos() { return TicksTo(GetPerformanceTicks(), 1'000'000'000ULL); }