annotate contrib/perf.py @ 26998:4414d500604f

localrepo: put bookmark move following commit in one transaction Before this patch, making a commit on a local repo could move a bookmark and both operations would not be grouped as one transaction. This patch makes both operations part of one transaction. This is necessary to switch to the new api to save bookmarks repo._bookmarks.recordchange if we don't want to change the current behavior of rollback. Dirstate change happening after the commit is done is now part of the transaction mentioned above. This leads to a change in the expected output of several tests. The change to test-fncache happens because both lock are now released in the same finally clause. The lock release is made explicitly buggy in this test. Previously releasing lock would crash triggering release of wlock that crashes too. Now lock release crash does not directly result in the release of wlock. Instead wlock is released at garbage collection time and the error raised at that time "confuses" python.
author Laurent Charignon <lcharignon@fb.com>
date Wed, 18 Nov 2015 01:36:58 -0800
parents 5ba0a99ff27f
children cdc3e437b481
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
1 # perf.py - performance test routines
8873
e872ef2e6758 help: add/fix docstrings for a bunch of extensions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents: 8656
diff changeset
2 '''helper extension to measure performance'''
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
3
19322
ff1586a3adc5 cleanup: remove unused imports
Simon Heimberg <simohe@besonet.ch>
parents: 19292
diff changeset
4 from mercurial import cmdutil, scmutil, util, commands, obsolete
18877
2e9fe9e2671f perf: add a command to test copies.pathcopies perf
Siddharth Agarwal <sid0@fb.com>
parents: 18871
diff changeset
5 from mercurial import repoview, branchmap, merge, copies
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
6 import time, os, sys
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
7 import functools
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
8
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
9 formatteropts = commands.formatteropts
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
10
18237
4132dc9bd5c4 perftest: migrate to new style command declaration
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 18236
diff changeset
11 cmdtable = {}
4132dc9bd5c4 perftest: migrate to new style command declaration
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 18236
diff changeset
12 command = cmdutil.command(cmdtable)
4132dc9bd5c4 perftest: migrate to new style command declaration
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 18236
diff changeset
13
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
14 def gettimer(ui, opts=None):
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
15 """return a timer function and formatter: (timer, formatter)
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
16
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
17 This functions exist to gather the creation of formatter in a single
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
18 place instead of duplicating it in all performance command."""
23788
316ad725a1dd perf: add a configurable sleep on startup
Matt Mackall <mpm@selenic.com>
parents: 23537
diff changeset
19
316ad725a1dd perf: add a configurable sleep on startup
Matt Mackall <mpm@selenic.com>
parents: 23537
diff changeset
20 # enforce an idle period before execution to counteract power management
25850
b130764e3eb5 perf: mark experimental option presleep
Matt Mackall <mpm@selenic.com>
parents: 25494
diff changeset
21 # experimental config: perf.presleep
23788
316ad725a1dd perf: add a configurable sleep on startup
Matt Mackall <mpm@selenic.com>
parents: 23537
diff changeset
22 time.sleep(ui.configint("perf", "presleep", 1))
316ad725a1dd perf: add a configurable sleep on startup
Matt Mackall <mpm@selenic.com>
parents: 23537
diff changeset
23
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
24 if opts is None:
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
25 opts = {}
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
26 # redirect all to stderr
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
27 ui = ui.copy()
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
28 ui.fout = ui.ferr
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
29 # get a formatter
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
30 fm = ui.formatter('perf', opts)
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
31 return functools.partial(_timer, fm), fm
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
32
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
33 def _timer(fm, func, title=None):
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
34 results = []
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
35 begin = time.time()
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
36 count = 0
14494
1ffeeb91c55d check-code: flag 0/1 used as constant Boolean expression
Martin Geisler <mg@lazybytes.net>
parents: 14322
diff changeset
37 while True:
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
38 ostart = os.times()
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
39 cstart = time.time()
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
40 r = func()
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
41 cstop = time.time()
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
42 ostop = os.times()
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
43 count += 1
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
44 a, b = ostart, ostop
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
45 results.append((cstop - cstart, b[0] - a[0], b[1]-a[1]))
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
46 if cstop - begin > 3 and count >= 100:
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
47 break
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
48 if cstop - begin > 10 and count >= 3:
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
49 break
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
50
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
51 fm.startitem()
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
52
9826
d768614578dd contrib/perf: profile diff of working directory changes
Patrick Mezard <pmezard@gmail.com>
parents: 9146
diff changeset
53 if title:
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
54 fm.write('title', '! %s\n', title)
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
55 if r:
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
56 fm.write('result', '! result: %s\n', r)
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
57 m = min(results)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
58 fm.plain('!')
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
59 fm.write('wall', ' wall %f', m[0])
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
60 fm.write('comb', ' comb %f', m[1] + m[2])
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
61 fm.write('user', ' user %f', m[1])
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
62 fm.write('sys', ' sys %f', m[2])
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
63 fm.write('count', ' (best of %d)', count)
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
64 fm.plain('\n')
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
65
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
66 @command('perfwalk', formatteropts)
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
67 def perfwalk(ui, repo, *pats, **opts):
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
68 timer, fm = gettimer(ui, opts)
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
69 try:
14671
35c2cc322ba8 scmutil: switch match users to supplying contexts
Matt Mackall <mpm@selenic.com>
parents: 14494
diff changeset
70 m = scmutil.match(repo[None], pats, {})
10176
24ce8f0c0a39 dirstate: don't check state of subrepo directories
Augie Fackler <durin42@gmail.com>
parents: 9932
diff changeset
71 timer(lambda: len(list(repo.dirstate.walk(m, [], True, False))))
16689
f366d4c2ff34 cleanup: replace naked excepts with except Exception: ...
Brodie Rao <brodie@sf.io>
parents: 16683
diff changeset
72 except Exception:
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
73 try:
14671
35c2cc322ba8 scmutil: switch match users to supplying contexts
Matt Mackall <mpm@selenic.com>
parents: 14494
diff changeset
74 m = scmutil.match(repo[None], pats, {})
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10176
diff changeset
75 timer(lambda: len([b for a, b, c in repo.dirstate.statwalk([], m)]))
16689
f366d4c2ff34 cleanup: replace naked excepts with except Exception: ...
Brodie Rao <brodie@sf.io>
parents: 16683
diff changeset
76 except Exception:
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
77 timer(lambda: len(list(cmdutil.walk(repo, pats, {}))))
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
78 fm.end()
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
79
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
80 @command('perfannotate', formatteropts)
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
81 def perfannotate(ui, repo, f, **opts):
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
82 timer, fm = gettimer(ui, opts)
19292
e0aa6fff8f02 annotate: simplify annotate parent function
Durham Goode <durham@fb.com>
parents: 18877
diff changeset
83 fc = repo['.'][f]
e0aa6fff8f02 annotate: simplify annotate parent function
Durham Goode <durham@fb.com>
parents: 18877
diff changeset
84 timer(lambda: len(fc.annotate(True)))
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
85 fm.end()
19292
e0aa6fff8f02 annotate: simplify annotate parent function
Durham Goode <durham@fb.com>
parents: 18877
diff changeset
86
18237
4132dc9bd5c4 perftest: migrate to new style command declaration
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 18236
diff changeset
87 @command('perfstatus',
4132dc9bd5c4 perftest: migrate to new style command declaration
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 18236
diff changeset
88 [('u', 'unknown', False,
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
89 'ask status to look for unknown files')] + formatteropts)
18033
00ac420f24ee perf: add option to perfstatus to get the status of unknown files
Siddharth Agarwal <sid0@fb.com>
parents: 17780
diff changeset
90 def perfstatus(ui, repo, **opts):
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
91 #m = match.always(repo.root, repo.getcwd())
16683
525fdb738975 cleanup: eradicate long lines
Brodie Rao <brodie@sf.io>
parents: 16414
diff changeset
92 #timer(lambda: sum(map(len, repo.dirstate.status(m, [], False, False,
525fdb738975 cleanup: eradicate long lines
Brodie Rao <brodie@sf.io>
parents: 16414
diff changeset
93 # False))))
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
94 timer, fm = gettimer(ui, **opts)
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
95 timer(lambda: sum(map(len, repo.status(unknown=opts['unknown']))))
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
96 fm.end()
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
97
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
98 @command('perfaddremove', formatteropts)
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
99 def perfaddremove(ui, repo, **opts):
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
100 timer, fm = gettimer(ui, opts)
18871
a2d4ab4f575d perf: add a command to test addremove performance
Siddharth Agarwal <sid0@fb.com>
parents: 18845
diff changeset
101 try:
a2d4ab4f575d perf: add a command to test addremove performance
Siddharth Agarwal <sid0@fb.com>
parents: 18845
diff changeset
102 oldquiet = repo.ui.quiet
a2d4ab4f575d perf: add a command to test addremove performance
Siddharth Agarwal <sid0@fb.com>
parents: 18845
diff changeset
103 repo.ui.quiet = True
23533
891aaa7c0c70 scmutil: pass a matcher to scmutil.addremove() instead of a list of patterns
Matt Harbison <matt_harbison@yahoo.com>
parents: 23485
diff changeset
104 matcher = scmutil.match(repo[None])
23537
f1b06a8aad42 commit: propagate --addremove to subrepos if -S is specified (issue3759)
Matt Harbison <matt_harbison@yahoo.com>
parents: 23533
diff changeset
105 timer(lambda: scmutil.addremove(repo, matcher, "", dry_run=True))
18871
a2d4ab4f575d perf: add a command to test addremove performance
Siddharth Agarwal <sid0@fb.com>
parents: 18845
diff changeset
106 finally:
a2d4ab4f575d perf: add a command to test addremove performance
Siddharth Agarwal <sid0@fb.com>
parents: 18845
diff changeset
107 repo.ui.quiet = oldquiet
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
108 fm.end()
18871
a2d4ab4f575d perf: add a command to test addremove performance
Siddharth Agarwal <sid0@fb.com>
parents: 18845
diff changeset
109
16785
1dc08dc63c09 perf: rework perfheads and perftags to clear caches
Bryan O'Sullivan <bryano@fb.com>
parents: 16689
diff changeset
110 def clearcaches(cl):
1dc08dc63c09 perf: rework perfheads and perftags to clear caches
Bryan O'Sullivan <bryano@fb.com>
parents: 16689
diff changeset
111 # behave somewhat consistently across internal API changes
1dc08dc63c09 perf: rework perfheads and perftags to clear caches
Bryan O'Sullivan <bryano@fb.com>
parents: 16689
diff changeset
112 if util.safehasattr(cl, 'clearcaches'):
1dc08dc63c09 perf: rework perfheads and perftags to clear caches
Bryan O'Sullivan <bryano@fb.com>
parents: 16689
diff changeset
113 cl.clearcaches()
1dc08dc63c09 perf: rework perfheads and perftags to clear caches
Bryan O'Sullivan <bryano@fb.com>
parents: 16689
diff changeset
114 elif util.safehasattr(cl, '_nodecache'):
1dc08dc63c09 perf: rework perfheads and perftags to clear caches
Bryan O'Sullivan <bryano@fb.com>
parents: 16689
diff changeset
115 from mercurial.node import nullid, nullrev
1dc08dc63c09 perf: rework perfheads and perftags to clear caches
Bryan O'Sullivan <bryano@fb.com>
parents: 16689
diff changeset
116 cl._nodecache = {nullid: nullrev}
1dc08dc63c09 perf: rework perfheads and perftags to clear caches
Bryan O'Sullivan <bryano@fb.com>
parents: 16689
diff changeset
117 cl._nodepos = None
1dc08dc63c09 perf: rework perfheads and perftags to clear caches
Bryan O'Sullivan <bryano@fb.com>
parents: 16689
diff changeset
118
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
119 @command('perfheads', formatteropts)
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
120 def perfheads(ui, repo, **opts):
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
121 timer, fm = gettimer(ui, opts)
16785
1dc08dc63c09 perf: rework perfheads and perftags to clear caches
Bryan O'Sullivan <bryano@fb.com>
parents: 16689
diff changeset
122 cl = repo.changelog
1dc08dc63c09 perf: rework perfheads and perftags to clear caches
Bryan O'Sullivan <bryano@fb.com>
parents: 16689
diff changeset
123 def d():
1dc08dc63c09 perf: rework perfheads and perftags to clear caches
Bryan O'Sullivan <bryano@fb.com>
parents: 16689
diff changeset
124 len(cl.headrevs())
1dc08dc63c09 perf: rework perfheads and perftags to clear caches
Bryan O'Sullivan <bryano@fb.com>
parents: 16689
diff changeset
125 clearcaches(cl)
1dc08dc63c09 perf: rework perfheads and perftags to clear caches
Bryan O'Sullivan <bryano@fb.com>
parents: 16689
diff changeset
126 timer(d)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
127 fm.end()
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
128
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
129 @command('perftags', formatteropts)
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
130 def perftags(ui, repo, **opts):
19786
fe8795dee77d perf: rearrange imports of changelong and manifest to appease check-code
Augie Fackler <raf@durin42.com>
parents: 19712
diff changeset
131 import mercurial.changelog
fe8795dee77d perf: rearrange imports of changelong and manifest to appease check-code
Augie Fackler <raf@durin42.com>
parents: 19712
diff changeset
132 import mercurial.manifest
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
133 timer, fm = gettimer(ui, opts)
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
134 def t():
23878
37a92908a382 localrepo: remove all external users of localrepo.sopener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents: 23788
diff changeset
135 repo.changelog = mercurial.changelog.changelog(repo.svfs)
37a92908a382 localrepo: remove all external users of localrepo.sopener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents: 23788
diff changeset
136 repo.manifest = mercurial.manifest.manifest(repo.svfs)
9146
5614a628d173 localrepo: rename in-memory tag cache instance attributes (issue548).
Greg Ward <greg-hg@gerg.ca>
parents: 8873
diff changeset
137 repo._tags = None
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
138 return len(repo.tags())
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
139 timer(t)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
140 fm.end()
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
141
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
142 @command('perfancestors', formatteropts)
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
143 def perfancestors(ui, repo, **opts):
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
144 timer, fm = gettimer(ui, opts)
16802
7e5d94381cd1 perf: add a perfancestors benchmark
Bryan O'Sullivan <bryano@fb.com>
parents: 16788
diff changeset
145 heads = repo.changelog.headrevs()
7e5d94381cd1 perf: add a perfancestors benchmark
Bryan O'Sullivan <bryano@fb.com>
parents: 16788
diff changeset
146 def d():
16866
91f3ac205816 revlog: ancestors(*revs) becomes ancestors(revs) (API)
Bryan O'Sullivan <bryano@fb.com>
parents: 16858
diff changeset
147 for a in repo.changelog.ancestors(heads):
16802
7e5d94381cd1 perf: add a perfancestors benchmark
Bryan O'Sullivan <bryano@fb.com>
parents: 16788
diff changeset
148 pass
7e5d94381cd1 perf: add a perfancestors benchmark
Bryan O'Sullivan <bryano@fb.com>
parents: 16788
diff changeset
149 timer(d)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
150 fm.end()
16802
7e5d94381cd1 perf: add a perfancestors benchmark
Bryan O'Sullivan <bryano@fb.com>
parents: 16788
diff changeset
151
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
152 @command('perfancestorset', formatteropts)
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
153 def perfancestorset(ui, repo, revset, **opts):
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
154 timer, fm = gettimer(ui, opts)
18080
486bfb200b3f perf: add command to test performance of membership in ancestor set
Siddharth Agarwal <sid0@fb.com>
parents: 18062
diff changeset
155 revs = repo.revs(revset)
486bfb200b3f perf: add command to test performance of membership in ancestor set
Siddharth Agarwal <sid0@fb.com>
parents: 18062
diff changeset
156 heads = repo.changelog.headrevs()
486bfb200b3f perf: add command to test performance of membership in ancestor set
Siddharth Agarwal <sid0@fb.com>
parents: 18062
diff changeset
157 def d():
18091
f7f8159caad3 ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents: 18080
diff changeset
158 s = repo.changelog.ancestors(heads)
18080
486bfb200b3f perf: add command to test performance of membership in ancestor set
Siddharth Agarwal <sid0@fb.com>
parents: 18062
diff changeset
159 for rev in revs:
486bfb200b3f perf: add command to test performance of membership in ancestor set
Siddharth Agarwal <sid0@fb.com>
parents: 18062
diff changeset
160 rev in s
486bfb200b3f perf: add command to test performance of membership in ancestor set
Siddharth Agarwal <sid0@fb.com>
parents: 18062
diff changeset
161 timer(d)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
162 fm.end()
18080
486bfb200b3f perf: add command to test performance of membership in ancestor set
Siddharth Agarwal <sid0@fb.com>
parents: 18062
diff changeset
163
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
164 @command('perfdirs', formatteropts)
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
165 def perfdirs(ui, repo, **opts):
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
166 timer, fm = gettimer(ui, opts)
18845
c1f416e4bc80 perf: add perfdirs command
Bryan O'Sullivan <bryano@fb.com>
parents: 18837
diff changeset
167 dirstate = repo.dirstate
c1f416e4bc80 perf: add perfdirs command
Bryan O'Sullivan <bryano@fb.com>
parents: 18837
diff changeset
168 'a' in dirstate
c1f416e4bc80 perf: add perfdirs command
Bryan O'Sullivan <bryano@fb.com>
parents: 18837
diff changeset
169 def d():
c1f416e4bc80 perf: add perfdirs command
Bryan O'Sullivan <bryano@fb.com>
parents: 18837
diff changeset
170 dirstate.dirs()
c1f416e4bc80 perf: add perfdirs command
Bryan O'Sullivan <bryano@fb.com>
parents: 18837
diff changeset
171 del dirstate._dirs
c1f416e4bc80 perf: add perfdirs command
Bryan O'Sullivan <bryano@fb.com>
parents: 18837
diff changeset
172 timer(d)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
173 fm.end()
18845
c1f416e4bc80 perf: add perfdirs command
Bryan O'Sullivan <bryano@fb.com>
parents: 18837
diff changeset
174
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
175 @command('perfdirstate', formatteropts)
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
176 def perfdirstate(ui, repo, **opts):
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
177 timer, fm = gettimer(ui, opts)
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
178 "a" in repo.dirstate
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
179 def d():
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
180 repo.dirstate.invalidate()
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
181 "a" in repo.dirstate
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
182 timer(d)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
183 fm.end()
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
184
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
185 @command('perfdirstatedirs', formatteropts)
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
186 def perfdirstatedirs(ui, repo, **opts):
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
187 timer, fm = gettimer(ui, opts)
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
188 "a" in repo.dirstate
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
189 def d():
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
190 "a" in repo.dirstate._dirs
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
191 del repo.dirstate._dirs
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
192 timer(d)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
193 fm.end()
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
194
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
195 @command('perfdirstatefoldmap', formatteropts)
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
196 def perffilefoldmap(ui, repo, **opts):
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
197 timer, fm = gettimer(ui, opts)
22780
d8ff1f671aed perf: add a way to measure the perf of constructing the foldmap
Siddharth Agarwal <sid0@fb.com>
parents: 20846
diff changeset
198 dirstate = repo.dirstate
d8ff1f671aed perf: add a way to measure the perf of constructing the foldmap
Siddharth Agarwal <sid0@fb.com>
parents: 20846
diff changeset
199 'a' in dirstate
d8ff1f671aed perf: add a way to measure the perf of constructing the foldmap
Siddharth Agarwal <sid0@fb.com>
parents: 20846
diff changeset
200 def d():
24607
f5b527024fcc perf: make measuring foldmap perf work again
Siddharth Agarwal <sid0@fb.com>
parents: 24349
diff changeset
201 dirstate._filefoldmap.get('a')
f5b527024fcc perf: make measuring foldmap perf work again
Siddharth Agarwal <sid0@fb.com>
parents: 24349
diff changeset
202 del dirstate._filefoldmap
f5b527024fcc perf: make measuring foldmap perf work again
Siddharth Agarwal <sid0@fb.com>
parents: 24349
diff changeset
203 timer(d)
f5b527024fcc perf: make measuring foldmap perf work again
Siddharth Agarwal <sid0@fb.com>
parents: 24349
diff changeset
204 fm.end()
f5b527024fcc perf: make measuring foldmap perf work again
Siddharth Agarwal <sid0@fb.com>
parents: 24349
diff changeset
205
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
206 @command('perfdirfoldmap', formatteropts)
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
207 def perfdirfoldmap(ui, repo, **opts):
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
208 timer, fm = gettimer(ui, opts)
24607
f5b527024fcc perf: make measuring foldmap perf work again
Siddharth Agarwal <sid0@fb.com>
parents: 24349
diff changeset
209 dirstate = repo.dirstate
f5b527024fcc perf: make measuring foldmap perf work again
Siddharth Agarwal <sid0@fb.com>
parents: 24349
diff changeset
210 'a' in dirstate
f5b527024fcc perf: make measuring foldmap perf work again
Siddharth Agarwal <sid0@fb.com>
parents: 24349
diff changeset
211 def d():
f5b527024fcc perf: make measuring foldmap perf work again
Siddharth Agarwal <sid0@fb.com>
parents: 24349
diff changeset
212 dirstate._dirfoldmap.get('a')
f5b527024fcc perf: make measuring foldmap perf work again
Siddharth Agarwal <sid0@fb.com>
parents: 24349
diff changeset
213 del dirstate._dirfoldmap
22780
d8ff1f671aed perf: add a way to measure the perf of constructing the foldmap
Siddharth Agarwal <sid0@fb.com>
parents: 20846
diff changeset
214 del dirstate._dirs
d8ff1f671aed perf: add a way to measure the perf of constructing the foldmap
Siddharth Agarwal <sid0@fb.com>
parents: 20846
diff changeset
215 timer(d)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
216 fm.end()
22780
d8ff1f671aed perf: add a way to measure the perf of constructing the foldmap
Siddharth Agarwal <sid0@fb.com>
parents: 20846
diff changeset
217
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
218 @command('perfdirstatewrite', formatteropts)
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
219 def perfdirstatewrite(ui, repo, **opts):
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
220 timer, fm = gettimer(ui, opts)
16788
7e72c1609862 perf: add a perfdirstatewrite benchmark
Bryan O'Sullivan <bryano@fb.com>
parents: 16785
diff changeset
221 ds = repo.dirstate
7e72c1609862 perf: add a perfdirstatewrite benchmark
Bryan O'Sullivan <bryano@fb.com>
parents: 16785
diff changeset
222 "a" in ds
7e72c1609862 perf: add a perfdirstatewrite benchmark
Bryan O'Sullivan <bryano@fb.com>
parents: 16785
diff changeset
223 def d():
7e72c1609862 perf: add a perfdirstatewrite benchmark
Bryan O'Sullivan <bryano@fb.com>
parents: 16785
diff changeset
224 ds._dirty = True
26748
5ba0a99ff27f dirstate: make dirstate.write() callers pass transaction object to it
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 25850
diff changeset
225 ds.write(repo.currenttransaction())
16788
7e72c1609862 perf: add a perfdirstatewrite benchmark
Bryan O'Sullivan <bryano@fb.com>
parents: 16785
diff changeset
226 timer(d)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
227 fm.end()
16788
7e72c1609862 perf: add a perfdirstatewrite benchmark
Bryan O'Sullivan <bryano@fb.com>
parents: 16785
diff changeset
228
18817
c760acc6f69d perf: add a command to measure merge.calculateupdates perf
Siddharth Agarwal <sid0@fb.com>
parents: 18644
diff changeset
229 @command('perfmergecalculate',
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
230 [('r', 'rev', '.', 'rev to merge against')] + formatteropts)
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
231 def perfmergecalculate(ui, repo, rev, **opts):
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
232 timer, fm = gettimer(ui, opts)
18817
c760acc6f69d perf: add a command to measure merge.calculateupdates perf
Siddharth Agarwal <sid0@fb.com>
parents: 18644
diff changeset
233 wctx = repo[None]
c760acc6f69d perf: add a command to measure merge.calculateupdates perf
Siddharth Agarwal <sid0@fb.com>
parents: 18644
diff changeset
234 rctx = scmutil.revsingle(repo, rev, rev)
c760acc6f69d perf: add a command to measure merge.calculateupdates perf
Siddharth Agarwal <sid0@fb.com>
parents: 18644
diff changeset
235 ancestor = wctx.ancestor(rctx)
c760acc6f69d perf: add a command to measure merge.calculateupdates perf
Siddharth Agarwal <sid0@fb.com>
parents: 18644
diff changeset
236 # we don't want working dir files to be stat'd in the benchmark, so prime
c760acc6f69d perf: add a command to measure merge.calculateupdates perf
Siddharth Agarwal <sid0@fb.com>
parents: 18644
diff changeset
237 # that cache
c760acc6f69d perf: add a command to measure merge.calculateupdates perf
Siddharth Agarwal <sid0@fb.com>
parents: 18644
diff changeset
238 wctx.dirty()
c760acc6f69d perf: add a command to measure merge.calculateupdates perf
Siddharth Agarwal <sid0@fb.com>
parents: 18644
diff changeset
239 def d():
c760acc6f69d perf: add a command to measure merge.calculateupdates perf
Siddharth Agarwal <sid0@fb.com>
parents: 18644
diff changeset
240 # acceptremote is True because we don't want prompts in the middle of
c760acc6f69d perf: add a command to measure merge.calculateupdates perf
Siddharth Agarwal <sid0@fb.com>
parents: 18644
diff changeset
241 # our benchmark
c760acc6f69d perf: add a command to measure merge.calculateupdates perf
Siddharth Agarwal <sid0@fb.com>
parents: 18644
diff changeset
242 merge.calculateupdates(repo, wctx, rctx, ancestor, False, False, False,
c760acc6f69d perf: add a command to measure merge.calculateupdates perf
Siddharth Agarwal <sid0@fb.com>
parents: 18644
diff changeset
243 acceptremote=True)
c760acc6f69d perf: add a command to measure merge.calculateupdates perf
Siddharth Agarwal <sid0@fb.com>
parents: 18644
diff changeset
244 timer(d)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
245 fm.end()
18817
c760acc6f69d perf: add a command to measure merge.calculateupdates perf
Siddharth Agarwal <sid0@fb.com>
parents: 18644
diff changeset
246
18877
2e9fe9e2671f perf: add a command to test copies.pathcopies perf
Siddharth Agarwal <sid0@fb.com>
parents: 18871
diff changeset
247 @command('perfpathcopies', [], "REV REV")
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
248 def perfpathcopies(ui, repo, rev1, rev2, **opts):
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
249 timer, fm = gettimer(ui, opts)
18877
2e9fe9e2671f perf: add a command to test copies.pathcopies perf
Siddharth Agarwal <sid0@fb.com>
parents: 18871
diff changeset
250 ctx1 = scmutil.revsingle(repo, rev1, rev1)
2e9fe9e2671f perf: add a command to test copies.pathcopies perf
Siddharth Agarwal <sid0@fb.com>
parents: 18871
diff changeset
251 ctx2 = scmutil.revsingle(repo, rev2, rev2)
2e9fe9e2671f perf: add a command to test copies.pathcopies perf
Siddharth Agarwal <sid0@fb.com>
parents: 18871
diff changeset
252 def d():
2e9fe9e2671f perf: add a command to test copies.pathcopies perf
Siddharth Agarwal <sid0@fb.com>
parents: 18871
diff changeset
253 copies.pathcopies(ctx1, ctx2)
2e9fe9e2671f perf: add a command to test copies.pathcopies perf
Siddharth Agarwal <sid0@fb.com>
parents: 18871
diff changeset
254 timer(d)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
255 fm.end()
18877
2e9fe9e2671f perf: add a command to test copies.pathcopies perf
Siddharth Agarwal <sid0@fb.com>
parents: 18871
diff changeset
256
19712
79e5de2bfa8c perfmanifest: allow and require passing in a rev
Siddharth Agarwal <sid0@fb.com>
parents: 19711
diff changeset
257 @command('perfmanifest', [], 'REV')
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
258 def perfmanifest(ui, repo, rev, **opts):
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
259 timer, fm = gettimer(ui, opts)
19712
79e5de2bfa8c perfmanifest: allow and require passing in a rev
Siddharth Agarwal <sid0@fb.com>
parents: 19711
diff changeset
260 ctx = scmutil.revsingle(repo, rev, rev)
79e5de2bfa8c perfmanifest: allow and require passing in a rev
Siddharth Agarwal <sid0@fb.com>
parents: 19711
diff changeset
261 t = ctx.manifestnode()
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
262 def d():
19711
0a881ea4bed4 perfmanifest: fix cache invalidation
Siddharth Agarwal <sid0@fb.com>
parents: 19378
diff changeset
263 repo.manifest._mancache.clear()
0a881ea4bed4 perfmanifest: fix cache invalidation
Siddharth Agarwal <sid0@fb.com>
parents: 19378
diff changeset
264 repo.manifest._cache = None
19378
9de689d20230 cleanup: drop unused variables and an unused import
Simon Heimberg <simohe@besonet.ch>
parents: 19322
diff changeset
265 repo.manifest.read(t)
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
266 timer(d)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
267 fm.end()
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
268
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
269 @command('perfchangeset', formatteropts)
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
270 def perfchangeset(ui, repo, rev, **opts):
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
271 timer, fm = gettimer(ui, opts)
16262
bf7a6c3b2a4a perf: add perfchangeset to time changeset parsing
Matt Mackall <mpm@selenic.com>
parents: 16260
diff changeset
272 n = repo[rev].node()
bf7a6c3b2a4a perf: add perfchangeset to time changeset parsing
Matt Mackall <mpm@selenic.com>
parents: 16260
diff changeset
273 def d():
19378
9de689d20230 cleanup: drop unused variables and an unused import
Simon Heimberg <simohe@besonet.ch>
parents: 19322
diff changeset
274 repo.changelog.read(n)
16266
77d56a5e74a5 perf: add a changeset test
Matt Mackall <mpm@selenic.com>
parents: 16262
diff changeset
275 #repo.changelog._cache = None
16262
bf7a6c3b2a4a perf: add perfchangeset to time changeset parsing
Matt Mackall <mpm@selenic.com>
parents: 16260
diff changeset
276 timer(d)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
277 fm.end()
16262
bf7a6c3b2a4a perf: add perfchangeset to time changeset parsing
Matt Mackall <mpm@selenic.com>
parents: 16260
diff changeset
278
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
279 @command('perfindex', formatteropts)
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
280 def perfindex(ui, repo, **opts):
13255
2696730ca233 perf: make perfindex results useful on hg with lazyparser
Matt Mackall <mpm@selenic.com>
parents: 13254
diff changeset
281 import mercurial.revlog
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
282 timer, fm = gettimer(ui, opts)
13277
9f707b297b0f perf: restore lazyindex hack
Matt Mackall <mpm@selenic.com>
parents: 13262
diff changeset
283 mercurial.revlog._prereadsize = 2**24 # disable lazy parser in old hg
13254
5ef5eb1f3515 revlog: only build the nodemap on demand
Matt Mackall <mpm@selenic.com>
parents: 13253
diff changeset
284 n = repo["tip"].node()
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
285 def d():
23878
37a92908a382 localrepo: remove all external users of localrepo.sopener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents: 23788
diff changeset
286 cl = mercurial.revlog.revlog(repo.svfs, "00changelog.i")
16260
33fcad3cfbbc perf: tweak tests for testing index performance improvements
Matt Mackall <mpm@selenic.com>
parents: 14671
diff changeset
287 cl.rev(n)
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
288 timer(d)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
289 fm.end()
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
290
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
291 @command('perfstartup', formatteropts)
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
292 def perfstartup(ui, repo, **opts):
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
293 timer, fm = gettimer(ui, opts)
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
294 cmd = sys.argv[0]
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
295 def d():
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
296 os.system("HGRCPATH= %s version -q > /dev/null" % cmd)
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
297 timer(d)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
298 fm.end()
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
299
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
300 @command('perfparents', formatteropts)
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
301 def perfparents(ui, repo, **opts):
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
302 timer, fm = gettimer(ui, opts)
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
303 nl = [repo.changelog.node(i) for i in xrange(1000)]
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
304 def d():
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
305 for n in nl:
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
306 repo.changelog.parents(n)
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
307 timer(d)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
308 fm.end()
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
309
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
310 @command('perfctxfiles', formatteropts)
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
311 def perfparents(ui, repo, x, **opts):
24349
389693a245fa perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents: 23878
diff changeset
312 x = int(x)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
313 timer, fm = gettimer(ui, opts)
24349
389693a245fa perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents: 23878
diff changeset
314 def d():
389693a245fa perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents: 23878
diff changeset
315 len(repo[x].files())
389693a245fa perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents: 23878
diff changeset
316 timer(d)
389693a245fa perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents: 23878
diff changeset
317 fm.end()
389693a245fa perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents: 23878
diff changeset
318
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
319 @command('perfrawfiles', formatteropts)
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
320 def perfparents(ui, repo, x, **opts):
24349
389693a245fa perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents: 23878
diff changeset
321 x = int(x)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
322 timer, fm = gettimer(ui, opts)
24349
389693a245fa perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents: 23878
diff changeset
323 cl = repo.changelog
389693a245fa perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents: 23878
diff changeset
324 def d():
389693a245fa perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents: 23878
diff changeset
325 len(cl.read(x)[3])
389693a245fa perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents: 23878
diff changeset
326 timer(d)
389693a245fa perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents: 23878
diff changeset
327 fm.end()
389693a245fa perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents: 23878
diff changeset
328
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
329 @command('perflookup', formatteropts)
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
330 def perflookup(ui, repo, rev, **opts):
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
331 timer, fm = gettimer(ui, opts)
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
332
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
333 @command('perflookup', formatteropts)
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
334 def perflookup(ui, repo, rev, **opts):
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
335 timer, fm = gettimer(ui, opts)
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
336 timer(lambda: len(repo.lookup(rev)))
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
337 fm.end()
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
338
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
339 @command('perfrevrange', formatteropts)
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
340 def perfrevrange(ui, repo, *specs, **opts):
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
341 timer, fm = gettimer(ui, opts)
16858
fdf99e0f60f3 perf: add a benchmark for revrange
Bryan O'Sullivan <bryano@fb.com>
parents: 16802
diff changeset
342 revrange = scmutil.revrange
fdf99e0f60f3 perf: add a benchmark for revrange
Bryan O'Sullivan <bryano@fb.com>
parents: 16802
diff changeset
343 timer(lambda: len(revrange(repo, specs)))
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
344 fm.end()
16858
fdf99e0f60f3 perf: add a benchmark for revrange
Bryan O'Sullivan <bryano@fb.com>
parents: 16802
diff changeset
345
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
346 @command('perfnodelookup', formatteropts)
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
347 def perfnodelookup(ui, repo, rev, **opts):
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
348 timer, fm = gettimer(ui, opts)
16309
e0c1b3ef7c36 perf: node lookup
Matt Mackall <mpm@selenic.com>
parents: 16266
diff changeset
349 import mercurial.revlog
e0c1b3ef7c36 perf: node lookup
Matt Mackall <mpm@selenic.com>
parents: 16266
diff changeset
350 mercurial.revlog._prereadsize = 2**24 # disable lazy parser in old hg
e0c1b3ef7c36 perf: node lookup
Matt Mackall <mpm@selenic.com>
parents: 16266
diff changeset
351 n = repo[rev].node()
23878
37a92908a382 localrepo: remove all external users of localrepo.sopener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents: 23788
diff changeset
352 cl = mercurial.revlog.revlog(repo.svfs, "00changelog.i")
16414
e8d37b78acfb parsers: use base-16 trie for faster node->rev mapping
Bryan O'Sullivan <bryano@fb.com>
parents: 16403
diff changeset
353 def d():
e8d37b78acfb parsers: use base-16 trie for faster node->rev mapping
Bryan O'Sullivan <bryano@fb.com>
parents: 16403
diff changeset
354 cl.rev(n)
16785
1dc08dc63c09 perf: rework perfheads and perftags to clear caches
Bryan O'Sullivan <bryano@fb.com>
parents: 16689
diff changeset
355 clearcaches(cl)
16414
e8d37b78acfb parsers: use base-16 trie for faster node->rev mapping
Bryan O'Sullivan <bryano@fb.com>
parents: 16403
diff changeset
356 timer(d)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
357 fm.end()
16414
e8d37b78acfb parsers: use base-16 trie for faster node->rev mapping
Bryan O'Sullivan <bryano@fb.com>
parents: 16403
diff changeset
358
18237
4132dc9bd5c4 perftest: migrate to new style command declaration
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 18236
diff changeset
359 @command('perflog',
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
360 [('', 'rename', False, 'ask log to follow renames')] + formatteropts)
9932
2fcbef9a349a perf.perflog: add option to follow renames
Alexander Solovyov <piranha@piranha.org.ua>
parents: 9826
diff changeset
361 def perflog(ui, repo, **opts):
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
362 timer, fm = gettimer(ui, opts)
7872
f680a1bd679b contrib: add perflog and perftemplating commands to perf extension
Alexander Solovyov <piranha@piranha.org.ua>
parents: 7366
diff changeset
363 ui.pushbuffer()
9932
2fcbef9a349a perf.perflog: add option to follow renames
Alexander Solovyov <piranha@piranha.org.ua>
parents: 9826
diff changeset
364 timer(lambda: commands.log(ui, repo, rev=[], date='', user='',
2fcbef9a349a perf.perflog: add option to follow renames
Alexander Solovyov <piranha@piranha.org.ua>
parents: 9826
diff changeset
365 copies=opts.get('rename')))
7872
f680a1bd679b contrib: add perflog and perftemplating commands to perf extension
Alexander Solovyov <piranha@piranha.org.ua>
parents: 7366
diff changeset
366 ui.popbuffer()
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
367 fm.end()
7872
f680a1bd679b contrib: add perflog and perftemplating commands to perf extension
Alexander Solovyov <piranha@piranha.org.ua>
parents: 7366
diff changeset
368
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
369 @command('perfmoonwalk', formatteropts)
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
370 def perfmoonwalk(ui, repo, **opts):
20178
74aea4be8e78 perf: add perfmoonwalk command to walk the changelog backwards
Brodie Rao <brodie@sf.io>
parents: 20032
diff changeset
371 """benchmark walking the changelog backwards
74aea4be8e78 perf: add perfmoonwalk command to walk the changelog backwards
Brodie Rao <brodie@sf.io>
parents: 20032
diff changeset
372
74aea4be8e78 perf: add perfmoonwalk command to walk the changelog backwards
Brodie Rao <brodie@sf.io>
parents: 20032
diff changeset
373 This also loads the changelog data for each revision in the changelog.
74aea4be8e78 perf: add perfmoonwalk command to walk the changelog backwards
Brodie Rao <brodie@sf.io>
parents: 20032
diff changeset
374 """
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
375 timer, fm = gettimer(ui, opts)
20178
74aea4be8e78 perf: add perfmoonwalk command to walk the changelog backwards
Brodie Rao <brodie@sf.io>
parents: 20032
diff changeset
376 def moonwalk():
74aea4be8e78 perf: add perfmoonwalk command to walk the changelog backwards
Brodie Rao <brodie@sf.io>
parents: 20032
diff changeset
377 for i in xrange(len(repo), -1, -1):
74aea4be8e78 perf: add perfmoonwalk command to walk the changelog backwards
Brodie Rao <brodie@sf.io>
parents: 20032
diff changeset
378 ctx = repo[i]
74aea4be8e78 perf: add perfmoonwalk command to walk the changelog backwards
Brodie Rao <brodie@sf.io>
parents: 20032
diff changeset
379 ctx.branch() # read changelog data (in addition to the index)
74aea4be8e78 perf: add perfmoonwalk command to walk the changelog backwards
Brodie Rao <brodie@sf.io>
parents: 20032
diff changeset
380 timer(moonwalk)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
381 fm.end()
20178
74aea4be8e78 perf: add perfmoonwalk command to walk the changelog backwards
Brodie Rao <brodie@sf.io>
parents: 20032
diff changeset
382
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
383 @command('perftemplating', formatteropts)
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
384 def perftemplating(ui, repo, **opts):
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
385 timer, fm = gettimer(ui, opts)
7872
f680a1bd679b contrib: add perflog and perftemplating commands to perf extension
Alexander Solovyov <piranha@piranha.org.ua>
parents: 7366
diff changeset
386 ui.pushbuffer()
f680a1bd679b contrib: add perflog and perftemplating commands to perf extension
Alexander Solovyov <piranha@piranha.org.ua>
parents: 7366
diff changeset
387 timer(lambda: commands.log(ui, repo, rev=[], date='', user='',
f680a1bd679b contrib: add perflog and perftemplating commands to perf extension
Alexander Solovyov <piranha@piranha.org.ua>
parents: 7366
diff changeset
388 template='{date|shortdate} [{rev}:{node|short}]'
f680a1bd679b contrib: add perflog and perftemplating commands to perf extension
Alexander Solovyov <piranha@piranha.org.ua>
parents: 7366
diff changeset
389 ' {author|person}: {desc|firstline}\n'))
f680a1bd679b contrib: add perflog and perftemplating commands to perf extension
Alexander Solovyov <piranha@piranha.org.ua>
parents: 7366
diff changeset
390 ui.popbuffer()
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
391 fm.end()
7872
f680a1bd679b contrib: add perflog and perftemplating commands to perf extension
Alexander Solovyov <piranha@piranha.org.ua>
parents: 7366
diff changeset
392
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
393 @command('perfcca', formatteropts)
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
394 def perfcca(ui, repo, **opts):
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
395 timer, fm = gettimer(ui, opts)
17216
01c1ee4bd1dd perf: fix perfcca to work with new casecollisionauditor interface
Joshua Redstone <joshua.redstone@fb.com>
parents: 16866
diff changeset
396 timer(lambda: scmutil.casecollisionauditor(ui, False, repo.dirstate))
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
397 fm.end()
16386
ccc173d0914e perf: add case collision auditor perf
Matt Mackall <mpm@selenic.com>
parents: 16309
diff changeset
398
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
399 @command('perffncacheload', formatteropts)
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
400 def perffncacheload(ui, repo, **opts):
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
401 timer, fm = gettimer(ui, opts)
17780
769f66861eb8 perf: simply use repo.store for perffncache* commands
Adrian Buehlmann <adrian@cadifra.com>
parents: 17553
diff changeset
402 s = repo.store
16403
efae1fea4bbd perf: time fncache read and write performance
Bryan O'Sullivan <bryano@fb.com>
parents: 16386
diff changeset
403 def d():
efae1fea4bbd perf: time fncache read and write performance
Bryan O'Sullivan <bryano@fb.com>
parents: 16386
diff changeset
404 s.fncache._load()
efae1fea4bbd perf: time fncache read and write performance
Bryan O'Sullivan <bryano@fb.com>
parents: 16386
diff changeset
405 timer(d)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
406 fm.end()
16403
efae1fea4bbd perf: time fncache read and write performance
Bryan O'Sullivan <bryano@fb.com>
parents: 16386
diff changeset
407
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
408 @command('perffncachewrite', formatteropts)
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
409 def perffncachewrite(ui, repo, **opts):
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
410 timer, fm = gettimer(ui, opts)
17780
769f66861eb8 perf: simply use repo.store for perffncache* commands
Adrian Buehlmann <adrian@cadifra.com>
parents: 17553
diff changeset
411 s = repo.store
16403
efae1fea4bbd perf: time fncache read and write performance
Bryan O'Sullivan <bryano@fb.com>
parents: 16386
diff changeset
412 s.fncache._load()
efae1fea4bbd perf: time fncache read and write performance
Bryan O'Sullivan <bryano@fb.com>
parents: 16386
diff changeset
413 def d():
efae1fea4bbd perf: time fncache read and write performance
Bryan O'Sullivan <bryano@fb.com>
parents: 16386
diff changeset
414 s.fncache._dirty = True
efae1fea4bbd perf: time fncache read and write performance
Bryan O'Sullivan <bryano@fb.com>
parents: 16386
diff changeset
415 s.fncache.write()
efae1fea4bbd perf: time fncache read and write performance
Bryan O'Sullivan <bryano@fb.com>
parents: 16386
diff changeset
416 timer(d)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
417 fm.end()
16403
efae1fea4bbd perf: time fncache read and write performance
Bryan O'Sullivan <bryano@fb.com>
parents: 16386
diff changeset
418
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
419 @command('perffncacheencode', formatteropts)
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
420 def perffncacheencode(ui, repo, **opts):
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
421 timer, fm = gettimer(ui, opts)
17780
769f66861eb8 perf: simply use repo.store for perffncache* commands
Adrian Buehlmann <adrian@cadifra.com>
parents: 17553
diff changeset
422 s = repo.store
17553
5ab863922e0f perf: add perffncacheencode
Adrian Buehlmann <adrian@cadifra.com>
parents: 17216
diff changeset
423 s.fncache._load()
5ab863922e0f perf: add perffncacheencode
Adrian Buehlmann <adrian@cadifra.com>
parents: 17216
diff changeset
424 def d():
5ab863922e0f perf: add perffncacheencode
Adrian Buehlmann <adrian@cadifra.com>
parents: 17216
diff changeset
425 for p in s.fncache.entries:
5ab863922e0f perf: add perffncacheencode
Adrian Buehlmann <adrian@cadifra.com>
parents: 17216
diff changeset
426 s.encode(p)
5ab863922e0f perf: add perffncacheencode
Adrian Buehlmann <adrian@cadifra.com>
parents: 17216
diff changeset
427 timer(d)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
428 fm.end()
17553
5ab863922e0f perf: add perffncacheencode
Adrian Buehlmann <adrian@cadifra.com>
parents: 17216
diff changeset
429
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
430 @command('perfdiffwd', formatteropts)
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
431 def perfdiffwd(ui, repo, **opts):
9826
d768614578dd contrib/perf: profile diff of working directory changes
Patrick Mezard <pmezard@gmail.com>
parents: 9146
diff changeset
432 """Profile diff of working directory changes"""
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
433 timer, fm = gettimer(ui, opts)
9826
d768614578dd contrib/perf: profile diff of working directory changes
Patrick Mezard <pmezard@gmail.com>
parents: 9146
diff changeset
434 options = {
d768614578dd contrib/perf: profile diff of working directory changes
Patrick Mezard <pmezard@gmail.com>
parents: 9146
diff changeset
435 'w': 'ignore_all_space',
d768614578dd contrib/perf: profile diff of working directory changes
Patrick Mezard <pmezard@gmail.com>
parents: 9146
diff changeset
436 'b': 'ignore_space_change',
d768614578dd contrib/perf: profile diff of working directory changes
Patrick Mezard <pmezard@gmail.com>
parents: 9146
diff changeset
437 'B': 'ignore_blank_lines',
d768614578dd contrib/perf: profile diff of working directory changes
Patrick Mezard <pmezard@gmail.com>
parents: 9146
diff changeset
438 }
d768614578dd contrib/perf: profile diff of working directory changes
Patrick Mezard <pmezard@gmail.com>
parents: 9146
diff changeset
439
d768614578dd contrib/perf: profile diff of working directory changes
Patrick Mezard <pmezard@gmail.com>
parents: 9146
diff changeset
440 for diffopt in ('', 'w', 'b', 'B', 'wB'):
d768614578dd contrib/perf: profile diff of working directory changes
Patrick Mezard <pmezard@gmail.com>
parents: 9146
diff changeset
441 opts = dict((options[c], '1') for c in diffopt)
d768614578dd contrib/perf: profile diff of working directory changes
Patrick Mezard <pmezard@gmail.com>
parents: 9146
diff changeset
442 def d():
d768614578dd contrib/perf: profile diff of working directory changes
Patrick Mezard <pmezard@gmail.com>
parents: 9146
diff changeset
443 ui.pushbuffer()
d768614578dd contrib/perf: profile diff of working directory changes
Patrick Mezard <pmezard@gmail.com>
parents: 9146
diff changeset
444 commands.diff(ui, repo, **opts)
d768614578dd contrib/perf: profile diff of working directory changes
Patrick Mezard <pmezard@gmail.com>
parents: 9146
diff changeset
445 ui.popbuffer()
d768614578dd contrib/perf: profile diff of working directory changes
Patrick Mezard <pmezard@gmail.com>
parents: 9146
diff changeset
446 title = 'diffopts: %s' % (diffopt and ('-' + diffopt) or 'none')
d768614578dd contrib/perf: profile diff of working directory changes
Patrick Mezard <pmezard@gmail.com>
parents: 9146
diff changeset
447 timer(d, title)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
448 fm.end()
9826
d768614578dd contrib/perf: profile diff of working directory changes
Patrick Mezard <pmezard@gmail.com>
parents: 9146
diff changeset
449
18237
4132dc9bd5c4 perftest: migrate to new style command declaration
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 18236
diff changeset
450 @command('perfrevlog',
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
451 [('d', 'dist', 100, 'distance between the revisions')] + formatteropts,
18237
4132dc9bd5c4 perftest: migrate to new style command declaration
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 18236
diff changeset
452 "[INDEXFILE]")
11694
bf49d48e4602 perf: add perfrevlog function to check performance of revlog
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 10493
diff changeset
453 def perfrevlog(ui, repo, file_, **opts):
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
454 timer, fm = gettimer(ui, opts)
11694
bf49d48e4602 perf: add perfrevlog function to check performance of revlog
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 10493
diff changeset
455 from mercurial import revlog
bf49d48e4602 perf: add perfrevlog function to check performance of revlog
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 10493
diff changeset
456 dist = opts['dist']
bf49d48e4602 perf: add perfrevlog function to check performance of revlog
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 10493
diff changeset
457 def d():
bf49d48e4602 perf: add perfrevlog function to check performance of revlog
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 10493
diff changeset
458 r = revlog.revlog(lambda fn: open(fn, 'rb'), file_)
bf49d48e4602 perf: add perfrevlog function to check performance of revlog
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 10493
diff changeset
459 for x in xrange(0, len(r), dist):
bf49d48e4602 perf: add perfrevlog function to check performance of revlog
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 10493
diff changeset
460 r.revision(r.node(x))
bf49d48e4602 perf: add perfrevlog function to check performance of revlog
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 10493
diff changeset
461
bf49d48e4602 perf: add perfrevlog function to check performance of revlog
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 10493
diff changeset
462 timer(d)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
463 fm.end()
11694
bf49d48e4602 perf: add perfrevlog function to check performance of revlog
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 10493
diff changeset
464
18239
a95f1d619bb7 perftest: add an option to invalidate volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18238
diff changeset
465 @command('perfrevset',
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
466 [('C', 'clear', False, 'clear volatile cache between each call.')]
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
467 + formatteropts, "REVSET")
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
468 def perfrevset(ui, repo, expr, clear=False, **opts):
18239
a95f1d619bb7 perftest: add an option to invalidate volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18238
diff changeset
469 """benchmark the execution time of a revset
a95f1d619bb7 perftest: add an option to invalidate volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18238
diff changeset
470
18644
3e92772d5383 spelling: fix some minor issues found by spell checker
Mads Kiilerich <mads@kiilerich.com>
parents: 18304
diff changeset
471 Use the --clean option if need to evaluate the impact of build volatile
18239
a95f1d619bb7 perftest: add an option to invalidate volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18238
diff changeset
472 revisions set cache on the revset execution. Volatile cache hold filtered
a95f1d619bb7 perftest: add an option to invalidate volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18238
diff changeset
473 and obsolete related cache."""
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
474 timer, fm = gettimer(ui, opts)
18062
1471f5e83686 perf: add a command to measure revset performance
Siddharth Agarwal <sid0@fb.com>
parents: 18033
diff changeset
475 def d():
18239
a95f1d619bb7 perftest: add an option to invalidate volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18238
diff changeset
476 if clear:
a95f1d619bb7 perftest: add an option to invalidate volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18238
diff changeset
477 repo.invalidatevolatilesets()
20846
b581c5827516 perf: unroll the result in perfrevset
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 20205
diff changeset
478 for r in repo.revs(expr): pass
18062
1471f5e83686 perf: add a command to measure revset performance
Siddharth Agarwal <sid0@fb.com>
parents: 18033
diff changeset
479 timer(d)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
480 fm.end()
18240
a8318715d8bb perftest: add a command to benchmark construction of volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18239
diff changeset
481
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
482 @command('perfvolatilesets', formatteropts)
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
483 def perfvolatilesets(ui, repo, *names, **opts):
18240
a8318715d8bb perftest: add a command to benchmark construction of volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18239
diff changeset
484 """benchmark the computation of various volatile set
a8318715d8bb perftest: add a command to benchmark construction of volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18239
diff changeset
485
a8318715d8bb perftest: add a command to benchmark construction of volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18239
diff changeset
486 Volatile set computes element related to filtering and obsolescence."""
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
487 timer, fm = gettimer(ui, opts)
18240
a8318715d8bb perftest: add a command to benchmark construction of volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18239
diff changeset
488 repo = repo.unfiltered()
a8318715d8bb perftest: add a command to benchmark construction of volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18239
diff changeset
489
a8318715d8bb perftest: add a command to benchmark construction of volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18239
diff changeset
490 def getobs(name):
a8318715d8bb perftest: add a command to benchmark construction of volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18239
diff changeset
491 def d():
a8318715d8bb perftest: add a command to benchmark construction of volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18239
diff changeset
492 repo.invalidatevolatilesets()
a8318715d8bb perftest: add a command to benchmark construction of volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18239
diff changeset
493 obsolete.getrevs(repo, name)
a8318715d8bb perftest: add a command to benchmark construction of volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18239
diff changeset
494 return d
a8318715d8bb perftest: add a command to benchmark construction of volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18239
diff changeset
495
18241
f5ed27c51995 perftest: allow selection of volatile set to benchmark
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18240
diff changeset
496 allobs = sorted(obsolete.cachefuncs)
f5ed27c51995 perftest: allow selection of volatile set to benchmark
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18240
diff changeset
497 if names:
f5ed27c51995 perftest: allow selection of volatile set to benchmark
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18240
diff changeset
498 allobs = [n for n in allobs if n in names]
f5ed27c51995 perftest: allow selection of volatile set to benchmark
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18240
diff changeset
499
f5ed27c51995 perftest: allow selection of volatile set to benchmark
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18240
diff changeset
500 for name in allobs:
18240
a8318715d8bb perftest: add a command to benchmark construction of volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18239
diff changeset
501 timer(getobs(name), title=name)
a8318715d8bb perftest: add a command to benchmark construction of volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18239
diff changeset
502
a8318715d8bb perftest: add a command to benchmark construction of volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18239
diff changeset
503 def getfiltered(name):
a8318715d8bb perftest: add a command to benchmark construction of volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18239
diff changeset
504 def d():
a8318715d8bb perftest: add a command to benchmark construction of volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18239
diff changeset
505 repo.invalidatevolatilesets()
20205
d67a7758da6d perf: fix perfvolatilesets
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 20178
diff changeset
506 repoview.filterrevs(repo, name)
18240
a8318715d8bb perftest: add a command to benchmark construction of volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18239
diff changeset
507 return d
a8318715d8bb perftest: add a command to benchmark construction of volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18239
diff changeset
508
18241
f5ed27c51995 perftest: allow selection of volatile set to benchmark
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18240
diff changeset
509 allfilter = sorted(repoview.filtertable)
f5ed27c51995 perftest: allow selection of volatile set to benchmark
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18240
diff changeset
510 if names:
f5ed27c51995 perftest: allow selection of volatile set to benchmark
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18240
diff changeset
511 allfilter = [n for n in allfilter if n in names]
f5ed27c51995 perftest: allow selection of volatile set to benchmark
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18240
diff changeset
512
f5ed27c51995 perftest: allow selection of volatile set to benchmark
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18240
diff changeset
513 for name in allfilter:
18240
a8318715d8bb perftest: add a command to benchmark construction of volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18239
diff changeset
514 timer(getfiltered(name), title=name)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
515 fm.end()
18304
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
516
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
517 @command('perfbranchmap',
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
518 [('f', 'full', False,
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
519 'Includes build time of subset'),
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
520 ] + formatteropts)
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
521 def perfbranchmap(ui, repo, full=False, **opts):
18304
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
522 """benchmark the update of a branchmap
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
523
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
524 This benchmarks the full repo.branchmap() call with read and write disabled
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
525 """
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
526 timer, fm = gettimer(ui, opts)
18304
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
527 def getbranchmap(filtername):
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
528 """generate a benchmark function for the filtername"""
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
529 if filtername is None:
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
530 view = repo
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
531 else:
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
532 view = repo.filtered(filtername)
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
533 def d():
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
534 if full:
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
535 view._branchcaches.clear()
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
536 else:
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
537 view._branchcaches.pop(filtername, None)
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
538 view.branchmap()
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
539 return d
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
540 # add filter in smaller subset to bigger subset
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
541 possiblefilters = set(repoview.filtertable)
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
542 allfilters = []
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
543 while possiblefilters:
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
544 for name in possiblefilters:
20032
175c6fd8cacc subsettable: move from repoview to branchmap, the only place it's used
Augie Fackler <raf@durin42.com>
parents: 19786
diff changeset
545 subset = branchmap.subsettable.get(name)
18304
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
546 if subset not in possiblefilters:
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
547 break
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
548 else:
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
549 assert False, 'subset cycle %s!' % possiblefilters
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
550 allfilters.append(name)
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
551 possiblefilters.remove(name)
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
552
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
553 # warm the cache
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
554 if not full:
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
555 for name in allfilters:
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
556 repo.filtered(name).branchmap()
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
557 # add unfiltered
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
558 allfilters.append(None)
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
559 oldread = branchmap.read
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
560 oldwrite = branchmap.branchcache.write
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
561 try:
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
562 branchmap.read = lambda repo: None
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
563 branchmap.write = lambda repo: None
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
564 for name in allfilters:
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
565 timer(getbranchmap(name), title=str(name))
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
566 finally:
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
567 branchmap.read = oldread
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
568 branchmap.branchcache.write = oldwrite
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
569 fm.end()
23485
ccb93e9affc1 perf: add a perfloadmarkers command
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23171
diff changeset
570
ccb93e9affc1 perf: add a perfloadmarkers command
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23171
diff changeset
571 @command('perfloadmarkers')
ccb93e9affc1 perf: add a perfloadmarkers command
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23171
diff changeset
572 def perfloadmarkers(ui, repo):
ccb93e9affc1 perf: add a perfloadmarkers command
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23171
diff changeset
573 """benchmark the time to parse the on-disk markers for a repo
ccb93e9affc1 perf: add a perfloadmarkers command
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23171
diff changeset
574
ccb93e9affc1 perf: add a perfloadmarkers command
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23171
diff changeset
575 Result is the number of markers in the repo."""
ccb93e9affc1 perf: add a perfloadmarkers command
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23171
diff changeset
576 timer, fm = gettimer(ui)
23878
37a92908a382 localrepo: remove all external users of localrepo.sopener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents: 23788
diff changeset
577 timer(lambda: len(obsolete.obsstore(repo.svfs)))
23485
ccb93e9affc1 perf: add a perfloadmarkers command
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23171
diff changeset
578 fm.end()