| ... | ... | @@ -67,10 +67,10 @@ const DarwinTimeStart = struct { |
| 67 | 67 | initclock: u64, |
| 68 | 68 | }; |
| 69 | 69 | |
| 70 | | var _timestart: DarwinTimeStart = undefined; |
| 71 | | var _init_timestart_once = std.once(_init_timestart); |
| 70 | var global_timestart: DarwinTimeStart = undefined; |
| 71 | var init_global_timestart_once = std.once(init_global_timestart); |
| 72 | 72 | |
| 73 | | pub fn _init_timestart() void { |
| 73 | pub fn init_global_timestart() void { |
| 74 | 74 | var micro: os.darwin.timeval = undefined; |
| 75 | 75 | var timestart: DarwinTimeStart = undefined; |
| 76 | 76 | |
| ... | ... | @@ -83,7 +83,7 @@ pub fn _init_timestart() void { |
| 83 | 83 | timestart.inittime.tv_sec = micro.tv_sec; |
| 84 | 84 | timestart.inittime.tv_nsec = micro.tv_usec * 1000; |
| 85 | 85 | |
| 86 | | _timestart = timestart; |
| 86 | global_timestart = timestart; |
| 87 | 87 | } |
| 88 | 88 | |
| 89 | 89 | /// Get the posix timestamp, UTC, in nanoseconds |
| ... | ... | @@ -114,14 +114,13 @@ pub fn nanoTimestamp() u64 { |
| 114 | 114 | } |
| 115 | 115 | if (comptime std.Target.current.isDarwin()) { |
| 116 | 116 | // https://stackoverflow.com/a/21352348 |
| 117 | init_global_timestart_once.call(); |
| 117 | 118 | |
| 118 | | _init_timestart_once.call(); |
| 119 | const clock: u64 = os.darwin.mach_absolute_time() - global_timestart.initclock; |
| 120 | const nano = @divFloor(clock * @as(u64, global_timestart.timebase.numer), @as(u64, global_timestart.timebase.denom)); |
| 119 | 121 | |
| 120 | | const clock: u64 = os.darwin.mach_absolute_time() - _timestart.initclock; |
| 121 | | const nano = @divFloor(clock * @as(u64, _timestart.timebase.numer), @as(u64, _timestart.timebase.denom)); |
| 122 | | |
| 123 | | const tv_sec_nsec = @intCast(u64, _timestart.inittime.tv_sec) * ns_per_s; |
| 124 | | const tv_nsec = @intCast(u64, _timestart.inittime.tv_nsec); |
| 122 | const tv_sec_nsec = @intCast(u64, global_timestart.inittime.tv_sec) * ns_per_s; |
| 123 | const tv_nsec = @intCast(u64, global_timestart.inittime.tv_nsec); |
| 125 | 124 | |
| 126 | 125 | return tv_sec_nsec + tv_nsec + nano; |
| 127 | 126 | } |