blob: 44cde56a3edc688af21907922d2719d09636f0ac (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
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
|