diff options
Diffstat (limited to 'src/tsc.c')
-rw-r--r-- | src/tsc.c | 34 |
1 files changed, 4 insertions, 30 deletions
@@ -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; } |