28 #ifdef HAVE_CLOCK_GET_TIME 29 #include <mach/mach.h> 31 #include <mach/clock.h> 34 #define _MHD_INVALID_CLOCK_SERV ((clock_serv_t) -2) 36 static clock_serv_t mono_clock_service = _MHD_INVALID_CLOCK_SERV;
39 #ifdef HAVE_CLOCK_GETTIME 41 #define _MHD_UNWANTED_CLOCK CLOCK_REALTIME 43 #define _MHD_UNWANTED_CLOCK ((clockid_t) -2) 46 static clockid_t mono_clock_id = _MHD_UNWANTED_CLOCK;
53 static hrtime_t hrtime_start;
56 #if _WIN32_WINNT >= 0x0600 57 static uint64_t tick_start;
59 static int64_t perf_freq;
60 static int64_t perf_start;
108 #ifdef HAVE_CLOCK_GET_TIME 109 mach_timespec_t cur_time;
112 #ifdef HAVE_CLOCK_GETTIME 115 mono_clock_id = _MHD_UNWANTED_CLOCK;
117 #ifdef HAVE_CLOCK_GET_TIME 118 mono_clock_service = _MHD_INVALID_CLOCK_SERV;
124 #ifdef HAVE_CLOCK_GETTIME 125 #ifdef CLOCK_MONOTONIC_COARSE 129 if (0 == clock_gettime (CLOCK_MONOTONIC_COARSE, &ts))
131 mono_clock_id = CLOCK_MONOTONIC_COARSE;
136 #ifdef CLOCK_MONOTONIC_FAST 139 if (0 == clock_gettime (CLOCK_MONOTONIC_FAST, &ts))
141 mono_clock_id = CLOCK_MONOTONIC_FAST;
146 #ifdef CLOCK_MONOTONIC_RAW 149 if (0 == clock_gettime (CLOCK_MONOTONIC_RAW , &ts))
151 mono_clock_id = CLOCK_MONOTONIC_RAW;
156 #ifdef CLOCK_BOOTTIME 160 if (0 == clock_gettime(CLOCK_BOOTTIME, &ts))
162 mono_clock_id = CLOCK_BOOTTIME;
167 #ifdef CLOCK_MONOTONIC 171 if (0 == clock_gettime(CLOCK_MONOTONIC, &ts))
173 mono_clock_id = CLOCK_MONOTONIC;
179 #ifdef HAVE_CLOCK_GET_TIME 183 if (KERN_SUCCESS == host_get_clock_service(mach_host_self(), SYSTEM_CLOCK, &mono_clock_service) &&
184 KERN_SUCCESS == clock_get_time(mono_clock_service, &cur_time))
191 #if _WIN32_WINNT >= 0x0600 196 tick_start = GetTickCount64();
204 LARGE_INTEGER freq, perf_counter;
205 QueryPerformanceFrequency(&freq);
206 QueryPerformanceCounter(&perf_counter);
207 perf_freq = freq.QuadPart;
208 perf_start = perf_counter.QuadPart;
213 #ifdef HAVE_CLOCK_GETTIME 217 if (0 == clock_gettime (CLOCK_HIGHRES, &ts))
219 mono_clock_id = CLOCK_HIGHRES;
225 #ifdef HAVE_GETHRTIME 230 hrtime_start = gethrtime();
239 #ifdef HAVE_CLOCK_GET_TIME 241 (_MHD_INVALID_CLOCK_SERV != mono_clock_service) )
244 mach_port_deallocate (mach_task_self(), mono_clock_service);
245 mono_clock_service = _MHD_INVALID_CLOCK_SERV;
248 (void) mono_clock_source;
261 #ifdef HAVE_CLOCK_GET_TIME 262 if (_MHD_INVALID_CLOCK_SERV != mono_clock_service)
264 mach_port_deallocate(mach_task_self(), mono_clock_service);
265 mono_clock_service = _MHD_INVALID_CLOCK_SERV;
280 #ifdef HAVE_CLOCK_GETTIME 283 if (_MHD_UNWANTED_CLOCK != mono_clock_id &&
284 0 == clock_gettime (mono_clock_id , &ts))
287 #ifdef HAVE_CLOCK_GET_TIME 288 if (_MHD_INVALID_CLOCK_SERV != mono_clock_service)
290 mach_timespec_t cur_time;
291 if (KERN_SUCCESS == clock_get_time(mono_clock_service, &cur_time))
296 #if _WIN32_WINNT >= 0x0600 298 return (time_t)(((uint64_t)(GetTickCount64() - tick_start)) / 1000);
302 LARGE_INTEGER perf_counter;
303 QueryPerformanceCounter(&perf_counter);
304 return (time_t)(((uint64_t)(perf_counter.QuadPart - perf_start)) / perf_freq);
308 #ifdef HAVE_GETHRTIME 310 return (time_t)(((uint64_t)(gethrtime() - hrtime_start)) / 1000000000);
static time_t sys_clock_start
void MHD_monotonic_sec_counter_init(void)
internal monotonic clock functions implementations
static time_t mono_clock_start
time_t MHD_monotonic_sec_counter(void)
void MHD_monotonic_sec_counter_finish(void)