From b84a6608065cacb454a5dc531243abeb119c8823 Mon Sep 17 00:00:00 2001 From: Harold Brenes Date: Thu, 28 Mar 2024 21:09:37 -0400 Subject: [PATCH] Fix incorrect timings on macOS --- src/timings.cpp | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/timings.cpp b/src/timings.cpp index baa8b80da..e4165e3c0 100644 --- a/src/timings.cpp +++ b/src/timings.cpp @@ -33,22 +33,23 @@ gb_internal u64 win32_time_stamp__freq(void) { #include -gb_internal u64 osx_time_stamp_time_now(void) { - return mach_absolute_time(); -} - -gb_internal u64 osx_time_stamp__freq(void) { +gb_internal mach_timebase_info_data_t osx_init_timebase_info(void) { mach_timebase_info_data_t data; data.numer = 0; data.denom = 0; - mach_timebase_info(&data); -#if defined(GB_CPU_ARM) - // NOTE(bill, 2021-02-25): M1 Chip seems to have a different freq count - // TODO(bill): Is this truly correct? - return (1000000llu * cast(u64)data.numer) / cast(u64)data.denom; -#else - return (1000000000llu * cast(u64)data.numer) / cast(u64)data.denom; -#endif + kern_return_t r = mach_timebase_info(&data); + GB_ASSERT(r == KERN_SUCCESS); + + return data; +} + +gb_internal u64 osx_time_stamp_time_now(void) { + gb_local_persist mach_timebase_info_data_t data = osx_init_timebase_info(); + return (mach_absolute_time() * cast(u64)data.numer) / cast(u64)data.denom; // Effectively converts to nanoseconds +} + +gb_internal u64 osx_time_stamp__freq(void) { + return 1000000000ull; // Nanoseconds to seconds } #elif defined(GB_SYSTEM_UNIX)