aboutsummaryrefslogtreecommitdiff
path: root/src/timing.h
diff options
context:
space:
mode:
authorkoekeishiya <aasvi93@hotmail.com>2019-07-10 00:11:50 +0200
committerkoekeishiya <aasvi93@hotmail.com>2019-07-10 00:11:50 +0200
commit32f669eab3dea1908a83133e402411fa2e377ac3 (patch)
treef6ace98d121b9fac8598e6b52e266b082920671c /src/timing.h
parentaae0e4f2a5d90a812343acf3d5b3f2f20f5c2dc0 (diff)
parent22071ddd738ad591f42500ad8dbe818ffd1eb93d (diff)
downloadskhd-mt.tar.gz
skhd-mt.zip
merge mastermt
Diffstat (limited to 'src/timing.h')
-rw-r--r--src/timing.h76
1 files changed, 76 insertions, 0 deletions
diff --git a/src/timing.h b/src/timing.h
new file mode 100644
index 0000000..44cde56
--- /dev/null
+++ b/src/timing.h
@@ -0,0 +1,76 @@
+#ifndef MACOS_TIMING_H
+#define MACOS_TIMING_H
+
+#include <stdint.h>
+#include <CoreAudio/CoreAudio.h>
+
+#define BEGIN_SCOPED_TIMED_BLOCK(note) \
+ do { \
+ struct timing_info timing; \
+ if (profile) begin_timing(&timing, note)
+#define END_SCOPED_TIMED_BLOCK() \
+ if (profile) end_timing(&timing); \
+ } while (0)
+
+#define BEGIN_TIMED_BLOCK(note) \
+ struct timing_info timing; \
+ if (profile) begin_timing(&timing, note)
+#define END_TIMED_BLOCK() \
+ if (profile) end_timing(&timing)
+
+#define internal static
+#define global static
+
+global bool profile;
+
+struct timing_info
+{
+ char *note;
+ uint64_t start;
+ uint64_t end;
+ float ms;
+};
+
+void begin_timing(struct timing_info *timing, char *note);
+void end_timing(struct timing_info *timing);
+
+internal inline uint64_t
+macos_get_wall_clock(void)
+{
+ uint64_t result = AudioConvertHostTimeToNanos(AudioGetCurrentHostTime());
+ return result;
+}
+
+internal inline float
+macos_get_seconds_elapsed(uint64_t start, uint64_t end)
+{
+ float result = ((float)(end - start) / 1000.0f) / 1000000.0f;
+ return result;
+}
+
+internal inline float
+macos_get_milliseconds_elapsed(uint64_t start, uint64_t end)
+{
+ float result = 1000.0f * macos_get_seconds_elapsed(start, end);
+ return result;
+}
+
+void begin_timing(struct timing_info *timing, char *note) {
+ timing->note = note;
+ timing->start = macos_get_wall_clock();
+}
+
+void end_timing(struct timing_info *timing) {
+ timing->end = macos_get_wall_clock();
+ timing->ms = macos_get_milliseconds_elapsed(timing->start, timing->end);
+ if (timing->note) {
+ printf("%6.4fms (%s)\n", timing->ms, timing->note);
+ } else {
+ printf("%6.4fms\n", timing->ms);
+ }
+}
+
+#undef internal
+#undef global
+
+#endif