[Piglit] [PATCH 08/12] ext_timer_query: use piglit_time_get_nano

Emil Velikov emil.l.velikov at gmail.com
Sat Nov 22 14:40:30 PST 2014


The above uses clock_gettime(CLOCK_MONOTONIC) (when available) rather
than gettimeofday(). The former has greather precision and could help
with the inconsintent results that people are getting.

Signed-off-by: Emil Velikov <emil.l.velikov at gmail.com>
---
 tests/spec/ext_timer_query/time-elapsed.c | 60 +++----------------------------
 1 file changed, 4 insertions(+), 56 deletions(-)

diff --git a/tests/spec/ext_timer_query/time-elapsed.c b/tests/spec/ext_timer_query/time-elapsed.c
index 885f875..3085c67 100644
--- a/tests/spec/ext_timer_query/time-elapsed.c
+++ b/tests/spec/ext_timer_query/time-elapsed.c
@@ -29,10 +29,6 @@
  * Test TIME_ELAPSED and TIMESTAMP queries.
  */
 
-#if !defined(_WIN32) && !defined(WIN32)
-#include <sys/time.h>
-#endif
-
 PIGLIT_GL_TEST_CONFIG_BEGIN
 
 	config.supports_gl_compat_version = 10;
@@ -86,62 +82,14 @@ GLuint prog;
 GLint iters_loc;
 
 static float
-get_time(void)
-{
-	static bool inited = false;
-
-#if defined(_WIN32) || defined(WIN32)
-	static LARGE_INTEGER frequency;
-	LARGE_INTEGER counter;
-	static GLint64 base_usec = 0;
-	GLint64 usec;
-	
-	if(!frequency.QuadPart)
-		QueryPerformanceFrequency(&frequency);
-	QueryPerformanceCounter(&counter);
-	
-	usec = (GLint64)(counter.QuadPart * INT64_C(1000000)/frequency.QuadPart);
-	
-	/* Return a value that is roughly microseconds since program
-	 * startup, to avoid large usec reducing precision of the
-	 * return value.
-	 */
-	if (!inited) {
-		inited = true;
-		base_usec = usec;
-	}
-	usec -= base_usec;
-	
-	return (double)usec/1000000.0;
-#else
-	static time_t base_sec = 0;
-	struct timeval tv;
-
-	gettimeofday(&tv, NULL);
-
-	/* Return a value that is roughly seconds since program
-	 * startup, to avoid large tv_sec reducing precision of the
-	 * return value.
-	 */
-	if (!inited) {
-		inited = true;
-		base_sec = tv.tv_sec;
-	}
-	tv.tv_sec -= base_sec;
-
-	return (double)tv.tv_sec + tv.tv_usec / 1000000.0;
-#endif
-}
-
-static float
 draw(GLuint *q, int iters)
 {
-	float start_time, end_time;
+	int64_t start_time, end_time;
 
 	glUseProgram(prog);
 	glUniform1i(iters_loc, iters);
 
-	start_time = get_time();
+	start_time = piglit_time_get_nano();
 
 	if (test == TIMESTAMP) {
 		glQueryCounter(q[0], GL_TIMESTAMP);
@@ -160,9 +108,9 @@ draw(GLuint *q, int iters)
 	 */
 	glFinish();
 
-	end_time = get_time();
+	end_time = piglit_time_get_nano();
 
-	return end_time - start_time;
+	return (end_time - start_time)/ 1000.0 / 1000.0 / 1000.0;
 }
 
 static float
-- 
2.1.3



More information about the Piglit mailing list