[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