macOS/iOS: use clock_gettime_nsec_np(CLOCK_UPTIME_RAW) instead of mach_absolute_time() per Apple's recommendation.

Move has_monotonic_time variable into the final variant of platform-specific time code (used by Linux/Unix).
This commit is contained in:
Andy Grundman
2024-10-20 19:19:11 -04:00
committed by Cameron Gutman
parent a3ebaaf015
commit fdd026518c

View File

@@ -423,7 +423,6 @@ void PltWaitForConditionVariable(PLT_COND* cond, PLT_MUTEX* mutex) {
// These functions return a number of microseconds or milliseconds since an opaque start time. // These functions return a number of microseconds or milliseconds since an opaque start time.
static bool has_monotonic_time = false;
static bool ticks_started = false; static bool ticks_started = false;
#if defined(LC_WINDOWS) #if defined(LC_WINDOWS)
@@ -451,25 +450,22 @@ uint64_t PltGetMicroseconds(void) {
#elif defined(LC_DARWIN) #elif defined(LC_DARWIN)
static mach_timebase_info_data_t mach_base_info; static uint64_t start_ns;
static uint64_t start;
void PltTicksInit(void) { void PltTicksInit(void) {
if (ticks_started) { if (ticks_started) {
return; return;
} }
ticks_started = true; ticks_started = true;
mach_timebase_info(&mach_base_info); start_ns = clock_gettime_nsec_np(CLOCK_UPTIME_RAW);
has_monotonic_time = true;
start = mach_absolute_time();
} }
uint64_t PltGetMicroseconds(void) { uint64_t PltGetMicroseconds(void) {
if (!ticks_started) { if (!ticks_started) {
PltTicksInit(); PltTicksInit();
} }
const uint64_t now = mach_absolute_time(); const uint64_t now_ns = clock_gettime_nsec_np(CLOCK_UPTIME_RAW);
return (((now - start) * mach_base_info.numer) / mach_base_info.denom) / 1000; return (now_ns - start_ns) / 1000;
} }
#elif defined(__vita__) #elif defined(__vita__)
@@ -524,6 +520,7 @@ static struct timespec start_ts;
# endif # endif
#endif #endif
static bool has_monotonic_time = false;
static struct timeval start_tv; static struct timeval start_tv;
void PltTicksInit(void) { void PltTicksInit(void) {