27#if defined(XRT_OS_OSX)
30#include <mach/mach_time.h>
31#define XRT_HAVE_TIMESPEC
32#define XRT_HAVE_TIMEVAL
34#elif defined(XRT_OS_LINUX)
37#define XRT_HAVE_TIMESPEC
38#define XRT_HAVE_TIMEVAL
40#elif defined(XRT_OS_WINDOWS)
41#if defined(XRT_ENV_MINGW)
45#define byte win_byte_override
52#define XRT_HAVE_TIMESPEC
54#elif defined(XRT_DOXYGEN)
56#define XRT_HAVE_TIMESPEC
57#define XRT_HAVE_TIMEVAL
60#error "No time support on non-Linux platforms yet."
137#if defined(XRT_HAVE_TIMESPEC) || defined(XRT_DOXYGEN)
158#if defined(XRT_HAVE_TIMEVAL) || defined(XRT_DOXYGEN)
167#if defined(XRT_OS_LINUX) || defined(XRT_OS_OSX) || defined(XRT_DOXYGEN)
177#if defined(XRT_OS_WINDOWS)
187#if defined(XRT_OS_WINDOWS) || defined(XRT_DOXYGEN)
206#if defined(XRT_OS_LINUX) || defined(XRT_OS_OSX)
207 struct timespec spec;
210 nanosleep(&spec, NULL);
211#elif defined(XRT_OS_WINDOWS)
220#if defined(XRT_OS_WINDOWS)
230#if defined(XRT_OS_WINDOWS)
231 ops->timer = CreateWaitableTimer(NULL, TRUE, NULL);
238#if defined(XRT_OS_WINDOWS)
240 CloseHandle(ops->timer);
249#if defined(XRT_OS_WINDOWS)
252 LARGE_INTEGER timeperiod;
253 timeperiod.QuadPart = -(nsec / 100);
254 if (SetWaitableTimer(ops->timer, &timeperiod, 0, NULL, NULL, FALSE)) {
256 WaitForSingleObject(ops->timer, INFINITE);
266#if defined(XRT_OS_WINDOWS)
271#if defined(XRT_HAVE_TIMESPEC)
277 ns += (int64_t)spec->tv_nsec;
289#define OS_NS_PER_USEC (1000)
291#if defined(XRT_HAVE_TIMEVAL) && defined(XRT_OS_LINUX)
298 ns += (int64_t)val->tv_usec * OS_NS_PER_USEC;
303#if defined(XRT_OS_WINDOWS)
307 static int64_t ns_per_qpc_tick = 0;
308 if (ns_per_qpc_tick == 0) {
311 QueryPerformanceFrequency(&freq);
314 return ns_per_qpc_tick;
321#if defined(XRT_OS_LINUX) || defined(XRT_OS_OSX)
323 int ret = clock_gettime(CLOCK_MONOTONIC, &ts);
329#elif defined(XRT_OS_WINDOWS)
331 QueryPerformanceCounter(&qpc);
338#if defined(XRT_OS_LINUX) || defined(XRT_OS_OSX)
343 int ret = clock_gettime(CLOCK_REALTIME, &ts);
350#elif defined(XRT_OS_WINDOWS)
353#error "need port or decide not to implement"
static int64_t os_ns_per_qpc_tick_get(void)
Return a qpc freq in nanoseconds.
static int64_t os_monotonic_get_ns(void)
Return a monotonic clock in nanoseconds.
Definition: os_time.h:319
static void os_nanosleep(int64_t nsec)
Sleep the given number of nanoseconds.
Definition: os_time.h:204
Definition: os_time.h:219
static void os_precise_sleeper_deinit(struct os_precise_sleeper *ops)
De-initialize members of os_precise_sleeper, and free resources, without actually freeing the given p...
Definition: os_time.h:236
static void os_precise_sleeper_init(struct os_precise_sleeper *ops)
Initialize members of os_precise_sleeper.
Definition: os_time.h:228
static void os_precise_sleeper_nanosleep(struct os_precise_sleeper *ops, int32_t nsec)
Sleep the given number of nanoseconds, trying harder to be precise.
Definition: os_time.h:247
Time-keeping: a clock that is steady, convertible to system time, and ideally high-resolution.
#define U_1_000_000_000
Helper define to make code more readable.
Definition: u_time.h:39
#define U_TIME_1MS_IN_NS
The number of nanoseconds in a millisecond.
Definition: u_time.h:54
Header holding common defines.
Auto detect OS and certain features.