[PATCH 1 of 8] perfrevflogwrite: clear revlog cache between each write
Boris Feld
boris.feld at octobus.net
Mon Dec 17 12:00:43 UTC 2018
# HG changeset patch
# User Boris Feld <boris.feld at octobus.net>
# Date 1545039442 -3600
# Mon Dec 17 10:37:22 2018 +0100
# Node ID bfc00ea63c21a3027537206c8c6fc39a22a71875
# Parent 2393c40442144eb96712e97b426990706cd94ef0
# EXP-Topic sparse-revlog-corner-cases
# Available At https://bitbucket.org/octobus/mercurial-devel/
# hg pull https://bitbucket.org/octobus/mercurial-devel/ -r bfc00ea63c21
perfrevflogwrite: clear revlog cache between each write
We want to measure write time from a cold cache (similar to commit). So we
need to clear the cache to prevent computation from rev N-1 to interfere with
rev N.
diff --git a/contrib/perf.py b/contrib/perf.py
--- a/contrib/perf.py
+++ b/contrib/perf.py
@@ -1722,6 +1722,7 @@ def perfrevlogrevisions(ui, repo, file_=
(b'', b'details', False, b'print timing for every revisions tested'),
(b'', b'source', b'full', b'the kind of data feed in the revlog'),
(b'', b'lazydeltabase', True, b'try the provided delta first'),
+ (b'', b'clear-caches', True, b'clear revlog cache between calls'),
],
b'-c|-m|FILE')
def perfrevlogwrite(ui, repo, file_=None, startrev=1000, stoprev=-1, **opts):
@@ -1746,6 +1747,7 @@ def perfrevlogwrite(ui, repo, file_=None
lazydeltabase = opts['lazydeltabase']
source = opts['source']
+ clearcaches = opts['clear_cache']
validsource = (b'full', b'parent-1', b'parent-2', b'parent-smallest',
b'storage')
if source not in validsource:
@@ -1758,7 +1760,8 @@ def perfrevlogwrite(ui, repo, file_=None
allresults = []
for c in range(count):
timing = _timeonewrite(ui, rl, source, startrev, stoprev, c + 1,
- lazydeltabase=lazydeltabase)
+ lazydeltabase=lazydeltabase,
+ clearcaches=clearcaches)
allresults.append(timing)
### consolidate the results in a single list
@@ -1825,7 +1828,7 @@ class _faketr(object):
return None
def _timeonewrite(ui, orig, source, startrev, stoprev, runidx=None,
- lazydeltabase=True):
+ lazydeltabase=True, clearcaches=True):
timings = []
tr = _faketr()
with _temprevlog(ui, orig, startrev) as dest:
@@ -1838,6 +1841,9 @@ def _timeonewrite(ui, orig, source, star
for idx, rev in enumerate(revs):
ui.progress(topic, idx, unit='revs', total=total)
addargs, addkwargs = _getrevisionseed(orig, rev, tr, source)
+ if clearcaches:
+ dest.index.clearcaches()
+ dest.clearcaches()
with timeone() as r:
dest.addrawrevision(*addargs, **addkwargs)
timings.append((rev, r[0]))
More information about the Mercurial-devel
mailing list