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) || defined(HAVE_GETHRTIME) 80 static time_t mono_clock_start;
84 static hrtime_t hrtime_start;
87 #if _WIN32_WINNT >= 0x0600 88 static uint64_t tick_start;
90 static int64_t perf_freq;
91 static int64_t perf_start;
140 #ifdef HAVE_CLOCK_GET_TIME 141 mach_timespec_t cur_time;
144 #ifdef HAVE_CLOCK_GETTIME 147 mono_clock_id = _MHD_UNWANTED_CLOCK;
149 #ifdef HAVE_CLOCK_GET_TIME 150 mono_clock_service = _MHD_INVALID_CLOCK_SERV;
159 #ifdef HAVE_CLOCK_GETTIME 160 #ifdef CLOCK_MONOTONIC_COARSE 164 if (0 == clock_gettime (CLOCK_MONOTONIC_COARSE,
167 mono_clock_id = CLOCK_MONOTONIC_COARSE;
168 mono_clock_start = ts.tv_sec;
173 #ifdef CLOCK_MONOTONIC_FAST 176 if (0 == clock_gettime (CLOCK_MONOTONIC_FAST,
179 mono_clock_id = CLOCK_MONOTONIC_FAST;
180 mono_clock_start = ts.tv_sec;
185 #ifdef CLOCK_MONOTONIC_RAW 188 if (0 == clock_gettime (CLOCK_MONOTONIC_RAW,
191 mono_clock_id = CLOCK_MONOTONIC_RAW;
192 mono_clock_start = ts.tv_sec;
197 #ifdef CLOCK_BOOTTIME 201 if (0 == clock_gettime (CLOCK_BOOTTIME,
204 mono_clock_id = CLOCK_BOOTTIME;
205 mono_clock_start = ts.tv_sec;
210 #ifdef CLOCK_MONOTONIC 214 if (0 == clock_gettime (CLOCK_MONOTONIC,
217 mono_clock_id = CLOCK_MONOTONIC;
218 mono_clock_start = ts.tv_sec;
224 #ifdef HAVE_CLOCK_GET_TIME 228 if ( (KERN_SUCCESS == host_get_clock_service (mach_host_self(),
230 &mono_clock_service)) &&
231 (KERN_SUCCESS == clock_get_time (mono_clock_service,
234 mono_clock_start = cur_time.tv_sec;
240 #if _WIN32_WINNT >= 0x0600 245 tick_start = GetTickCount64 ();
255 LARGE_INTEGER perf_counter;
257 QueryPerformanceFrequency (&freq);
258 QueryPerformanceCounter (&perf_counter);
259 perf_freq = freq.QuadPart;
260 perf_start = perf_counter.QuadPart;
266 #ifdef HAVE_CLOCK_GETTIME 270 if (0 == clock_gettime (CLOCK_HIGHRES,
273 mono_clock_id = CLOCK_HIGHRES;
274 mono_clock_start = ts.tv_sec;
280 #ifdef HAVE_GETHRTIME 285 hrtime_start = gethrtime ();
295 #ifdef HAVE_CLOCK_GET_TIME 297 (_MHD_INVALID_CLOCK_SERV != mono_clock_service) )
300 mach_port_deallocate (mach_task_self(),
302 mono_clock_service = _MHD_INVALID_CLOCK_SERV;
305 (void) mono_clock_source;
318 #ifdef HAVE_CLOCK_GET_TIME 319 if (_MHD_INVALID_CLOCK_SERV != mono_clock_service)
321 mach_port_deallocate (mach_task_self(),
323 mono_clock_service = _MHD_INVALID_CLOCK_SERV;
339 #ifdef HAVE_CLOCK_GETTIME 342 if ( (_MHD_UNWANTED_CLOCK != mono_clock_id) &&
343 (0 == clock_gettime (mono_clock_id ,
345 return ts.tv_sec - mono_clock_start;
347 #ifdef HAVE_CLOCK_GET_TIME 348 if (_MHD_INVALID_CLOCK_SERV != mono_clock_service)
350 mach_timespec_t cur_time;
352 if (KERN_SUCCESS == clock_get_time(mono_clock_service,
354 return cur_time.tv_sec - mono_clock_start;
358 #if _WIN32_WINNT >= 0x0600 360 return (time_t)(((uint64_t)(GetTickCount64() - tick_start)) / 1000);
364 LARGE_INTEGER perf_counter;
366 QueryPerformanceCounter (&perf_counter);
367 return (time_t)(((uint64_t)(perf_counter.QuadPart - perf_start)) / perf_freq);
371 #ifdef HAVE_GETHRTIME 373 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
time_t MHD_monotonic_sec_counter(void)
void MHD_monotonic_sec_counter_finish(void)