]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-41710: gc_collect_main() uses _PyTime_GetPerfCounter() (GH-28676)
authorVictor Stinner <vstinner@python.org>
Fri, 1 Oct 2021 11:29:00 +0000 (13:29 +0200)
committerGitHub <noreply@github.com>
Fri, 1 Oct 2021 11:29:00 +0000 (13:29 +0200)
If the DEBUG_STATS debug flag is set, gc_collect_main() now uses
_PyTime_GetPerfCounter() instead of _PyTime_GetMonotonicClock() to
measure the elapsed time.

On Windows, _PyTime_GetMonotonicClock() only has a resolution of 15.6
ms, whereas _PyTime_GetPerfCounter() is closer to a resolution of 100
ns.

Modules/gcmodule.c

index 2592c397cf2f7350c30bb222fccb675817f62660..7d1a45bcaeabf8c12482c6140244184b17ae488c 100644 (file)
@@ -1211,7 +1211,7 @@ gc_collect_main(PyThreadState *tstate, int generation,
     if (gcstate->debug & DEBUG_STATS) {
         PySys_WriteStderr("gc: collecting generation %d...\n", generation);
         show_stats_each_generations(gcstate);
-        t1 = _PyTime_GetMonotonicClock();
+        t1 = _PyTime_GetPerfCounter();
     }
 
     if (PyDTrace_GC_START_ENABLED())
@@ -1307,7 +1307,7 @@ gc_collect_main(PyThreadState *tstate, int generation,
             debug_cycle("uncollectable", FROM_GC(gc));
     }
     if (gcstate->debug & DEBUG_STATS) {
-        double d = _PyTime_AsSecondsDouble(_PyTime_GetMonotonicClock() - t1);
+        double d = _PyTime_AsSecondsDouble(_PyTime_GetPerfCounter() - t1);
         PySys_WriteStderr(
             "gc: done, %zd unreachable, %zd uncollectable, %.4fs elapsed\n",
             n+m, n, d);