From 90183beeb914590a2ea4eff0242b813562d2d641 Mon Sep 17 00:00:00 2001 From: 3gg <3gg@shellblade.net> Date: Sat, 4 Feb 2023 14:37:31 -0800 Subject: Add time_point_to_ns(). --- timer/include/timer.h | 3 +++ timer/src/timer.c | 24 ++++++++++++++++-------- 2 files changed, 19 insertions(+), 8 deletions(-) (limited to 'timer') diff --git a/timer/include/timer.h b/timer/include/timer.h index 0274c69..a8a3f8b 100644 --- a/timer/include/timer.h +++ b/timer/include/timer.h @@ -44,6 +44,9 @@ double time_delta_to_sec(time_delta dt); /// Convert the time elapsed in seconds to a time delta. time_delta sec_to_time_delta(double seconds); +/// Convert the time point to nanoseconds. +uint64_t time_point_to_ns(time_point); + /// Put the caller thread to sleep for the given amount of time. void time_sleep(time_delta dt); diff --git a/timer/src/timer.c b/timer/src/timer.c index 2ee8ef5..0c33e51 100644 --- a/timer/src/timer.c +++ b/timer/src/timer.c @@ -32,17 +32,17 @@ Timer timer_make(void) { } void timer_start(Timer* timer) { - timer->start_time = time_now(); - timer->last_tick = timer->start_time; + timer->start_time = time_now(); + timer->last_tick = timer->start_time; timer->running_time = 0; - timer->delta_time = 0; + timer->delta_time = 0; } void timer_tick(Timer* timer) { const time_point this_tick = time_now(); - timer->running_time = time_diff(timer->start_time, this_tick); - timer->delta_time = time_diff(timer->last_tick, this_tick); - timer->last_tick = this_tick; + timer->running_time = time_diff(timer->start_time, this_tick); + timer->delta_time = time_diff(timer->last_tick, this_tick); + timer->last_tick = this_tick; } time_point time_now(void) { @@ -82,14 +82,22 @@ time_delta sec_to_time_delta(double seconds) { #endif } +uint64_t time_point_to_ns(time_point t) { +#ifdef _WIN32 + return (uint64_t)((double)t * seconds_per_count * 1.0e+9); +#else + return (uint64_t)t.tv_sec * 1e+9 + (uint64_t)t.tv_nsec; +#endif +} + void time_sleep(time_delta dt) { #ifdef _WIN32 const int64_t ms = dt / microseconds; Sleep((DWORD)(ms)); #else - const int64_t sec = dt / nanoseconds; + const int64_t sec = dt / nanoseconds; struct timespec ts; - ts.tv_sec = (long)sec; + ts.tv_sec = (long)sec; ts.tv_nsec = (long)(dt % nanoseconds); nanosleep(&ts, NULL); #endif -- cgit v1.2.3