Rather than assuming that piglit_get_microseconds() returns -1 when there is no monotonic timer, add explicit function to check.
Use it where needed, and break the above assumption. Signed-off-by: Emil Velikov <emil.l.veli...@gmail.com> --- tests/spec/glx_oml_sync_control/timing.c | 2 +- tests/util/piglit-util.c | 13 +++++++++++++ tests/util/piglit-util.h | 9 +++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/tests/spec/glx_oml_sync_control/timing.c b/tests/spec/glx_oml_sync_control/timing.c index a03e75e..7fbcf44 100644 --- a/tests/spec/glx_oml_sync_control/timing.c +++ b/tests/spec/glx_oml_sync_control/timing.c @@ -210,7 +210,7 @@ draw(Display *dpy) (new_ust - last_ust) / delta_msc); if (last_timestamp >= 0) { - if (new_timestamp < 0) { + if (!piglit_time_is_monotonic()) { fprintf(stderr, "no monotonic clock\n"); piglit_merge_result(&result, diff --git a/tests/util/piglit-util.c b/tests/util/piglit-util.c index c87678f..aa423d2 100644 --- a/tests/util/piglit-util.c +++ b/tests/util/piglit-util.c @@ -646,6 +646,19 @@ write_null: return size_written; } +bool +piglit_time_is_monotonic(void) +{ +#ifdef PIGLIT_HAS_POSIX_CLOCK_MONOTONIC + struct timespec t; + int r = clock_gettime(CLOCK_MONOTONIC, &t); + + return r == 0 || (r == -1 && errno != EINVAL); +#else + return false; +#endif +} + int64_t piglit_get_microseconds(void) { diff --git a/tests/util/piglit-util.h b/tests/util/piglit-util.h index 320dfde..3a02334 100755 --- a/tests/util/piglit-util.h +++ b/tests/util/piglit-util.h @@ -238,6 +238,15 @@ size_t piglit_join_paths(char buf[], size_t buf_size, int n, ...); /** + * \brief Whether piglit_time_get* return monotonically increasing time. + * + * Can be used to determine how accurate/reliable the time returned by the + * function(s) is. + */ +bool +piglit_time_is_monotonic(); + +/** * \brief Get a monotonically increasing time in microseconds * * This time can be used for relative time measurements. -- 2.1.3 _______________________________________________ Piglit mailing list Piglit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/piglit