##// END OF EJS Templates
Merge
Merge

File last commit:

r17553:5ab86392 default
r17713:2c638277 merge default
Show More
perf.py
263 lines | 7.7 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
Bryan O'Sullivan
parsers: use base-16 trie for faster node->rev mapping...
r16414 from mercurial import cmdutil, scmutil, util, match, commands
Matt Mackall
Add contrib/perf.py for performance testing
r7366 import time, os, sys
Patrick Mezard
contrib/perf: profile diff of working directory changes
r9826 def timer(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
Patrick Mezard
contrib/perf: profile diff of working directory changes
r9826 if title:
sys.stderr.write("! %s\n" % title)
Matt Mackall
Add contrib/perf.py for performance testing
r7366 if r:
sys.stderr.write("! result: %s\n" % r)
m = min(results)
sys.stderr.write("! wall %f comb %f user %f sys %f (best of %d)\n"
% (m[0], m[1] + m[2], m[1], m[2], count))
def perfwalk(ui, repo, *pats):
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, {}))))
def perfstatus(ui, repo, *pats):
#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
Add contrib/perf.py for performance testing
r7366 timer(lambda: sum(map(len, repo.status())))
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
Matt Mackall
Add contrib/perf.py for performance testing
r7366 def perfheads(ui, repo):
Bryan O'Sullivan
perf: rework perfheads and perftags to clear caches...
r16785 cl = repo.changelog
def d():
len(cl.headrevs())
clearcaches(cl)
timer(d)
Matt Mackall
Add contrib/perf.py for performance testing
r7366
def perftags(ui, repo):
import mercurial.changelog, mercurial.manifest
def t():
repo.changelog = mercurial.changelog.changelog(repo.sopener)
repo.manifest = mercurial.manifest.manifest(repo.sopener)
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)
Bryan O'Sullivan
perf: add a perfancestors benchmark
r16802 def perfancestors(ui, repo):
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)
Matt Mackall
Add contrib/perf.py for performance testing
r7366 def perfdirstate(ui, repo):
"a" in repo.dirstate
def d():
repo.dirstate.invalidate()
"a" in repo.dirstate
timer(d)
def perfdirstatedirs(ui, repo):
"a" in repo.dirstate
def d():
"a" in repo.dirstate._dirs
del repo.dirstate._dirs
timer(d)
Bryan O'Sullivan
perf: add a perfdirstatewrite benchmark
r16788 def perfdirstatewrite(ui, repo):
ds = repo.dirstate
"a" in ds
def d():
ds._dirty = True
ds.write()
timer(d)
Matt Mackall
Add contrib/perf.py for performance testing
r7366 def perfmanifest(ui, repo):
def d():
t = repo.manifest.tip()
m = repo.manifest.read(t)
repo.manifest.mapcache = None
repo.manifest._cache = None
timer(d)
Matt Mackall
perf: add perfchangeset to time changeset parsing
r16262 def perfchangeset(ui, repo, rev):
n = repo[rev].node()
def d():
c = 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)
Matt Mackall
Add contrib/perf.py for performance testing
r7366 def perfindex(ui, repo):
Matt Mackall
perf: make perfindex results useful on hg with lazyparser
r13255 import mercurial.revlog
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():
Matt Mackall
perf: tweak tests for testing index performance improvements
r16260 cl = mercurial.revlog.revlog(repo.sopener, "00changelog.i")
cl.rev(n)
Matt Mackall
Add contrib/perf.py for performance testing
r7366 timer(d)
def perfstartup(ui, repo):
cmd = sys.argv[0]
def d():
os.system("HGRCPATH= %s version -q > /dev/null" % cmd)
timer(d)
def perfparents(ui, repo):
nl = [repo.changelog.node(i) for i in xrange(1000)]
def d():
for n in nl:
repo.changelog.parents(n)
timer(d)
def perflookup(ui, repo, rev):
timer(lambda: len(repo.lookup(rev)))
Bryan O'Sullivan
perf: add a benchmark for revrange
r16858 def perfrevrange(ui, repo, *specs):
revrange = scmutil.revrange
timer(lambda: len(revrange(repo, specs)))
Matt Mackall
perf: node lookup
r16309 def perfnodelookup(ui, repo, rev):
import mercurial.revlog
mercurial.revlog._prereadsize = 2**24 # disable lazy parser in old hg
n = repo[rev].node()
def d():
cl = mercurial.revlog.revlog(repo.sopener, "00changelog.i")
cl.rev(n)
timer(d)
Bryan O'Sullivan
parsers: use base-16 trie for faster node->rev mapping...
r16414 def perfnodelookup(ui, repo, rev):
import mercurial.revlog
mercurial.revlog._prereadsize = 2**24 # disable lazy parser in old hg
n = repo[rev].node()
cl = mercurial.revlog.revlog(repo.sopener, "00changelog.i")
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)
Alexander Solovyov
perf.perflog: add option to follow renames
r9932 def perflog(ui, repo, **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()
def perftemplating(ui, repo):
ui.pushbuffer()
timer(lambda: commands.log(ui, repo, rev=[], date='', user='',
template='{date|shortdate} [{rev}:{node|short}]'
' {author|person}: {desc|firstline}\n'))
ui.popbuffer()
Matt Mackall
perf: add case collision auditor perf
r16386 def perfcca(ui, repo):
Joshua Redstone
perf: fix perfcca to work with new casecollisionauditor interface...
r17216 timer(lambda: scmutil.casecollisionauditor(ui, False, repo.dirstate))
Matt Mackall
perf: add case collision auditor perf
r16386
Bryan O'Sullivan
perf: time fncache read and write performance
r16403 def perffncacheload(ui, repo):
from mercurial import scmutil, store
s = store.store(set(['store','fncache']), repo.path, scmutil.opener)
def d():
s.fncache._load()
timer(d)
def perffncachewrite(ui, repo):
from mercurial import scmutil, store
s = store.store(set(['store','fncache']), repo.path, scmutil.opener)
s.fncache._load()
def d():
s.fncache._dirty = True
s.fncache.write()
timer(d)
Adrian Buehlmann
perf: add perffncacheencode...
r17553 def perffncacheencode(ui, repo):
from mercurial import store
s = store.store(set(['store','fncache','dotencode']),
repo.path, scmutil.opener)
s.fncache._load()
def d():
for p in s.fncache.entries:
s.encode(p)
timer(d)
Patrick Mezard
contrib/perf: profile diff of working directory changes
r9826 def perfdiffwd(ui, repo):
"""Profile diff of working directory changes"""
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)
Pradeepkumar Gayam
perf: add perfrevlog function to check performance of revlog
r11694 def perfrevlog(ui, repo, file_, **opts):
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)
Matt Mackall
Add contrib/perf.py for performance testing
r7366 cmdtable = {
Matt Mackall
perf: add case collision auditor perf
r16386 'perfcca': (perfcca, []),
Bryan O'Sullivan
perf: time fncache read and write performance
r16403 'perffncacheload': (perffncacheload, []),
'perffncachewrite': (perffncachewrite, []),
Adrian Buehlmann
perf: add perffncacheencode...
r17553 'perffncacheencode': (perffncacheencode, []),
Matt Mackall
Add contrib/perf.py for performance testing
r7366 'perflookup': (perflookup, []),
Bryan O'Sullivan
perf: add a benchmark for revrange
r16858 'perfrevrange': (perfrevrange, []),
Matt Mackall
perf: node lookup
r16309 'perfnodelookup': (perfnodelookup, []),
Matt Mackall
Add contrib/perf.py for performance testing
r7366 'perfparents': (perfparents, []),
'perfstartup': (perfstartup, []),
'perfstatus': (perfstatus, []),
'perfwalk': (perfwalk, []),
'perfmanifest': (perfmanifest, []),
Matt Mackall
perf: add perfchangeset to time changeset parsing
r16262 'perfchangeset': (perfchangeset, []),
Matt Mackall
Add contrib/perf.py for performance testing
r7366 'perfindex': (perfindex, []),
'perfheads': (perfheads, []),
'perftags': (perftags, []),
Bryan O'Sullivan
perf: add a perfancestors benchmark
r16802 'perfancestors': (perfancestors, []),
Matt Mackall
Add contrib/perf.py for performance testing
r7366 'perfdirstate': (perfdirstate, []),
'perfdirstatedirs': (perfdirstate, []),
Bryan O'Sullivan
perf: add a perfdirstatewrite benchmark
r16788 'perfdirstatewrite': (perfdirstatewrite, []),
Alexander Solovyov
perf.perflog: add option to follow renames
r9932 'perflog': (perflog,
[('', 'rename', False, 'ask log to follow renames')]),
Alexander Solovyov
contrib: add perflog and perftemplating commands to perf extension
r7872 'perftemplating': (perftemplating, []),
Patrick Mezard
contrib/perf: profile diff of working directory changes
r9826 'perfdiffwd': (perfdiffwd, []),
Nicolas Dumazet
perf: break down long line
r11713 'perfrevlog': (perfrevlog,
[('d', 'dist', 100, 'distance between the revisions')],
"[INDEXFILE]"),
Matt Mackall
Add contrib/perf.py for performance testing
r7366 }