# HG changeset patch # User Gregory Szorc # Date 1489454202 25200 # Node ID 8f5ed8fa39f8fe3bd33440315d1a905e974f002a # Parent ab3e9eab754f2c714004d8dfa01ec8611b930b39 perf: perform a garbage collection before each iteration Currently, no explicit garbage collection is performed when running the microbenchmarks in `hg perf`. I think this is wrong because garbage collection can have a significant impact on execution times. And, if gc is triggered via the default heuristics, it will fire effectively randomly during subsequent benchmark iterations due to variable amount of garbage left over from previous runs. Running a gc before invoking the measured function will help ensure state is more consistent across all iterations. diff -r ab3e9eab754f -r 8f5ed8fa39f8 contrib/perf.py --- a/contrib/perf.py Mon Mar 13 18:31:29 2017 -0700 +++ b/contrib/perf.py Mon Mar 13 18:16:42 2017 -0700 @@ -20,6 +20,7 @@ from __future__ import absolute_import import functools +import gc import os import random import sys @@ -189,6 +190,7 @@ func() def _timer(fm, func, title=None): + gc.collect() results = [] begin = util.timer() count = 0