28 #ifdef HAVE_FEATURES_H
32 #ifdef HAVE_MACH_MACH_TIME_H
33 #include <mach/mach_time.h>
34 #include <mach/clock.h>
35 #include <mach/mach.h>
67 double delay_us = ((double)diff.tv_sec * 1000.0) + ((double)diff.tv_nsec / 1000000.0);
78 double delay_us = ((double)diff.tv_sec * 1000000.0) + ((double)diff.tv_nsec / 1000.0);
85 return _end.tv_sec - _start.tv_sec;
92 snprintf(buf, 32,
"%4.2f", value);
93 stream << std::string(buf);
95 stream << std::setiosflags(std::ios::fixed) << std::setprecision(2) << value;
102 struct timespec diff;
106 double delay_ms = (double)diff.tv_nsec / 1000000.0;
115 double seconds = (double)diff.tv_sec + (delay_ms / 1000.0);
117 if (diff.tv_sec >= 3600)
121 else if (diff.tv_sec >= 60)
135 if ((_end.tv_nsec - _start.tv_nsec) < 0)
137 diff.tv_sec = _end.tv_sec - _start.tv_sec - 1;
138 diff.tv_nsec = (1000000000 + _end.tv_nsec) - _start.tv_nsec;
142 diff.tv_sec = _end.tv_sec - _start.tv_sec;
143 diff.tv_nsec = _end.tv_nsec - _start.tv_nsec;
147 void TimeMeasurement::gettime(
struct timespec *ts)
149 #ifdef HAVE_MACH_MACH_TIME_H // OS X does not have clock_gettime, use clock_get_time
152 host_get_clock_service(mach_host_self(), REALTIME_CLOCK, &cclock);
153 clock_get_time(cclock, &mts);
154 mach_port_deallocate(mach_task_self(), cclock);
155 ts->tv_sec = mts.tv_sec;
156 ts->tv_nsec = mts.tv_nsec;
158 ::clock_gettime(CLOCK_MONOTONIC, ts);