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;
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;
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;
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))
374 return (time_t) (((uint64_t) (gethrtime () - hrtime_start)) / 1000000000);