diff options
Diffstat (limited to 'src/c/jerasure/src/timing.c')
-rw-r--r-- | src/c/jerasure/src/timing.c | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/src/c/jerasure/src/timing.c b/src/c/jerasure/src/timing.c new file mode 100644 index 0000000..315870a --- /dev/null +++ b/src/c/jerasure/src/timing.c @@ -0,0 +1,63 @@ +// Timing measurement utilities implementation. + +#include "timing.h" +#include <stddef.h> + +void +timing_set( + struct timing * t) +{ +#ifdef USE_CLOCK + t->clock = clock(); +#else + gettimeofday(&t->tv, NULL); +#endif +} + +double +timing_get( + struct timing * t) +{ +#ifdef USE_CLOCK + // The clock_t type is an "arithmetic type", which could be + // integral, double, long double, or others. + // + // Add 0.0 to make it a double or long double, then divide (in + // double or long double), then convert to double for our purposes. + return (double) ((t->clock + 0.0) / CLOCKS_PER_SEC); +#else + return (double) t->tv.tv_sec + ((double) t->tv.tv_usec) / 1000000.0; +#endif +} + +double +timing_now() +{ +#ifdef USE_CLOCK + return (double) ((clock() + 0.0) / CLOCKS_PER_SEC); +#else + struct timeval tv; + gettimeofday(&tv, NULL); + return (double) tv.tv_sec + ((double) tv.tv_usec) / 1000000.0; +#endif +} + +double +timing_delta( + struct timing * t1, + struct timing * t2) +{ +#ifdef USE_CLOCK + // The clock_t type is an "arithmetic type", which could be + // integral, double, long double, or others. + // + // Subtract first, resulting in another clock_t, then add 0.0 to + // make it a double or long double, then divide (in double or long + // double), then convert to double for our purposes. + return (double) (((t2->clock - t1->clock) + 0.0) / CLOCKS_PER_SEC); +#else + double const d2 = (double) t2->tv.tv_sec + ((double) t2->tv.tv_usec) / 1000000.0; + double const d1 = (double) t1->tv.tv_sec + ((double) t1->tv.tv_usec) / 1000000.0; + return d2 - d1; +#endif +} |