aboutsummaryrefslogtreecommitdiffstats
path: root/Alc
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2011-06-12 05:04:36 -0700
committerChris Robinson <[email protected]>2011-06-12 05:04:36 -0700
commit39088b203552219d5e481ceac6606db530bc2509 (patch)
treed84488e3ce783c208ed35857decefc521deaf10c /Alc
parent8db05b8c17cd0ae72d87a475bdda506ec606bff6 (diff)
Uninline the timeGetTime wrapper
Diffstat (limited to 'Alc')
-rw-r--r--Alc/ALc.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/Alc/ALc.c b/Alc/ALc.c
index fb8cabd0..e4faf4d3 100644
--- a/Alc/ALc.c
+++ b/Alc/ALc.c
@@ -1069,6 +1069,40 @@ void LeaveCriticalSection(CRITICAL_SECTION *cs)
ret = pthread_mutex_unlock(cs);
assert(ret == 0);
}
+
+/* NOTE: This wrapper isn't quite accurate as it returns an ALuint, as opposed
+ * to the expected DWORD. Both are defined as unsigned 32-bit types, however.
+ * Additionally, Win32 is supposed to measure the time since Windows started,
+ * as opposed to the actual time. */
+ALuint timeGetTime(void)
+{
+#if _POSIX_TIMERS > 0
+ struct timespec ts;
+ int ret = -1;
+
+#if defined(_POSIX_MONOTONIC_CLOCK) && (_POSIX_MONOTONIC_CLOCK >= 0)
+#if _POSIX_MONOTONIC_CLOCK == 0
+ static int hasmono = 0;
+ if(hasmono > 0 || (hasmono == 0 &&
+ (hasmono=sysconf(_SC_MONOTONIC_CLOCK)) > 0))
+#endif
+ ret = clock_gettime(CLOCK_MONOTONIC, &ts);
+#endif
+ if(ret != 0)
+ ret = clock_gettime(CLOCK_REALTIME, &ts);
+ assert(ret == 0);
+
+ return ts.tv_nsec/1000000 + ts.tv_sec*1000;
+#else
+ struct timeval tv;
+ int ret;
+
+ ret = gettimeofday(&tv, NULL);
+ assert(ret == 0);
+
+ return tv.tv_usec/1000 + tv.tv_sec*1000;
+#endif
+}
#endif
#if defined(_WIN32)