From a39a83665f07a0819a31ee2d1ab60210a67c47a2 Mon Sep 17 00:00:00 2001 From: Maarten Bosmans Date: Tue, 18 Jan 2011 11:26:57 +0100 Subject: win32: Implement rtclock based on QueryPerformanceCounter Also remove some unnecessary headers. --- src/pulsecore/core-rtclock.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'src/pulsecore/core-rtclock.c') diff --git a/src/pulsecore/core-rtclock.c b/src/pulsecore/core-rtclock.c index a69b466f..ac2c097a 100644 --- a/src/pulsecore/core-rtclock.c +++ b/src/pulsecore/core-rtclock.c @@ -40,12 +40,20 @@ #include #endif +#ifdef HAVE_WINDOWS_H +#include +#endif + #include #include #include #include "core-rtclock.h" +#ifdef OS_IS_WIN32 +static int64_t counter_freq = 0; +#endif + pa_usec_t pa_rtclock_age(const struct timeval *tv) { struct timeval now; pa_assert(tv); @@ -88,6 +96,17 @@ struct timeval *pa_rtclock_get(struct timeval *tv) { tv->tv_usec = ts.tv_nsec / PA_NSEC_PER_USEC; return tv; +#elif defined(OS_IS_WIN32) + if (counter_freq > 0) { + LARGE_INTEGER count; + + pa_assert_se(QueryPerformanceCounter(&count)); + + tv->tv_sec = count.QuadPart / counter_freq; + tv->tv_usec = (count.QuadPart % counter_freq) * PA_USEC_PER_SEC / counter_freq; + + return tv; + } #endif /* HAVE_CLOCK_GETTIME */ return pa_gettimeofday(tv); @@ -118,6 +137,11 @@ pa_bool_t pa_rtclock_hrtimer(void) { pa_assert_se(clock_getres(CLOCK_REALTIME, &ts) == 0); return ts.tv_sec == 0 && ts.tv_nsec <= (long) (PA_HRTIMER_THRESHOLD_USEC*PA_NSEC_PER_USEC); +#elif defined(OS_IS_WIN32) + + if (counter_freq > 0) + return counter_freq >= (int64_t) (PA_USEC_PER_SEC/PA_HRTIMER_THRESHOLD_USEC); + #endif /* HAVE_CLOCK_GETTIME */ return FALSE; @@ -148,6 +172,12 @@ void pa_rtclock_hrtimer_enable(void) { } } +#elif defined(OS_IS_WIN32) + LARGE_INTEGER freq; + + pa_assert_se(QueryPerformanceFrequency(&freq)); + counter_freq = freq.QuadPart; + #endif } -- cgit