From d5efee77f8daf572602a9925e34c96698a1dcbdf Mon Sep 17 00:00:00 2001 From: David Robillard Date: Tue, 27 Dec 2022 10:46:06 -0500 Subject: MacOS: Fix timestamps on systems with different clock rates This seems to be a thing at least on MacOS 12 on M1. --- src/mac.h | 7 +++++-- src/mac.m | 12 +++++++++--- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/mac.h b/src/mac.h index 10e37c5..7473231 100644 --- a/src/mac.h +++ b/src/mac.h @@ -9,6 +9,8 @@ #import +#include + #include @interface PuglWrapperView : NSView @@ -25,8 +27,9 @@ @end struct PuglWorldInternalsImpl { - NSApplication* app; - NSAutoreleasePool* autoreleasePool; + NSApplication* app; + NSAutoreleasePool* autoreleasePool; + struct mach_timebase_info timebaseInfo; }; struct PuglInternalsImpl { diff --git a/src/mac.m b/src/mac.m index ab8ea68..72b3e5f 100644 --- a/src/mac.m +++ b/src/mac.m @@ -913,6 +913,10 @@ puglInitWorldInternals(PuglWorldType type, PuglWorldFlags PUGL_UNUSED(flags)) impl->app = [NSApplication sharedApplication]; + if (mach_timebase_info(&impl->timebaseInfo)) { + return NULL; + } + if (type == PUGL_PROGRAM) { impl->autoreleasePool = [NSAutoreleasePool new]; @@ -1400,7 +1404,9 @@ puglProcessEvents(PuglView* view) double puglGetTime(const PuglWorld* world) { - return (mach_absolute_time() / 1e9) - world->startTime; + return ((double)mach_absolute_time() * world->impl->timebaseInfo.denom / + world->impl->timebaseInfo.numer / 1e9) - + world->startTime; } PuglStatus @@ -1575,7 +1581,7 @@ puglPaste(PuglView* const view) const PuglDataOfferEvent offer = { PUGL_DATA_OFFER, 0, - mach_absolute_time() / 1e9, + puglGetTime(view->world), }; PuglEvent offerEvent; @@ -1633,7 +1639,7 @@ puglAcceptOffer(PuglView* const view, wrapper->dragTypeIndex = typeIndex; const PuglDataEvent data = { - PUGL_DATA, 0U, mach_absolute_time() / 1e9, (uint32_t)typeIndex}; + PUGL_DATA, 0U, puglGetTime(view->world), (uint32_t)typeIndex}; PuglEvent dataEvent; dataEvent.data = data; -- cgit v1.2.1