perf: add a `setup` argument to run code outside of the timed section
authorBoris Feld <boris.feld@octobus.net>
Mon, 19 Nov 2018 22:55:07 +0000
changeset 40680 9d88ae5c635b
parent 40679 20d2fd6036ed
child 40681 c0a1686d9391
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.
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