#cmakedefine01 HAVE_INOTIFY
#cmakedefine01 HAVE_CLOCK_MONOTONIC
#cmakedefine01 HAVE_CLOCK_REALTIME
-#cmakedefine01 HAVE_MACH_ABSOLUTE_TIME
+#cmakedefine01 HAVE_CLOCK_GETTIME_NSEC_NP
#cmakedefine01 HAVE_TCP_H_TCPSTATE_ENUM
#cmakedefine01 HAVE_TCP_FSM_H
#cmakedefine01 HAVE_GSSFW_HEADERS
#include <fcntl.h>
#include <sys/time.h>
#include <sys/resource.h>
-#if HAVE_MACH_ABSOLUTE_TIME
-#include <mach/mach_time.h>
+#if HAVE_CLOCK_GETTIME_NSEC_NP
+#include <time.h>
#endif
enum
return result;
}
-// Gets the number of "ticks per second" of the underlying monotonic timer.
-//
-// On most Unix platforms, the methods that query the resolution return a value
-// that is "nanoseconds per tick" in which case we need to scale before returning.
-uint64_t SystemNative_GetTimestampResolution()
-{
-#if HAVE_MACH_ABSOLUTE_TIME
- mach_timebase_info_data_t mtid;
-
- if (mach_timebase_info(&mtid) != KERN_SUCCESS)
- {
- return 0;
- }
-
- // (numer / denom) gives you the nanoseconds per tick, so the below code
- // computes the number of ticks per second. We explicitly do the multiplication
- // first in order to help minimize the error that is produced by integer division.
-
- return (SecondsToNanoSeconds * (uint64_t)(mtid.denom)) / (uint64_t)(mtid.numer);
-#else
- // clock_gettime() returns a result in terms of nanoseconds rather than a count. This
- // means that we need to either always scale the result by the actual resolution (to
- // get a count) or we need to say the resolution is in terms of nanoseconds. We prefer
- // the latter since it allows the highest throughput and should minimize error propagated
- // to the user.
-
- return SecondsToNanoSeconds;
-#endif
-}
-
uint64_t SystemNative_GetTimestamp()
{
-#if HAVE_MACH_ABSOLUTE_TIME
- return mach_absolute_time();
+#if HAVE_CLOCK_GETTIME_NSEC_NP
+ return clock_gettime_nsec_np(CLOCK_UPTIME_RAW);
#else
struct timespec ts;
((uint64_t)(resUsage.ru_utime.tv_usec) * MicroSecondsToNanoSeconds);
}
- uint64_t resolution = SystemNative_GetTimestampResolution();
- uint64_t timestamp = SystemNative_GetTimestamp();
-
- uint64_t currentTime = (uint64_t)((double)timestamp * ((double)SecondsToNanoSeconds / (double)resolution));
+ uint64_t currentTime = SystemNative_GetTimestamp();
uint64_t lastRecordedCurrentTime = previousCpuInfo->lastRecordedCurrentTime;
uint64_t lastRecordedKernelTime = previousCpuInfo->lastRecordedKernelTime;