diff options
Diffstat (limited to 'src/gensvm_timer.c')
| -rw-r--r-- | src/gensvm_timer.c | 34 |
1 files changed, 27 insertions, 7 deletions
diff --git a/src/gensvm_timer.c b/src/gensvm_timer.c index 04d93b1..0e020fe 100644 --- a/src/gensvm_timer.c +++ b/src/gensvm_timer.c @@ -1,25 +1,45 @@ /** - * @file timer.c + * @file gensvm_timer.c * @author Gertjan van den Burg * @date January, 2014 * @brief Utility functions relating to time * * @details * This file contains a simple function for calculating the time in seconds - * elapsed between two clock() calls. + * elapsed between two Timer() calls. * */ #include "gensvm_timer.h" /** - * @brief Calculate the time between two clocks + * @brief Calculate the time between two time recordings * - * @param[in] s_time starting time - * @param[in] e_time end time + * @detail + * This function should be used with time recordings done by clock_gettime() + * using CLOCK_MONOTONIC_RAW. For this, the Timer() macro has been defined in + * the header file. Example usage: + * + * @code + * struct timespec start, stop; + * Timer(start); + * // do some work // + * Timer(stop); + * double duration = gensvm_elapsed_time(&start, &stop); + * @endcode + * + * This approach to measuring time has been chosen since CLOCK_MONOTONIC_RAW + * is guaranteed to be monotonically increasing, and is not affected by leap + * seconds or other changes to the system clock. It is therefore thread-safe + * and can be used to accurately measure time intervals. + * + * @param[in] start starting time + * @param[in] stop end time * @returns time elapsed in seconds */ -double gensvm_elapsed_time(clock_t s_time, clock_t e_time) +double gensvm_elapsed_time(struct timespec *start, struct timespec *stop) { - return ((double) (e_time - s_time))/((double) CLOCKS_PER_SEC); + double delta_s = stop->tv_sec - start->tv_sec; + double delta_ns = stop->tv_nsec - start->tv_nsec; + return delta_s + delta_ns * 1e-9; } |
