libs = []
if env['platform'] in ('darwin', 'freebsd', 'linux', 'posix', 'sunos'):
libs += ['m', 'pthread', 'dl']
- if env['platform'] in 'linux':
+ if env['platform'] in ('linux',):
libs += ['rt']
env.Append(LIBS = libs)
int64_t
-os_time_get(void)
+os_time_get_nano(void)
{
-#if defined(PIPE_OS_UNIX)
+#if defined(PIPE_OS_LINUX)
+
+ struct timespec tv;
+ clock_gettime(CLOCK_MONOTONIC, &tv);
+ return tv.tv_nsec + tv.tv_sec*INT64_C(1000000000);
+
+#elif defined(PIPE_OS_UNIX)
struct timeval tv;
gettimeofday(&tv, NULL);
- return tv.tv_usec + tv.tv_sec*1000000LL;
+ return tv.tv_usec*INT64_C(1000) + tv.tv_sec*INT64_C(1000000000);
#elif defined(PIPE_SUBSYSTEM_WINDOWS_USER)
if(!frequency.QuadPart)
QueryPerformanceFrequency(&frequency);
QueryPerformanceCounter(&counter);
- return counter.QuadPart*INT64_C(1000000)/frequency.QuadPart;
-
-#endif
-}
+ return counter.QuadPart*INT64_C(1000000000)/frequency.QuadPart;
+#else
-uint64_t
-os_time_get_nano(void)
-{
-#if defined(PIPE_OS_UNIX)
- struct timespec tv;
- clock_gettime(CLOCK_REALTIME, &tv);
- return tv.tv_nsec + tv.tv_sec * 1000000000LL;
+#error Unsupported OS
-#elif defined(PIPE_SUBSYSTEM_WINDOWS_USER)
- return os_time_get() * 1000;
#endif
}
/*
- * Get the current time in microseconds from an unknown base.
+ * Get the current time in nanoseconds from an unknown base.
*/
int64_t
-os_time_get(void);
+os_time_get_nano(void);
/*
- * Get the current time in nanoseconds from an unknown base.
+ * Get the current time in microseconds from an unknown base.
*/
-uint64_t
-os_time_get_nano(void);
+static INLINE int64_t
+os_time_get(void) {
+ return os_time_get_nano() * 1000;
+}
/*