28 #if defined(_WIN32) && ! defined(__CYGWIN__) && defined(HAVE_CLOCK_GETTIME) 30 #undef HAVE_CLOCK_GETTIME 33 #ifdef HAVE_CLOCK_GETTIME 38 #ifdef HAVE_SYS_TIME_H 48 #ifdef HAVE_CLOCK_GET_TIME 49 #include <mach/mach.h> 51 #include <mach/clock.h> 54 #define _MHD_INVALID_CLOCK_SERV ((clock_serv_t) -2) 56 static clock_serv_t mono_clock_service = _MHD_INVALID_CLOCK_SERV;
60 #ifndef WIN32_LEAN_AND_MEAN 62 #define WIN32_LEAN_AND_MEAN 1 68 #ifdef HAVE_CLOCK_GETTIME 70 #define _MHD_UNWANTED_CLOCK CLOCK_REALTIME 72 #define _MHD_UNWANTED_CLOCK ((clockid_t) -2) 75 static clockid_t mono_clock_id = _MHD_UNWANTED_CLOCK;
79 #if defined(HAVE_CLOCK_GETTIME) || defined(HAVE_CLOCK_GET_TIME) || \ 80 defined(HAVE_GETHRTIME) 81 static time_t mono_clock_start;
85 static hrtime_t hrtime_start;
88 #if _WIN32_WINNT >= 0x0600 89 static uint64_t tick_start;
91 static int64_t perf_freq;
92 static int64_t perf_start;
141 #ifdef HAVE_CLOCK_GET_TIME 142 mach_timespec_t cur_time;
145 #ifdef HAVE_CLOCK_GETTIME 148 mono_clock_id = _MHD_UNWANTED_CLOCK;
150 #ifdef HAVE_CLOCK_GET_TIME 151 mono_clock_service = _MHD_INVALID_CLOCK_SERV;
160 #ifdef HAVE_CLOCK_GETTIME 161 #ifdef CLOCK_MONOTONIC_COARSE 165 if (0 == clock_gettime (CLOCK_MONOTONIC_COARSE,
168 mono_clock_id = CLOCK_MONOTONIC_COARSE;
169 mono_clock_start = ts.tv_sec;
174 #ifdef CLOCK_MONOTONIC_FAST 177 if (0 == clock_gettime (CLOCK_MONOTONIC_FAST,
180 mono_clock_id = CLOCK_MONOTONIC_FAST;
181 mono_clock_start = ts.tv_sec;
186 #ifdef CLOCK_MONOTONIC_RAW 189 if (0 == clock_gettime (CLOCK_MONOTONIC_RAW,
192 mono_clock_id = CLOCK_MONOTONIC_RAW;
193 mono_clock_start = ts.tv_sec;
198 #ifdef CLOCK_BOOTTIME 202 if (0 == clock_gettime (CLOCK_BOOTTIME,
205 mono_clock_id = CLOCK_BOOTTIME;
206 mono_clock_start = ts.tv_sec;
211 #ifdef CLOCK_MONOTONIC 215 if (0 == clock_gettime (CLOCK_MONOTONIC,
218 mono_clock_id = CLOCK_MONOTONIC;
219 mono_clock_start = ts.tv_sec;
225 #ifdef HAVE_CLOCK_GET_TIME 229 if ( (KERN_SUCCESS == host_get_clock_service (mach_host_self (),
231 &mono_clock_service)) &&
232 (KERN_SUCCESS == clock_get_time (mono_clock_service,
235 mono_clock_start = cur_time.tv_sec;
241 #if _WIN32_WINNT >= 0x0600 246 tick_start = GetTickCount64 ();
256 LARGE_INTEGER perf_counter;
258 QueryPerformanceFrequency (&freq);
259 QueryPerformanceCounter (&perf_counter);
260 perf_freq = freq.QuadPart;
261 perf_start = perf_counter.QuadPart;
267 #ifdef HAVE_CLOCK_GETTIME 271 if (0 == clock_gettime (CLOCK_HIGHRES,
274 mono_clock_id = CLOCK_HIGHRES;
275 mono_clock_start = ts.tv_sec;
281 #ifdef HAVE_GETHRTIME 286 hrtime_start = gethrtime ();
296 #ifdef HAVE_CLOCK_GET_TIME 298 (_MHD_INVALID_CLOCK_SERV != mono_clock_service) )
301 mach_port_deallocate (mach_task_self (),
303 mono_clock_service = _MHD_INVALID_CLOCK_SERV;
306 (void) mono_clock_source;
319 #ifdef HAVE_CLOCK_GET_TIME 320 if (_MHD_INVALID_CLOCK_SERV != mono_clock_service)
322 mach_port_deallocate (mach_task_self (),
324 mono_clock_service = _MHD_INVALID_CLOCK_SERV;
340 #ifdef HAVE_CLOCK_GETTIME 343 if ( (_MHD_UNWANTED_CLOCK != mono_clock_id) &&
344 (0 == clock_gettime (mono_clock_id,
346 return ts.tv_sec - mono_clock_start;
348 #ifdef HAVE_CLOCK_GET_TIME 349 if (_MHD_INVALID_CLOCK_SERV != mono_clock_service)
351 mach_timespec_t cur_time;
353 if (KERN_SUCCESS == clock_get_time (mono_clock_service,
355 return cur_time.tv_sec - mono_clock_start;
359 #if _WIN32_WINNT >= 0x0600 361 return (time_t) (((uint64_t) (GetTickCount64 () - tick_start)) / 1000);
365 LARGE_INTEGER perf_counter;
367 QueryPerformanceCounter (&perf_counter);
368 return (time_t) (((uint64_t) (perf_counter.QuadPart - perf_start))
373 #ifdef HAVE_GETHRTIME 375 return (time_t) (((uint64_t) (gethrtime () - hrtime_start)) / 1000000000);
internal monotonic clock functions implementations
time_t MHD_monotonic_sec_counter(void)
static time_t sys_clock_start
void MHD_monotonic_sec_counter_finish(void)
void MHD_monotonic_sec_counter_init(void)