about summary refs log tree commit diff
path: root/src/rt/sync/timer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/rt/sync/timer.cpp')
-rw-r--r--src/rt/sync/timer.cpp43
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() {