From e2fa7956b87c23a8229926f39a3863ecd4d4752a Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Fri, 18 Sep 2009 19:47:51 +0000 Subject: Add timespec helper routines. --- src/tsc.c | 34 ++++------------------------------ 1 file changed, 4 insertions(+), 30 deletions(-) (limited to 'src/tsc.c') diff --git a/src/tsc.c b/src/tsc.c index 28066a4..554a6d8 100644 --- a/src/tsc.c +++ b/src/tsc.c @@ -27,40 +27,14 @@ double sandglass_tsc_resolution() { - static long tsc = 0, grains1, grains2; - - int monotonic; - struct timespec ts; + static long tsc = 0; + static struct timespec ts = { .tv_sec = 0, .tv_nsec = 10000000L }; if (tsc == 0) { - monotonic = sysconf(_SC_MONOTONIC_CLOCK) > 0; - if (monotonic) { - if (clock_gettime(CLOCK_MONOTONIC, &ts) != 0) - return 0.0/0.0; - } else { - if (clock_gettime(CLOCK_REALTIME, &ts) != 0) - return 0.0/0.0; - } tsc = sandglass_get_tsc(); - grains1 = sandglass_timespec_grains(&ts); - grains2 = grains1; - - while (((grains2 >= grains1) ? grains2 - grains1 - : 1000000000L + (grains2 - grains1)) - < 10000000L) - { - if (monotonic) { - if (clock_gettime(CLOCK_MONOTONIC, &ts) != 0) - return 0.0/0.0; - } else { - if (clock_gettime(CLOCK_REALTIME, &ts) != 0) - return 0.0/0.0; - } - grains2 = ts.tv_nsec; - } - + sandglass_spin(&ts); tsc = sandglass_get_tsc() - tsc; } - return tsc*1.0e9/(grains2 - grains1); + return tsc*1.0e9/ts.tv_nsec; } -- cgit v1.2.3