diff options
author | Victor Stinner <vstinner@python.org> | 2020-11-16 12:21:45 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-16 12:21:45 (GMT) |
commit | 3df5c68487df9d1d20ab0cd06e7942a4f96d40a4 (patch) | |
tree | b62821ad59b1e84f207d962d593bcb2ca73cf588 /Python/pytime.c | |
parent | aa01011003bb855cd52abfd49f2443446590d913 (diff) | |
download | cpython-3df5c68487df9d1d20ab0cd06e7942a4f96d40a4.zip cpython-3df5c68487df9d1d20ab0cd06e7942a4f96d40a4.tar.gz cpython-3df5c68487df9d1d20ab0cd06e7942a4f96d40a4.tar.bz2 |
bpo-37205: time.perf_counter() and time.monotonic() are system-wide (GH-23284)
time.perf_counter() on Windows and time.monotonic() on macOS are now
system-wide. Previously, they used an offset computed at startup to
reduce the precision loss caused by the float type. Use
time.perf_counter_ns() and time.monotonic_ns() added in Python 3.7 to
avoid this precision loss.
Diffstat (limited to 'Python/pytime.c')
-rw-r--r-- | Python/pytime.c | 16 |
1 files changed, 2 insertions, 14 deletions
diff --git a/Python/pytime.c b/Python/pytime.c index 89d63e0..179bced 100644 --- a/Python/pytime.c +++ b/Python/pytime.c @@ -6,7 +6,7 @@ #if defined(__APPLE__) #include <mach/mach_time.h> /* mach_absolute_time(), mach_timebase_info() */ -#if defined(__APPLE__) && defined(__has_builtin) +#if defined(__APPLE__) && defined(__has_builtin) # if __has_builtin(__builtin_available) # define HAVE_CLOCK_GETTIME_RUNTIME __builtin_available(macOS 10.12, iOS 10.0, tvOS 10.0, watchOS 3.0, *) # endif @@ -730,7 +730,7 @@ pygettimeofday(_PyTime_t *tp, _Py_clock_info_t *info, int raise) } #ifdef HAVE_CLOCK_GETTIME_RUNTIME - } else { + } else { #endif #endif @@ -822,7 +822,6 @@ pymonotonic(_PyTime_t *tp, _Py_clock_info_t *info, int raise) #elif defined(__APPLE__) static mach_timebase_info_data_t timebase; - static uint64_t t0 = 0; uint64_t ticks; if (timebase.denom == 0) { @@ -859,8 +858,6 @@ pymonotonic(_PyTime_t *tp, _Py_clock_info_t *info, int raise) "mach_timebase_info is too large"); return -1; } - - t0 = mach_absolute_time(); } if (info) { @@ -871,9 +868,6 @@ pymonotonic(_PyTime_t *tp, _Py_clock_info_t *info, int raise) } ticks = mach_absolute_time(); - /* Use a "time zero" to reduce precision loss when converting time - to floatting point number, as in time.monotonic(). */ - ticks -= t0; *tp = _PyTime_MulDiv(ticks, (_PyTime_t)timebase.numer, (_PyTime_t)timebase.denom); @@ -960,7 +954,6 @@ static int win_perf_counter(_PyTime_t *tp, _Py_clock_info_t *info) { static LONGLONG frequency = 0; - static LONGLONG t0 = 0; LARGE_INTEGER now; LONGLONG ticksll; _PyTime_t ticks; @@ -1000,7 +993,6 @@ win_perf_counter(_PyTime_t *tp, _Py_clock_info_t *info) } QueryPerformanceCounter(&now); - t0 = now.QuadPart; } if (info) { @@ -1013,10 +1005,6 @@ win_perf_counter(_PyTime_t *tp, _Py_clock_info_t *info) QueryPerformanceCounter(&now); ticksll = now.QuadPart; - /* Use a "time zero" to reduce precision loss when converting time - to floatting point number, as in time.perf_counter(). */ - ticksll -= t0; - /* Make sure that casting LONGLONG to _PyTime_t cannot overflow, both types are signed */ Py_BUILD_ASSERT(sizeof(ticksll) <= sizeof(ticks)); |