From a3dd7bf7dd5135ae567db7922216b4e09d51cae8 Mon Sep 17 00:00:00 2001 From: koekeishiya Date: Sun, 8 Sep 2019 15:11:17 +0200 Subject: change timing api --- makefile | 2 +- src/timing.h | 32 +++++++++++++++++++++----------- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/makefile b/makefile index bbf993f..62db6f4 100644 --- a/makefile +++ b/makefile @@ -1,4 +1,4 @@ -FRAMEWORKS = -framework Carbon -framework CoreAudio +FRAMEWORKS = -framework Carbon -framework CoreServices BUILD_PATH = ./bin BUILD_FLAGS = -std=c99 -Wall -g -O0 SKHD_SRC = ./src/skhd.c diff --git a/src/timing.h b/src/timing.h index 44cde56..b48028e 100644 --- a/src/timing.h +++ b/src/timing.h @@ -2,7 +2,8 @@ #define MACOS_TIMING_H #include -#include +#include +#include #define BEGIN_SCOPED_TIMED_BLOCK(note) \ do { \ @@ -28,7 +29,7 @@ struct timing_info char *note; uint64_t start; uint64_t end; - float ms; + double ms; }; void begin_timing(struct timing_info *timing, char *note); @@ -37,22 +38,31 @@ void end_timing(struct timing_info *timing); internal inline uint64_t macos_get_wall_clock(void) { - uint64_t result = AudioConvertHostTimeToNanos(AudioGetCurrentHostTime()); - return result; + return mach_absolute_time(); } -internal inline float -macos_get_seconds_elapsed(uint64_t start, uint64_t end) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" +static inline uint64_t macos_get_nanoseconds_elapsed(uint64_t start, uint64_t end) { - float result = ((float)(end - start) / 1000.0f) / 1000000.0f; - return result; + uint64_t elapsed = end - start; + Nanoseconds nano = AbsoluteToNanoseconds(*(AbsoluteTime *) &elapsed); + return *(uint64_t *) &nano; } +#pragma clang diagnostic pop -internal inline float +internal inline double macos_get_milliseconds_elapsed(uint64_t start, uint64_t end) { - float result = 1000.0f * macos_get_seconds_elapsed(start, end); - return result; + uint64_t ns = macos_get_nanoseconds_elapsed(start, end); + return (double)(ns / 1000000.0); +} + +internal inline double +macos_get_seconds_elapsed(uint64_t start, uint64_t end) +{ + uint64_t ns = macos_get_nanoseconds_elapsed(start, end); + return (double)(ns / 1000000000.0); } void begin_timing(struct timing_info *timing, char *note) { -- cgit v1.2.3