##// END OF EJS Templates
clfilter: do not use tags cache if there are filtered changesets...
clfilter: do not use tags cache if there are filtered changesets If there are filtered changesets the cache is not valid. We'll have to cache tags for filtered state too, but for now recomputing the tags is enough.

File last commit:

r17553:5ab86392 default
r17715:21c50348 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 }