[Python-checkins] cpython: Issue #22043: Simplify time.perf_counter() on Windows
victor.stinner
python-checkins at python.org
Fri Aug 29 16:58:35 CEST 2014
http://hg.python.org/cpython/rev/76bc15c918b1
changeset: 92266:76bc15c918b1
user: Victor Stinner <victor.stinner at gmail.com>
date: Fri Aug 29 16:51:33 2014 +0200
summary:
Issue #22043: Simplify time.perf_counter() on Windows
QueryPerformanceFrequency() cannot fail on Windows XP and later according to
its documentation: raise an exception on error and drop the fallback to the
system clock.
files:
Modules/timemodule.c | 46 +++++++++++--------------------
1 files changed, 16 insertions(+), 30 deletions(-)
diff --git a/Modules/timemodule.c b/Modules/timemodule.c
--- a/Modules/timemodule.c
+++ b/Modules/timemodule.c
@@ -96,8 +96,8 @@
#define WIN32_PERF_COUNTER
/* Win32 has better clock replacement; we have our own version, due to Mark
Hammond and Tim Peters */
-static int
-win_perf_counter(_Py_clock_info_t *info, PyObject **result)
+static PyObject*
+win_perf_counter(_Py_clock_info_t *info)
{
static LONGLONG cpu_frequency = 0;
static LONGLONG ctrStart;
@@ -109,10 +109,8 @@
QueryPerformanceCounter(&now);
ctrStart = now.QuadPart;
if (!QueryPerformanceFrequency(&freq) || freq.QuadPart == 0) {
- /* Unlikely to happen - this works on all intel
- machines at least! Revert to clock() */
- *result = NULL;
- return -1;
+ PyErr_SetFromWindowsErr(0);
+ return NULL;
}
cpu_frequency = freq.QuadPart;
}
@@ -124,8 +122,7 @@
info->monotonic = 1;
info->adjustable = 0;
}
- *result = PyFloat_FromDouble(diff / (double)cpu_frequency);
- return 0;
+ return PyFloat_FromDouble(diff / (double)cpu_frequency);
}
#endif
@@ -135,11 +132,10 @@
pyclock(_Py_clock_info_t *info)
{
#ifdef WIN32_PERF_COUNTER
- PyObject *res;
- if (win_perf_counter(info, &res) == 0)
- return res;
+ return win_perf_counter(info);
+#else
+ return floatclock(info);
#endif
- return floatclock(info);
}
static PyObject *
@@ -1036,35 +1032,25 @@
static PyObject*
perf_counter(_Py_clock_info_t *info)
{
-#if defined(WIN32_PERF_COUNTER) || defined(PYMONOTONIC)
- PyObject *res;
-#endif
-#if defined(WIN32_PERF_COUNTER)
- static int use_perf_counter = 1;
-#endif
+#ifdef WIN32_PERF_COUNTER
+ return win_perf_counter(info);
+#else
+
#ifdef PYMONOTONIC
static int use_monotonic = 1;
-#endif
-#ifdef WIN32_PERF_COUNTER
- if (use_perf_counter) {
- if (win_perf_counter(info, &res) == 0)
- return res;
- use_perf_counter = 0;
- }
-#endif
-
-#ifdef PYMONOTONIC
if (use_monotonic) {
- res = pymonotonic(info);
+ PyObject *res = pymonotonic(info);
if (res != NULL)
return res;
use_monotonic = 0;
PyErr_Clear();
}
+#else
+ return floattime(info);
#endif
- return floattime(info);
+#endif
}
static PyObject *
--
Repository URL: http://hg.python.org/cpython
More information about the Python-checkins
mailing list