CLOCK_MONOTONIC_RAW is not affected by NTP, so it should be THE clock used for timing execution of tests. v2: - Cache the used clock (Chris) - Do not change the clock during execution - Spit out and error if monotonic time can not be read Cc: Thomas Wood <thomas.wood@xxxxxxxxx> Cc: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> Signed-off-by: Joonas Lahtinen <joonas.lahtinen@xxxxxxxxxxxxxxx> --- lib/igt_core.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/lib/igt_core.c b/lib/igt_core.c index 04a0ab2..c56bc15 100644 --- a/lib/igt_core.c +++ b/lib/igt_core.c @@ -220,6 +220,7 @@ static char *run_single_subtest = NULL; static bool run_single_subtest_found = false; static const char *in_subtest = NULL; static struct timespec subtest_time; +static clockid_t igt_clock = (clockid_t)-1; static bool in_fixture = false; static bool test_with_subtests = false; static bool in_atexit_handler = false; @@ -341,10 +342,25 @@ static void gettime(struct timespec *ts) { memset(ts, 0, sizeof(*ts)); + // Stay on the same clock for consistency. + if (igt_clock != (clockid_t)-1) { + clock_gettime(igt_clock, ts); + return; + } + +#ifdef CLOCK_MONOTONIC_RAW + if (!clock_gettime(igt_clock = CLOCK_MONOTONIC_RAW, ts)) + return; +#endif #ifdef CLOCK_MONOTONIC_COARSE - if (clock_gettime(CLOCK_MONOTONIC_COARSE, ts)) + if (!clock_gettime(igt_clock = CLOCK_MONOTONIC_COARSE, ts)) + return; #endif - clock_gettime(CLOCK_MONOTONIC, ts); + if (!clock_gettime(igt_clock = CLOCK_MONOTONIC, ts)) + return; + + igt_warn("Unable to get monotonic time!\n"); + exit(IGT_EXIT_FAILURE); } bool __igt_fixture(void) -- 2.4.3 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx