# HG changeset patch # User Boris Feld # Date 1542668107 0 # Node ID 9d88ae5c635bac9477dea745da299fb306e87d40 # Parent 20d2fd6036edef85639ebbfc0d6123989182b2ad perf: add a `setup` argument to run code outside of the timed section With this new argument, it is possible to perform special setup and cleanup outside of code actually timed. This is useful to provide more accurate benchmark. diff -r 20d2fd6036ed -r 9d88ae5c635b contrib/perf.py --- a/contrib/perf.py Mon Nov 19 23:02:29 2018 +0000 +++ b/contrib/perf.py Mon Nov 19 22:55:07 2018 +0000 @@ -275,7 +275,7 @@ displayall = ui.configbool(b"perf", b"all-timing", False) return functools.partial(_timer, fm, displayall=displayall), fm -def stub_timer(fm, func, title=None): +def stub_timer(fm, func, setup=None, title=None): func() @contextlib.contextmanager @@ -289,12 +289,14 @@ a, b = ostart, ostop r.append((cstop - cstart, b[0] - a[0], b[1]-a[1])) -def _timer(fm, func, title=None, displayall=False): +def _timer(fm, func, setup=None, title=None, displayall=False): gc.collect() results = [] begin = util.timer() count = 0 while True: + if setup is not None: + setup() with timeone() as item: r = func() count += 1