blob: 0e020fe2364710d12b02a42410c346135fc7661d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
/**
* @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 Timer() calls.
*
*/
#include "gensvm_timer.h"
/**
* @brief Calculate the time between two time recordings
*
* @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(struct timespec *start, struct timespec *stop)
{
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;
}
|