[Mesa-dev] [PATCH] gallium/os: fixup os_time_get and os_time_get_nano
Dave Airlie
airlied at gmail.com
Tue Dec 4 00:30:25 PST 2012
So it appears MacOSX doesn't have clock_gettime, so workaround
that, and switch to using a consistent clock everywhere,
(CLOCK_MONOTONIC in case of non-MacOSX UNIX).
I'm sure there are more surprised lying in wait.
Signed-off-by: Dave Airlie <airlied at redhat.com>
---
src/gallium/auxiliary/os/os_time.c | 20 +++++++++++++++-----
1 file changed, 15 insertions(+), 5 deletions(-)
diff --git a/src/gallium/auxiliary/os/os_time.c b/src/gallium/auxiliary/os/os_time.c
index 4055125..d3fc805 100644
--- a/src/gallium/auxiliary/os/os_time.c
+++ b/src/gallium/auxiliary/os/os_time.c
@@ -46,11 +46,22 @@
#include "os_time.h"
+#if defined(PIPE_OS_UNIX) && !defined(PIPE_OS_APPLE)
+/* MacOSX doesn't have clock_gettime, not sure about other UNIX/HURD */
+#define HAVE_CLOCK_GETTIME 1
+#endif
+/*
+ * when we have clock_gettime use get nano to define time get,
+ * when we don't have it work vice-versa, should avoid extra
+ * conversions.
+ */
int64_t
os_time_get(void)
{
-#if defined(PIPE_OS_UNIX)
+#if defined(HAVE_CLOCK_GETTIME)
+ return os_time_get_nano() / 1000;
+#elif defined(PIPE_UNIX)
struct timeval tv;
gettimeofday(&tv, NULL);
@@ -72,12 +83,11 @@ os_time_get(void)
uint64_t
os_time_get_nano(void)
{
-#if defined(PIPE_OS_UNIX)
+#if defined(HAVE_CLOCK_GETTIME)
struct timespec tv;
- clock_gettime(CLOCK_REALTIME, &tv);
+ clock_gettime(CLOCK_MONOTONIC, &tv);
return tv.tv_nsec + tv.tv_sec * 1000000000LL;
-
-#elif defined(PIPE_SUBSYSTEM_WINDOWS_USER)
+#else
return os_time_get() * 1000;
#endif
}
--
1.7.11.7
More information about the mesa-dev
mailing list