[PATCH] D27429: [Chrono][Darwin] On Darwin use CLOCK_UPTIME_RAW instead of CLOCK_MONOTONIC
Duncan P. N. Exon Smith via cfe-commits
cfe-commits at lists.llvm.org
Mon Dec 5 16:20:42 PST 2016
>From a Darwin perspective, this LGTM (it's what we're shipping on macOS 10.12 and iOS 10).
Eric, do you have a good idea for how to test this?
> On 2016-Dec-05, at 14:36, Bruno Cardoso Lopes via Phabricator <reviews at reviews.llvm.org> wrote:
>
> bruno created this revision.
> bruno added reviewers: mclow.lists, dexonsmith, EricWF.
> bruno added a subscriber: cfe-commits.
>
> CLOCK_MONOTONIC is only defined on Darwin on libc versions >= 1133 and its behaviour differs from Linux. CLOCK_UPTIME on Darwin actually matches
> CLOCK_MONOTONIC on Linux, due to historical coincidence (Linux doesn't match POSIX here but Darwin does). Use CLOCK_UPTIME_RAW on Darwin since the _RAW version gives nanosecond precision and is lower overhead.
>
>
> https://reviews.llvm.org/D27429
>
> Files:
> src/chrono.cpp
>
>
> Index: src/chrono.cpp
> ===================================================================
> --- src/chrono.cpp
> +++ src/chrono.cpp
> @@ -75,8 +75,19 @@
> steady_clock::now() _NOEXCEPT
> {
> struct timespec tp;
> +#if defined(__APPLE__) && defined(CLOCK_UPTIME_RAW)
> + // CLOCK_MONOTONIC is only defined on Darwin on libc versions >= 1133 and
> + // its behaviour differs from Linux.
> + // CLOCK_UPTIME on Darwin actually matches CLOCK_MONOTONIC on Linux, due to
> + // historical coincidence (Linux doesn't match POSIX here but Darwin does).
> + // Use CLOCK_UPTIME_RAW on Darwin since the _RAW version gives nanosecond
> + // precision and is lower overhead.
> + if (0 != clock_gettime(CLOCK_UPTIME_RAW, &tp))
> + __throw_system_error(errno, "clock_gettime(CLOCK_UPTIME_RAW) failed");
> +#else
> if (0 != clock_gettime(CLOCK_MONOTONIC, &tp))
> __throw_system_error(errno, "clock_gettime(CLOCK_MONOTONIC) failed");
> +#endif
> return time_point(seconds(tp.tv_sec) + nanoseconds(tp.tv_nsec));
> }
>
>
>
> <D27429.80328.patch>
More information about the cfe-commits
mailing list