diff options
Diffstat (limited to 'src/rt/sync/timer.cpp')
| -rw-r--r-- | src/rt/sync/timer.cpp | 43 |
1 files changed, 24 insertions, 19 deletions
diff --git a/src/rt/sync/timer.cpp b/src/rt/sync/timer.cpp index 3af441c3950..2c0f92a1cf6 100644 --- a/src/rt/sync/timer.cpp +++ b/src/rt/sync/timer.cpp @@ -5,43 +5,48 @@ #include <mach/mach_time.h> #endif +uint64_t ns_per_s = 1000000000LL; + timer::timer() { #if __WIN32__ - uint64_t ticks_per_second; - QueryPerformanceFrequency((LARGE_INTEGER *)&ticks_per_second); - _ticks_per_ns = ticks_per_second / 1000; + _ticks_per_s = 0LL; + // FIXME: assert this works or have a workaround. + QueryPerformanceFrequency((LARGE_INTEGER *)&_ticks_per_s); + if (_ticks_per_s == 0LL) { + _ticks_per_s = 1LL; + } #endif - reset(0); + reset_us(0); } void -timer::reset(uint64_t timeout) { - _start = get_time(); - _timeout = timeout; +timer::reset_us(uint64_t timeout_us) { + _start_us = time_us(); + _timeout_us = timeout_us; } uint64_t -timer::get_elapsed_time() { - return get_time() - _start; +timer::elapsed_us() { + return time_us() - _start_us; } double -timer::get_elapsed_time_in_ms() { - return (double) get_elapsed_time() / 1000.0; +timer::elapsed_ms() { + return (double) elapsed_us() / 1000.0; } int64_t -timer::get_timeout() { - return _timeout - get_elapsed_time(); +timer::remaining_us() { + return _timeout_us - elapsed_us(); } bool timer::has_timed_out() { - return get_timeout() <= 0; + return remaining_us() <= 0; } uint64_t -timer::nano_time() { +timer::time_ns() { #ifdef __APPLE__ uint64_t time = mach_absolute_time(); mach_timebase_info_data_t info = {0, 0}; @@ -53,17 +58,17 @@ timer::nano_time() { #elif __WIN32__ uint64_t ticks; QueryPerformanceCounter((LARGE_INTEGER *)&ticks); - return ticks / _ticks_per_ns; + return ((ticks * ns_per_s) / _ticks_per_s); #else timespec ts; clock_gettime(CLOCK_MONOTONIC, &ts); - return (ts.tv_sec * 1000000000LL + ts.tv_nsec); + return (ts.tv_sec * ns_per_s + ts.tv_nsec); #endif } uint64_t -timer::get_time() { - return nano_time() / 1000; +timer::time_us() { + return time_ns() / 1000; } timer::~timer() { |
