20 #if defined(_DEBUG) && defined(_WINDOWS)
21 #define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
29 #include <mach/mach_time.h>
35 timespec
subtract(
const timespec &lhs,
const timespec &rhs) {
36 timespec retval = lhs;
38 retval.tv_sec -= rhs.tv_sec;
40 if(retval.tv_nsec > rhs.tv_nsec)
41 retval.tv_nsec -= rhs.tv_nsec;
44 retval.tv_nsec = 1000000000 - (rhs.tv_nsec - retval.tv_nsec);
51 return ticks.tv_sec + ticks.tv_nsec / 1000000000.0;
55 return 1000000000.0 * ticks.tv_sec + ticks.tv_nsec;
59 timespec orwl_gettime(
void) {
60 static const double ORWL_NANO = +1.0e-9;
61 static const uint64_t ORWL_GIGA = 1000000000;
63 static double orwl_timebase = 0.0;
68 mach_timebase_info_data_t tb = {0, 0};
69 mach_timebase_info(&tb);
70 orwl_timebase = tb.numer;
71 orwl_timebase /= tb.denom;
72 orwl_timestart = mach_absolute_time();
76 double diff = (mach_absolute_time() - orwl_timestart) * orwl_timebase;
77 t.tv_sec = diff * ORWL_NANO;
78 t.tv_nsec = diff - (
t.tv_sec * ORWL_GIGA);
86 m_ticks_per_second(
get_Timer_HQ().get_ticks_per_second())
92 m_ticks_per_second(ticks_per_second)
98 m_ticks_per_second(
get_Timer_HQ().get_ticks_per_second())
110 : m_ticks_per_second(1000)
113 LARGE_INTEGER lpFrequency;
114 if(QueryPerformanceFrequency(&lpFrequency) == 0)
115 throw Timer_HQ_Init_Failure();
117 m_ticks_per_second =
unsigned long(lpFrequency.QuadPart);
119 m_ticks_per_second = 1000000000;
A High Quality Timer Singleton.
long double to_seconds(const timespec &ticks)
unsigned long long uint64_t
Timer_HQ & get_Timer_HQ()
Get access to the singleton.
long double to_useconds(const timespec &ticks)
A stoppable running timer.
timespec subtract(const timespec &lhs, const timespec &rhs)
Time_HQ()
Initialize to the current time.