34#define ZEND_HRTIME_PLATFORM_POSIX 0
35#define ZEND_HRTIME_PLATFORM_WINDOWS 0
36#define ZEND_HRTIME_PLATFORM_APPLE 0
37#define ZEND_HRTIME_PLATFORM_HPUX 0
38#define ZEND_HRTIME_PLATFORM_AIX 0
40#if defined(_POSIX_TIMERS) && ((_POSIX_TIMERS > 0) || defined(__OpenBSD__)) && defined(_POSIX_MONOTONIC_CLOCK) && defined(CLOCK_MONOTONIC)
41# undef ZEND_HRTIME_PLATFORM_POSIX
42# define ZEND_HRTIME_PLATFORM_POSIX 1
43#elif defined(_WIN32) || defined(_WIN64)
44# undef ZEND_HRTIME_PLATFORM_WINDOWS
45# define ZEND_HRTIME_PLATFORM_WINDOWS 1
46#elif defined(__APPLE__)
47# undef ZEND_HRTIME_PLATFORM_APPLE
48# define ZEND_HRTIME_PLATFORM_APPLE 1
49#elif (defined(__hpux) || defined(hpux)) || ((defined(__sun__) || defined(__sun) || defined(sun)) && (defined(__SVR4) || defined(__svr4__)))
50# undef ZEND_HRTIME_PLATFORM_HPUX
51# define ZEND_HRTIME_PLATFORM_HPUX 1
53# undef ZEND_HRTIME_PLATFORM_AIX
54# define ZEND_HRTIME_PLATFORM_AIX 1
57#define ZEND_HRTIME_AVAILABLE (ZEND_HRTIME_PLATFORM_POSIX || ZEND_HRTIME_PLATFORM_WINDOWS || ZEND_HRTIME_PLATFORM_APPLE || ZEND_HRTIME_PLATFORM_HPUX || ZEND_HRTIME_PLATFORM_AIX)
61#if ZEND_HRTIME_PLATFORM_WINDOWS
63ZEND_API extern double zend_hrtime_timer_scale;
65#elif ZEND_HRTIME_PLATFORM_APPLE
67# include <mach/mach_time.h>
69ZEND_API extern mach_timebase_info_data_t zend_hrtime_timerlib_info;
73#define ZEND_NANO_IN_SEC UINT64_C(1000000000)
81#if ZEND_HRTIME_PLATFORM_WINDOWS
82 LARGE_INTEGER lt = {0};
83 QueryPerformanceCounter(<);
85#elif ZEND_HRTIME_PLATFORM_APPLE
86 return (
zend_hrtime_t)mach_absolute_time() * zend_hrtime_timerlib_info.numer / zend_hrtime_timerlib_info.denom;
87#elif ZEND_HRTIME_PLATFORM_POSIX
88 struct timespec ts = { .tv_sec = 0, .tv_nsec = 0 };
89 if (
EXPECTED(0 == clock_gettime(CLOCK_MONOTONIC, &ts))) {
93#elif ZEND_HRTIME_PLATFORM_HPUX
95#elif ZEND_HRTIME_PLATFORM_AIX
97 read_wall_time(&t, TIMEBASE_SZ);
98 time_base_to_time(&t, TIMEBASE_SZ);
void zend_startup_hrtime(void)
#define EXPECTED(condition)
#define zend_always_inline