From a8ec5ea923c86415835ddecae795071804dca69d Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 13 Mar 2012 00:25:42 +0100 Subject: Issue #14104: Implement time.monotonic() on Mac OS X, patch written by Nicholas Riley. --- Misc/NEWS | 3 +++ Modules/timemodule.c | 18 +++++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/Misc/NEWS b/Misc/NEWS index 5cf2e7e..3fe824f 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -24,6 +24,9 @@ Core and Builtins Library ------- +- Issue #14104: Implement time.monotonic() on Mac OS X, patch written by + Nicholas Riley. + - Issue #13394: the aifc module now uses warnings.warn() to signal warnings. - Issue #14252: Fix subprocess.Popen.terminate() to not raise an error under diff --git a/Modules/timemodule.c b/Modules/timemodule.c index 59fe3ee..6ebd3ef 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -40,6 +40,10 @@ #include #endif +#if defined(__APPLE__) +#include +#endif + /* Forward declarations */ static int floatsleep(double); static double floattime(void); @@ -816,7 +820,8 @@ of the returned value is undefined so only the difference of consecutive\n\ calls is valid."); #if (defined(MS_WINDOWS) && !defined(__BORLANDC__)) \ - || (defined(HAVE_CLOCK_GETTIME) && defined(CLOCK_MONOTONIC)) + || (defined(HAVE_CLOCK_GETTIME) && defined(CLOCK_MONOTONIC)) \ + || (defined(__APPLE__)) # define HAVE_PYTIME_MONOTONIC #endif @@ -826,6 +831,17 @@ time_monotonic(PyObject *self, PyObject *unused) { #if defined(MS_WINDOWS) && !defined(__BORLANDC__) return win32_clock(0); +#elif defined(__APPLE__) + uint64_t time = mach_absolute_time(); + double secs; + + static mach_timebase_info_data_t timebase; + if (timebase.denom == 0) + mach_timebase_info(&timebase); + + secs = (double)time * timebase.numer / timebase.denom * 1e-9; + + return PyFloat_FromDouble(secs); #else static int clk_index = 0; clockid_t clk_ids[] = { -- cgit v0.12