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

Reply via email to