##// END OF EJS Templates
contrib/perf: perfparents handle filtered repos
contrib/perf: perfparents handle filtered repos

File last commit:

r27100:8d5dba93 default
r27100:8d5dba93 default
Show More
perf.py
584 lines | 16.8 KiB | text/x-python | PythonLexer
Matt Mackall
Add contrib/perf.py for performance testing
r7366 # perf.py - performance test routines
Dirkjan Ochtman
help: add/fix docstrings for a bunch of extensions
r8873 '''helper extension to measure performance'''
Matt Mackall
Add contrib/perf.py for performance testing
r7366
Simon Heimberg
cleanup: remove unused imports...
r19322 from mercurial import cmdutil, scmutil, util, commands, obsolete
timeless
contrib/perf: perfparents handle tiny repos...
r27099 from mercurial import repoview, branchmap, merge, copies, error
Matt Mackall
Add contrib/perf.py for performance testing
r7366 import time, os, sys
Pierre-Yves David
perf: use a formatter for output...
r23171 import functools
Matt Mackall
Add contrib/perf.py for performance testing
r7366
Pierre-Yves David
perf: support -T for every perf commands...
r25494 formatteropts = commands.formatteropts
Pierre-Yves David
perftest: migrate to new style command declaration...
r18237 cmdtable = {}
command = cmdutil.command(cmdtable)
Pierre-Yves David
perf: use a formatter for output...
r23171 def gettimer(ui, opts=None):
"""return a timer function and formatter: (timer, formatter)
This functions exist to gather the creation of formatter in a single
place instead of duplicating it in all performance command."""
Matt Mackall
perf: add a configurable sleep on startup...
r23788
# enforce an idle period before execution to counteract power management
Matt Mackall
perf: mark experimental option presleep
r25850 # experimental config: perf.presleep
Matt Mackall
perf: add a configurable sleep on startup...
r23788 time.sleep(ui.configint("perf", "presleep", 1))
Pierre-Yves David
perf: use a formatter for output...
r23171 if opts is None:
opts = {}
# redirect all to stderr
ui = ui.copy()
ui.fout = ui.ferr
# get a formatter
fm = ui.formatter('perf', opts)
return functools.partial(_timer, fm), fm
def _timer(fm, func, title=None):
Matt Mackall
Add contrib/perf.py for performance testing
r7366 results = []
begin = time.time()
count = 0
Martin Geisler
check-code: flag 0/1 used as constant Boolean expression
r14494 while True:
Matt Mackall
Add contrib/perf.py for performance testing
r7366 ostart = os.times()
cstart = time.time()
r = func()
cstop = time.time()
ostop = os.times()
count += 1
a, b = ostart, ostop
results.append((cstop - cstart, b[0] - a[0], b[1]-a[1]))
if cstop - begin > 3 and count >= 100:
break
if cstop - begin > 10 and count >= 3:
break
Pierre-Yves David
perf: use a formatter for output...
r23171
fm.startitem()
Patrick Mezard
contrib/perf: profile diff of working directory changes
r9826 if title:
Pierre-Yves David
perf: use a formatter for output...
r23171 fm.write('title', '! %s\n', title)
Matt Mackall
Add contrib/perf.py for performance testing
r7366 if r:
Pierre-Yves David
perf: use a formatter for output...
r23171 fm.write('result', '! result: %s\n', r)
Matt Mackall
Add contrib/perf.py for performance testing
r7366 m = min(results)
Pierre-Yves David
perf: use a formatter for output...
r23171 fm.plain('!')
fm.write('wall', ' wall %f', m[0])
fm.write('comb', ' comb %f', m[1] + m[2])
fm.write('user', ' user %f', m[1])
fm.write('sys', ' sys %f', m[2])
fm.write('count', ' (best of %d)', count)
fm.plain('\n')
Matt Mackall
Add contrib/perf.py for performance testing
r7366
Pierre-Yves David
perf: support -T for every perf commands...
r25494 @command('perfwalk', formatteropts)
def perfwalk(ui, repo, *pats, **opts):
timer, fm = gettimer(ui, opts)
Matt Mackall
Add contrib/perf.py for performance testing
r7366 try:
Matt Mackall
scmutil: switch match users to supplying contexts...
r14671 m = scmutil.match(repo[None], pats, {})
Augie Fackler
dirstate: don't check state of subrepo directories
r10176 timer(lambda: len(list(repo.dirstate.walk(m, [], True, False))))
Brodie Rao
cleanup: replace naked excepts with except Exception: ...
r16689 except Exception:
Matt Mackall
Add contrib/perf.py for performance testing
r7366 try:
Matt Mackall
scmutil: switch match users to supplying contexts...
r14671 m = scmutil.match(repo[None], pats, {})
Matt Mackall
many, many trivial check-code fixups
r10282 timer(lambda: len([b for a, b, c in repo.dirstate.statwalk([], m)]))
Brodie Rao
cleanup: replace naked excepts with except Exception: ...
r16689 except Exception:
Matt Mackall
Add contrib/perf.py for performance testing
r7366 timer(lambda: len(list(cmdutil.walk(repo, pats, {}))))
Pierre-Yves David
perf: use a formatter for output...
r23171 fm.end()
Matt Mackall
Add contrib/perf.py for performance testing
r7366
Pierre-Yves David
perf: support -T for every perf commands...
r25494 @command('perfannotate', formatteropts)
def perfannotate(ui, repo, f, **opts):
timer, fm = gettimer(ui, opts)
Durham Goode
annotate: simplify annotate parent function...
r19292 fc = repo['.'][f]
timer(lambda: len(fc.annotate(True)))
Pierre-Yves David
perf: use a formatter for output...
r23171 fm.end()
Durham Goode
annotate: simplify annotate parent function...
r19292
Pierre-Yves David
perftest: migrate to new style command declaration...
r18237 @command('perfstatus',
[('u', 'unknown', False,
Pierre-Yves David
perf: support -T for every perf commands...
r25494 'ask status to look for unknown files')] + formatteropts)
Siddharth Agarwal
perf: add option to perfstatus to get the status of unknown files...
r18033 def perfstatus(ui, repo, **opts):
Matt Mackall
Add contrib/perf.py for performance testing
r7366 #m = match.always(repo.root, repo.getcwd())
Brodie Rao
cleanup: eradicate long lines
r16683 #timer(lambda: sum(map(len, repo.dirstate.status(m, [], False, False,
# False))))
Matt Mackall
perf: un-bitrot perfstatus
r27017 timer, fm = gettimer(ui, opts)
Pierre-Yves David
perf: support -T for every perf commands...
r25494 timer(lambda: sum(map(len, repo.status(unknown=opts['unknown']))))
Pierre-Yves David
perf: use a formatter for output...
r23171 fm.end()
Matt Mackall
Add contrib/perf.py for performance testing
r7366
Pierre-Yves David
perf: support -T for every perf commands...
r25494 @command('perfaddremove', formatteropts)
def perfaddremove(ui, repo, **opts):
timer, fm = gettimer(ui, opts)
Siddharth Agarwal
perf: add a command to test addremove performance...
r18871 try:
oldquiet = repo.ui.quiet
repo.ui.quiet = True
Matt Harbison
scmutil: pass a matcher to scmutil.addremove() instead of a list of patterns...
r23533 matcher = scmutil.match(repo[None])
Matt Harbison
commit: propagate --addremove to subrepos if -S is specified (issue3759)...
r23537 timer(lambda: scmutil.addremove(repo, matcher, "", dry_run=True))
Siddharth Agarwal
perf: add a command to test addremove performance...
r18871 finally:
repo.ui.quiet = oldquiet
Pierre-Yves David
perf: use a formatter for output...
r23171 fm.end()
Siddharth Agarwal
perf: add a command to test addremove performance...
r18871
Bryan O'Sullivan
perf: rework perfheads and perftags to clear caches...
r16785 def clearcaches(cl):
# behave somewhat consistently across internal API changes
if util.safehasattr(cl, 'clearcaches'):
cl.clearcaches()
elif util.safehasattr(cl, '_nodecache'):
from mercurial.node import nullid, nullrev
cl._nodecache = {nullid: nullrev}
cl._nodepos = None
Pierre-Yves David
perf: support -T for every perf commands...
r25494 @command('perfheads', formatteropts)
def perfheads(ui, repo, **opts):
timer, fm = gettimer(ui, opts)
Bryan O'Sullivan
perf: rework perfheads and perftags to clear caches...
r16785 cl = repo.changelog
def d():
len(cl.headrevs())
clearcaches(cl)
timer(d)
Pierre-Yves David
perf: use a formatter for output...
r23171 fm.end()
Matt Mackall
Add contrib/perf.py for performance testing
r7366
Pierre-Yves David
perf: support -T for every perf commands...
r25494 @command('perftags', formatteropts)
def perftags(ui, repo, **opts):
Augie Fackler
perf: rearrange imports of changelong and manifest to appease check-code
r19786 import mercurial.changelog
import mercurial.manifest
Pierre-Yves David
perf: support -T for every perf commands...
r25494 timer, fm = gettimer(ui, opts)
Matt Mackall
Add contrib/perf.py for performance testing
r7366 def t():
Angel Ezquerra
localrepo: remove all external users of localrepo.sopener...
r23878 repo.changelog = mercurial.changelog.changelog(repo.svfs)
repo.manifest = mercurial.manifest.manifest(repo.svfs)
Greg Ward
localrepo: rename in-memory tag cache instance attributes (issue548)....
r9146 repo._tags = None
Matt Mackall
Add contrib/perf.py for performance testing
r7366 return len(repo.tags())
timer(t)
Pierre-Yves David
perf: use a formatter for output...
r23171 fm.end()
Matt Mackall
Add contrib/perf.py for performance testing
r7366
Pierre-Yves David
perf: support -T for every perf commands...
r25494 @command('perfancestors', formatteropts)
def perfancestors(ui, repo, **opts):
timer, fm = gettimer(ui, opts)
Bryan O'Sullivan
perf: add a perfancestors benchmark
r16802 heads = repo.changelog.headrevs()
def d():
Bryan O'Sullivan
revlog: ancestors(*revs) becomes ancestors(revs) (API)...
r16866 for a in repo.changelog.ancestors(heads):
Bryan O'Sullivan
perf: add a perfancestors benchmark
r16802 pass
timer(d)
Pierre-Yves David
perf: use a formatter for output...
r23171 fm.end()
Bryan O'Sullivan
perf: add a perfancestors benchmark
r16802
Pierre-Yves David
perf: support -T for every perf commands...
r25494 @command('perfancestorset', formatteropts)
def perfancestorset(ui, repo, revset, **opts):
timer, fm = gettimer(ui, opts)
Siddharth Agarwal
perf: add command to test performance of membership in ancestor set...
r18080 revs = repo.revs(revset)
heads = repo.changelog.headrevs()
def d():
Siddharth Agarwal
ancestor: add lazy membership testing to lazyancestors...
r18091 s = repo.changelog.ancestors(heads)
Siddharth Agarwal
perf: add command to test performance of membership in ancestor set...
r18080 for rev in revs:
rev in s
timer(d)
Pierre-Yves David
perf: use a formatter for output...
r23171 fm.end()
Siddharth Agarwal
perf: add command to test performance of membership in ancestor set...
r18080
Pierre-Yves David
perf: support -T for every perf commands...
r25494 @command('perfdirs', formatteropts)
def perfdirs(ui, repo, **opts):
timer, fm = gettimer(ui, opts)
Bryan O'Sullivan
perf: add perfdirs command...
r18845 dirstate = repo.dirstate
'a' in dirstate
def d():
dirstate.dirs()
del dirstate._dirs
timer(d)
Pierre-Yves David
perf: use a formatter for output...
r23171 fm.end()
Bryan O'Sullivan
perf: add perfdirs command...
r18845
Pierre-Yves David
perf: support -T for every perf commands...
r25494 @command('perfdirstate', formatteropts)
def perfdirstate(ui, repo, **opts):
timer, fm = gettimer(ui, opts)
Matt Mackall
Add contrib/perf.py for performance testing
r7366 "a" in repo.dirstate
def d():
repo.dirstate.invalidate()
"a" in repo.dirstate
timer(d)
Pierre-Yves David
perf: use a formatter for output...
r23171 fm.end()
Matt Mackall
Add contrib/perf.py for performance testing
r7366
Pierre-Yves David
perf: support -T for every perf commands...
r25494 @command('perfdirstatedirs', formatteropts)
def perfdirstatedirs(ui, repo, **opts):
timer, fm = gettimer(ui, opts)
Matt Mackall
Add contrib/perf.py for performance testing
r7366 "a" in repo.dirstate
def d():
"a" in repo.dirstate._dirs
del repo.dirstate._dirs
timer(d)
Pierre-Yves David
perf: use a formatter for output...
r23171 fm.end()
Matt Mackall
Add contrib/perf.py for performance testing
r7366
Pierre-Yves David
perf: support -T for every perf commands...
r25494 @command('perfdirstatefoldmap', formatteropts)
timeless
contrib/perf: name functions to match decorators
r27095 def perfdirstatefoldmap(ui, repo, **opts):
Pierre-Yves David
perf: support -T for every perf commands...
r25494 timer, fm = gettimer(ui, opts)
Siddharth Agarwal
perf: add a way to measure the perf of constructing the foldmap...
r22780 dirstate = repo.dirstate
'a' in dirstate
def d():
Siddharth Agarwal
perf: make measuring foldmap perf work again...
r24607 dirstate._filefoldmap.get('a')
del dirstate._filefoldmap
timer(d)
fm.end()
Pierre-Yves David
perf: support -T for every perf commands...
r25494 @command('perfdirfoldmap', formatteropts)
def perfdirfoldmap(ui, repo, **opts):
timer, fm = gettimer(ui, opts)
Siddharth Agarwal
perf: make measuring foldmap perf work again...
r24607 dirstate = repo.dirstate
'a' in dirstate
def d():
dirstate._dirfoldmap.get('a')
del dirstate._dirfoldmap
Siddharth Agarwal
perf: add a way to measure the perf of constructing the foldmap...
r22780 del dirstate._dirs
timer(d)
Pierre-Yves David
perf: use a formatter for output...
r23171 fm.end()
Siddharth Agarwal
perf: add a way to measure the perf of constructing the foldmap...
r22780
Pierre-Yves David
perf: support -T for every perf commands...
r25494 @command('perfdirstatewrite', formatteropts)
def perfdirstatewrite(ui, repo, **opts):
timer, fm = gettimer(ui, opts)
Bryan O'Sullivan
perf: add a perfdirstatewrite benchmark
r16788 ds = repo.dirstate
"a" in ds
def d():
ds._dirty = True
FUJIWARA Katsunori
dirstate: make dirstate.write() callers pass transaction object to it...
r26748 ds.write(repo.currenttransaction())
Bryan O'Sullivan
perf: add a perfdirstatewrite benchmark
r16788 timer(d)
Pierre-Yves David
perf: use a formatter for output...
r23171 fm.end()
Bryan O'Sullivan
perf: add a perfdirstatewrite benchmark
r16788
Siddharth Agarwal
perf: add a command to measure merge.calculateupdates perf...
r18817 @command('perfmergecalculate',
Pierre-Yves David
perf: support -T for every perf commands...
r25494 [('r', 'rev', '.', 'rev to merge against')] + formatteropts)
def perfmergecalculate(ui, repo, rev, **opts):
timer, fm = gettimer(ui, opts)
Siddharth Agarwal
perf: add a command to measure merge.calculateupdates perf...
r18817 wctx = repo[None]
rctx = scmutil.revsingle(repo, rev, rev)
ancestor = wctx.ancestor(rctx)
# we don't want working dir files to be stat'd in the benchmark, so prime
# that cache
wctx.dirty()
def d():
# acceptremote is True because we don't want prompts in the middle of
# our benchmark
timeless
contrib/perf: fix perfmergecalculate...
r27098 merge.calculateupdates(repo, wctx, rctx, [ancestor], False, False,
False, acceptremote=True, followcopies=True)
Siddharth Agarwal
perf: add a command to measure merge.calculateupdates perf...
r18817 timer(d)
Pierre-Yves David
perf: use a formatter for output...
r23171 fm.end()
Siddharth Agarwal
perf: add a command to measure merge.calculateupdates perf...
r18817
Siddharth Agarwal
perf: add a command to test copies.pathcopies perf...
r18877 @command('perfpathcopies', [], "REV REV")
Pierre-Yves David
perf: support -T for every perf commands...
r25494 def perfpathcopies(ui, repo, rev1, rev2, **opts):
timer, fm = gettimer(ui, opts)
Siddharth Agarwal
perf: add a command to test copies.pathcopies perf...
r18877 ctx1 = scmutil.revsingle(repo, rev1, rev1)
ctx2 = scmutil.revsingle(repo, rev2, rev2)
def d():
copies.pathcopies(ctx1, ctx2)
timer(d)
Pierre-Yves David
perf: use a formatter for output...
r23171 fm.end()
Siddharth Agarwal
perf: add a command to test copies.pathcopies perf...
r18877
Siddharth Agarwal
perfmanifest: allow and require passing in a rev...
r19712 @command('perfmanifest', [], 'REV')
Pierre-Yves David
perf: support -T for every perf commands...
r25494 def perfmanifest(ui, repo, rev, **opts):
timer, fm = gettimer(ui, opts)
Siddharth Agarwal
perfmanifest: allow and require passing in a rev...
r19712 ctx = scmutil.revsingle(repo, rev, rev)
t = ctx.manifestnode()
Matt Mackall
Add contrib/perf.py for performance testing
r7366 def d():
Siddharth Agarwal
perfmanifest: fix cache invalidation...
r19711 repo.manifest._mancache.clear()
repo.manifest._cache = None
Simon Heimberg
cleanup: drop unused variables and an unused import
r19378 repo.manifest.read(t)
Matt Mackall
Add contrib/perf.py for performance testing
r7366 timer(d)
Pierre-Yves David
perf: use a formatter for output...
r23171 fm.end()
Matt Mackall
Add contrib/perf.py for performance testing
r7366
Pierre-Yves David
perf: support -T for every perf commands...
r25494 @command('perfchangeset', formatteropts)
def perfchangeset(ui, repo, rev, **opts):
timer, fm = gettimer(ui, opts)
Matt Mackall
perf: add perfchangeset to time changeset parsing
r16262 n = repo[rev].node()
def d():
Simon Heimberg
cleanup: drop unused variables and an unused import
r19378 repo.changelog.read(n)
Matt Mackall
perf: add a changeset test
r16266 #repo.changelog._cache = None
Matt Mackall
perf: add perfchangeset to time changeset parsing
r16262 timer(d)
Pierre-Yves David
perf: use a formatter for output...
r23171 fm.end()
Matt Mackall
perf: add perfchangeset to time changeset parsing
r16262
Pierre-Yves David
perf: support -T for every perf commands...
r25494 @command('perfindex', formatteropts)
def perfindex(ui, repo, **opts):
Matt Mackall
perf: make perfindex results useful on hg with lazyparser
r13255 import mercurial.revlog
Pierre-Yves David
perf: support -T for every perf commands...
r25494 timer, fm = gettimer(ui, opts)
Matt Mackall
perf: restore lazyindex hack...
r13277 mercurial.revlog._prereadsize = 2**24 # disable lazy parser in old hg
Matt Mackall
revlog: only build the nodemap on demand
r13254 n = repo["tip"].node()
Matt Mackall
Add contrib/perf.py for performance testing
r7366 def d():
Angel Ezquerra
localrepo: remove all external users of localrepo.sopener...
r23878 cl = mercurial.revlog.revlog(repo.svfs, "00changelog.i")
Matt Mackall
perf: tweak tests for testing index performance improvements
r16260 cl.rev(n)
Matt Mackall
Add contrib/perf.py for performance testing
r7366 timer(d)
Pierre-Yves David
perf: use a formatter for output...
r23171 fm.end()
Matt Mackall
Add contrib/perf.py for performance testing
r7366
Pierre-Yves David
perf: support -T for every perf commands...
r25494 @command('perfstartup', formatteropts)
def perfstartup(ui, repo, **opts):
timer, fm = gettimer(ui, opts)
Matt Mackall
Add contrib/perf.py for performance testing
r7366 cmd = sys.argv[0]
def d():
os.system("HGRCPATH= %s version -q > /dev/null" % cmd)
timer(d)
Pierre-Yves David
perf: use a formatter for output...
r23171 fm.end()
Matt Mackall
Add contrib/perf.py for performance testing
r7366
Pierre-Yves David
perf: support -T for every perf commands...
r25494 @command('perfparents', formatteropts)
def perfparents(ui, repo, **opts):
timer, fm = gettimer(ui, opts)
timeless
contrib/perf: perfparents handle tiny repos...
r27099 if len(repo.changelog) < 1000:
raise error.Abort("repo needs 1000 commits for this test")
timeless
contrib/perf: perfparents handle filtered repos
r27100 repo = repo.unfiltered()
Matt Mackall
Add contrib/perf.py for performance testing
r7366 nl = [repo.changelog.node(i) for i in xrange(1000)]
def d():
for n in nl:
repo.changelog.parents(n)
timer(d)
Pierre-Yves David
perf: use a formatter for output...
r23171 fm.end()
Matt Mackall
Add contrib/perf.py for performance testing
r7366
Pierre-Yves David
perf: support -T for every perf commands...
r25494 @command('perfctxfiles', formatteropts)
timeless
contrib/perf: name functions to match decorators
r27095 def perfctxfiles(ui, repo, x, **opts):
Matt Mackall
perf: add methods for timing changeset file list reading
r24349 x = int(x)
Pierre-Yves David
perf: support -T for every perf commands...
r25494 timer, fm = gettimer(ui, opts)
Matt Mackall
perf: add methods for timing changeset file list reading
r24349 def d():
len(repo[x].files())
timer(d)
fm.end()
Pierre-Yves David
perf: support -T for every perf commands...
r25494 @command('perfrawfiles', formatteropts)
timeless
contrib/perf: name functions to match decorators
r27095 def perfrawfiles(ui, repo, x, **opts):
Matt Mackall
perf: add methods for timing changeset file list reading
r24349 x = int(x)
Pierre-Yves David
perf: support -T for every perf commands...
r25494 timer, fm = gettimer(ui, opts)
Matt Mackall
perf: add methods for timing changeset file list reading
r24349 cl = repo.changelog
def d():
len(cl.read(x)[3])
timer(d)
fm.end()
Pierre-Yves David
perf: support -T for every perf commands...
r25494 @command('perflookup', formatteropts)
def perflookup(ui, repo, rev, **opts):
timer, fm = gettimer(ui, opts)
Matt Mackall
Add contrib/perf.py for performance testing
r7366 timer(lambda: len(repo.lookup(rev)))
Pierre-Yves David
perf: use a formatter for output...
r23171 fm.end()
Matt Mackall
Add contrib/perf.py for performance testing
r7366
Pierre-Yves David
perf: support -T for every perf commands...
r25494 @command('perfrevrange', formatteropts)
def perfrevrange(ui, repo, *specs, **opts):
timer, fm = gettimer(ui, opts)
Bryan O'Sullivan
perf: add a benchmark for revrange
r16858 revrange = scmutil.revrange
timer(lambda: len(revrange(repo, specs)))
Pierre-Yves David
perf: use a formatter for output...
r23171 fm.end()
Bryan O'Sullivan
perf: add a benchmark for revrange
r16858
Pierre-Yves David
perf: support -T for every perf commands...
r25494 @command('perfnodelookup', formatteropts)
def perfnodelookup(ui, repo, rev, **opts):
timer, fm = gettimer(ui, opts)
Matt Mackall
perf: node lookup
r16309 import mercurial.revlog
mercurial.revlog._prereadsize = 2**24 # disable lazy parser in old hg
n = repo[rev].node()
Angel Ezquerra
localrepo: remove all external users of localrepo.sopener...
r23878 cl = mercurial.revlog.revlog(repo.svfs, "00changelog.i")
Bryan O'Sullivan
parsers: use base-16 trie for faster node->rev mapping...
r16414 def d():
cl.rev(n)
Bryan O'Sullivan
perf: rework perfheads and perftags to clear caches...
r16785 clearcaches(cl)
Bryan O'Sullivan
parsers: use base-16 trie for faster node->rev mapping...
r16414 timer(d)
Pierre-Yves David
perf: use a formatter for output...
r23171 fm.end()
Bryan O'Sullivan
parsers: use base-16 trie for faster node->rev mapping...
r16414
Pierre-Yves David
perftest: migrate to new style command declaration...
r18237 @command('perflog',
Pierre-Yves David
perf: support -T for every perf commands...
r25494 [('', 'rename', False, 'ask log to follow renames')] + formatteropts)
Alexander Solovyov
perf.perflog: add option to follow renames
r9932 def perflog(ui, repo, **opts):
Pierre-Yves David
perf: support -T for every perf commands...
r25494 timer, fm = gettimer(ui, opts)
Alexander Solovyov
contrib: add perflog and perftemplating commands to perf extension
r7872 ui.pushbuffer()
Alexander Solovyov
perf.perflog: add option to follow renames
r9932 timer(lambda: commands.log(ui, repo, rev=[], date='', user='',
copies=opts.get('rename')))
Alexander Solovyov
contrib: add perflog and perftemplating commands to perf extension
r7872 ui.popbuffer()
Pierre-Yves David
perf: use a formatter for output...
r23171 fm.end()
Alexander Solovyov
contrib: add perflog and perftemplating commands to perf extension
r7872
Pierre-Yves David
perf: support -T for every perf commands...
r25494 @command('perfmoonwalk', formatteropts)
def perfmoonwalk(ui, repo, **opts):
Brodie Rao
perf: add perfmoonwalk command to walk the changelog backwards...
r20178 """benchmark walking the changelog backwards
This also loads the changelog data for each revision in the changelog.
"""
Pierre-Yves David
perf: support -T for every perf commands...
r25494 timer, fm = gettimer(ui, opts)
Brodie Rao
perf: add perfmoonwalk command to walk the changelog backwards...
r20178 def moonwalk():
for i in xrange(len(repo), -1, -1):
ctx = repo[i]
ctx.branch() # read changelog data (in addition to the index)
timer(moonwalk)
Pierre-Yves David
perf: use a formatter for output...
r23171 fm.end()
Brodie Rao
perf: add perfmoonwalk command to walk the changelog backwards...
r20178
Pierre-Yves David
perf: support -T for every perf commands...
r25494 @command('perftemplating', formatteropts)
def perftemplating(ui, repo, **opts):
timer, fm = gettimer(ui, opts)
Alexander Solovyov
contrib: add perflog and perftemplating commands to perf extension
r7872 ui.pushbuffer()
timer(lambda: commands.log(ui, repo, rev=[], date='', user='',
template='{date|shortdate} [{rev}:{node|short}]'
' {author|person}: {desc|firstline}\n'))
ui.popbuffer()
Pierre-Yves David
perf: use a formatter for output...
r23171 fm.end()
Alexander Solovyov
contrib: add perflog and perftemplating commands to perf extension
r7872
Pierre-Yves David
perf: support -T for every perf commands...
r25494 @command('perfcca', formatteropts)
def perfcca(ui, repo, **opts):
timer, fm = gettimer(ui, opts)
Joshua Redstone
perf: fix perfcca to work with new casecollisionauditor interface...
r17216 timer(lambda: scmutil.casecollisionauditor(ui, False, repo.dirstate))
Pierre-Yves David
perf: use a formatter for output...
r23171 fm.end()
Matt Mackall
perf: add case collision auditor perf
r16386
Pierre-Yves David
perf: support -T for every perf commands...
r25494 @command('perffncacheload', formatteropts)
def perffncacheload(ui, repo, **opts):
timer, fm = gettimer(ui, opts)
Adrian Buehlmann
perf: simply use repo.store for perffncache* commands...
r17780 s = repo.store
Bryan O'Sullivan
perf: time fncache read and write performance
r16403 def d():
s.fncache._load()
timer(d)
Pierre-Yves David
perf: use a formatter for output...
r23171 fm.end()
Bryan O'Sullivan
perf: time fncache read and write performance
r16403
Pierre-Yves David
perf: support -T for every perf commands...
r25494 @command('perffncachewrite', formatteropts)
def perffncachewrite(ui, repo, **opts):
timer, fm = gettimer(ui, opts)
Adrian Buehlmann
perf: simply use repo.store for perffncache* commands...
r17780 s = repo.store
Bryan O'Sullivan
perf: time fncache read and write performance
r16403 s.fncache._load()
timeless
contrib/perf: fix perffncachewrite...
r27097 lock = repo.lock()
tr = repo.transaction('perffncachewrite')
Bryan O'Sullivan
perf: time fncache read and write performance
r16403 def d():
s.fncache._dirty = True
timeless
contrib/perf: fix perffncachewrite...
r27097 s.fncache.write(tr)
Bryan O'Sullivan
perf: time fncache read and write performance
r16403 timer(d)
timeless
contrib/perf: fix perffncachewrite...
r27097 lock.release()
Pierre-Yves David
perf: use a formatter for output...
r23171 fm.end()
Bryan O'Sullivan
perf: time fncache read and write performance
r16403
Pierre-Yves David
perf: support -T for every perf commands...
r25494 @command('perffncacheencode', formatteropts)
def perffncacheencode(ui, repo, **opts):
timer, fm = gettimer(ui, opts)
Adrian Buehlmann
perf: simply use repo.store for perffncache* commands...
r17780 s = repo.store
Adrian Buehlmann
perf: add perffncacheencode...
r17553 s.fncache._load()
def d():
for p in s.fncache.entries:
s.encode(p)
timer(d)
Pierre-Yves David
perf: use a formatter for output...
r23171 fm.end()
Adrian Buehlmann
perf: add perffncacheencode...
r17553
Pierre-Yves David
perf: support -T for every perf commands...
r25494 @command('perfdiffwd', formatteropts)
def perfdiffwd(ui, repo, **opts):
Patrick Mezard
contrib/perf: profile diff of working directory changes
r9826 """Profile diff of working directory changes"""
Pierre-Yves David
perf: support -T for every perf commands...
r25494 timer, fm = gettimer(ui, opts)
Patrick Mezard
contrib/perf: profile diff of working directory changes
r9826 options = {
'w': 'ignore_all_space',
'b': 'ignore_space_change',
'B': 'ignore_blank_lines',
}
for diffopt in ('', 'w', 'b', 'B', 'wB'):
opts = dict((options[c], '1') for c in diffopt)
def d():
ui.pushbuffer()
commands.diff(ui, repo, **opts)
ui.popbuffer()
title = 'diffopts: %s' % (diffopt and ('-' + diffopt) or 'none')
timer(d, title)
Pierre-Yves David
perf: use a formatter for output...
r23171 fm.end()
Patrick Mezard
contrib/perf: profile diff of working directory changes
r9826
Pierre-Yves David
perftest: migrate to new style command declaration...
r18237 @command('perfrevlog',
Pierre-Yves David
perf: support -T for every perf commands...
r25494 [('d', 'dist', 100, 'distance between the revisions')] + formatteropts,
Pierre-Yves David
perftest: migrate to new style command declaration...
r18237 "[INDEXFILE]")
Pradeepkumar Gayam
perf: add perfrevlog function to check performance of revlog
r11694 def perfrevlog(ui, repo, file_, **opts):
Pierre-Yves David
perf: support -T for every perf commands...
r25494 timer, fm = gettimer(ui, opts)
Pradeepkumar Gayam
perf: add perfrevlog function to check performance of revlog
r11694 from mercurial import revlog
dist = opts['dist']
def d():
r = revlog.revlog(lambda fn: open(fn, 'rb'), file_)
for x in xrange(0, len(r), dist):
r.revision(r.node(x))
timer(d)
Pierre-Yves David
perf: use a formatter for output...
r23171 fm.end()
Pradeepkumar Gayam
perf: add perfrevlog function to check performance of revlog
r11694
Pierre-Yves David
perftest: add an option to invalidate volatile cache...
r18239 @command('perfrevset',
Gregory Szorc
perf: support obtaining contexts from perfrevset...
r27072 [('C', 'clear', False, 'clear volatile cache between each call.'),
('', 'contexts', False, 'obtain changectx for each revision')]
Pierre-Yves David
perf: support -T for every perf commands...
r25494 + formatteropts, "REVSET")
Gregory Szorc
perf: support obtaining contexts from perfrevset...
r27072 def perfrevset(ui, repo, expr, clear=False, contexts=False, **opts):
Pierre-Yves David
perftest: add an option to invalidate volatile cache...
r18239 """benchmark the execution time of a revset
Mads Kiilerich
spelling: fix some minor issues found by spell checker
r18644 Use the --clean option if need to evaluate the impact of build volatile
Pierre-Yves David
perftest: add an option to invalidate volatile cache...
r18239 revisions set cache on the revset execution. Volatile cache hold filtered
and obsolete related cache."""
Pierre-Yves David
perf: support -T for every perf commands...
r25494 timer, fm = gettimer(ui, opts)
Siddharth Agarwal
perf: add a command to measure revset performance
r18062 def d():
Pierre-Yves David
perftest: add an option to invalidate volatile cache...
r18239 if clear:
repo.invalidatevolatilesets()
Gregory Szorc
perf: support obtaining contexts from perfrevset...
r27072 if contexts:
for ctx in repo.set(expr): pass
else:
for r in repo.revs(expr): pass
Siddharth Agarwal
perf: add a command to measure revset performance
r18062 timer(d)
Pierre-Yves David
perf: use a formatter for output...
r23171 fm.end()
Pierre-Yves David
perftest: add a command to benchmark construction of volatile cache...
r18240
Pierre-Yves David
perf: support -T for every perf commands...
r25494 @command('perfvolatilesets', formatteropts)
def perfvolatilesets(ui, repo, *names, **opts):
Pierre-Yves David
perftest: add a command to benchmark construction of volatile cache...
r18240 """benchmark the computation of various volatile set
Volatile set computes element related to filtering and obsolescence."""
Pierre-Yves David
perf: support -T for every perf commands...
r25494 timer, fm = gettimer(ui, opts)
Pierre-Yves David
perftest: add a command to benchmark construction of volatile cache...
r18240 repo = repo.unfiltered()
def getobs(name):
def d():
repo.invalidatevolatilesets()
obsolete.getrevs(repo, name)
return d
Pierre-Yves David
perftest: allow selection of volatile set to benchmark...
r18241 allobs = sorted(obsolete.cachefuncs)
if names:
allobs = [n for n in allobs if n in names]
for name in allobs:
Pierre-Yves David
perftest: add a command to benchmark construction of volatile cache...
r18240 timer(getobs(name), title=name)
def getfiltered(name):
def d():
repo.invalidatevolatilesets()
Pierre-Yves David
perf: fix perfvolatilesets...
r20205 repoview.filterrevs(repo, name)
Pierre-Yves David
perftest: add a command to benchmark construction of volatile cache...
r18240 return d
Pierre-Yves David
perftest: allow selection of volatile set to benchmark...
r18241 allfilter = sorted(repoview.filtertable)
if names:
allfilter = [n for n in allfilter if n in names]
for name in allfilter:
Pierre-Yves David
perftest: add a command to benchmark construction of volatile cache...
r18240 timer(getfiltered(name), title=name)
Pierre-Yves David
perf: use a formatter for output...
r23171 fm.end()
Pierre-Yves David
perf: add perfbranchmap command...
r18304
@command('perfbranchmap',
[('f', 'full', False,
'Includes build time of subset'),
Pierre-Yves David
perf: support -T for every perf commands...
r25494 ] + formatteropts)
def perfbranchmap(ui, repo, full=False, **opts):
Pierre-Yves David
perf: add perfbranchmap command...
r18304 """benchmark the update of a branchmap
This benchmarks the full repo.branchmap() call with read and write disabled
"""
Pierre-Yves David
perf: support -T for every perf commands...
r25494 timer, fm = gettimer(ui, opts)
Pierre-Yves David
perf: add perfbranchmap command...
r18304 def getbranchmap(filtername):
"""generate a benchmark function for the filtername"""
if filtername is None:
view = repo
else:
view = repo.filtered(filtername)
def d():
if full:
view._branchcaches.clear()
else:
view._branchcaches.pop(filtername, None)
view.branchmap()
return d
# add filter in smaller subset to bigger subset
possiblefilters = set(repoview.filtertable)
allfilters = []
while possiblefilters:
for name in possiblefilters:
Augie Fackler
subsettable: move from repoview to branchmap, the only place it's used...
r20032 subset = branchmap.subsettable.get(name)
Pierre-Yves David
perf: add perfbranchmap command...
r18304 if subset not in possiblefilters:
break
else:
assert False, 'subset cycle %s!' % possiblefilters
allfilters.append(name)
possiblefilters.remove(name)
# warm the cache
if not full:
for name in allfilters:
repo.filtered(name).branchmap()
# add unfiltered
allfilters.append(None)
oldread = branchmap.read
oldwrite = branchmap.branchcache.write
try:
branchmap.read = lambda repo: None
branchmap.write = lambda repo: None
for name in allfilters:
timer(getbranchmap(name), title=str(name))
finally:
branchmap.read = oldread
branchmap.branchcache.write = oldwrite
Pierre-Yves David
perf: use a formatter for output...
r23171 fm.end()
Pierre-Yves David
perf: add a perfloadmarkers command...
r23485
@command('perfloadmarkers')
def perfloadmarkers(ui, repo):
"""benchmark the time to parse the on-disk markers for a repo
Result is the number of markers in the repo."""
timer, fm = gettimer(ui)
Angel Ezquerra
localrepo: remove all external users of localrepo.sopener...
r23878 timer(lambda: len(obsolete.obsstore(repo.svfs)))
Pierre-Yves David
perf: add a perfloadmarkers command...
r23485 fm.end()