From d9a96a818ecfa4ecbc4d9f50f5ff2c49ebefba5a Mon Sep 17 00:00:00 2001 From: icex2 Date: Tue, 13 Oct 2020 22:51:25 +0200 Subject: [PATCH] util/time: Add functions to measure time with high precision --- src/main/util/time.c | 34 ++++++++++++++++++++++++++++++++++ src/main/util/time.h | 14 ++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/src/main/util/time.c b/src/main/util/time.c index acee0f5..e246100 100644 --- a/src/main/util/time.c +++ b/src/main/util/time.c @@ -66,4 +66,38 @@ void util_time_get_current_time(struct util_time_timestamp* timestamp) timestamp->month = tm->tm_mon + 1; // Years since 1900 timestamp->year = tm->tm_year + 1900; +} + +util_time_counter_t util_time_get_counter() +{ + struct timespec tspec; + + clock_gettime(CLOCK_MONOTONIC, &tspec); + + return tspec.tv_sec * 1000 * 1000 * 1000 + tspec.tv_nsec; +} + +uint64_t util_time_get_elapsed_ns(util_time_counter_t counter_delta) +{ + return counter_delta; +} + +uint64_t util_time_get_elapsed_us(util_time_counter_t counter_delta) +{ + return counter_delta / 1000; +} + +double util_time_get_elapsed_us_double(util_time_counter_t counter_delta) +{ + return ((double) counter_delta) / 1000.0; +} + +uint32_t util_time_get_elapsed_ms(util_time_counter_t counter_delta) +{ + return counter_delta / 1000 / 1000; +} + +double util_time_get_elapsed_ms_double(util_time_counter_t counter_delta) +{ + return ((double) counter_delta) / 1000.0 / 1000.0; } \ No newline at end of file diff --git a/src/main/util/time.h b/src/main/util/time.h index 80f106b..b767703 100644 --- a/src/main/util/time.h +++ b/src/main/util/time.h @@ -13,6 +13,8 @@ struct util_time_timestamp { uint16_t millisec; }; +typedef uint64_t util_time_counter_t; + void util_time_sleep_ns(uint64_t time_ns); void util_time_sleep_us(uint64_t time_us); @@ -23,4 +25,16 @@ void util_time_sleep_sec(uint64_t time_sec); void util_time_get_current_time(struct util_time_timestamp* timestamp); +util_time_counter_t util_time_get_counter(); + +uint64_t util_time_get_elapsed_ns(util_time_counter_t counter_delta); + +uint64_t util_time_get_elapsed_us(util_time_counter_t counter_delta); + +double util_time_get_elapsed_us_double(util_time_counter_t counter_delta); + +uint32_t util_time_get_elapsed_ms(util_time_counter_t counter_delta); + +double util_time_get_elapsed_ms_double(util_time_counter_t counter_delta); + #endif //UTIL_TIME_H