annotate contrib/perf.py @ 40720:c0a1686d9391

perf: use the new setup function in "perfbookmarks" This command was picked arbitrarily to display the usefulness of the new feature. In my Mercurial repository (with very few bookmarks), moving cache cleanup in the dedicated setup function has a visible and stable effect on the benchmark number. before: ! wall 0.000061 comb 0.000000 user 0.000000 sys 0.000000 (median of 40837) after: ! wall 0.000058 comb 0.000000 user 0.000000 sys 0.000000 (median of 40500)
author Boris Feld <boris.feld@octobus.net>
date Mon, 19 Nov 2018 23:14:46 +0000
parents 9d88ae5c635b
children 4369c00a8ee1
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
29493
4533f5b47949 perf: add historical portability policy for future reference
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28561
diff changeset
4 # "historical portability" policy of perf.py:
4533f5b47949 perf: add historical portability policy for future reference
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28561
diff changeset
5 #
4533f5b47949 perf: add historical portability policy for future reference
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28561
diff changeset
6 # We have to do:
4533f5b47949 perf: add historical portability policy for future reference
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28561
diff changeset
7 # - make perf.py "loadable" with as wide Mercurial version as possible
4533f5b47949 perf: add historical portability policy for future reference
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28561
diff changeset
8 # This doesn't mean that perf commands work correctly with that Mercurial.
4533f5b47949 perf: add historical portability policy for future reference
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28561
diff changeset
9 # BTW, perf.py itself has been available since 1.1 (or eb240755386d).
4533f5b47949 perf: add historical portability policy for future reference
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28561
diff changeset
10 # - make historical perf command work correctly with as wide Mercurial
4533f5b47949 perf: add historical portability policy for future reference
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28561
diff changeset
11 # version as possible
4533f5b47949 perf: add historical portability policy for future reference
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28561
diff changeset
12 #
4533f5b47949 perf: add historical portability policy for future reference
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28561
diff changeset
13 # We have to do, if possible with reasonable cost:
4533f5b47949 perf: add historical portability policy for future reference
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28561
diff changeset
14 # - make recent perf command for historical feature work correctly
4533f5b47949 perf: add historical portability policy for future reference
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28561
diff changeset
15 # with early Mercurial
4533f5b47949 perf: add historical portability policy for future reference
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28561
diff changeset
16 #
4533f5b47949 perf: add historical portability policy for future reference
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28561
diff changeset
17 # We don't have to do:
4533f5b47949 perf: add historical portability policy for future reference
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28561
diff changeset
18 # - make perf command for recent feature work correctly with early
4533f5b47949 perf: add historical portability policy for future reference
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28561
diff changeset
19 # Mercurial
4533f5b47949 perf: add historical portability policy for future reference
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28561
diff changeset
20
28561
330584235c22 contrib: make perf.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27649
diff changeset
21 from __future__ import absolute_import
40144
acf560bc9b56 perf: extract the timing of a section in a context manager
Boris Feld <boris.feld@octobus.net>
parents: 40143
diff changeset
22 import contextlib
28561
330584235c22 contrib: make perf.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27649
diff changeset
23 import functools
31406
8f5ed8fa39f8 perf: perform a garbage collection before each iteration
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30997
diff changeset
24 import gc
28561
330584235c22 contrib: make perf.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27649
diff changeset
25 import os
27286
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
26 import random
40597
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
27 import shutil
32565
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
28 import struct
28561
330584235c22 contrib: make perf.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27649
diff changeset
29 import sys
40597
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
30 import tempfile
35599
af25237be091 perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents: 35137
diff changeset
31 import threading
28561
330584235c22 contrib: make perf.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27649
diff changeset
32 import time
330584235c22 contrib: make perf.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27649
diff changeset
33 from mercurial import (
30020
bd6df07ccc24 perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30019
diff changeset
34 changegroup,
28561
330584235c22 contrib: make perf.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27649
diff changeset
35 cmdutil,
330584235c22 contrib: make perf.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27649
diff changeset
36 commands,
330584235c22 contrib: make perf.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27649
diff changeset
37 copies,
330584235c22 contrib: make perf.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27649
diff changeset
38 error,
29495
f83445296213 perf: use locally defined revlog option list for Mercurial earlier than 3.7
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29494
diff changeset
39 extensions,
28561
330584235c22 contrib: make perf.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27649
diff changeset
40 mdiff,
330584235c22 contrib: make perf.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27649
diff changeset
41 merge,
32565
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
42 revlog,
28561
330584235c22 contrib: make perf.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27649
diff changeset
43 util,
330584235c22 contrib: make perf.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27649
diff changeset
44 )
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
45
29494
3b5389ef5cfe perf: define util.safehasattr forcibly for Mercurial earlier than 1.9.3
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29493
diff changeset
46 # for "historical portability":
29567
7e2b389418da perf: import newer modules separately for earlier Mercurial
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29497
diff changeset
47 # try to import modules separately (in dict order), and ignore
7e2b389418da perf: import newer modules separately for earlier Mercurial
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29497
diff changeset
48 # failure, because these aren't available with early Mercurial
7e2b389418da perf: import newer modules separately for earlier Mercurial
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29497
diff changeset
49 try:
7e2b389418da perf: import newer modules separately for earlier Mercurial
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29497
diff changeset
50 from mercurial import branchmap # since 2.5 (or bcee63733aad)
7e2b389418da perf: import newer modules separately for earlier Mercurial
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29497
diff changeset
51 except ImportError:
7e2b389418da perf: import newer modules separately for earlier Mercurial
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29497
diff changeset
52 pass
7e2b389418da perf: import newer modules separately for earlier Mercurial
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29497
diff changeset
53 try:
7e2b389418da perf: import newer modules separately for earlier Mercurial
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29497
diff changeset
54 from mercurial import obsolete # since 2.3 (or ad0d6c2b3279)
7e2b389418da perf: import newer modules separately for earlier Mercurial
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29497
diff changeset
55 except ImportError:
7e2b389418da perf: import newer modules separately for earlier Mercurial
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29497
diff changeset
56 pass
7e2b389418da perf: import newer modules separately for earlier Mercurial
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29497
diff changeset
57 try:
32376
46ba2cdda476 registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32337
diff changeset
58 from mercurial import registrar # since 3.7 (or 37d50250b696)
46ba2cdda476 registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32337
diff changeset
59 dir(registrar) # forcibly load it
46ba2cdda476 registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32337
diff changeset
60 except ImportError:
46ba2cdda476 registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32337
diff changeset
61 registrar = None
46ba2cdda476 registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32337
diff changeset
62 try:
29567
7e2b389418da perf: import newer modules separately for earlier Mercurial
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29497
diff changeset
63 from mercurial import repoview # since 2.5 (or 3a6ddacb7198)
7e2b389418da perf: import newer modules separately for earlier Mercurial
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29497
diff changeset
64 except ImportError:
7e2b389418da perf: import newer modules separately for earlier Mercurial
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29497
diff changeset
65 pass
7e2b389418da perf: import newer modules separately for earlier Mercurial
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29497
diff changeset
66 try:
7e2b389418da perf: import newer modules separately for earlier Mercurial
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29497
diff changeset
67 from mercurial import scmutil # since 1.9 (or 8b252e826c68)
7e2b389418da perf: import newer modules separately for earlier Mercurial
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29497
diff changeset
68 except ImportError:
7e2b389418da perf: import newer modules separately for earlier Mercurial
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29497
diff changeset
69 pass
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
70
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
71 def identity(a):
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
72 return a
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
73
36216
646002338365 py3: introduce and use pycompat.getargspec
Augie Fackler <augie@google.com>
parents: 35990
diff changeset
74 try:
646002338365 py3: introduce and use pycompat.getargspec
Augie Fackler <augie@google.com>
parents: 35990
diff changeset
75 from mercurial import pycompat
646002338365 py3: introduce and use pycompat.getargspec
Augie Fackler <augie@google.com>
parents: 35990
diff changeset
76 getargspec = pycompat.getargspec # added to module after 4.5
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
77 _byteskwargs = pycompat.byteskwargs # since 4.1 (or fbc3f73dc802)
39826
6787dc1b93a9 py3: handle sysstr conversion around get/set attr in contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39779
diff changeset
78 _sysstr = pycompat.sysstr # since 4.0 (or 2219f4f82ede)
39827
86dbeb7c9a11 py3: switch contrib/perf from xrange to pycompat.xrange
Matt Harbison <matt_harbison@yahoo.com>
parents: 39826
diff changeset
79 _xrange = pycompat.xrange # since 4.8 (or 7eba8f83129b)
40214
b456b2e0ad9f py3: make test-contrib-perf.t work on python 3
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 40145
diff changeset
80 fsencode = pycompat.fsencode # since 3.9 (or f4a5e0e86a7e)
39828
c4ab9fa81377 py3: work around the lack of sys.maxint in contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39827
diff changeset
81 if pycompat.ispy3:
c4ab9fa81377 py3: work around the lack of sys.maxint in contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39827
diff changeset
82 _maxint = sys.maxsize # per py3 docs for replacing maxint
c4ab9fa81377 py3: work around the lack of sys.maxint in contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39827
diff changeset
83 else:
c4ab9fa81377 py3: work around the lack of sys.maxint in contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39827
diff changeset
84 _maxint = sys.maxint
36216
646002338365 py3: introduce and use pycompat.getargspec
Augie Fackler <augie@google.com>
parents: 35990
diff changeset
85 except (ImportError, AttributeError):
646002338365 py3: introduce and use pycompat.getargspec
Augie Fackler <augie@google.com>
parents: 35990
diff changeset
86 import inspect
646002338365 py3: introduce and use pycompat.getargspec
Augie Fackler <augie@google.com>
parents: 35990
diff changeset
87 getargspec = inspect.getargspec
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
88 _byteskwargs = identity
40214
b456b2e0ad9f py3: make test-contrib-perf.t work on python 3
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 40145
diff changeset
89 fsencode = identity # no py3 support
39828
c4ab9fa81377 py3: work around the lack of sys.maxint in contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39827
diff changeset
90 _maxint = sys.maxint # no py3 support
39826
6787dc1b93a9 py3: handle sysstr conversion around get/set attr in contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39779
diff changeset
91 _sysstr = lambda x: x # no py3 support
39827
86dbeb7c9a11 py3: switch contrib/perf from xrange to pycompat.xrange
Matt Harbison <matt_harbison@yahoo.com>
parents: 39826
diff changeset
92 _xrange = xrange
29567
7e2b389418da perf: import newer modules separately for earlier Mercurial
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29497
diff changeset
93
37890
8fb9985382be pycompat: export queue module instead of symbols in module (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37355
diff changeset
94 try:
8fb9985382be pycompat: export queue module instead of symbols in module (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37355
diff changeset
95 # 4.7+
8fb9985382be pycompat: export queue module instead of symbols in module (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37355
diff changeset
96 queue = pycompat.queue.Queue
8fb9985382be pycompat: export queue module instead of symbols in module (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37355
diff changeset
97 except (AttributeError, ImportError):
8fb9985382be pycompat: export queue module instead of symbols in module (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37355
diff changeset
98 # <4.7.
8fb9985382be pycompat: export queue module instead of symbols in module (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37355
diff changeset
99 try:
8fb9985382be pycompat: export queue module instead of symbols in module (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37355
diff changeset
100 queue = pycompat.queue
8fb9985382be pycompat: export queue module instead of symbols in module (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37355
diff changeset
101 except (AttributeError, ImportError):
8fb9985382be pycompat: export queue module instead of symbols in module (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37355
diff changeset
102 queue = util.queue
8fb9985382be pycompat: export queue module instead of symbols in module (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37355
diff changeset
103
38269
a577a199983c perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents: 38268
diff changeset
104 try:
a577a199983c perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents: 38268
diff changeset
105 from mercurial import logcmdutil
a577a199983c perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents: 38268
diff changeset
106 makelogtemplater = logcmdutil.maketemplater
a577a199983c perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents: 38268
diff changeset
107 except (AttributeError, ImportError):
a577a199983c perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents: 38268
diff changeset
108 try:
a577a199983c perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents: 38268
diff changeset
109 makelogtemplater = cmdutil.makelogtemplater
a577a199983c perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents: 38268
diff changeset
110 except (AttributeError, ImportError):
a577a199983c perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents: 38268
diff changeset
111 makelogtemplater = None
a577a199983c perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents: 38268
diff changeset
112
29567
7e2b389418da perf: import newer modules separately for earlier Mercurial
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29497
diff changeset
113 # for "historical portability":
29494
3b5389ef5cfe perf: define util.safehasattr forcibly for Mercurial earlier than 1.9.3
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29493
diff changeset
114 # define util.safehasattr forcibly, because util.safehasattr has been
3b5389ef5cfe perf: define util.safehasattr forcibly for Mercurial earlier than 1.9.3
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29493
diff changeset
115 # available since 1.9.3 (or 94b200a11cf7)
3b5389ef5cfe perf: define util.safehasattr forcibly for Mercurial earlier than 1.9.3
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29493
diff changeset
116 _undefined = object()
3b5389ef5cfe perf: define util.safehasattr forcibly for Mercurial earlier than 1.9.3
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29493
diff changeset
117 def safehasattr(thing, attr):
39826
6787dc1b93a9 py3: handle sysstr conversion around get/set attr in contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39779
diff changeset
118 return getattr(thing, _sysstr(attr), _undefined) is not _undefined
29494
3b5389ef5cfe perf: define util.safehasattr forcibly for Mercurial earlier than 1.9.3
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29493
diff changeset
119 setattr(util, 'safehasattr', safehasattr)
3b5389ef5cfe perf: define util.safehasattr forcibly for Mercurial earlier than 1.9.3
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29493
diff changeset
120
29496
7299370cf304 perf: avoid using formatteropts for Mercurial earlier than 3.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29495
diff changeset
121 # for "historical portability":
31823
f6d77af84ef3 perf: add historical portability for util.timer
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 31483
diff changeset
122 # define util.timer forcibly, because util.timer has been available
f6d77af84ef3 perf: add historical portability for util.timer
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 31483
diff changeset
123 # since ae5d60bb70c9
f6d77af84ef3 perf: add historical portability for util.timer
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 31483
diff changeset
124 if safehasattr(time, 'perf_counter'):
f6d77af84ef3 perf: add historical portability for util.timer
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 31483
diff changeset
125 util.timer = time.perf_counter
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
126 elif os.name == b'nt':
31823
f6d77af84ef3 perf: add historical portability for util.timer
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 31483
diff changeset
127 util.timer = time.clock
f6d77af84ef3 perf: add historical portability for util.timer
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 31483
diff changeset
128 else:
f6d77af84ef3 perf: add historical portability for util.timer
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 31483
diff changeset
129 util.timer = time.time
f6d77af84ef3 perf: add historical portability for util.timer
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 31483
diff changeset
130
f6d77af84ef3 perf: add historical portability for util.timer
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 31483
diff changeset
131 # for "historical portability":
29496
7299370cf304 perf: avoid using formatteropts for Mercurial earlier than 3.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29495
diff changeset
132 # use locally defined empty option list, if formatteropts isn't
7299370cf304 perf: avoid using formatteropts for Mercurial earlier than 3.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29495
diff changeset
133 # available, because commands.formatteropts has been available since
7299370cf304 perf: avoid using formatteropts for Mercurial earlier than 3.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29495
diff changeset
134 # 3.2 (or 7a7eed5176a4), even though formatting itself has been
7299370cf304 perf: avoid using formatteropts for Mercurial earlier than 3.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29495
diff changeset
135 # available since 2.2 (or ae5f92e154d3)
32414
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32376
diff changeset
136 formatteropts = getattr(cmdutil, "formatteropts",
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32376
diff changeset
137 getattr(commands, "formatteropts", []))
29495
f83445296213 perf: use locally defined revlog option list for Mercurial earlier than 3.7
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29494
diff changeset
138
f83445296213 perf: use locally defined revlog option list for Mercurial earlier than 3.7
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29494
diff changeset
139 # for "historical portability":
f83445296213 perf: use locally defined revlog option list for Mercurial earlier than 3.7
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29494
diff changeset
140 # use locally defined option list, if debugrevlogopts isn't available,
f83445296213 perf: use locally defined revlog option list for Mercurial earlier than 3.7
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29494
diff changeset
141 # because commands.debugrevlogopts has been available since 3.7 (or
f83445296213 perf: use locally defined revlog option list for Mercurial earlier than 3.7
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29494
diff changeset
142 # 5606f7d0d063), even though cmdutil.openrevlog() has been available
f83445296213 perf: use locally defined revlog option list for Mercurial earlier than 3.7
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29494
diff changeset
143 # since 1.9 (or a79fea6b3e77).
32414
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32376
diff changeset
144 revlogopts = getattr(cmdutil, "debugrevlogopts",
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32376
diff changeset
145 getattr(commands, "debugrevlogopts", [
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
146 (b'c', b'changelog', False, (b'open changelog')),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
147 (b'm', b'manifest', False, (b'open manifest')),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
148 (b'', b'dir', False, (b'open directory manifest')),
32414
04baab18d60a commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32376
diff changeset
149 ]))
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
150
18237
4132dc9bd5c4 perftest: migrate to new style command declaration
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 18236
diff changeset
151 cmdtable = {}
29497
ee2027195847 perf: define command annotation locally for Mercurial earlier than 3.1
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29496
diff changeset
152
ee2027195847 perf: define command annotation locally for Mercurial earlier than 3.1
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29496
diff changeset
153 # for "historical portability":
ee2027195847 perf: define command annotation locally for Mercurial earlier than 3.1
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29496
diff changeset
154 # define parsealiases locally, because cmdutil.parsealiases has been
ee2027195847 perf: define command annotation locally for Mercurial earlier than 3.1
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29496
diff changeset
155 # available since 1.5 (or 6252852b4332)
ee2027195847 perf: define command annotation locally for Mercurial earlier than 3.1
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29496
diff changeset
156 def parsealiases(cmd):
40295
fa88170c10bb help: adding a proper declaration for shortlist/basic commands (API)
Rodrigo Damazio <rdamazio@google.com>
parents: 40214
diff changeset
157 return cmd.split(b"|")
29497
ee2027195847 perf: define command annotation locally for Mercurial earlier than 3.1
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29496
diff changeset
158
32376
46ba2cdda476 registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32337
diff changeset
159 if safehasattr(registrar, 'command'):
46ba2cdda476 registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32337
diff changeset
160 command = registrar.command(cmdtable)
46ba2cdda476 registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 32337
diff changeset
161 elif safehasattr(cmdutil, 'command'):
29497
ee2027195847 perf: define command annotation locally for Mercurial earlier than 3.1
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29496
diff changeset
162 command = cmdutil.command(cmdtable)
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
163 if b'norepo' not in getargspec(command).args:
29497
ee2027195847 perf: define command annotation locally for Mercurial earlier than 3.1
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29496
diff changeset
164 # for "historical portability":
ee2027195847 perf: define command annotation locally for Mercurial earlier than 3.1
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29496
diff changeset
165 # wrap original cmdutil.command, because "norepo" option has
ee2027195847 perf: define command annotation locally for Mercurial earlier than 3.1
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29496
diff changeset
166 # been available since 3.1 (or 75a96326cecb)
ee2027195847 perf: define command annotation locally for Mercurial earlier than 3.1
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29496
diff changeset
167 _command = command
ee2027195847 perf: define command annotation locally for Mercurial earlier than 3.1
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29496
diff changeset
168 def command(name, options=(), synopsis=None, norepo=False):
ee2027195847 perf: define command annotation locally for Mercurial earlier than 3.1
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29496
diff changeset
169 if norepo:
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
170 commands.norepo += b' %s' % b' '.join(parsealiases(name))
29497
ee2027195847 perf: define command annotation locally for Mercurial earlier than 3.1
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29496
diff changeset
171 return _command(name, list(options), synopsis)
ee2027195847 perf: define command annotation locally for Mercurial earlier than 3.1
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29496
diff changeset
172 else:
ee2027195847 perf: define command annotation locally for Mercurial earlier than 3.1
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29496
diff changeset
173 # for "historical portability":
ee2027195847 perf: define command annotation locally for Mercurial earlier than 3.1
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29496
diff changeset
174 # define "@command" annotation locally, because cmdutil.command
ee2027195847 perf: define command annotation locally for Mercurial earlier than 3.1
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29496
diff changeset
175 # has been available since 1.9 (or 2daa5179e73f)
ee2027195847 perf: define command annotation locally for Mercurial earlier than 3.1
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29496
diff changeset
176 def command(name, options=(), synopsis=None, norepo=False):
ee2027195847 perf: define command annotation locally for Mercurial earlier than 3.1
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29496
diff changeset
177 def decorator(func):
ee2027195847 perf: define command annotation locally for Mercurial earlier than 3.1
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29496
diff changeset
178 if synopsis:
ee2027195847 perf: define command annotation locally for Mercurial earlier than 3.1
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29496
diff changeset
179 cmdtable[name] = func, list(options), synopsis
ee2027195847 perf: define command annotation locally for Mercurial earlier than 3.1
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29496
diff changeset
180 else:
ee2027195847 perf: define command annotation locally for Mercurial earlier than 3.1
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29496
diff changeset
181 cmdtable[name] = func, list(options)
ee2027195847 perf: define command annotation locally for Mercurial earlier than 3.1
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29496
diff changeset
182 if norepo:
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
183 commands.norepo += b' %s' % b' '.join(parsealiases(name))
29497
ee2027195847 perf: define command annotation locally for Mercurial earlier than 3.1
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29496
diff changeset
184 return func
ee2027195847 perf: define command annotation locally for Mercurial earlier than 3.1
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29496
diff changeset
185 return decorator
18237
4132dc9bd5c4 perftest: migrate to new style command declaration
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 18236
diff changeset
186
34494
bbb5687e5140 configitems: register the 'perf.stub' config
Boris Feld <boris.feld@octobus.net>
parents: 34350
diff changeset
187 try:
34749
acdc574cb8d7 contrib-perf: update the config registration
Boris Feld <boris.feld@octobus.net>
parents: 34678
diff changeset
188 import mercurial.registrar
acdc574cb8d7 contrib-perf: update the config registration
Boris Feld <boris.feld@octobus.net>
parents: 34678
diff changeset
189 import mercurial.configitems
34494
bbb5687e5140 configitems: register the 'perf.stub' config
Boris Feld <boris.feld@octobus.net>
parents: 34350
diff changeset
190 configtable = {}
34749
acdc574cb8d7 contrib-perf: update the config registration
Boris Feld <boris.feld@octobus.net>
parents: 34678
diff changeset
191 configitem = mercurial.registrar.configitem(configtable)
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
192 configitem(b'perf', b'presleep',
34749
acdc574cb8d7 contrib-perf: update the config registration
Boris Feld <boris.feld@octobus.net>
parents: 34678
diff changeset
193 default=mercurial.configitems.dynamicdefault,
acdc574cb8d7 contrib-perf: update the config registration
Boris Feld <boris.feld@octobus.net>
parents: 34678
diff changeset
194 )
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
195 configitem(b'perf', b'stub',
34749
acdc574cb8d7 contrib-perf: update the config registration
Boris Feld <boris.feld@octobus.net>
parents: 34678
diff changeset
196 default=mercurial.configitems.dynamicdefault,
34494
bbb5687e5140 configitems: register the 'perf.stub' config
Boris Feld <boris.feld@octobus.net>
parents: 34350
diff changeset
197 )
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
198 configitem(b'perf', b'parentscount',
34750
caf6c446cbe3 contrib-perf: register the 'parentscount' config item
Boris Feld <boris.feld@octobus.net>
parents: 34749
diff changeset
199 default=mercurial.configitems.dynamicdefault,
caf6c446cbe3 contrib-perf: register the 'parentscount' config item
Boris Feld <boris.feld@octobus.net>
parents: 34749
diff changeset
200 )
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
201 configitem(b'perf', b'all-timing',
38694
55101513ed94 perf: add a 'perf.all-timing' option to display more than best time
Boris Feld <boris.feld@octobus.net>
parents: 38693
diff changeset
202 default=mercurial.configitems.dynamicdefault,
55101513ed94 perf: add a 'perf.all-timing' option to display more than best time
Boris Feld <boris.feld@octobus.net>
parents: 38693
diff changeset
203 )
34494
bbb5687e5140 configitems: register the 'perf.stub' config
Boris Feld <boris.feld@octobus.net>
parents: 34350
diff changeset
204 except (ImportError, AttributeError):
bbb5687e5140 configitems: register the 'perf.stub' config
Boris Feld <boris.feld@octobus.net>
parents: 34350
diff changeset
205 pass
bbb5687e5140 configitems: register the 'perf.stub' config
Boris Feld <boris.feld@octobus.net>
parents: 34350
diff changeset
206
27307
f36dc0062b1a perf: add getlen
timeless <timeless@mozdev.org>
parents: 27306
diff changeset
207 def getlen(ui):
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
208 if ui.configbool(b"perf", b"stub", False):
27307
f36dc0062b1a perf: add getlen
timeless <timeless@mozdev.org>
parents: 27306
diff changeset
209 return lambda x: 1
f36dc0062b1a perf: add getlen
timeless <timeless@mozdev.org>
parents: 27306
diff changeset
210 return len
f36dc0062b1a perf: add getlen
timeless <timeless@mozdev.org>
parents: 27306
diff changeset
211
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
212 def gettimer(ui, opts=None):
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
213 """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
214
27303
57bd9c5431a5 perf: improve grammar of gettimer comment
timeless <timeless@mozdev.org>
parents: 27286
diff changeset
215 This function exists to gather the creation of formatter in a single
57bd9c5431a5 perf: improve grammar of gettimer comment
timeless <timeless@mozdev.org>
parents: 27286
diff changeset
216 place instead of duplicating it in all performance commands."""
23788
316ad725a1dd perf: add a configurable sleep on startup
Matt Mackall <mpm@selenic.com>
parents: 23537
diff changeset
217
316ad725a1dd perf: add a configurable sleep on startup
Matt Mackall <mpm@selenic.com>
parents: 23537
diff changeset
218 # 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
219 # experimental config: perf.presleep
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
220 time.sleep(getint(ui, b"perf", b"presleep", 1))
23788
316ad725a1dd perf: add a configurable sleep on startup
Matt Mackall <mpm@selenic.com>
parents: 23537
diff changeset
221
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
222 if opts is None:
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
223 opts = {}
30415
e77e8876886f perf: omit copying ui and redirect to ferr if buffer API is in use
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 30380
diff changeset
224 # redirect all to stderr unless buffer api is in use
e77e8876886f perf: omit copying ui and redirect to ferr if buffer API is in use
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 30380
diff changeset
225 if not ui._buffers:
e77e8876886f perf: omit copying ui and redirect to ferr if buffer API is in use
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 30380
diff changeset
226 ui = ui.copy()
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
227 uifout = safeattrsetter(ui, b'fout', ignoremissing=True)
30415
e77e8876886f perf: omit copying ui and redirect to ferr if buffer API is in use
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 30380
diff changeset
228 if uifout:
e77e8876886f perf: omit copying ui and redirect to ferr if buffer API is in use
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 30380
diff changeset
229 # for "historical portability":
e77e8876886f perf: omit copying ui and redirect to ferr if buffer API is in use
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 30380
diff changeset
230 # ui.fout/ferr have been available since 1.9 (or 4e1ccd4c2b6d)
e77e8876886f perf: omit copying ui and redirect to ferr if buffer API is in use
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents: 30380
diff changeset
231 uifout.set(ui.ferr)
30147
423bf74d2e5b perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30146
diff changeset
232
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
233 # get a formatter
30147
423bf74d2e5b perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30146
diff changeset
234 uiformatter = getattr(ui, 'formatter', None)
423bf74d2e5b perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30146
diff changeset
235 if uiformatter:
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
236 fm = uiformatter(b'perf', opts)
30147
423bf74d2e5b perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30146
diff changeset
237 else:
423bf74d2e5b perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30146
diff changeset
238 # for "historical portability":
423bf74d2e5b perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30146
diff changeset
239 # define formatter locally, because ui.formatter has been
423bf74d2e5b perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30146
diff changeset
240 # available since 2.2 (or ae5f92e154d3)
423bf74d2e5b perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30146
diff changeset
241 from mercurial import node
423bf74d2e5b perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30146
diff changeset
242 class defaultformatter(object):
423bf74d2e5b perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30146
diff changeset
243 """Minimized composition of baseformatter and plainformatter
423bf74d2e5b perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30146
diff changeset
244 """
423bf74d2e5b perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30146
diff changeset
245 def __init__(self, ui, topic, opts):
423bf74d2e5b perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30146
diff changeset
246 self._ui = ui
423bf74d2e5b perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30146
diff changeset
247 if ui.debugflag:
423bf74d2e5b perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30146
diff changeset
248 self.hexfunc = node.hex
423bf74d2e5b perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30146
diff changeset
249 else:
423bf74d2e5b perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30146
diff changeset
250 self.hexfunc = node.short
423bf74d2e5b perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30146
diff changeset
251 def __nonzero__(self):
423bf74d2e5b perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30146
diff changeset
252 return False
31483
413b44003462 py3: add __bool__ to every class defining __nonzero__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 31406
diff changeset
253 __bool__ = __nonzero__
30147
423bf74d2e5b perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30146
diff changeset
254 def startitem(self):
423bf74d2e5b perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30146
diff changeset
255 pass
423bf74d2e5b perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30146
diff changeset
256 def data(self, **data):
423bf74d2e5b perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30146
diff changeset
257 pass
423bf74d2e5b perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30146
diff changeset
258 def write(self, fields, deftext, *fielddata, **opts):
423bf74d2e5b perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30146
diff changeset
259 self._ui.write(deftext % fielddata, **opts)
423bf74d2e5b perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30146
diff changeset
260 def condwrite(self, cond, fields, deftext, *fielddata, **opts):
423bf74d2e5b perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30146
diff changeset
261 if cond:
423bf74d2e5b perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30146
diff changeset
262 self._ui.write(deftext % fielddata, **opts)
423bf74d2e5b perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30146
diff changeset
263 def plain(self, text, **opts):
423bf74d2e5b perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30146
diff changeset
264 self._ui.write(text, **opts)
423bf74d2e5b perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30146
diff changeset
265 def end(self):
423bf74d2e5b perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30146
diff changeset
266 pass
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
267 fm = defaultformatter(ui, b'perf', opts)
30147
423bf74d2e5b perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30146
diff changeset
268
27304
a6fd79495770 perf: offer perf.stub to only run one loop
timeless <timeless@mozdev.org>
parents: 27303
diff changeset
269 # stub function, runs code only once instead of in a loop
a6fd79495770 perf: offer perf.stub to only run one loop
timeless <timeless@mozdev.org>
parents: 27303
diff changeset
270 # experimental config: perf.stub
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
271 if ui.configbool(b"perf", b"stub", False):
27304
a6fd79495770 perf: offer perf.stub to only run one loop
timeless <timeless@mozdev.org>
parents: 27303
diff changeset
272 return functools.partial(stub_timer, fm), fm
38694
55101513ed94 perf: add a 'perf.all-timing' option to display more than best time
Boris Feld <boris.feld@octobus.net>
parents: 38693
diff changeset
273
55101513ed94 perf: add a 'perf.all-timing' option to display more than best time
Boris Feld <boris.feld@octobus.net>
parents: 38693
diff changeset
274 # experimental config: perf.all-timing
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
275 displayall = ui.configbool(b"perf", b"all-timing", False)
38694
55101513ed94 perf: add a 'perf.all-timing' option to display more than best time
Boris Feld <boris.feld@octobus.net>
parents: 38693
diff changeset
276 return functools.partial(_timer, fm, displayall=displayall), fm
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
277
40719
9d88ae5c635b perf: add a `setup` argument to run code outside of the timed section
Boris Feld <boris.feld@octobus.net>
parents: 40718
diff changeset
278 def stub_timer(fm, func, setup=None, title=None):
27304
a6fd79495770 perf: offer perf.stub to only run one loop
timeless <timeless@mozdev.org>
parents: 27303
diff changeset
279 func()
a6fd79495770 perf: offer perf.stub to only run one loop
timeless <timeless@mozdev.org>
parents: 27303
diff changeset
280
40144
acf560bc9b56 perf: extract the timing of a section in a context manager
Boris Feld <boris.feld@octobus.net>
parents: 40143
diff changeset
281 @contextlib.contextmanager
acf560bc9b56 perf: extract the timing of a section in a context manager
Boris Feld <boris.feld@octobus.net>
parents: 40143
diff changeset
282 def timeone():
acf560bc9b56 perf: extract the timing of a section in a context manager
Boris Feld <boris.feld@octobus.net>
parents: 40143
diff changeset
283 r = []
acf560bc9b56 perf: extract the timing of a section in a context manager
Boris Feld <boris.feld@octobus.net>
parents: 40143
diff changeset
284 ostart = os.times()
acf560bc9b56 perf: extract the timing of a section in a context manager
Boris Feld <boris.feld@octobus.net>
parents: 40143
diff changeset
285 cstart = util.timer()
acf560bc9b56 perf: extract the timing of a section in a context manager
Boris Feld <boris.feld@octobus.net>
parents: 40143
diff changeset
286 yield r
acf560bc9b56 perf: extract the timing of a section in a context manager
Boris Feld <boris.feld@octobus.net>
parents: 40143
diff changeset
287 cstop = util.timer()
acf560bc9b56 perf: extract the timing of a section in a context manager
Boris Feld <boris.feld@octobus.net>
parents: 40143
diff changeset
288 ostop = os.times()
acf560bc9b56 perf: extract the timing of a section in a context manager
Boris Feld <boris.feld@octobus.net>
parents: 40143
diff changeset
289 a, b = ostart, ostop
acf560bc9b56 perf: extract the timing of a section in a context manager
Boris Feld <boris.feld@octobus.net>
parents: 40143
diff changeset
290 r.append((cstop - cstart, b[0] - a[0], b[1]-a[1]))
acf560bc9b56 perf: extract the timing of a section in a context manager
Boris Feld <boris.feld@octobus.net>
parents: 40143
diff changeset
291
40719
9d88ae5c635b perf: add a `setup` argument to run code outside of the timed section
Boris Feld <boris.feld@octobus.net>
parents: 40718
diff changeset
292 def _timer(fm, func, setup=None, title=None, displayall=False):
31406
8f5ed8fa39f8 perf: perform a garbage collection before each iteration
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30997
diff changeset
293 gc.collect()
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
294 results = []
30995
22fbca1d11ed mercurial: switch to util.timer for all interval timings
Simon Farnsworth <simonfar@fb.com>
parents: 30914
diff changeset
295 begin = util.timer()
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
296 count = 0
14494
1ffeeb91c55d check-code: flag 0/1 used as constant Boolean expression
Martin Geisler <mg@lazybytes.net>
parents: 14322
diff changeset
297 while True:
40719
9d88ae5c635b perf: add a `setup` argument to run code outside of the timed section
Boris Feld <boris.feld@octobus.net>
parents: 40718
diff changeset
298 if setup is not None:
9d88ae5c635b perf: add a `setup` argument to run code outside of the timed section
Boris Feld <boris.feld@octobus.net>
parents: 40718
diff changeset
299 setup()
40144
acf560bc9b56 perf: extract the timing of a section in a context manager
Boris Feld <boris.feld@octobus.net>
parents: 40143
diff changeset
300 with timeone() as item:
acf560bc9b56 perf: extract the timing of a section in a context manager
Boris Feld <boris.feld@octobus.net>
parents: 40143
diff changeset
301 r = func()
acf560bc9b56 perf: extract the timing of a section in a context manager
Boris Feld <boris.feld@octobus.net>
parents: 40143
diff changeset
302 count += 1
acf560bc9b56 perf: extract the timing of a section in a context manager
Boris Feld <boris.feld@octobus.net>
parents: 40143
diff changeset
303 results.append(item[0])
30995
22fbca1d11ed mercurial: switch to util.timer for all interval timings
Simon Farnsworth <simonfar@fb.com>
parents: 30914
diff changeset
304 cstop = util.timer()
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
305 if cstop - begin > 3 and count >= 100:
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
306 break
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
307 if cstop - begin > 10 and count >= 3:
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
308 break
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
309
40145
21261fc0fb2b perf: extract result formatting in its own function
Boris Feld <boris.feld@octobus.net>
parents: 40144
diff changeset
310 formatone(fm, results, title=title, result=r,
21261fc0fb2b perf: extract result formatting in its own function
Boris Feld <boris.feld@octobus.net>
parents: 40144
diff changeset
311 displayall=displayall)
21261fc0fb2b perf: extract result formatting in its own function
Boris Feld <boris.feld@octobus.net>
parents: 40144
diff changeset
312
21261fc0fb2b perf: extract result formatting in its own function
Boris Feld <boris.feld@octobus.net>
parents: 40144
diff changeset
313 def formatone(fm, timings, title=None, result=None, displayall=False):
21261fc0fb2b perf: extract result formatting in its own function
Boris Feld <boris.feld@octobus.net>
parents: 40144
diff changeset
314
21261fc0fb2b perf: extract result formatting in its own function
Boris Feld <boris.feld@octobus.net>
parents: 40144
diff changeset
315 count = len(timings)
21261fc0fb2b perf: extract result formatting in its own function
Boris Feld <boris.feld@octobus.net>
parents: 40144
diff changeset
316
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
317 fm.startitem()
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
318
9826
d768614578dd contrib/perf: profile diff of working directory changes
Patrick Mezard <pmezard@gmail.com>
parents: 9146
diff changeset
319 if title:
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
320 fm.write(b'title', b'! %s\n', title)
40145
21261fc0fb2b perf: extract result formatting in its own function
Boris Feld <boris.feld@octobus.net>
parents: 40144
diff changeset
321 if result:
21261fc0fb2b perf: extract result formatting in its own function
Boris Feld <boris.feld@octobus.net>
parents: 40144
diff changeset
322 fm.write(b'result', b'! result: %s\n', result)
38694
55101513ed94 perf: add a 'perf.all-timing' option to display more than best time
Boris Feld <boris.feld@octobus.net>
parents: 38693
diff changeset
323 def display(role, entry):
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
324 prefix = b''
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
325 if role != b'best':
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
326 prefix = b'%s.' % role
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
327 fm.plain(b'!')
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
328 fm.write(prefix + b'wall', b' wall %f', entry[0])
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
329 fm.write(prefix + b'comb', b' comb %f', entry[1] + entry[2])
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
330 fm.write(prefix + b'user', b' user %f', entry[1])
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
331 fm.write(prefix + b'sys', b' sys %f', entry[2])
40141
8643219146e1 perf: fix -T json
Boris Feld <boris.feld@octobus.net>
parents: 39830
diff changeset
332 fm.write(prefix + b'count', b' (%s of %%d)' % role, count)
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
333 fm.plain(b'\n')
40145
21261fc0fb2b perf: extract result formatting in its own function
Boris Feld <boris.feld@octobus.net>
parents: 40144
diff changeset
334 timings.sort()
21261fc0fb2b perf: extract result formatting in its own function
Boris Feld <boris.feld@octobus.net>
parents: 40144
diff changeset
335 min_val = timings[0]
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
336 display(b'best', min_val)
38694
55101513ed94 perf: add a 'perf.all-timing' option to display more than best time
Boris Feld <boris.feld@octobus.net>
parents: 38693
diff changeset
337 if displayall:
40145
21261fc0fb2b perf: extract result formatting in its own function
Boris Feld <boris.feld@octobus.net>
parents: 40144
diff changeset
338 max_val = timings[-1]
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
339 display(b'max', max_val)
40145
21261fc0fb2b perf: extract result formatting in its own function
Boris Feld <boris.feld@octobus.net>
parents: 40144
diff changeset
340 avg = tuple([sum(x) / count for x in zip(*timings)])
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
341 display(b'avg', avg)
40145
21261fc0fb2b perf: extract result formatting in its own function
Boris Feld <boris.feld@octobus.net>
parents: 40144
diff changeset
342 median = timings[len(timings) // 2]
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
343 display(b'median', median)
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
344
30143
2d858c771760 perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30069
diff changeset
345 # utilities for historical portability
2d858c771760 perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30069
diff changeset
346
30149
d8a2c536dd96 perf: replace ui.configint() by getint() for Mercurial earlier than 1.9
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30148
diff changeset
347 def getint(ui, section, name, default):
d8a2c536dd96 perf: replace ui.configint() by getint() for Mercurial earlier than 1.9
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30148
diff changeset
348 # for "historical portability":
d8a2c536dd96 perf: replace ui.configint() by getint() for Mercurial earlier than 1.9
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30148
diff changeset
349 # ui.configint has been available since 1.9 (or fa2b596db182)
d8a2c536dd96 perf: replace ui.configint() by getint() for Mercurial earlier than 1.9
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30148
diff changeset
350 v = ui.config(section, name, None)
d8a2c536dd96 perf: replace ui.configint() by getint() for Mercurial earlier than 1.9
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30148
diff changeset
351 if v is None:
d8a2c536dd96 perf: replace ui.configint() by getint() for Mercurial earlier than 1.9
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30148
diff changeset
352 return default
d8a2c536dd96 perf: replace ui.configint() by getint() for Mercurial earlier than 1.9
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30148
diff changeset
353 try:
d8a2c536dd96 perf: replace ui.configint() by getint() for Mercurial earlier than 1.9
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30148
diff changeset
354 return int(v)
d8a2c536dd96 perf: replace ui.configint() by getint() for Mercurial earlier than 1.9
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30148
diff changeset
355 except ValueError:
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
356 raise error.ConfigError((b"%s.%s is not an integer ('%s')")
30149
d8a2c536dd96 perf: replace ui.configint() by getint() for Mercurial earlier than 1.9
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30148
diff changeset
357 % (section, name, v))
d8a2c536dd96 perf: replace ui.configint() by getint() for Mercurial earlier than 1.9
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30148
diff changeset
358
30143
2d858c771760 perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30069
diff changeset
359 def safeattrsetter(obj, name, ignoremissing=False):
2d858c771760 perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30069
diff changeset
360 """Ensure that 'obj' has 'name' attribute before subsequent setattr
2d858c771760 perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30069
diff changeset
361
2d858c771760 perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30069
diff changeset
362 This function is aborted, if 'obj' doesn't have 'name' attribute
2d858c771760 perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30069
diff changeset
363 at runtime. This avoids overlooking removal of an attribute, which
2d858c771760 perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30069
diff changeset
364 breaks assumption of performance measurement, in the future.
2d858c771760 perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30069
diff changeset
365
2d858c771760 perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30069
diff changeset
366 This function returns the object to (1) assign a new value, and
2d858c771760 perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30069
diff changeset
367 (2) restore an original value to the attribute.
2d858c771760 perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30069
diff changeset
368
2d858c771760 perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30069
diff changeset
369 If 'ignoremissing' is true, missing 'name' attribute doesn't cause
2d858c771760 perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30069
diff changeset
370 abortion, and this function returns None. This is useful to
2d858c771760 perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30069
diff changeset
371 examine an attribute, which isn't ensured in all Mercurial
2d858c771760 perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30069
diff changeset
372 versions.
2d858c771760 perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30069
diff changeset
373 """
2d858c771760 perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30069
diff changeset
374 if not util.safehasattr(obj, name):
2d858c771760 perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30069
diff changeset
375 if ignoremissing:
2d858c771760 perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30069
diff changeset
376 return None
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
377 raise error.Abort((b"missing attribute %s of %s might break assumption"
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
378 b" of performance measurement") % (name, obj))
30143
2d858c771760 perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30069
diff changeset
379
39826
6787dc1b93a9 py3: handle sysstr conversion around get/set attr in contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39779
diff changeset
380 origvalue = getattr(obj, _sysstr(name))
30143
2d858c771760 perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30069
diff changeset
381 class attrutil(object):
2d858c771760 perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30069
diff changeset
382 def set(self, newvalue):
39826
6787dc1b93a9 py3: handle sysstr conversion around get/set attr in contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39779
diff changeset
383 setattr(obj, _sysstr(name), newvalue)
30143
2d858c771760 perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30069
diff changeset
384 def restore(self):
39826
6787dc1b93a9 py3: handle sysstr conversion around get/set attr in contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39779
diff changeset
385 setattr(obj, _sysstr(name), origvalue)
30143
2d858c771760 perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30069
diff changeset
386
2d858c771760 perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30069
diff changeset
387 return attrutil()
2d858c771760 perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30069
diff changeset
388
30144
14031d183048 perf: get subsettable from appropriate module for Mercurial earlier than 2.9
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30143
diff changeset
389 # utilities to examine each internal API changes
14031d183048 perf: get subsettable from appropriate module for Mercurial earlier than 2.9
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30143
diff changeset
390
14031d183048 perf: get subsettable from appropriate module for Mercurial earlier than 2.9
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30143
diff changeset
391 def getbranchmapsubsettable():
14031d183048 perf: get subsettable from appropriate module for Mercurial earlier than 2.9
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30143
diff changeset
392 # for "historical portability":
14031d183048 perf: get subsettable from appropriate module for Mercurial earlier than 2.9
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30143
diff changeset
393 # subsettable is defined in:
14031d183048 perf: get subsettable from appropriate module for Mercurial earlier than 2.9
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30143
diff changeset
394 # - branchmap since 2.9 (or 175c6fd8cacc)
14031d183048 perf: get subsettable from appropriate module for Mercurial earlier than 2.9
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30143
diff changeset
395 # - repoview since 2.5 (or 59a9f18d4587)
14031d183048 perf: get subsettable from appropriate module for Mercurial earlier than 2.9
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30143
diff changeset
396 for mod in (branchmap, repoview):
14031d183048 perf: get subsettable from appropriate module for Mercurial earlier than 2.9
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30143
diff changeset
397 subsettable = getattr(mod, 'subsettable', None)
14031d183048 perf: get subsettable from appropriate module for Mercurial earlier than 2.9
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30143
diff changeset
398 if subsettable:
14031d183048 perf: get subsettable from appropriate module for Mercurial earlier than 2.9
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30143
diff changeset
399 return subsettable
14031d183048 perf: get subsettable from appropriate module for Mercurial earlier than 2.9
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30143
diff changeset
400
14031d183048 perf: get subsettable from appropriate module for Mercurial earlier than 2.9
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30143
diff changeset
401 # bisecting in bcee63733aad::59a9f18d4587 can reach here (both
14031d183048 perf: get subsettable from appropriate module for Mercurial earlier than 2.9
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30143
diff changeset
402 # branchmap and repoview modules exist, but subsettable attribute
14031d183048 perf: get subsettable from appropriate module for Mercurial earlier than 2.9
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30143
diff changeset
403 # doesn't)
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
404 raise error.Abort((b"perfbranchmap not available with this Mercurial"),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
405 hint=b"use 2.5 or later")
30144
14031d183048 perf: get subsettable from appropriate module for Mercurial earlier than 2.9
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30143
diff changeset
406
30146
148ccd1d9f2f perf: add functions to get vfs-like object for Mercurial earlier than 2.3
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30145
diff changeset
407 def getsvfs(repo):
148ccd1d9f2f perf: add functions to get vfs-like object for Mercurial earlier than 2.3
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30145
diff changeset
408 """Return appropriate object to access files under .hg/store
148ccd1d9f2f perf: add functions to get vfs-like object for Mercurial earlier than 2.3
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30145
diff changeset
409 """
148ccd1d9f2f perf: add functions to get vfs-like object for Mercurial earlier than 2.3
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30145
diff changeset
410 # for "historical portability":
148ccd1d9f2f perf: add functions to get vfs-like object for Mercurial earlier than 2.3
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30145
diff changeset
411 # repo.svfs has been available since 2.3 (or 7034365089bf)
148ccd1d9f2f perf: add functions to get vfs-like object for Mercurial earlier than 2.3
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30145
diff changeset
412 svfs = getattr(repo, 'svfs', None)
148ccd1d9f2f perf: add functions to get vfs-like object for Mercurial earlier than 2.3
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30145
diff changeset
413 if svfs:
148ccd1d9f2f perf: add functions to get vfs-like object for Mercurial earlier than 2.3
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30145
diff changeset
414 return svfs
148ccd1d9f2f perf: add functions to get vfs-like object for Mercurial earlier than 2.3
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30145
diff changeset
415 else:
148ccd1d9f2f perf: add functions to get vfs-like object for Mercurial earlier than 2.3
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30145
diff changeset
416 return getattr(repo, 'sopener')
148ccd1d9f2f perf: add functions to get vfs-like object for Mercurial earlier than 2.3
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30145
diff changeset
417
148ccd1d9f2f perf: add functions to get vfs-like object for Mercurial earlier than 2.3
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30145
diff changeset
418 def getvfs(repo):
148ccd1d9f2f perf: add functions to get vfs-like object for Mercurial earlier than 2.3
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30145
diff changeset
419 """Return appropriate object to access files under .hg
148ccd1d9f2f perf: add functions to get vfs-like object for Mercurial earlier than 2.3
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30145
diff changeset
420 """
148ccd1d9f2f perf: add functions to get vfs-like object for Mercurial earlier than 2.3
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30145
diff changeset
421 # for "historical portability":
148ccd1d9f2f perf: add functions to get vfs-like object for Mercurial earlier than 2.3
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30145
diff changeset
422 # repo.vfs has been available since 2.3 (or 7034365089bf)
148ccd1d9f2f perf: add functions to get vfs-like object for Mercurial earlier than 2.3
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30145
diff changeset
423 vfs = getattr(repo, 'vfs', None)
148ccd1d9f2f perf: add functions to get vfs-like object for Mercurial earlier than 2.3
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30145
diff changeset
424 if vfs:
148ccd1d9f2f perf: add functions to get vfs-like object for Mercurial earlier than 2.3
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30145
diff changeset
425 return vfs
148ccd1d9f2f perf: add functions to get vfs-like object for Mercurial earlier than 2.3
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30145
diff changeset
426 else:
148ccd1d9f2f perf: add functions to get vfs-like object for Mercurial earlier than 2.3
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30145
diff changeset
427 return getattr(repo, 'opener')
148ccd1d9f2f perf: add functions to get vfs-like object for Mercurial earlier than 2.3
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30145
diff changeset
428
30150
c0410814002f perf: make perftags clear tags cache correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30149
diff changeset
429 def repocleartagscachefunc(repo):
c0410814002f perf: make perftags clear tags cache correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30149
diff changeset
430 """Return the function to clear tags cache according to repo internal API
c0410814002f perf: make perftags clear tags cache correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30149
diff changeset
431 """
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
432 if util.safehasattr(repo, b'_tagscache'): # since 2.0 (or 9dca7653b525)
30150
c0410814002f perf: make perftags clear tags cache correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30149
diff changeset
433 # in this case, setattr(repo, '_tagscache', None) or so isn't
c0410814002f perf: make perftags clear tags cache correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30149
diff changeset
434 # correct way to clear tags cache, because existing code paths
c0410814002f perf: make perftags clear tags cache correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30149
diff changeset
435 # expect _tagscache to be a structured object.
c0410814002f perf: make perftags clear tags cache correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30149
diff changeset
436 def clearcache():
c0410814002f perf: make perftags clear tags cache correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30149
diff changeset
437 # _tagscache has been filteredpropertycache since 2.5 (or
c0410814002f perf: make perftags clear tags cache correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30149
diff changeset
438 # 98c867ac1330), and delattr() can't work in such case
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
439 if b'_tagscache' in vars(repo):
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
440 del repo.__dict__[b'_tagscache']
30150
c0410814002f perf: make perftags clear tags cache correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30149
diff changeset
441 return clearcache
c0410814002f perf: make perftags clear tags cache correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30149
diff changeset
442
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
443 repotags = safeattrsetter(repo, b'_tags', ignoremissing=True)
30150
c0410814002f perf: make perftags clear tags cache correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30149
diff changeset
444 if repotags: # since 1.4 (or 5614a628d173)
c0410814002f perf: make perftags clear tags cache correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30149
diff changeset
445 return lambda : repotags.set(None)
c0410814002f perf: make perftags clear tags cache correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30149
diff changeset
446
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
447 repotagscache = safeattrsetter(repo, b'tagscache', ignoremissing=True)
30150
c0410814002f perf: make perftags clear tags cache correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30149
diff changeset
448 if repotagscache: # since 0.6 (or d7df759d0e97)
c0410814002f perf: make perftags clear tags cache correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30149
diff changeset
449 return lambda : repotagscache.set(None)
c0410814002f perf: make perftags clear tags cache correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30149
diff changeset
450
c0410814002f perf: make perftags clear tags cache correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30149
diff changeset
451 # Mercurial earlier than 0.6 (or d7df759d0e97) logically reaches
c0410814002f perf: make perftags clear tags cache correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30149
diff changeset
452 # this point, but it isn't so problematic, because:
c0410814002f perf: make perftags clear tags cache correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30149
diff changeset
453 # - repo.tags of such Mercurial isn't "callable", and repo.tags()
c0410814002f perf: make perftags clear tags cache correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30149
diff changeset
454 # in perftags() causes failure soon
c0410814002f perf: make perftags clear tags cache correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30149
diff changeset
455 # - perf.py itself has been available since 1.1 (or eb240755386d)
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
456 raise error.Abort((b"tags API of this hg command is unknown"))
30150
c0410814002f perf: make perftags clear tags cache correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30149
diff changeset
457
32751
6f791ca70640 perf: have a generic "clearstorecache" function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32730
diff changeset
458 # utilities to clear cache
6f791ca70640 perf: have a generic "clearstorecache" function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32730
diff changeset
459
6f791ca70640 perf: have a generic "clearstorecache" function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32730
diff changeset
460 def clearfilecache(repo, attrname):
6f791ca70640 perf: have a generic "clearstorecache" function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32730
diff changeset
461 unfi = repo.unfiltered()
6f791ca70640 perf: have a generic "clearstorecache" function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32730
diff changeset
462 if attrname in vars(unfi):
6f791ca70640 perf: have a generic "clearstorecache" function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32730
diff changeset
463 delattr(unfi, attrname)
6f791ca70640 perf: have a generic "clearstorecache" function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32730
diff changeset
464 unfi._filecache.pop(attrname, None)
6f791ca70640 perf: have a generic "clearstorecache" function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32730
diff changeset
465
30143
2d858c771760 perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30069
diff changeset
466 # perf commands
2d858c771760 perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30069
diff changeset
467
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
468 @command(b'perfwalk', formatteropts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
469 def perfwalk(ui, repo, *pats, **opts):
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
470 opts = _byteskwargs(opts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
471 timer, fm = gettimer(ui, opts)
34349
b3538c03a804 perf: remove fallbacks to ancient versions of dirstate.walk()
Martin von Zweigbergk <martinvonz@google.com>
parents: 32906
diff changeset
472 m = scmutil.match(repo[None], pats, {})
34350
255c761a52db dirstate: use keyword arguments to clarify walk()'s callers
Martin von Zweigbergk <martinvonz@google.com>
parents: 34349
diff changeset
473 timer(lambda: len(list(repo.dirstate.walk(m, subrepos=[], unknown=True,
255c761a52db dirstate: use keyword arguments to clarify walk()'s callers
Martin von Zweigbergk <martinvonz@google.com>
parents: 34349
diff changeset
474 ignored=False))))
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
475 fm.end()
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
476
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
477 @command(b'perfannotate', formatteropts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
478 def perfannotate(ui, repo, f, **opts):
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
479 opts = _byteskwargs(opts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
480 timer, fm = gettimer(ui, opts)
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
481 fc = repo[b'.'][f]
19292
e0aa6fff8f02 annotate: simplify annotate parent function
Durham Goode <durham@fb.com>
parents: 18877
diff changeset
482 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
483 fm.end()
19292
e0aa6fff8f02 annotate: simplify annotate parent function
Durham Goode <durham@fb.com>
parents: 18877
diff changeset
484
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
485 @command(b'perfstatus',
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
486 [(b'u', b'unknown', False,
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
487 b'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
488 def perfstatus(ui, repo, **opts):
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
489 opts = _byteskwargs(opts)
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
490 #m = match.always(repo.root, repo.getcwd())
16683
525fdb738975 cleanup: eradicate long lines
Brodie Rao <brodie@sf.io>
parents: 16414
diff changeset
491 #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
492 # False))))
27017
cdc3e437b481 perf: un-bitrot perfstatus
Matt Mackall <mpm@selenic.com>
parents: 26748
diff changeset
493 timer, fm = gettimer(ui, opts)
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
494 timer(lambda: sum(map(len, repo.status(unknown=opts[b'unknown']))))
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
495 fm.end()
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
496
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
497 @command(b'perfaddremove', formatteropts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
498 def perfaddremove(ui, repo, **opts):
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
499 opts = _byteskwargs(opts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
500 timer, fm = gettimer(ui, opts)
18871
a2d4ab4f575d perf: add a command to test addremove performance
Siddharth Agarwal <sid0@fb.com>
parents: 18845
diff changeset
501 try:
a2d4ab4f575d perf: add a command to test addremove performance
Siddharth Agarwal <sid0@fb.com>
parents: 18845
diff changeset
502 oldquiet = repo.ui.quiet
a2d4ab4f575d perf: add a command to test addremove performance
Siddharth Agarwal <sid0@fb.com>
parents: 18845
diff changeset
503 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
504 matcher = scmutil.match(repo[None])
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
505 opts[b'dry_run'] = True
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
506 timer(lambda: scmutil.addremove(repo, matcher, b"", opts))
18871
a2d4ab4f575d perf: add a command to test addremove performance
Siddharth Agarwal <sid0@fb.com>
parents: 18845
diff changeset
507 finally:
a2d4ab4f575d perf: add a command to test addremove performance
Siddharth Agarwal <sid0@fb.com>
parents: 18845
diff changeset
508 repo.ui.quiet = oldquiet
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
509 fm.end()
18871
a2d4ab4f575d perf: add a command to test addremove performance
Siddharth Agarwal <sid0@fb.com>
parents: 18845
diff changeset
510
16785
1dc08dc63c09 perf: rework perfheads and perftags to clear caches
Bryan O'Sullivan <bryano@fb.com>
parents: 16689
diff changeset
511 def clearcaches(cl):
1dc08dc63c09 perf: rework perfheads and perftags to clear caches
Bryan O'Sullivan <bryano@fb.com>
parents: 16689
diff changeset
512 # behave somewhat consistently across internal API changes
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
513 if util.safehasattr(cl, b'clearcaches'):
16785
1dc08dc63c09 perf: rework perfheads and perftags to clear caches
Bryan O'Sullivan <bryano@fb.com>
parents: 16689
diff changeset
514 cl.clearcaches()
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
515 elif util.safehasattr(cl, b'_nodecache'):
16785
1dc08dc63c09 perf: rework perfheads and perftags to clear caches
Bryan O'Sullivan <bryano@fb.com>
parents: 16689
diff changeset
516 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
517 cl._nodecache = {nullid: nullrev}
1dc08dc63c09 perf: rework perfheads and perftags to clear caches
Bryan O'Sullivan <bryano@fb.com>
parents: 16689
diff changeset
518 cl._nodepos = None
1dc08dc63c09 perf: rework perfheads and perftags to clear caches
Bryan O'Sullivan <bryano@fb.com>
parents: 16689
diff changeset
519
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
520 @command(b'perfheads', formatteropts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
521 def perfheads(ui, repo, **opts):
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
522 opts = _byteskwargs(opts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
523 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
524 cl = repo.changelog
1dc08dc63c09 perf: rework perfheads and perftags to clear caches
Bryan O'Sullivan <bryano@fb.com>
parents: 16689
diff changeset
525 def d():
1dc08dc63c09 perf: rework perfheads and perftags to clear caches
Bryan O'Sullivan <bryano@fb.com>
parents: 16689
diff changeset
526 len(cl.headrevs())
1dc08dc63c09 perf: rework perfheads and perftags to clear caches
Bryan O'Sullivan <bryano@fb.com>
parents: 16689
diff changeset
527 clearcaches(cl)
1dc08dc63c09 perf: rework perfheads and perftags to clear caches
Bryan O'Sullivan <bryano@fb.com>
parents: 16689
diff changeset
528 timer(d)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
529 fm.end()
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
530
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
531 @command(b'perftags', formatteropts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
532 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
533 import mercurial.changelog
fe8795dee77d perf: rearrange imports of changelong and manifest to appease check-code
Augie Fackler <raf@durin42.com>
parents: 19712
diff changeset
534 import mercurial.manifest
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
535
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
536 opts = _byteskwargs(opts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
537 timer, fm = gettimer(ui, opts)
30146
148ccd1d9f2f perf: add functions to get vfs-like object for Mercurial earlier than 2.3
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30145
diff changeset
538 svfs = getsvfs(repo)
30150
c0410814002f perf: make perftags clear tags cache correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30149
diff changeset
539 repocleartagscache = repocleartagscachefunc(repo)
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
540 def t():
30146
148ccd1d9f2f perf: add functions to get vfs-like object for Mercurial earlier than 2.3
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30145
diff changeset
541 repo.changelog = mercurial.changelog.changelog(svfs)
39779
5ccd791344f3 localrepo: pass root manifest into manifestlog.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39584
diff changeset
542 rootmanifest = mercurial.manifest.manifestrevlog(svfs)
5ccd791344f3 localrepo: pass root manifest into manifestlog.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39584
diff changeset
543 repo.manifestlog = mercurial.manifest.manifestlog(svfs, repo,
5ccd791344f3 localrepo: pass root manifest into manifestlog.__init__
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39584
diff changeset
544 rootmanifest)
30150
c0410814002f perf: make perftags clear tags cache correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30149
diff changeset
545 repocleartagscache()
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
546 return len(repo.tags())
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
547 timer(t)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
548 fm.end()
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
549
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
550 @command(b'perfancestors', formatteropts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
551 def perfancestors(ui, repo, **opts):
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
552 opts = _byteskwargs(opts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
553 timer, fm = gettimer(ui, opts)
16802
7e5d94381cd1 perf: add a perfancestors benchmark
Bryan O'Sullivan <bryano@fb.com>
parents: 16788
diff changeset
554 heads = repo.changelog.headrevs()
7e5d94381cd1 perf: add a perfancestors benchmark
Bryan O'Sullivan <bryano@fb.com>
parents: 16788
diff changeset
555 def d():
16866
91f3ac205816 revlog: ancestors(*revs) becomes ancestors(revs) (API)
Bryan O'Sullivan <bryano@fb.com>
parents: 16858
diff changeset
556 for a in repo.changelog.ancestors(heads):
16802
7e5d94381cd1 perf: add a perfancestors benchmark
Bryan O'Sullivan <bryano@fb.com>
parents: 16788
diff changeset
557 pass
7e5d94381cd1 perf: add a perfancestors benchmark
Bryan O'Sullivan <bryano@fb.com>
parents: 16788
diff changeset
558 timer(d)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
559 fm.end()
16802
7e5d94381cd1 perf: add a perfancestors benchmark
Bryan O'Sullivan <bryano@fb.com>
parents: 16788
diff changeset
560
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
561 @command(b'perfancestorset', formatteropts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
562 def perfancestorset(ui, repo, revset, **opts):
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
563 opts = _byteskwargs(opts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
564 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
565 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
566 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
567 def d():
18091
f7f8159caad3 ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents: 18080
diff changeset
568 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
569 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
570 rev in s
486bfb200b3f perf: add command to test performance of membership in ancestor set
Siddharth Agarwal <sid0@fb.com>
parents: 18062
diff changeset
571 timer(d)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
572 fm.end()
18080
486bfb200b3f perf: add command to test performance of membership in ancestor set
Siddharth Agarwal <sid0@fb.com>
parents: 18062
diff changeset
573
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
574 @command(b'perfbookmarks', formatteropts)
32753
2b0a8b0f3435 perf: add a perfbookmarks command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32752
diff changeset
575 def perfbookmarks(ui, repo, **opts):
2b0a8b0f3435 perf: add a perfbookmarks command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32752
diff changeset
576 """benchmark parsing bookmarks from disk to memory"""
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
577 opts = _byteskwargs(opts)
32753
2b0a8b0f3435 perf: add a perfbookmarks command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32752
diff changeset
578 timer, fm = gettimer(ui, opts)
40720
c0a1686d9391 perf: use the new setup function in "perfbookmarks"
Boris Feld <boris.feld@octobus.net>
parents: 40719
diff changeset
579
c0a1686d9391 perf: use the new setup function in "perfbookmarks"
Boris Feld <boris.feld@octobus.net>
parents: 40719
diff changeset
580 def s():
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
581 clearfilecache(repo, b'_bookmarks')
40720
c0a1686d9391 perf: use the new setup function in "perfbookmarks"
Boris Feld <boris.feld@octobus.net>
parents: 40719
diff changeset
582 def d():
32753
2b0a8b0f3435 perf: add a perfbookmarks command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32752
diff changeset
583 repo._bookmarks
40720
c0a1686d9391 perf: use the new setup function in "perfbookmarks"
Boris Feld <boris.feld@octobus.net>
parents: 40719
diff changeset
584 timer(d, setup=s)
32753
2b0a8b0f3435 perf: add a perfbookmarks command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32752
diff changeset
585 fm.end()
2b0a8b0f3435 perf: add a perfbookmarks command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32752
diff changeset
586
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
587 @command(b'perfbundleread', formatteropts, b'BUNDLE')
35132
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
588 def perfbundleread(ui, repo, bundlepath, **opts):
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
589 """Benchmark reading of bundle files.
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
590
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
591 This command is meant to isolate the I/O part of bundle reading as
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
592 much as possible.
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
593 """
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
594 from mercurial import (
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
595 bundle2,
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
596 exchange,
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
597 streamclone,
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
598 )
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
599
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
600 opts = _byteskwargs(opts)
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
601
35132
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
602 def makebench(fn):
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
603 def run():
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
604 with open(bundlepath, b'rb') as fh:
35132
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
605 bundle = exchange.readbundle(ui, fh, bundlepath)
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
606 fn(bundle)
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
607
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
608 return run
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
609
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
610 def makereadnbytes(size):
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
611 def run():
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
612 with open(bundlepath, b'rb') as fh:
35132
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
613 bundle = exchange.readbundle(ui, fh, bundlepath)
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
614 while bundle.read(size):
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
615 pass
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
616
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
617 return run
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
618
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
619 def makestdioread(size):
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
620 def run():
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
621 with open(bundlepath, b'rb') as fh:
35132
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
622 while fh.read(size):
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
623 pass
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
624
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
625 return run
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
626
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
627 # bundle1
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
628
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
629 def deltaiter(bundle):
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
630 for delta in bundle.deltaiter():
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
631 pass
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
632
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
633 def iterchunks(bundle):
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
634 for chunk in bundle.getchunks():
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
635 pass
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
636
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
637 # bundle2
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
638
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
639 def forwardchunks(bundle):
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
640 for chunk in bundle._forwardchunks():
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
641 pass
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
642
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
643 def iterparts(bundle):
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
644 for part in bundle.iterparts():
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
645 pass
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
646
35137
da91e7309daf bundle2: don't use seekable bundle2 parts by default (issue5691)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35132
diff changeset
647 def iterpartsseekable(bundle):
da91e7309daf bundle2: don't use seekable bundle2 parts by default (issue5691)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35132
diff changeset
648 for part in bundle.iterparts(seekable=True):
da91e7309daf bundle2: don't use seekable bundle2 parts by default (issue5691)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35132
diff changeset
649 pass
da91e7309daf bundle2: don't use seekable bundle2 parts by default (issue5691)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35132
diff changeset
650
35132
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
651 def seek(bundle):
35137
da91e7309daf bundle2: don't use seekable bundle2 parts by default (issue5691)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35132
diff changeset
652 for part in bundle.iterparts(seekable=True):
35132
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
653 part.seek(0, os.SEEK_END)
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
654
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
655 def makepartreadnbytes(size):
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
656 def run():
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
657 with open(bundlepath, b'rb') as fh:
35132
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
658 bundle = exchange.readbundle(ui, fh, bundlepath)
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
659 for part in bundle.iterparts():
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
660 while part.read(size):
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
661 pass
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
662
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
663 return run
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
664
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
665 benches = [
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
666 (makestdioread(8192), b'read(8k)'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
667 (makestdioread(16384), b'read(16k)'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
668 (makestdioread(32768), b'read(32k)'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
669 (makestdioread(131072), b'read(128k)'),
35132
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
670 ]
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
671
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
672 with open(bundlepath, b'rb') as fh:
35132
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
673 bundle = exchange.readbundle(ui, fh, bundlepath)
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
674
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
675 if isinstance(bundle, changegroup.cg1unpacker):
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
676 benches.extend([
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
677 (makebench(deltaiter), b'cg1 deltaiter()'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
678 (makebench(iterchunks), b'cg1 getchunks()'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
679 (makereadnbytes(8192), b'cg1 read(8k)'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
680 (makereadnbytes(16384), b'cg1 read(16k)'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
681 (makereadnbytes(32768), b'cg1 read(32k)'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
682 (makereadnbytes(131072), b'cg1 read(128k)'),
35132
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
683 ])
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
684 elif isinstance(bundle, bundle2.unbundle20):
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
685 benches.extend([
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
686 (makebench(forwardchunks), b'bundle2 forwardchunks()'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
687 (makebench(iterparts), b'bundle2 iterparts()'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
688 (makebench(iterpartsseekable), b'bundle2 iterparts() seekable'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
689 (makebench(seek), b'bundle2 part seek()'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
690 (makepartreadnbytes(8192), b'bundle2 part read(8k)'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
691 (makepartreadnbytes(16384), b'bundle2 part read(16k)'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
692 (makepartreadnbytes(32768), b'bundle2 part read(32k)'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
693 (makepartreadnbytes(131072), b'bundle2 part read(128k)'),
35132
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
694 ])
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
695 elif isinstance(bundle, streamclone.streamcloneapplier):
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
696 raise error.Abort(b'stream clone bundles not supported')
35132
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
697 else:
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
698 raise error.Abort(b'unhandled bundle type: %s' % type(bundle))
35132
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
699
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
700 for fn, title in benches:
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
701 timer, fm = gettimer(ui, opts)
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
702 timer(fn, title=title)
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
703 fm.end()
e96613048bdd perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35107
diff changeset
704
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
705 @command(b'perfchangegroupchangelog', formatteropts +
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
706 [(b'', b'version', b'02', b'changegroup version'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
707 (b'r', b'rev', b'', b'revisions to add to changegroup')])
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
708 def perfchangegroupchangelog(ui, repo, version=b'02', rev=None, **opts):
30020
bd6df07ccc24 perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30019
diff changeset
709 """Benchmark producing a changelog group for a changegroup.
bd6df07ccc24 perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30019
diff changeset
710
bd6df07ccc24 perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30019
diff changeset
711 This measures the time spent processing the changelog during a
bd6df07ccc24 perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30019
diff changeset
712 bundle operation. This occurs during `hg bundle` and on a server
bd6df07ccc24 perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30019
diff changeset
713 processing a `getbundle` wire protocol request (handles clones
bd6df07ccc24 perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30019
diff changeset
714 and pull requests).
bd6df07ccc24 perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30019
diff changeset
715
bd6df07ccc24 perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30019
diff changeset
716 By default, all revisions are added to the changegroup.
bd6df07ccc24 perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30019
diff changeset
717 """
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
718 opts = _byteskwargs(opts)
30020
bd6df07ccc24 perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30019
diff changeset
719 cl = repo.changelog
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
720 nodes = [cl.lookup(r) for r in repo.revs(rev or b'all()')]
30020
bd6df07ccc24 perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30019
diff changeset
721 bundler = changegroup.getbundler(version, repo)
bd6df07ccc24 perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30019
diff changeset
722
bd6df07ccc24 perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30019
diff changeset
723 def d():
39015
a1f694779b2f perf: call _generatechangelog() instead of group()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39007
diff changeset
724 state, chunks = bundler._generatechangelog(cl, nodes)
a1f694779b2f perf: call _generatechangelog() instead of group()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39007
diff changeset
725 for chunk in chunks:
30020
bd6df07ccc24 perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30019
diff changeset
726 pass
bd6df07ccc24 perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30019
diff changeset
727
bd6df07ccc24 perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30019
diff changeset
728 timer, fm = gettimer(ui, opts)
39015
a1f694779b2f perf: call _generatechangelog() instead of group()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39007
diff changeset
729
a1f694779b2f perf: call _generatechangelog() instead of group()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39007
diff changeset
730 # Terminal printing can interfere with timing. So disable it.
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
731 with ui.configoverride({(b'progress', b'disable'): True}):
39015
a1f694779b2f perf: call _generatechangelog() instead of group()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39007
diff changeset
732 timer(d)
a1f694779b2f perf: call _generatechangelog() instead of group()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39007
diff changeset
733
30020
bd6df07ccc24 perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30019
diff changeset
734 fm.end()
bd6df07ccc24 perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30019
diff changeset
735
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
736 @command(b'perfdirs', formatteropts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
737 def perfdirs(ui, repo, **opts):
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
738 opts = _byteskwargs(opts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
739 timer, fm = gettimer(ui, opts)
18845
c1f416e4bc80 perf: add perfdirs command
Bryan O'Sullivan <bryano@fb.com>
parents: 18837
diff changeset
740 dirstate = repo.dirstate
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
741 b'a' in dirstate
18845
c1f416e4bc80 perf: add perfdirs command
Bryan O'Sullivan <bryano@fb.com>
parents: 18837
diff changeset
742 def d():
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
743 dirstate.hasdir(b'a')
35107
61888bd0b300 dirstate: add explicit methods for querying directories (API)
Mark Thomas <mbthomas@fb.com>
parents: 34750
diff changeset
744 del dirstate._map._dirs
18845
c1f416e4bc80 perf: add perfdirs command
Bryan O'Sullivan <bryano@fb.com>
parents: 18837
diff changeset
745 timer(d)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
746 fm.end()
18845
c1f416e4bc80 perf: add perfdirs command
Bryan O'Sullivan <bryano@fb.com>
parents: 18837
diff changeset
747
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
748 @command(b'perfdirstate', formatteropts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
749 def perfdirstate(ui, repo, **opts):
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
750 opts = _byteskwargs(opts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
751 timer, fm = gettimer(ui, opts)
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
752 b"a" in repo.dirstate
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
753 def d():
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
754 repo.dirstate.invalidate()
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
755 b"a" in repo.dirstate
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
756 timer(d)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
757 fm.end()
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
758
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
759 @command(b'perfdirstatedirs', formatteropts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
760 def perfdirstatedirs(ui, repo, **opts):
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
761 opts = _byteskwargs(opts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
762 timer, fm = gettimer(ui, opts)
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
763 b"a" in repo.dirstate
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
764 def d():
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
765 repo.dirstate.hasdir(b"a")
35107
61888bd0b300 dirstate: add explicit methods for querying directories (API)
Mark Thomas <mbthomas@fb.com>
parents: 34750
diff changeset
766 del repo.dirstate._map._dirs
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
767 timer(d)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
768 fm.end()
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
769
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
770 @command(b'perfdirstatefoldmap', formatteropts)
27095
aaf4e2d77148 contrib/perf: name functions to match decorators
timeless <timeless@mozdev.org>
parents: 27072
diff changeset
771 def perfdirstatefoldmap(ui, repo, **opts):
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
772 opts = _byteskwargs(opts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
773 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
774 dirstate = repo.dirstate
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
775 b'a' in dirstate
22780
d8ff1f671aed perf: add a way to measure the perf of constructing the foldmap
Siddharth Agarwal <sid0@fb.com>
parents: 20846
diff changeset
776 def d():
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
777 dirstate._map.filefoldmap.get(b'a')
34676
bfddc3d678ae dirstate: remove _filefoldmap property cache
Durham Goode <durham@fb.com>
parents: 34494
diff changeset
778 del dirstate._map.filefoldmap
24607
f5b527024fcc perf: make measuring foldmap perf work again
Siddharth Agarwal <sid0@fb.com>
parents: 24349
diff changeset
779 timer(d)
f5b527024fcc perf: make measuring foldmap perf work again
Siddharth Agarwal <sid0@fb.com>
parents: 24349
diff changeset
780 fm.end()
f5b527024fcc perf: make measuring foldmap perf work again
Siddharth Agarwal <sid0@fb.com>
parents: 24349
diff changeset
781
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
782 @command(b'perfdirfoldmap', formatteropts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
783 def perfdirfoldmap(ui, repo, **opts):
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
784 opts = _byteskwargs(opts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
785 timer, fm = gettimer(ui, opts)
24607
f5b527024fcc perf: make measuring foldmap perf work again
Siddharth Agarwal <sid0@fb.com>
parents: 24349
diff changeset
786 dirstate = repo.dirstate
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
787 b'a' in dirstate
24607
f5b527024fcc perf: make measuring foldmap perf work again
Siddharth Agarwal <sid0@fb.com>
parents: 24349
diff changeset
788 def d():
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
789 dirstate._map.dirfoldmap.get(b'a')
34678
e8a89ed7ce96 dirstate: move the _dirfoldmap to dirstatemap
Durham Goode <durham@fb.com>
parents: 34677
diff changeset
790 del dirstate._map.dirfoldmap
35107
61888bd0b300 dirstate: add explicit methods for querying directories (API)
Mark Thomas <mbthomas@fb.com>
parents: 34750
diff changeset
791 del dirstate._map._dirs
22780
d8ff1f671aed perf: add a way to measure the perf of constructing the foldmap
Siddharth Agarwal <sid0@fb.com>
parents: 20846
diff changeset
792 timer(d)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
793 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
794
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
795 @command(b'perfdirstatewrite', formatteropts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
796 def perfdirstatewrite(ui, repo, **opts):
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
797 opts = _byteskwargs(opts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
798 timer, fm = gettimer(ui, opts)
16788
7e72c1609862 perf: add a perfdirstatewrite benchmark
Bryan O'Sullivan <bryano@fb.com>
parents: 16785
diff changeset
799 ds = repo.dirstate
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
800 b"a" in ds
16788
7e72c1609862 perf: add a perfdirstatewrite benchmark
Bryan O'Sullivan <bryano@fb.com>
parents: 16785
diff changeset
801 def d():
7e72c1609862 perf: add a perfdirstatewrite benchmark
Bryan O'Sullivan <bryano@fb.com>
parents: 16785
diff changeset
802 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
803 ds.write(repo.currenttransaction())
16788
7e72c1609862 perf: add a perfdirstatewrite benchmark
Bryan O'Sullivan <bryano@fb.com>
parents: 16785
diff changeset
804 timer(d)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
805 fm.end()
16788
7e72c1609862 perf: add a perfdirstatewrite benchmark
Bryan O'Sullivan <bryano@fb.com>
parents: 16785
diff changeset
806
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
807 @command(b'perfmergecalculate',
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
808 [(b'r', b'rev', b'.', b'rev to merge against')] + formatteropts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
809 def perfmergecalculate(ui, repo, rev, **opts):
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
810 opts = _byteskwargs(opts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
811 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
812 wctx = repo[None]
c760acc6f69d perf: add a command to measure merge.calculateupdates perf
Siddharth Agarwal <sid0@fb.com>
parents: 18644
diff changeset
813 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
814 ancestor = wctx.ancestor(rctx)
c760acc6f69d perf: add a command to measure merge.calculateupdates perf
Siddharth Agarwal <sid0@fb.com>
parents: 18644
diff changeset
815 # 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
816 # that cache
c760acc6f69d perf: add a command to measure merge.calculateupdates perf
Siddharth Agarwal <sid0@fb.com>
parents: 18644
diff changeset
817 wctx.dirty()
c760acc6f69d perf: add a command to measure merge.calculateupdates perf
Siddharth Agarwal <sid0@fb.com>
parents: 18644
diff changeset
818 def d():
c760acc6f69d perf: add a command to measure merge.calculateupdates perf
Siddharth Agarwal <sid0@fb.com>
parents: 18644
diff changeset
819 # 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
820 # our benchmark
27098
64cb281d23a5 contrib/perf: fix perfmergecalculate
timeless <timeless@mozdev.org>
parents: 27097
diff changeset
821 merge.calculateupdates(repo, wctx, rctx, [ancestor], False, False,
27345
98266b1d144d merge: restate calculateupdates in terms of a matcher
Augie Fackler <augie@google.com>
parents: 27308
diff changeset
822 acceptremote=True, followcopies=True)
18817
c760acc6f69d perf: add a command to measure merge.calculateupdates perf
Siddharth Agarwal <sid0@fb.com>
parents: 18644
diff changeset
823 timer(d)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
824 fm.end()
18817
c760acc6f69d perf: add a command to measure merge.calculateupdates perf
Siddharth Agarwal <sid0@fb.com>
parents: 18644
diff changeset
825
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
826 @command(b'perfpathcopies', [], b"REV REV")
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
827 def perfpathcopies(ui, repo, rev1, rev2, **opts):
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
828 opts = _byteskwargs(opts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
829 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
830 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
831 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
832 def d():
2e9fe9e2671f perf: add a command to test copies.pathcopies perf
Siddharth Agarwal <sid0@fb.com>
parents: 18871
diff changeset
833 copies.pathcopies(ctx1, ctx2)
2e9fe9e2671f perf: add a command to test copies.pathcopies perf
Siddharth Agarwal <sid0@fb.com>
parents: 18871
diff changeset
834 timer(d)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
835 fm.end()
18877
2e9fe9e2671f perf: add a command to test copies.pathcopies perf
Siddharth Agarwal <sid0@fb.com>
parents: 18871
diff changeset
836
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
837 @command(b'perfphases',
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
838 [(b'', b'full', False, b'include file reading time too'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
839 ], b"")
32501
ad37c569ec81 perfphases: add 'perfphases' command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32428
diff changeset
840 def perfphases(ui, repo, **opts):
ad37c569ec81 perfphases: add 'perfphases' command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32428
diff changeset
841 """benchmark phasesets computation"""
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
842 opts = _byteskwargs(opts)
32501
ad37c569ec81 perfphases: add 'perfphases' command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32428
diff changeset
843 timer, fm = gettimer(ui, opts)
32752
e36569bd9e28 perfphases: add a flag to also include file access time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32751
diff changeset
844 _phases = repo._phasecache
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
845 full = opts.get(b'full')
32501
ad37c569ec81 perfphases: add 'perfphases' command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32428
diff changeset
846 def d():
32752
e36569bd9e28 perfphases: add a flag to also include file access time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32751
diff changeset
847 phases = _phases
e36569bd9e28 perfphases: add a flag to also include file access time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32751
diff changeset
848 if full:
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
849 clearfilecache(repo, b'_phasecache')
32752
e36569bd9e28 perfphases: add a flag to also include file access time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32751
diff changeset
850 phases = repo._phasecache
32501
ad37c569ec81 perfphases: add 'perfphases' command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32428
diff changeset
851 phases.invalidate()
ad37c569ec81 perfphases: add 'perfphases' command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32428
diff changeset
852 phases.loadphaserevs(repo)
ad37c569ec81 perfphases: add 'perfphases' command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32428
diff changeset
853 timer(d)
ad37c569ec81 perfphases: add 'perfphases' command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32428
diff changeset
854 fm.end()
ad37c569ec81 perfphases: add 'perfphases' command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32428
diff changeset
855
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
856 @command(b'perfphasesremote',
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
857 [], b"[DEST]")
38771
1732db2f8210 perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents: 38695
diff changeset
858 def perfphasesremote(ui, repo, dest=None, **opts):
1732db2f8210 perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents: 38695
diff changeset
859 """benchmark time needed to analyse phases of the remote server"""
1732db2f8210 perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents: 38695
diff changeset
860 from mercurial.node import (
1732db2f8210 perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents: 38695
diff changeset
861 bin,
1732db2f8210 perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents: 38695
diff changeset
862 )
1732db2f8210 perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents: 38695
diff changeset
863 from mercurial import (
1732db2f8210 perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents: 38695
diff changeset
864 exchange,
1732db2f8210 perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents: 38695
diff changeset
865 hg,
1732db2f8210 perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents: 38695
diff changeset
866 phases,
1732db2f8210 perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents: 38695
diff changeset
867 )
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
868 opts = _byteskwargs(opts)
38771
1732db2f8210 perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents: 38695
diff changeset
869 timer, fm = gettimer(ui, opts)
1732db2f8210 perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents: 38695
diff changeset
870
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
871 path = ui.paths.getpath(dest, default=(b'default-push', b'default'))
38771
1732db2f8210 perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents: 38695
diff changeset
872 if not path:
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
873 raise error.Abort((b'default repository not configured!'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
874 hint=(b"see 'hg help config.paths'"))
38771
1732db2f8210 perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents: 38695
diff changeset
875 dest = path.pushloc or path.loc
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
876 branches = (path.branch, opts.get(b'branch') or [])
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
877 ui.status((b'analysing phase of %s\n') % util.hidepassword(dest))
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
878 revs, checkout = hg.addbranchrevs(repo, repo, branches, opts.get(b'rev'))
38771
1732db2f8210 perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents: 38695
diff changeset
879 other = hg.peer(repo, opts, dest)
1732db2f8210 perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents: 38695
diff changeset
880
1732db2f8210 perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents: 38695
diff changeset
881 # easier to perform discovery through the operation
1732db2f8210 perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents: 38695
diff changeset
882 op = exchange.pushoperation(repo, other)
1732db2f8210 perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents: 38695
diff changeset
883 exchange._pushdiscoverychangeset(op)
1732db2f8210 perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents: 38695
diff changeset
884
1732db2f8210 perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents: 38695
diff changeset
885 remotesubset = op.fallbackheads
1732db2f8210 perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents: 38695
diff changeset
886
1732db2f8210 perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents: 38695
diff changeset
887 with other.commandexecutor() as e:
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
888 remotephases = e.callcommand(b'listkeys',
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
889 {b'namespace': b'phases'}).result()
38771
1732db2f8210 perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents: 38695
diff changeset
890 del other
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
891 publishing = remotephases.get(b'publishing', False)
38771
1732db2f8210 perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents: 38695
diff changeset
892 if publishing:
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
893 ui.status((b'publishing: yes\n'))
38771
1732db2f8210 perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents: 38695
diff changeset
894 else:
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
895 ui.status((b'publishing: no\n'))
38771
1732db2f8210 perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents: 38695
diff changeset
896
1732db2f8210 perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents: 38695
diff changeset
897 nodemap = repo.changelog.nodemap
1732db2f8210 perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents: 38695
diff changeset
898 nonpublishroots = 0
1732db2f8210 perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents: 38695
diff changeset
899 for nhex, phase in remotephases.iteritems():
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
900 if nhex == b'publishing': # ignore data related to publish option
38771
1732db2f8210 perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents: 38695
diff changeset
901 continue
1732db2f8210 perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents: 38695
diff changeset
902 node = bin(nhex)
1732db2f8210 perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents: 38695
diff changeset
903 if node in nodemap and int(phase):
1732db2f8210 perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents: 38695
diff changeset
904 nonpublishroots += 1
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
905 ui.status((b'number of roots: %d\n') % len(remotephases))
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
906 ui.status((b'number of known non public roots: %d\n') % nonpublishroots)
38771
1732db2f8210 perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents: 38695
diff changeset
907 def d():
1732db2f8210 perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents: 38695
diff changeset
908 phases.remotephasessummary(repo,
1732db2f8210 perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents: 38695
diff changeset
909 remotesubset,
1732db2f8210 perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents: 38695
diff changeset
910 remotephases)
1732db2f8210 perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents: 38695
diff changeset
911 timer(d)
1732db2f8210 perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents: 38695
diff changeset
912 fm.end()
1732db2f8210 perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents: 38695
diff changeset
913
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
914 @command(b'perfmanifest',[
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
915 (b'm', b'manifest-rev', False, b'Look up a manifest node revision'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
916 (b'', b'clear-disk', False, b'clear on-disk caches too'),
40142
25ce80ce84c5 perf: accept formatter option for perfmanifest
Boris Feld <boris.feld@octobus.net>
parents: 40141
diff changeset
917 ] + formatteropts, b'REV|NODE')
38820
ddb15a83ae0b debug: allow specifying a manifest node rather than a revision
Martijn Pieters <mj@zopatista.com>
parents: 38819
diff changeset
918 def perfmanifest(ui, repo, rev, manifest_rev=False, clear_disk=False, **opts):
38693
9b6a708f2263 perf: document the perfmanifest command
Boris Feld <boris.feld@octobus.net>
parents: 38285
diff changeset
919 """benchmark the time to read a manifest from disk and return a usable
9b6a708f2263 perf: document the perfmanifest command
Boris Feld <boris.feld@octobus.net>
parents: 38285
diff changeset
920 dict-like object
9b6a708f2263 perf: document the perfmanifest command
Boris Feld <boris.feld@octobus.net>
parents: 38285
diff changeset
921
9b6a708f2263 perf: document the perfmanifest command
Boris Feld <boris.feld@octobus.net>
parents: 38285
diff changeset
922 Manifest caches are cleared before retrieval."""
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
923 opts = _byteskwargs(opts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
924 timer, fm = gettimer(ui, opts)
38820
ddb15a83ae0b debug: allow specifying a manifest node rather than a revision
Martijn Pieters <mj@zopatista.com>
parents: 38819
diff changeset
925 if not manifest_rev:
ddb15a83ae0b debug: allow specifying a manifest node rather than a revision
Martijn Pieters <mj@zopatista.com>
parents: 38819
diff changeset
926 ctx = scmutil.revsingle(repo, rev, rev)
ddb15a83ae0b debug: allow specifying a manifest node rather than a revision
Martijn Pieters <mj@zopatista.com>
parents: 38819
diff changeset
927 t = ctx.manifestnode()
ddb15a83ae0b debug: allow specifying a manifest node rather than a revision
Martijn Pieters <mj@zopatista.com>
parents: 38819
diff changeset
928 else:
39345
c03c5f528e9b perf: use storage API for resolving manifest node
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39226
diff changeset
929 from mercurial.node import bin
c03c5f528e9b perf: use storage API for resolving manifest node
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39226
diff changeset
930
c03c5f528e9b perf: use storage API for resolving manifest node
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39226
diff changeset
931 if len(rev) == 40:
c03c5f528e9b perf: use storage API for resolving manifest node
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39226
diff changeset
932 t = bin(rev)
c03c5f528e9b perf: use storage API for resolving manifest node
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39226
diff changeset
933 else:
c03c5f528e9b perf: use storage API for resolving manifest node
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39226
diff changeset
934 try:
c03c5f528e9b perf: use storage API for resolving manifest node
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39226
diff changeset
935 rev = int(rev)
c03c5f528e9b perf: use storage API for resolving manifest node
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39226
diff changeset
936
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
937 if util.safehasattr(repo.manifestlog, b'getstorage'):
39345
c03c5f528e9b perf: use storage API for resolving manifest node
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39226
diff changeset
938 t = repo.manifestlog.getstorage(b'').node(rev)
c03c5f528e9b perf: use storage API for resolving manifest node
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39226
diff changeset
939 else:
c03c5f528e9b perf: use storage API for resolving manifest node
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39226
diff changeset
940 t = repo.manifestlog._revlog.lookup(rev)
c03c5f528e9b perf: use storage API for resolving manifest node
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39226
diff changeset
941 except ValueError:
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
942 raise error.Abort(b'manifest revision must be integer or full '
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
943 b'node')
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
944 def d():
38821
0a57945aaf7f manifest: persist the manifestfulltext cache
Martijn Pieters <mj@zopatista.com>
parents: 38820
diff changeset
945 repo.manifestlog.clearcaches(clear_persisted_data=clear_disk)
30379
d79c141fdf41 manifest: remove usages of manifest.read
Durham Goode <durham@fb.com>
parents: 30347
diff changeset
946 repo.manifestlog[t].read()
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
947 timer(d)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
948 fm.end()
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
949
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
950 @command(b'perfchangeset', formatteropts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
951 def perfchangeset(ui, repo, rev, **opts):
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
952 opts = _byteskwargs(opts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
953 timer, fm = gettimer(ui, opts)
37355
5bcd5859b505 perf: make perfmanifest and perfnodelookup work with revsets
Martin von Zweigbergk <martinvonz@google.com>
parents: 37271
diff changeset
954 n = scmutil.revsingle(repo, rev).node()
16262
bf7a6c3b2a4a perf: add perfchangeset to time changeset parsing
Matt Mackall <mpm@selenic.com>
parents: 16260
diff changeset
955 def d():
19378
9de689d20230 cleanup: drop unused variables and an unused import
Simon Heimberg <simohe@besonet.ch>
parents: 19322
diff changeset
956 repo.changelog.read(n)
16266
77d56a5e74a5 perf: add a changeset test
Matt Mackall <mpm@selenic.com>
parents: 16262
diff changeset
957 #repo.changelog._cache = None
16262
bf7a6c3b2a4a perf: add perfchangeset to time changeset parsing
Matt Mackall <mpm@selenic.com>
parents: 16260
diff changeset
958 timer(d)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
959 fm.end()
16262
bf7a6c3b2a4a perf: add perfchangeset to time changeset parsing
Matt Mackall <mpm@selenic.com>
parents: 16260
diff changeset
960
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
961 @command(b'perfindex', formatteropts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
962 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
963 import mercurial.revlog
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
964 opts = _byteskwargs(opts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
965 timer, fm = gettimer(ui, opts)
13277
9f707b297b0f perf: restore lazyindex hack
Matt Mackall <mpm@selenic.com>
parents: 13262
diff changeset
966 mercurial.revlog._prereadsize = 2**24 # disable lazy parser in old hg
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
967 n = repo[b"tip"].node()
30146
148ccd1d9f2f perf: add functions to get vfs-like object for Mercurial earlier than 2.3
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30145
diff changeset
968 svfs = getsvfs(repo)
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
969 def d():
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
970 cl = mercurial.revlog.revlog(svfs, b"00changelog.i")
16260
33fcad3cfbbc perf: tweak tests for testing index performance improvements
Matt Mackall <mpm@selenic.com>
parents: 14671
diff changeset
971 cl.rev(n)
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
972 timer(d)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
973 fm.end()
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
974
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
975 @command(b'perfstartup', formatteropts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
976 def perfstartup(ui, repo, **opts):
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
977 opts = _byteskwargs(opts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
978 timer, fm = gettimer(ui, opts)
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
979 def d():
39829
db875f97a969 py3: un-byteify strings around os.system() and os.devnull in contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39828
diff changeset
980 if os.name != r'nt':
40349
1524c305377f py3: restore perfstartup() prior to b456b2e0ad9f on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 40295
diff changeset
981 os.system(b"HGRCPATH= %s version -q > /dev/null" %
1524c305377f py3: restore perfstartup() prior to b456b2e0ad9f on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 40295
diff changeset
982 fsencode(sys.argv[0]))
27382
de7bcbc68042 perf: adjust perfstartup() for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 27345
diff changeset
983 else:
39829
db875f97a969 py3: un-byteify strings around os.system() and os.devnull in contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39828
diff changeset
984 os.environ[r'HGRCPATH'] = r' '
40349
1524c305377f py3: restore perfstartup() prior to b456b2e0ad9f on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents: 40295
diff changeset
985 os.system(r"%s version -q > NUL" % sys.argv[0])
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
986 timer(d)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
987 fm.end()
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
988
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
989 @command(b'perfparents', formatteropts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
990 def perfparents(ui, repo, **opts):
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
991 opts = _byteskwargs(opts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
992 timer, fm = gettimer(ui, opts)
27305
5831cfbf0e33 perf: perfparents honor config perf.parentscount
timeless <timeless@mozdev.org>
parents: 27304
diff changeset
993 # control the number of commits perfparents iterates over
5831cfbf0e33 perf: perfparents honor config perf.parentscount
timeless <timeless@mozdev.org>
parents: 27304
diff changeset
994 # experimental config: perf.parentscount
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
995 count = getint(ui, b"perf", b"parentscount", 1000)
27305
5831cfbf0e33 perf: perfparents honor config perf.parentscount
timeless <timeless@mozdev.org>
parents: 27304
diff changeset
996 if len(repo.changelog) < count:
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
997 raise error.Abort(b"repo needs %d commits for this test" % count)
27100
8d5dba93aa4f contrib/perf: perfparents handle filtered repos
timeless <timeless@mozdev.org>
parents: 27099
diff changeset
998 repo = repo.unfiltered()
39827
86dbeb7c9a11 py3: switch contrib/perf from xrange to pycompat.xrange
Matt Harbison <matt_harbison@yahoo.com>
parents: 39826
diff changeset
999 nl = [repo.changelog.node(i) for i in _xrange(count)]
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
1000 def d():
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
1001 for n in nl:
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
1002 repo.changelog.parents(n)
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
1003 timer(d)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
1004 fm.end()
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
1005
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1006 @command(b'perfctxfiles', formatteropts)
27095
aaf4e2d77148 contrib/perf: name functions to match decorators
timeless <timeless@mozdev.org>
parents: 27072
diff changeset
1007 def perfctxfiles(ui, repo, x, **opts):
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
1008 opts = _byteskwargs(opts)
24349
389693a245fa perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents: 23878
diff changeset
1009 x = int(x)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
1010 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
1011 def d():
389693a245fa perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents: 23878
diff changeset
1012 len(repo[x].files())
389693a245fa perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents: 23878
diff changeset
1013 timer(d)
389693a245fa perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents: 23878
diff changeset
1014 fm.end()
389693a245fa perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents: 23878
diff changeset
1015
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1016 @command(b'perfrawfiles', formatteropts)
27095
aaf4e2d77148 contrib/perf: name functions to match decorators
timeless <timeless@mozdev.org>
parents: 27072
diff changeset
1017 def perfrawfiles(ui, repo, x, **opts):
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
1018 opts = _byteskwargs(opts)
24349
389693a245fa perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents: 23878
diff changeset
1019 x = int(x)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
1020 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
1021 cl = repo.changelog
389693a245fa perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents: 23878
diff changeset
1022 def d():
389693a245fa perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents: 23878
diff changeset
1023 len(cl.read(x)[3])
389693a245fa perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents: 23878
diff changeset
1024 timer(d)
389693a245fa perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents: 23878
diff changeset
1025 fm.end()
389693a245fa perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents: 23878
diff changeset
1026
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1027 @command(b'perflookup', formatteropts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
1028 def perflookup(ui, repo, rev, **opts):
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
1029 opts = _byteskwargs(opts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
1030 timer, fm = gettimer(ui, opts)
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
1031 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
1032 fm.end()
7366
eb240755386d Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
1033
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1034 @command(b'perflinelogedits',
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1035 [(b'n', b'edits', 10000, b'number of edits'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1036 (b'', b'max-hunk-lines', 10, b'max lines in a hunk'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1037 ], norepo=True)
39007
1601afbb573c perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents: 38821
diff changeset
1038 def perflinelogedits(ui, **opts):
1601afbb573c perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents: 38821
diff changeset
1039 from mercurial import linelog
1601afbb573c perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents: 38821
diff changeset
1040
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
1041 opts = _byteskwargs(opts)
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
1042
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1043 edits = opts[b'edits']
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1044 maxhunklines = opts[b'max_hunk_lines']
39007
1601afbb573c perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents: 38821
diff changeset
1045
1601afbb573c perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents: 38821
diff changeset
1046 maxb1 = 100000
1601afbb573c perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents: 38821
diff changeset
1047 random.seed(0)
1601afbb573c perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents: 38821
diff changeset
1048 randint = random.randint
1601afbb573c perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents: 38821
diff changeset
1049 currentlines = 0
1601afbb573c perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents: 38821
diff changeset
1050 arglist = []
39827
86dbeb7c9a11 py3: switch contrib/perf from xrange to pycompat.xrange
Matt Harbison <matt_harbison@yahoo.com>
parents: 39826
diff changeset
1051 for rev in _xrange(edits):
39007
1601afbb573c perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents: 38821
diff changeset
1052 a1 = randint(0, currentlines)
1601afbb573c perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents: 38821
diff changeset
1053 a2 = randint(a1, min(currentlines, a1 + maxhunklines))
1601afbb573c perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents: 38821
diff changeset
1054 b1 = randint(0, maxb1)
1601afbb573c perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents: 38821
diff changeset
1055 b2 = randint(b1, b1 + maxhunklines)
1601afbb573c perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents: 38821
diff changeset
1056 currentlines += (b2 - b1) - (a2 - a1)
1601afbb573c perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents: 38821
diff changeset
1057 arglist.append((rev, a1, a2, b1, b2))
1601afbb573c perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents: 38821
diff changeset
1058
1601afbb573c perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents: 38821
diff changeset
1059 def d():
1601afbb573c perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents: 38821
diff changeset
1060 ll = linelog.linelog()
1601afbb573c perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents: 38821
diff changeset
1061 for args in arglist:
1601afbb573c perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents: 38821
diff changeset
1062 ll.replacelines(*args)
1601afbb573c perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents: 38821
diff changeset
1063
1601afbb573c perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents: 38821
diff changeset
1064 timer, fm = gettimer(ui, opts)
1601afbb573c perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents: 38821
diff changeset
1065 timer(d)
1601afbb573c perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents: 38821
diff changeset
1066 fm.end()
1601afbb573c perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents: 38821
diff changeset
1067
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1068 @command(b'perfrevrange', formatteropts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
1069 def perfrevrange(ui, repo, *specs, **opts):
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
1070 opts = _byteskwargs(opts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
1071 timer, fm = gettimer(ui, opts)
16858
fdf99e0f60f3 perf: add a benchmark for revrange
Bryan O'Sullivan <bryano@fb.com>
parents: 16802
diff changeset
1072 revrange = scmutil.revrange
fdf99e0f60f3 perf: add a benchmark for revrange
Bryan O'Sullivan <bryano@fb.com>
parents: 16802
diff changeset
1073 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
1074 fm.end()
16858
fdf99e0f60f3 perf: add a benchmark for revrange
Bryan O'Sullivan <bryano@fb.com>
parents: 16802
diff changeset
1075
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1076 @command(b'perfnodelookup', formatteropts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
1077 def perfnodelookup(ui, repo, rev, **opts):
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
1078 opts = _byteskwargs(opts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
1079 timer, fm = gettimer(ui, opts)
16309
e0c1b3ef7c36 perf: node lookup
Matt Mackall <mpm@selenic.com>
parents: 16266
diff changeset
1080 import mercurial.revlog
e0c1b3ef7c36 perf: node lookup
Matt Mackall <mpm@selenic.com>
parents: 16266
diff changeset
1081 mercurial.revlog._prereadsize = 2**24 # disable lazy parser in old hg
37355
5bcd5859b505 perf: make perfmanifest and perfnodelookup work with revsets
Martin von Zweigbergk <martinvonz@google.com>
parents: 37271
diff changeset
1082 n = scmutil.revsingle(repo, rev).node()
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1083 cl = mercurial.revlog.revlog(getsvfs(repo), b"00changelog.i")
16414
e8d37b78acfb parsers: use base-16 trie for faster node->rev mapping
Bryan O'Sullivan <bryano@fb.com>
parents: 16403
diff changeset
1084 def d():
e8d37b78acfb parsers: use base-16 trie for faster node->rev mapping
Bryan O'Sullivan <bryano@fb.com>
parents: 16403
diff changeset
1085 cl.rev(n)
16785
1dc08dc63c09 perf: rework perfheads and perftags to clear caches
Bryan O'Sullivan <bryano@fb.com>
parents: 16689
diff changeset
1086 clearcaches(cl)
16414
e8d37b78acfb parsers: use base-16 trie for faster node->rev mapping
Bryan O'Sullivan <bryano@fb.com>
parents: 16403
diff changeset
1087 timer(d)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
1088 fm.end()
16414
e8d37b78acfb parsers: use base-16 trie for faster node->rev mapping
Bryan O'Sullivan <bryano@fb.com>
parents: 16403
diff changeset
1089
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1090 @command(b'perflog',
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1091 [(b'', b'rename', False, b'ask log to follow renames')
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1092 ] + formatteropts)
27306
bafb1235f505 perf: add optional rev for perflog and perftemplating
timeless <timeless@mozdev.org>
parents: 27305
diff changeset
1093 def perflog(ui, repo, rev=None, **opts):
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
1094 opts = _byteskwargs(opts)
27306
bafb1235f505 perf: add optional rev for perflog and perftemplating
timeless <timeless@mozdev.org>
parents: 27305
diff changeset
1095 if rev is None:
bafb1235f505 perf: add optional rev for perflog and perftemplating
timeless <timeless@mozdev.org>
parents: 27305
diff changeset
1096 rev=[]
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
1097 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
1098 ui.pushbuffer()
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1099 timer(lambda: commands.log(ui, repo, rev=rev, date=b'', user=b'',
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1100 copies=opts.get(b'rename')))
7872
f680a1bd679b contrib: add perflog and perftemplating commands to perf extension
Alexander Solovyov <piranha@piranha.org.ua>
parents: 7366
diff changeset
1101 ui.popbuffer()
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
1102 fm.end()
7872
f680a1bd679b contrib: add perflog and perftemplating commands to perf extension
Alexander Solovyov <piranha@piranha.org.ua>
parents: 7366
diff changeset
1103
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1104 @command(b'perfmoonwalk', formatteropts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
1105 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
1106 """benchmark walking the changelog backwards
74aea4be8e78 perf: add perfmoonwalk command to walk the changelog backwards
Brodie Rao <brodie@sf.io>
parents: 20032
diff changeset
1107
74aea4be8e78 perf: add perfmoonwalk command to walk the changelog backwards
Brodie Rao <brodie@sf.io>
parents: 20032
diff changeset
1108 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
1109 """
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
1110 opts = _byteskwargs(opts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
1111 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
1112 def moonwalk():
38819
a4d847cea6f8 perfmoonwalk: make work with filtered repo
Martin von Zweigbergk <martinvonz@google.com>
parents: 38695
diff changeset
1113 for i in repo.changelog.revs(start=(len(repo) - 1), stop=-1):
20178
74aea4be8e78 perf: add perfmoonwalk command to walk the changelog backwards
Brodie Rao <brodie@sf.io>
parents: 20032
diff changeset
1114 ctx = repo[i]
74aea4be8e78 perf: add perfmoonwalk command to walk the changelog backwards
Brodie Rao <brodie@sf.io>
parents: 20032
diff changeset
1115 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
1116 timer(moonwalk)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
1117 fm.end()
20178
74aea4be8e78 perf: add perfmoonwalk command to walk the changelog backwards
Brodie Rao <brodie@sf.io>
parents: 20032
diff changeset
1118
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1119 @command(b'perftemplating',
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1120 [(b'r', b'rev', [], b'revisions to run the template on'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1121 ] + formatteropts)
38270
ae6e02fcee24 perftemplating: allow to specify the template to test
Boris Feld <boris.feld@octobus.net>
parents: 38269
diff changeset
1122 def perftemplating(ui, repo, testedtemplate=None, **opts):
ae6e02fcee24 perftemplating: allow to specify the template to test
Boris Feld <boris.feld@octobus.net>
parents: 38269
diff changeset
1123 """test the rendering time of a given template"""
38269
a577a199983c perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents: 38268
diff changeset
1124 if makelogtemplater is None:
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1125 raise error.Abort((b"perftemplating not available with this Mercurial"),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1126 hint=b"use 4.3 or later")
38269
a577a199983c perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents: 38268
diff changeset
1127
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
1128 opts = _byteskwargs(opts)
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
1129
38267
71d59b487d0c perftemplating: drop usage of buffer
Boris Feld <boris.feld@octobus.net>
parents: 38266
diff changeset
1130 nullui = ui.copy()
39829
db875f97a969 py3: un-byteify strings around os.system() and os.devnull in contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39828
diff changeset
1131 nullui.fout = open(os.devnull, r'wb')
38267
71d59b487d0c perftemplating: drop usage of buffer
Boris Feld <boris.feld@octobus.net>
parents: 38266
diff changeset
1132 nullui.disablepager()
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1133 revs = opts.get(b'rev')
38269
a577a199983c perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents: 38268
diff changeset
1134 if not revs:
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1135 revs = [b'all()']
38269
a577a199983c perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents: 38268
diff changeset
1136 revs = list(scmutil.revrange(repo, revs))
a577a199983c perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents: 38268
diff changeset
1137
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1138 defaulttemplate = (b'{date|shortdate} [{rev}:{node|short}]'
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1139 b' {author|person}: {desc|firstline}\n')
38270
ae6e02fcee24 perftemplating: allow to specify the template to test
Boris Feld <boris.feld@octobus.net>
parents: 38269
diff changeset
1140 if testedtemplate is None:
ae6e02fcee24 perftemplating: allow to specify the template to test
Boris Feld <boris.feld@octobus.net>
parents: 38269
diff changeset
1141 testedtemplate = defaulttemplate
ae6e02fcee24 perftemplating: allow to specify the template to test
Boris Feld <boris.feld@octobus.net>
parents: 38269
diff changeset
1142 displayer = makelogtemplater(nullui, repo, testedtemplate)
38266
6b91815fcdce perftemplating: move template formating into its own function
Boris Feld <boris.feld@octobus.net>
parents: 38265
diff changeset
1143 def format():
38269
a577a199983c perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents: 38268
diff changeset
1144 for r in revs:
a577a199983c perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents: 38268
diff changeset
1145 ctx = repo[r]
a577a199983c perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents: 38268
diff changeset
1146 displayer.show(ctx)
a577a199983c perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents: 38268
diff changeset
1147 displayer.flush(ctx)
38266
6b91815fcdce perftemplating: move template formating into its own function
Boris Feld <boris.feld@octobus.net>
parents: 38265
diff changeset
1148
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
1149 timer, fm = gettimer(ui, opts)
38266
6b91815fcdce perftemplating: move template formating into its own function
Boris Feld <boris.feld@octobus.net>
parents: 38265
diff changeset
1150 timer(format)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
1151 fm.end()
7872
f680a1bd679b contrib: add perflog and perftemplating commands to perf extension
Alexander Solovyov <piranha@piranha.org.ua>
parents: 7366
diff changeset
1152
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1153 @command(b'perfcca', formatteropts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
1154 def perfcca(ui, repo, **opts):
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
1155 opts = _byteskwargs(opts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
1156 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
1157 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
1158 fm.end()
16386
ccc173d0914e perf: add case collision auditor perf
Matt Mackall <mpm@selenic.com>
parents: 16309
diff changeset
1159
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1160 @command(b'perffncacheload', formatteropts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
1161 def perffncacheload(ui, repo, **opts):
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
1162 opts = _byteskwargs(opts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
1163 timer, fm = gettimer(ui, opts)
17780
769f66861eb8 perf: simply use repo.store for perffncache* commands
Adrian Buehlmann <adrian@cadifra.com>
parents: 17553
diff changeset
1164 s = repo.store
16403
efae1fea4bbd perf: time fncache read and write performance
Bryan O'Sullivan <bryano@fb.com>
parents: 16386
diff changeset
1165 def d():
efae1fea4bbd perf: time fncache read and write performance
Bryan O'Sullivan <bryano@fb.com>
parents: 16386
diff changeset
1166 s.fncache._load()
efae1fea4bbd perf: time fncache read and write performance
Bryan O'Sullivan <bryano@fb.com>
parents: 16386
diff changeset
1167 timer(d)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
1168 fm.end()
16403
efae1fea4bbd perf: time fncache read and write performance
Bryan O'Sullivan <bryano@fb.com>
parents: 16386
diff changeset
1169
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1170 @command(b'perffncachewrite', formatteropts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
1171 def perffncachewrite(ui, repo, **opts):
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
1172 opts = _byteskwargs(opts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
1173 timer, fm = gettimer(ui, opts)
17780
769f66861eb8 perf: simply use repo.store for perffncache* commands
Adrian Buehlmann <adrian@cadifra.com>
parents: 17553
diff changeset
1174 s = repo.store
38695
2cdb82e8fb44 perffncachewrite: load fncache after lock is acquired
Boris Feld <boris.feld@octobus.net>
parents: 38694
diff changeset
1175 lock = repo.lock()
16403
efae1fea4bbd perf: time fncache read and write performance
Bryan O'Sullivan <bryano@fb.com>
parents: 16386
diff changeset
1176 s.fncache._load()
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1177 tr = repo.transaction(b'perffncachewrite')
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1178 tr.addbackup(b'fncache')
16403
efae1fea4bbd perf: time fncache read and write performance
Bryan O'Sullivan <bryano@fb.com>
parents: 16386
diff changeset
1179 def d():
efae1fea4bbd perf: time fncache read and write performance
Bryan O'Sullivan <bryano@fb.com>
parents: 16386
diff changeset
1180 s.fncache._dirty = True
27097
b3e24a9c5f9b contrib/perf: fix perffncachewrite
timeless <timeless@mozdev.org>
parents: 27096
diff changeset
1181 s.fncache.write(tr)
16403
efae1fea4bbd perf: time fncache read and write performance
Bryan O'Sullivan <bryano@fb.com>
parents: 16386
diff changeset
1182 timer(d)
30069
98b9846a131e perf: release lock after transaction in perffncachewrite
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 30020
diff changeset
1183 tr.close()
27097
b3e24a9c5f9b contrib/perf: fix perffncachewrite
timeless <timeless@mozdev.org>
parents: 27096
diff changeset
1184 lock.release()
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
1185 fm.end()
16403
efae1fea4bbd perf: time fncache read and write performance
Bryan O'Sullivan <bryano@fb.com>
parents: 16386
diff changeset
1186
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1187 @command(b'perffncacheencode', formatteropts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
1188 def perffncacheencode(ui, repo, **opts):
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
1189 opts = _byteskwargs(opts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
1190 timer, fm = gettimer(ui, opts)
17780
769f66861eb8 perf: simply use repo.store for perffncache* commands
Adrian Buehlmann <adrian@cadifra.com>
parents: 17553
diff changeset
1191 s = repo.store
17553
5ab863922e0f perf: add perffncacheencode
Adrian Buehlmann <adrian@cadifra.com>
parents: 17216
diff changeset
1192 s.fncache._load()
5ab863922e0f perf: add perffncacheencode
Adrian Buehlmann <adrian@cadifra.com>
parents: 17216
diff changeset
1193 def d():
5ab863922e0f perf: add perffncacheencode
Adrian Buehlmann <adrian@cadifra.com>
parents: 17216
diff changeset
1194 for p in s.fncache.entries:
5ab863922e0f perf: add perffncacheencode
Adrian Buehlmann <adrian@cadifra.com>
parents: 17216
diff changeset
1195 s.encode(p)
5ab863922e0f perf: add perffncacheencode
Adrian Buehlmann <adrian@cadifra.com>
parents: 17216
diff changeset
1196 timer(d)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
1197 fm.end()
17553
5ab863922e0f perf: add perffncacheencode
Adrian Buehlmann <adrian@cadifra.com>
parents: 17216
diff changeset
1198
36774
d382344c69aa perf: teach perfbdiff to call blocks() and to use xdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36393
diff changeset
1199 def _bdiffworker(q, blocks, xdiff, ready, done):
35599
af25237be091 perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents: 35137
diff changeset
1200 while not done.is_set():
af25237be091 perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents: 35137
diff changeset
1201 pair = q.get()
af25237be091 perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents: 35137
diff changeset
1202 while pair is not None:
36774
d382344c69aa perf: teach perfbdiff to call blocks() and to use xdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36393
diff changeset
1203 if xdiff:
d382344c69aa perf: teach perfbdiff to call blocks() and to use xdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36393
diff changeset
1204 mdiff.bdiff.xdiffblocks(*pair)
d382344c69aa perf: teach perfbdiff to call blocks() and to use xdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36393
diff changeset
1205 elif blocks:
d382344c69aa perf: teach perfbdiff to call blocks() and to use xdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36393
diff changeset
1206 mdiff.bdiff.blocks(*pair)
d382344c69aa perf: teach perfbdiff to call blocks() and to use xdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36393
diff changeset
1207 else:
d382344c69aa perf: teach perfbdiff to call blocks() and to use xdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36393
diff changeset
1208 mdiff.textdiff(*pair)
35599
af25237be091 perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents: 35137
diff changeset
1209 q.task_done()
af25237be091 perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents: 35137
diff changeset
1210 pair = q.get()
af25237be091 perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents: 35137
diff changeset
1211 q.task_done() # for the None one
af25237be091 perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents: 35137
diff changeset
1212 with ready:
af25237be091 perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents: 35137
diff changeset
1213 ready.wait()
af25237be091 perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents: 35137
diff changeset
1214
39346
862d23bc5749 perf: add function for obtaining manifest revision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39345
diff changeset
1215 def _manifestrevision(repo, mnode):
862d23bc5749 perf: add function for obtaining manifest revision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39345
diff changeset
1216 ml = repo.manifestlog
862d23bc5749 perf: add function for obtaining manifest revision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39345
diff changeset
1217
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1218 if util.safehasattr(ml, b'getstorage'):
39346
862d23bc5749 perf: add function for obtaining manifest revision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39345
diff changeset
1219 store = ml.getstorage(b'')
862d23bc5749 perf: add function for obtaining manifest revision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39345
diff changeset
1220 else:
862d23bc5749 perf: add function for obtaining manifest revision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39345
diff changeset
1221 store = ml._revlog
862d23bc5749 perf: add function for obtaining manifest revision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39345
diff changeset
1222
862d23bc5749 perf: add function for obtaining manifest revision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39345
diff changeset
1223 return store.revision(mnode)
862d23bc5749 perf: add function for obtaining manifest revision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39345
diff changeset
1224
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1225 @command(b'perfbdiff', revlogopts + formatteropts + [
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1226 (b'', b'count', 1, b'number of revisions to test (when using --startrev)'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1227 (b'', b'alldata', False, b'test bdiffs for all associated revisions'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1228 (b'', b'threads', 0, b'number of thread to use (disable with 0)'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1229 (b'', b'blocks', False, b'test computing diffs into blocks'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1230 (b'', b'xdiff', False, b'use xdiff algorithm'),
35599
af25237be091 perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents: 35137
diff changeset
1231 ],
af25237be091 perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents: 35137
diff changeset
1232
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1233 b'-c|-m|FILE REV')
35599
af25237be091 perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents: 35137
diff changeset
1234 def perfbdiff(ui, repo, file_, rev=None, count=None, threads=0, **opts):
30346
7ddc8f8d7712 perf: support bdiffing multiple revisions in a single revlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30345
diff changeset
1235 """benchmark a bdiff between revisions
7ddc8f8d7712 perf: support bdiffing multiple revisions in a single revlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30345
diff changeset
1236
7ddc8f8d7712 perf: support bdiffing multiple revisions in a single revlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30345
diff changeset
1237 By default, benchmark a bdiff between its delta parent and itself.
7ddc8f8d7712 perf: support bdiffing multiple revisions in a single revlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30345
diff changeset
1238
7ddc8f8d7712 perf: support bdiffing multiple revisions in a single revlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30345
diff changeset
1239 With ``--count``, benchmark bdiffs between delta parents and self for N
7ddc8f8d7712 perf: support bdiffing multiple revisions in a single revlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30345
diff changeset
1240 revisions starting at the specified revision.
30347
6ecad4b73569 perf: support measuring bdiff for all changeset related data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30346
diff changeset
1241
6ecad4b73569 perf: support measuring bdiff for all changeset related data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30346
diff changeset
1242 With ``--alldata``, assume the requested revision is a changeset and
6ecad4b73569 perf: support measuring bdiff for all changeset related data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30346
diff changeset
1243 measure bdiffs for all changes related to that changeset (manifest
6ecad4b73569 perf: support measuring bdiff for all changeset related data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30346
diff changeset
1244 and filelogs).
30346
7ddc8f8d7712 perf: support bdiffing multiple revisions in a single revlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30345
diff changeset
1245 """
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
1246 opts = _byteskwargs(opts)
36774
d382344c69aa perf: teach perfbdiff to call blocks() and to use xdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36393
diff changeset
1247
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1248 if opts[b'xdiff'] and not opts[b'blocks']:
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1249 raise error.CommandError(b'perfbdiff', b'--xdiff requires --blocks')
36774
d382344c69aa perf: teach perfbdiff to call blocks() and to use xdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36393
diff changeset
1250
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1251 if opts[b'alldata']:
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1252 opts[b'changelog'] = True
30347
6ecad4b73569 perf: support measuring bdiff for all changeset related data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30346
diff changeset
1253
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1254 if opts.get(b'changelog') or opts.get(b'manifest'):
30320
c8fa7ad1ff90 perf: add perfbdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30219
diff changeset
1255 file_, rev = None, file_
c8fa7ad1ff90 perf: add perfbdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30219
diff changeset
1256 elif rev is None:
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1257 raise error.CommandError(b'perfbdiff', b'invalid arguments')
30320
c8fa7ad1ff90 perf: add perfbdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30219
diff changeset
1258
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1259 blocks = opts[b'blocks']
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1260 xdiff = opts[b'xdiff']
30345
7d91a085ebe6 perf: prepare to handle multiple pairs in perfbdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30320
diff changeset
1261 textpairs = []
7d91a085ebe6 perf: prepare to handle multiple pairs in perfbdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30320
diff changeset
1262
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1263 r = cmdutil.openrevlog(repo, b'perfbdiff', file_, opts)
30320
c8fa7ad1ff90 perf: add perfbdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30219
diff changeset
1264
30346
7ddc8f8d7712 perf: support bdiffing multiple revisions in a single revlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30345
diff changeset
1265 startrev = r.rev(r.lookup(rev))
7ddc8f8d7712 perf: support bdiffing multiple revisions in a single revlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30345
diff changeset
1266 for rev in range(startrev, min(startrev + count, len(r) - 1)):
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1267 if opts[b'alldata']:
30347
6ecad4b73569 perf: support measuring bdiff for all changeset related data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30346
diff changeset
1268 # Load revisions associated with changeset.
6ecad4b73569 perf: support measuring bdiff for all changeset related data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30346
diff changeset
1269 ctx = repo[rev]
39346
862d23bc5749 perf: add function for obtaining manifest revision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39345
diff changeset
1270 mtext = _manifestrevision(repo, ctx.manifestnode())
30347
6ecad4b73569 perf: support measuring bdiff for all changeset related data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30346
diff changeset
1271 for pctx in ctx.parents():
39346
862d23bc5749 perf: add function for obtaining manifest revision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39345
diff changeset
1272 pman = _manifestrevision(repo, pctx.manifestnode())
30347
6ecad4b73569 perf: support measuring bdiff for all changeset related data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30346
diff changeset
1273 textpairs.append((pman, mtext))
6ecad4b73569 perf: support measuring bdiff for all changeset related data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30346
diff changeset
1274
6ecad4b73569 perf: support measuring bdiff for all changeset related data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30346
diff changeset
1275 # Load filelog revisions by iterating manifest delta.
6ecad4b73569 perf: support measuring bdiff for all changeset related data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30346
diff changeset
1276 man = ctx.manifest()
6ecad4b73569 perf: support measuring bdiff for all changeset related data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30346
diff changeset
1277 pman = ctx.p1().manifest()
6ecad4b73569 perf: support measuring bdiff for all changeset related data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30346
diff changeset
1278 for filename, change in pman.diff(man).items():
6ecad4b73569 perf: support measuring bdiff for all changeset related data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30346
diff changeset
1279 fctx = repo.file(filename)
6ecad4b73569 perf: support measuring bdiff for all changeset related data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30346
diff changeset
1280 f1 = fctx.revision(change[0][0] or -1)
6ecad4b73569 perf: support measuring bdiff for all changeset related data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30346
diff changeset
1281 f2 = fctx.revision(change[1][0] or -1)
6ecad4b73569 perf: support measuring bdiff for all changeset related data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30346
diff changeset
1282 textpairs.append((f1, f2))
6ecad4b73569 perf: support measuring bdiff for all changeset related data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30346
diff changeset
1283 else:
6ecad4b73569 perf: support measuring bdiff for all changeset related data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30346
diff changeset
1284 dp = r.deltaparent(rev)
6ecad4b73569 perf: support measuring bdiff for all changeset related data
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30346
diff changeset
1285 textpairs.append((r.revision(dp), r.revision(rev)))
30320
c8fa7ad1ff90 perf: add perfbdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30219
diff changeset
1286
35599
af25237be091 perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents: 35137
diff changeset
1287 withthreads = threads > 0
af25237be091 perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents: 35137
diff changeset
1288 if not withthreads:
af25237be091 perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents: 35137
diff changeset
1289 def d():
af25237be091 perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents: 35137
diff changeset
1290 for pair in textpairs:
36774
d382344c69aa perf: teach perfbdiff to call blocks() and to use xdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36393
diff changeset
1291 if xdiff:
d382344c69aa perf: teach perfbdiff to call blocks() and to use xdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36393
diff changeset
1292 mdiff.bdiff.xdiffblocks(*pair)
d382344c69aa perf: teach perfbdiff to call blocks() and to use xdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36393
diff changeset
1293 elif blocks:
d382344c69aa perf: teach perfbdiff to call blocks() and to use xdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36393
diff changeset
1294 mdiff.bdiff.blocks(*pair)
d382344c69aa perf: teach perfbdiff to call blocks() and to use xdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36393
diff changeset
1295 else:
d382344c69aa perf: teach perfbdiff to call blocks() and to use xdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36393
diff changeset
1296 mdiff.textdiff(*pair)
35599
af25237be091 perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents: 35137
diff changeset
1297 else:
37890
8fb9985382be pycompat: export queue module instead of symbols in module (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37355
diff changeset
1298 q = queue()
39827
86dbeb7c9a11 py3: switch contrib/perf from xrange to pycompat.xrange
Matt Harbison <matt_harbison@yahoo.com>
parents: 39826
diff changeset
1299 for i in _xrange(threads):
35599
af25237be091 perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents: 35137
diff changeset
1300 q.put(None)
af25237be091 perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents: 35137
diff changeset
1301 ready = threading.Condition()
af25237be091 perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents: 35137
diff changeset
1302 done = threading.Event()
39827
86dbeb7c9a11 py3: switch contrib/perf from xrange to pycompat.xrange
Matt Harbison <matt_harbison@yahoo.com>
parents: 39826
diff changeset
1303 for i in _xrange(threads):
36774
d382344c69aa perf: teach perfbdiff to call blocks() and to use xdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36393
diff changeset
1304 threading.Thread(target=_bdiffworker,
d382344c69aa perf: teach perfbdiff to call blocks() and to use xdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36393
diff changeset
1305 args=(q, blocks, xdiff, ready, done)).start()
35599
af25237be091 perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents: 35137
diff changeset
1306 q.join()
af25237be091 perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents: 35137
diff changeset
1307 def d():
af25237be091 perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents: 35137
diff changeset
1308 for pair in textpairs:
af25237be091 perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents: 35137
diff changeset
1309 q.put(pair)
39827
86dbeb7c9a11 py3: switch contrib/perf from xrange to pycompat.xrange
Matt Harbison <matt_harbison@yahoo.com>
parents: 39826
diff changeset
1310 for i in _xrange(threads):
35599
af25237be091 perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents: 35137
diff changeset
1311 q.put(None)
af25237be091 perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents: 35137
diff changeset
1312 with ready:
af25237be091 perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents: 35137
diff changeset
1313 ready.notify_all()
af25237be091 perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents: 35137
diff changeset
1314 q.join()
30320
c8fa7ad1ff90 perf: add perfbdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30219
diff changeset
1315 timer, fm = gettimer(ui, opts)
c8fa7ad1ff90 perf: add perfbdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30219
diff changeset
1316 timer(d)
c8fa7ad1ff90 perf: add perfbdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30219
diff changeset
1317 fm.end()
c8fa7ad1ff90 perf: add perfbdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30219
diff changeset
1318
35599
af25237be091 perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents: 35137
diff changeset
1319 if withthreads:
af25237be091 perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents: 35137
diff changeset
1320 done.set()
39827
86dbeb7c9a11 py3: switch contrib/perf from xrange to pycompat.xrange
Matt Harbison <matt_harbison@yahoo.com>
parents: 39826
diff changeset
1321 for i in _xrange(threads):
35599
af25237be091 perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents: 35137
diff changeset
1322 q.put(None)
af25237be091 perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents: 35137
diff changeset
1323 with ready:
af25237be091 perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents: 35137
diff changeset
1324 ready.notify_all()
af25237be091 perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents: 35137
diff changeset
1325
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1326 @command(b'perfunidiff', revlogopts + formatteropts + [
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1327 (b'', b'count', 1, b'number of revisions to test (when using --startrev)'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1328 (b'', b'alldata', False, b'test unidiffs for all associated revisions'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1329 ], b'-c|-m|FILE REV')
35901
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1330 def perfunidiff(ui, repo, file_, rev=None, count=None, **opts):
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1331 """benchmark a unified diff between revisions
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1332
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1333 This doesn't include any copy tracing - it's just a unified diff
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1334 of the texts.
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1335
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1336 By default, benchmark a diff between its delta parent and itself.
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1337
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1338 With ``--count``, benchmark diffs between delta parents and self for N
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1339 revisions starting at the specified revision.
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1340
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1341 With ``--alldata``, assume the requested revision is a changeset and
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1342 measure diffs for all changes related to that changeset (manifest
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1343 and filelogs).
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1344 """
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
1345 opts = _byteskwargs(opts)
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1346 if opts[b'alldata']:
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1347 opts[b'changelog'] = True
35901
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1348
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1349 if opts.get(b'changelog') or opts.get(b'manifest'):
35901
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1350 file_, rev = None, file_
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1351 elif rev is None:
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1352 raise error.CommandError(b'perfunidiff', b'invalid arguments')
35901
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1353
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1354 textpairs = []
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1355
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1356 r = cmdutil.openrevlog(repo, b'perfunidiff', file_, opts)
35901
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1357
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1358 startrev = r.rev(r.lookup(rev))
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1359 for rev in range(startrev, min(startrev + count, len(r) - 1)):
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1360 if opts[b'alldata']:
35901
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1361 # Load revisions associated with changeset.
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1362 ctx = repo[rev]
39346
862d23bc5749 perf: add function for obtaining manifest revision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39345
diff changeset
1363 mtext = _manifestrevision(repo, ctx.manifestnode())
35901
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1364 for pctx in ctx.parents():
39346
862d23bc5749 perf: add function for obtaining manifest revision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39345
diff changeset
1365 pman = _manifestrevision(repo, pctx.manifestnode())
35901
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1366 textpairs.append((pman, mtext))
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1367
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1368 # Load filelog revisions by iterating manifest delta.
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1369 man = ctx.manifest()
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1370 pman = ctx.p1().manifest()
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1371 for filename, change in pman.diff(man).items():
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1372 fctx = repo.file(filename)
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1373 f1 = fctx.revision(change[0][0] or -1)
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1374 f2 = fctx.revision(change[1][0] or -1)
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1375 textpairs.append((f1, f2))
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1376 else:
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1377 dp = r.deltaparent(rev)
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1378 textpairs.append((r.revision(dp), r.revision(rev)))
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1379
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1380 def d():
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1381 for left, right in textpairs:
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1382 # The date strings don't matter, so we pass empty strings.
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1383 headerlines, hunks = mdiff.unidiff(
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1384 left, b'', right, b'', b'left', b'right', binary=False)
35901
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1385 # consume iterators in roughly the way patch.py does
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1386 b'\n'.join(headerlines)
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1387 b''.join(sum((list(hlines) for hrange, hlines in hunks), []))
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1388 timer, fm = gettimer(ui, opts)
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1389 timer(d)
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1390 fm.end()
ed939545edd0 perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents: 35602
diff changeset
1391
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1392 @command(b'perfdiffwd', formatteropts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
1393 def perfdiffwd(ui, repo, **opts):
9826
d768614578dd contrib/perf: profile diff of working directory changes
Patrick Mezard <pmezard@gmail.com>
parents: 9146
diff changeset
1394 """Profile diff of working directory changes"""
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
1395 opts = _byteskwargs(opts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
1396 timer, fm = gettimer(ui, opts)
9826
d768614578dd contrib/perf: profile diff of working directory changes
Patrick Mezard <pmezard@gmail.com>
parents: 9146
diff changeset
1397 options = {
40214
b456b2e0ad9f py3: make test-contrib-perf.t work on python 3
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 40145
diff changeset
1398 'w': 'ignore_all_space',
b456b2e0ad9f py3: make test-contrib-perf.t work on python 3
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 40145
diff changeset
1399 'b': 'ignore_space_change',
b456b2e0ad9f py3: make test-contrib-perf.t work on python 3
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 40145
diff changeset
1400 'B': 'ignore_blank_lines',
9826
d768614578dd contrib/perf: profile diff of working directory changes
Patrick Mezard <pmezard@gmail.com>
parents: 9146
diff changeset
1401 }
d768614578dd contrib/perf: profile diff of working directory changes
Patrick Mezard <pmezard@gmail.com>
parents: 9146
diff changeset
1402
40214
b456b2e0ad9f py3: make test-contrib-perf.t work on python 3
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 40145
diff changeset
1403 for diffopt in ('', 'w', 'b', 'B', 'wB'):
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1404 opts = dict((options[c], b'1') for c in diffopt)
9826
d768614578dd contrib/perf: profile diff of working directory changes
Patrick Mezard <pmezard@gmail.com>
parents: 9146
diff changeset
1405 def d():
d768614578dd contrib/perf: profile diff of working directory changes
Patrick Mezard <pmezard@gmail.com>
parents: 9146
diff changeset
1406 ui.pushbuffer()
d768614578dd contrib/perf: profile diff of working directory changes
Patrick Mezard <pmezard@gmail.com>
parents: 9146
diff changeset
1407 commands.diff(ui, repo, **opts)
d768614578dd contrib/perf: profile diff of working directory changes
Patrick Mezard <pmezard@gmail.com>
parents: 9146
diff changeset
1408 ui.popbuffer()
40214
b456b2e0ad9f py3: make test-contrib-perf.t work on python 3
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 40145
diff changeset
1409 diffopt = diffopt.encode('ascii')
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1410 title = b'diffopts: %s' % (diffopt and (b'-' + diffopt) or b'none')
40718
20d2fd6036ed perf: explicitly pass title as a keyword argument in `perfdiffwd`
Boris Feld <boris.feld@octobus.net>
parents: 40605
diff changeset
1411 timer(d, title=title)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
1412 fm.end()
9826
d768614578dd contrib/perf: profile diff of working directory changes
Patrick Mezard <pmezard@gmail.com>
parents: 9146
diff changeset
1413
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1414 @command(b'perfrevlogindex', revlogopts + formatteropts,
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1415 b'-c|-m|FILE')
32565
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1416 def perfrevlogindex(ui, repo, file_=None, **opts):
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1417 """Benchmark operations against a revlog index.
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1418
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1419 This tests constructing a revlog instance, reading index data,
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1420 parsing index data, and performing various operations related to
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1421 index data.
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1422 """
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1423
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
1424 opts = _byteskwargs(opts)
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
1425
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1426 rl = cmdutil.openrevlog(repo, b'perfrevlogindex', file_, opts)
32565
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1427
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1428 opener = getattr(rl, 'opener') # trick linter
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1429 indexfile = rl.indexfile
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1430 data = opener.read(indexfile)
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1431
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1432 header = struct.unpack(b'>I', data[0:4])[0]
32565
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1433 version = header & 0xFFFF
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1434 if version == 1:
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1435 revlogio = revlog.revlogio()
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1436 inline = header & (1 << 16)
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1437 else:
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1438 raise error.Abort((b'unsupported revlog version: %d') % version)
32565
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1439
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1440 rllen = len(rl)
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1441
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1442 node0 = rl.node(0)
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1443 node25 = rl.node(rllen // 4)
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1444 node50 = rl.node(rllen // 2)
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1445 node75 = rl.node(rllen // 4 * 3)
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1446 node100 = rl.node(rllen - 1)
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1447
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1448 allrevs = range(rllen)
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1449 allrevsrev = list(reversed(allrevs))
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1450 allnodes = [rl.node(rev) for rev in range(rllen)]
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1451 allnodesrev = list(reversed(allnodes))
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1452
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1453 def constructor():
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1454 revlog.revlog(opener, indexfile)
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1455
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1456 def read():
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1457 with opener(indexfile) as fh:
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1458 fh.read()
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1459
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1460 def parseindex():
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1461 revlogio.parseindex(data, inline)
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1462
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1463 def getentry(revornode):
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1464 index = revlogio.parseindex(data, inline)[0]
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1465 index[revornode]
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1466
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1467 def getentries(revs, count=1):
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1468 index = revlogio.parseindex(data, inline)[0]
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1469
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1470 for i in range(count):
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1471 for rev in revs:
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1472 index[rev]
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1473
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1474 def resolvenode(node):
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1475 nodemap = revlogio.parseindex(data, inline)[1]
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1476 # This only works for the C code.
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1477 if nodemap is None:
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1478 return
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1479
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1480 try:
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1481 nodemap[node]
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1482 except error.RevlogError:
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1483 pass
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1484
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1485 def resolvenodes(nodes, count=1):
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1486 nodemap = revlogio.parseindex(data, inline)[1]
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1487 if nodemap is None:
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1488 return
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1489
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1490 for i in range(count):
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1491 for node in nodes:
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1492 try:
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1493 nodemap[node]
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1494 except error.RevlogError:
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1495 pass
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1496
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1497 benches = [
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1498 (constructor, b'revlog constructor'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1499 (read, b'read'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1500 (parseindex, b'create index object'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1501 (lambda: getentry(0), b'retrieve index entry for rev 0'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1502 (lambda: resolvenode(b'a' * 20), b'look up missing node'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1503 (lambda: resolvenode(node0), b'look up node at rev 0'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1504 (lambda: resolvenode(node25), b'look up node at 1/4 len'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1505 (lambda: resolvenode(node50), b'look up node at 1/2 len'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1506 (lambda: resolvenode(node75), b'look up node at 3/4 len'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1507 (lambda: resolvenode(node100), b'look up node at tip'),
32565
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1508 # 2x variation is to measure caching impact.
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1509 (lambda: resolvenodes(allnodes),
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1510 b'look up all nodes (forward)'),
32565
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1511 (lambda: resolvenodes(allnodes, 2),
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1512 b'look up all nodes 2x (forward)'),
32565
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1513 (lambda: resolvenodes(allnodesrev),
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1514 b'look up all nodes (reverse)'),
32565
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1515 (lambda: resolvenodes(allnodesrev, 2),
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1516 b'look up all nodes 2x (reverse)'),
32565
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1517 (lambda: getentries(allrevs),
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1518 b'retrieve all index entries (forward)'),
32565
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1519 (lambda: getentries(allrevs, 2),
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1520 b'retrieve all index entries 2x (forward)'),
32565
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1521 (lambda: getentries(allrevsrev),
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1522 b'retrieve all index entries (reverse)'),
32565
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1523 (lambda: getentries(allrevsrev, 2),
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1524 b'retrieve all index entries 2x (reverse)'),
32565
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1525 ]
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1526
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1527 for fn, title in benches:
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1528 timer, fm = gettimer(ui, opts)
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1529 timer(fn, title=title)
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1530 fm.end()
e4f514627514 perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32564
diff changeset
1531
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1532 @command(b'perfrevlogrevisions', revlogopts + formatteropts +
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1533 [(b'd', b'dist', 100, b'distance between the revisions'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1534 (b's', b'startrev', 0, b'revision to start reading at'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1535 (b'', b'reverse', False, b'read in reverse')],
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1536 b'-c|-m|FILE')
32564
7236facefd4f perf: rename perfrevlog to perfrevlogrevisions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32501
diff changeset
1537 def perfrevlogrevisions(ui, repo, file_=None, startrev=0, reverse=False,
7236facefd4f perf: rename perfrevlog to perfrevlogrevisions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32501
diff changeset
1538 **opts):
27492
ac549d7fbc2b perf: use standard arguments for perfrevlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27472
diff changeset
1539 """Benchmark reading a series of revisions from a revlog.
ac549d7fbc2b perf: use standard arguments for perfrevlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27472
diff changeset
1540
ac549d7fbc2b perf: use standard arguments for perfrevlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27472
diff changeset
1541 By default, we read every ``-d/--dist`` revision from 0 to tip of
ac549d7fbc2b perf: use standard arguments for perfrevlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27472
diff changeset
1542 the specified revlog.
27493
14b0930105da perf: make start revision configurable for perfrevlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27492
diff changeset
1543
14b0930105da perf: make start revision configurable for perfrevlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27492
diff changeset
1544 The start revision can be defined via ``-s/--startrev``.
27492
ac549d7fbc2b perf: use standard arguments for perfrevlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27472
diff changeset
1545 """
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
1546 opts = _byteskwargs(opts)
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
1547
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1548 rl = cmdutil.openrevlog(repo, b'perfrevlogrevisions', file_, opts)
32272
4c6b2076d292 perf: move revlog construction and length calculation out of benchmark
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32271
diff changeset
1549 rllen = getlen(ui)(rl)
30019
973cf6c3de30 perf: add --reverse to perfrevlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29567
diff changeset
1550
40143
d5d28d360a19 pref: support negative indexing in perfrevlogrevisions
Boris Feld <boris.feld@octobus.net>
parents: 40142
diff changeset
1551 if startrev < 0:
d5d28d360a19 pref: support negative indexing in perfrevlogrevisions
Boris Feld <boris.feld@octobus.net>
parents: 40142
diff changeset
1552 startrev = rllen + startrev
d5d28d360a19 pref: support negative indexing in perfrevlogrevisions
Boris Feld <boris.feld@octobus.net>
parents: 40142
diff changeset
1553
11694
bf49d48e4602 perf: add perfrevlog function to check performance of revlog
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 10493
diff changeset
1554 def d():
32272
4c6b2076d292 perf: move revlog construction and length calculation out of benchmark
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32271
diff changeset
1555 rl.clearcaches()
30019
973cf6c3de30 perf: add --reverse to perfrevlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29567
diff changeset
1556
32264
6b582f9b6e5e perf: don't clobber startrev variable
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32246
diff changeset
1557 beginrev = startrev
32272
4c6b2076d292 perf: move revlog construction and length calculation out of benchmark
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32271
diff changeset
1558 endrev = rllen
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1559 dist = opts[b'dist']
30019
973cf6c3de30 perf: add --reverse to perfrevlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29567
diff changeset
1560
973cf6c3de30 perf: add --reverse to perfrevlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29567
diff changeset
1561 if reverse:
40587
cbd251d479bb perf: fix perfrevlogrevisions --reverse
Boris Feld <boris.feld@octobus.net>
parents: 40581
diff changeset
1562 beginrev, endrev = endrev - 1, beginrev - 1
30019
973cf6c3de30 perf: add --reverse to perfrevlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29567
diff changeset
1563 dist = -1 * dist
973cf6c3de30 perf: add --reverse to perfrevlog
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29567
diff changeset
1564
39827
86dbeb7c9a11 py3: switch contrib/perf from xrange to pycompat.xrange
Matt Harbison <matt_harbison@yahoo.com>
parents: 39826
diff changeset
1565 for x in _xrange(beginrev, endrev, dist):
32337
d7efaf6275a7 perf: always pass node to revlog.revision()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32272
diff changeset
1566 # Old revisions don't support passing int.
d7efaf6275a7 perf: always pass node to revlog.revision()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32272
diff changeset
1567 n = rl.node(x)
d7efaf6275a7 perf: always pass node to revlog.revision()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32272
diff changeset
1568 rl.revision(n)
11694
bf49d48e4602 perf: add perfrevlog function to check performance of revlog
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 10493
diff changeset
1569
32265
c68c400d0a2d perf: move gettimer() call
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32264
diff changeset
1570 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
1571 timer(d)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
1572 fm.end()
11694
bf49d48e4602 perf: add perfrevlog function to check performance of revlog
Pradeepkumar Gayam <in3xes@gmail.com>
parents: 10493
diff changeset
1573
40597
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1574 @command(b'perfrevlogwrite', revlogopts + formatteropts +
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1575 [(b's', b'startrev', 1000, b'revision to start writing at'),
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1576 (b'', b'stoprev', -1, b'last revision to write'),
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1577 (b'', b'count', 3, b'last revision to write'),
40598
4dd7edeb3da9 perf: offer full details in perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40597
diff changeset
1578 (b'', b'details', False, b'print timing for every revisions tested'),
40600
631011ff6771 perf: add the notion of "source" to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40599
diff changeset
1579 (b'', b'source', b'full', b'the kind of data feed in the revlog'),
40605
4756a33d0d31 perf: add a lazydeltabase option to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40604
diff changeset
1580 (b'', b'lazydeltabase', True, b'try the provided delta first'),
40597
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1581 ],
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1582 b'-c|-m|FILE')
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1583 def perfrevlogwrite(ui, repo, file_=None, startrev=1000, stoprev=-1, **opts):
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1584 """Benchmark writing a series of revisions to a revlog.
40600
631011ff6771 perf: add the notion of "source" to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40599
diff changeset
1585
631011ff6771 perf: add the notion of "source" to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40599
diff changeset
1586 Possible source values are:
631011ff6771 perf: add the notion of "source" to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40599
diff changeset
1587 * `full`: add from a full text (default).
40601
6c2357029364 perf: add `parent-1` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40600
diff changeset
1588 * `parent-1`: add from a delta to the first parent
40602
b5b3dd4e40c3 perf: add `parent-2` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40601
diff changeset
1589 * `parent-2`: add from a delta to the second parent if it exists
b5b3dd4e40c3 perf: add `parent-2` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40601
diff changeset
1590 (use a delta from the first parent otherwise)
40603
e14d44772fb3 perf: add `parent-smallest` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40602
diff changeset
1591 * `parent-smallest`: add from the smallest delta (either p1 or p2)
40604
355ae096faef perf: add `storage` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40603
diff changeset
1592 * `storage`: add from the existing precomputed deltas
40597
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1593 """
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1594 opts = _byteskwargs(opts)
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1595
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1596 rl = cmdutil.openrevlog(repo, b'perfrevlogwrite', file_, opts)
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1597 rllen = getlen(ui)(rl)
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1598 if startrev < 0:
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1599 startrev = rllen + startrev
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1600 if stoprev < 0:
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1601 stoprev = rllen + stoprev
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1602
40605
4756a33d0d31 perf: add a lazydeltabase option to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40604
diff changeset
1603 lazydeltabase = opts['lazydeltabase']
40600
631011ff6771 perf: add the notion of "source" to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40599
diff changeset
1604 source = opts['source']
40604
355ae096faef perf: add `storage` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40603
diff changeset
1605 validsource = (b'full', b'parent-1', b'parent-2', b'parent-smallest',
355ae096faef perf: add `storage` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40603
diff changeset
1606 b'storage')
40600
631011ff6771 perf: add the notion of "source" to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40599
diff changeset
1607 if source not in validsource:
631011ff6771 perf: add the notion of "source" to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40599
diff changeset
1608 raise error.Abort('invalid source type: %s' % source)
631011ff6771 perf: add the notion of "source" to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40599
diff changeset
1609
40597
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1610 ### actually gather results
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1611 count = opts['count']
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1612 if count <= 0:
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1613 raise error.Abort('invalide run count: %d' % count)
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1614 allresults = []
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1615 for c in range(count):
40605
4756a33d0d31 perf: add a lazydeltabase option to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40604
diff changeset
1616 timing = _timeonewrite(ui, rl, source, startrev, stoprev, c + 1,
4756a33d0d31 perf: add a lazydeltabase option to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40604
diff changeset
1617 lazydeltabase=lazydeltabase)
40600
631011ff6771 perf: add the notion of "source" to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40599
diff changeset
1618 allresults.append(timing)
40597
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1619
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1620 ### consolidate the results in a single list
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1621 results = []
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1622 for idx, (rev, t) in enumerate(allresults[0]):
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1623 ts = [t]
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1624 for other in allresults[1:]:
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1625 orev, ot = other[idx]
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1626 assert orev == rev
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1627 ts.append(ot)
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1628 results.append((rev, ts))
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1629 resultcount = len(results)
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1630
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1631 ### Compute and display relevant statistics
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1632
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1633 # get a formatter
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1634 fm = ui.formatter(b'perf', opts)
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1635 displayall = ui.configbool(b"perf", b"all-timing", False)
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1636
40598
4dd7edeb3da9 perf: offer full details in perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40597
diff changeset
1637 # print individual details if requested
4dd7edeb3da9 perf: offer full details in perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40597
diff changeset
1638 if opts['details']:
4dd7edeb3da9 perf: offer full details in perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40597
diff changeset
1639 for idx, item in enumerate(results, 1):
4dd7edeb3da9 perf: offer full details in perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40597
diff changeset
1640 rev, data = item
4dd7edeb3da9 perf: offer full details in perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40597
diff changeset
1641 title = 'revisions #%d of %d, rev %d' % (idx, resultcount, rev)
4dd7edeb3da9 perf: offer full details in perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40597
diff changeset
1642 formatone(fm, data, title=title, displayall=displayall)
4dd7edeb3da9 perf: offer full details in perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40597
diff changeset
1643
40597
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1644 # sorts results by median time
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1645 results.sort(key=lambda x: sorted(x[1])[len(x[1]) // 2])
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1646 # list of (name, index) to display)
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1647 relevants = [
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1648 ("min", 0),
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1649 ("10%", resultcount * 10 // 100),
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1650 ("25%", resultcount * 25 // 100),
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1651 ("50%", resultcount * 70 // 100),
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1652 ("75%", resultcount * 75 // 100),
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1653 ("90%", resultcount * 90 // 100),
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1654 ("95%", resultcount * 95 // 100),
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1655 ("99%", resultcount * 99 // 100),
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1656 ("max", -1),
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1657 ]
40599
c63081cd3902 perf: only display the total time for perfrevlogwrite if quiet
Boris Feld <boris.feld@octobus.net>
parents: 40598
diff changeset
1658 if not ui.quiet:
c63081cd3902 perf: only display the total time for perfrevlogwrite if quiet
Boris Feld <boris.feld@octobus.net>
parents: 40598
diff changeset
1659 for name, idx in relevants:
c63081cd3902 perf: only display the total time for perfrevlogwrite if quiet
Boris Feld <boris.feld@octobus.net>
parents: 40598
diff changeset
1660 data = results[idx]
c63081cd3902 perf: only display the total time for perfrevlogwrite if quiet
Boris Feld <boris.feld@octobus.net>
parents: 40598
diff changeset
1661 title = '%s of %d, rev %d' % (name, resultcount, data[0])
c63081cd3902 perf: only display the total time for perfrevlogwrite if quiet
Boris Feld <boris.feld@octobus.net>
parents: 40598
diff changeset
1662 formatone(fm, data[1], title=title, displayall=displayall)
40597
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1663
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1664 # XXX summing that many float will not be very precise, we ignore this fact
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1665 # for now
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1666 totaltime = []
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1667 for item in allresults:
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1668 totaltime.append((sum(x[1][0] for x in item),
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1669 sum(x[1][1] for x in item),
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1670 sum(x[1][2] for x in item),)
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1671 )
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1672 formatone(fm, totaltime, title="total time (%d revs)" % resultcount,
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1673 displayall=displayall)
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1674 fm.end()
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1675
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1676 class _faketr(object):
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1677 def add(s, x, y, z=None):
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1678 return None
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1679
40605
4756a33d0d31 perf: add a lazydeltabase option to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40604
diff changeset
1680 def _timeonewrite(ui, orig, source, startrev, stoprev, runidx=None,
4756a33d0d31 perf: add a lazydeltabase option to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40604
diff changeset
1681 lazydeltabase=True):
40597
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1682 timings = []
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1683 tr = _faketr()
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1684 with _temprevlog(ui, orig, startrev) as dest:
40605
4756a33d0d31 perf: add a lazydeltabase option to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40604
diff changeset
1685 dest._lazydeltabase = lazydeltabase
40597
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1686 revs = list(orig.revs(startrev, stoprev))
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1687 total = len(revs)
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1688 topic = 'adding'
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1689 if runidx is not None:
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1690 topic += ' (run #%d)' % runidx
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1691 for idx, rev in enumerate(revs):
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1692 ui.progress(topic, idx, unit='revs', total=total)
40600
631011ff6771 perf: add the notion of "source" to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40599
diff changeset
1693 addargs, addkwargs = _getrevisionseed(orig, rev, tr, source)
40597
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1694 with timeone() as r:
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1695 dest.addrawrevision(*addargs, **addkwargs)
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1696 timings.append((rev, r[0]))
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1697 ui.progress(topic, total, unit='revs', total=total)
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1698 ui.progress(topic, None, unit='revs', total=total)
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1699 return timings
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1700
40600
631011ff6771 perf: add the notion of "source" to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40599
diff changeset
1701 def _getrevisionseed(orig, rev, tr, source):
40602
b5b3dd4e40c3 perf: add `parent-2` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40601
diff changeset
1702 from mercurial.node import nullid
b5b3dd4e40c3 perf: add `parent-2` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40601
diff changeset
1703
40597
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1704 linkrev = orig.linkrev(rev)
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1705 node = orig.node(rev)
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1706 p1, p2 = orig.parents(node)
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1707 flags = orig.flags(rev)
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1708 cachedelta = None
40600
631011ff6771 perf: add the notion of "source" to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40599
diff changeset
1709 text = None
631011ff6771 perf: add the notion of "source" to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40599
diff changeset
1710
631011ff6771 perf: add the notion of "source" to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40599
diff changeset
1711 if source == b'full':
631011ff6771 perf: add the notion of "source" to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40599
diff changeset
1712 text = orig.revision(rev)
40601
6c2357029364 perf: add `parent-1` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40600
diff changeset
1713 elif source == b'parent-1':
6c2357029364 perf: add `parent-1` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40600
diff changeset
1714 baserev = orig.rev(p1)
6c2357029364 perf: add `parent-1` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40600
diff changeset
1715 cachedelta = (baserev, orig.revdiff(p1, rev))
40602
b5b3dd4e40c3 perf: add `parent-2` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40601
diff changeset
1716 elif source == b'parent-2':
b5b3dd4e40c3 perf: add `parent-2` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40601
diff changeset
1717 parent = p2
b5b3dd4e40c3 perf: add `parent-2` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40601
diff changeset
1718 if p2 == nullid:
b5b3dd4e40c3 perf: add `parent-2` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40601
diff changeset
1719 parent = p1
b5b3dd4e40c3 perf: add `parent-2` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40601
diff changeset
1720 baserev = orig.rev(parent)
b5b3dd4e40c3 perf: add `parent-2` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40601
diff changeset
1721 cachedelta = (baserev, orig.revdiff(parent, rev))
40603
e14d44772fb3 perf: add `parent-smallest` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40602
diff changeset
1722 elif source == b'parent-smallest':
e14d44772fb3 perf: add `parent-smallest` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40602
diff changeset
1723 p1diff = orig.revdiff(p1, rev)
e14d44772fb3 perf: add `parent-smallest` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40602
diff changeset
1724 parent = p1
e14d44772fb3 perf: add `parent-smallest` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40602
diff changeset
1725 diff = p1diff
e14d44772fb3 perf: add `parent-smallest` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40602
diff changeset
1726 if p2 != nullid:
e14d44772fb3 perf: add `parent-smallest` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40602
diff changeset
1727 p2diff = orig.revdiff(p2, rev)
e14d44772fb3 perf: add `parent-smallest` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40602
diff changeset
1728 if len(p1diff) > len(p2diff):
e14d44772fb3 perf: add `parent-smallest` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40602
diff changeset
1729 parent = p2
e14d44772fb3 perf: add `parent-smallest` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40602
diff changeset
1730 diff = p2diff
e14d44772fb3 perf: add `parent-smallest` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40602
diff changeset
1731 baserev = orig.rev(parent)
e14d44772fb3 perf: add `parent-smallest` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40602
diff changeset
1732 cachedelta = (baserev, diff)
40604
355ae096faef perf: add `storage` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40603
diff changeset
1733 elif source == b'storage':
355ae096faef perf: add `storage` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40603
diff changeset
1734 baserev = orig.deltaparent(rev)
355ae096faef perf: add `storage` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents: 40603
diff changeset
1735 cachedelta = (baserev, orig.revdiff(orig.node(baserev), rev))
40597
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1736
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1737 return ((text, tr, linkrev, p1, p2),
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1738 {'node': node, 'flags': flags, 'cachedelta': cachedelta})
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1739
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1740 @contextlib.contextmanager
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1741 def _temprevlog(ui, orig, truncaterev):
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1742 from mercurial import vfs as vfsmod
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1743
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1744 if orig._inline:
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1745 raise error.Abort('not supporting inline revlog (yet)')
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1746
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1747 origindexpath = orig.opener.join(orig.indexfile)
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1748 origdatapath = orig.opener.join(orig.datafile)
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1749 indexname = 'revlog.i'
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1750 dataname = 'revlog.d'
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1751
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1752 tmpdir = tempfile.mkdtemp(prefix='tmp-hgperf-')
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1753 try:
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1754 # copy the data file in a temporary directory
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1755 ui.debug('copying data in %s\n' % tmpdir)
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1756 destindexpath = os.path.join(tmpdir, 'revlog.i')
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1757 destdatapath = os.path.join(tmpdir, 'revlog.d')
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1758 shutil.copyfile(origindexpath, destindexpath)
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1759 shutil.copyfile(origdatapath, destdatapath)
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1760
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1761 # remove the data we want to add again
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1762 ui.debug('truncating data to be rewritten\n')
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1763 with open(destindexpath, 'ab') as index:
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1764 index.seek(0)
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1765 index.truncate(truncaterev * orig._io.size)
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1766 with open(destdatapath, 'ab') as data:
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1767 data.seek(0)
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1768 data.truncate(orig.start(truncaterev))
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1769
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1770 # instantiate a new revlog from the temporary copy
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1771 ui.debug('truncating adding to be rewritten\n')
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1772 vfs = vfsmod.vfs(tmpdir)
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1773 vfs.options = getattr(orig.opener, 'options', None)
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1774
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1775 dest = revlog.revlog(vfs,
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1776 indexfile=indexname,
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1777 datafile=dataname)
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1778 if dest._inline:
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1779 raise error.Abort('not supporting inline revlog (yet)')
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1780 # make sure internals are initialized
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1781 dest.revision(len(dest) - 1)
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1782 yield dest
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1783 del dest, vfs
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1784 finally:
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1785 shutil.rmtree(tmpdir, True)
164b2e77f9a5 perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents: 40587
diff changeset
1786
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1787 @command(b'perfrevlogchunks', revlogopts + formatteropts +
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1788 [(b'e', b'engines', b'', b'compression engines to use'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1789 (b's', b'startrev', 0, b'revision to start at')],
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1790 b'-c|-m|FILE')
30796
168ef0a4eb3b perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30793
diff changeset
1791 def perfrevlogchunks(ui, repo, file_=None, engines=None, startrev=0, **opts):
30460
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1792 """Benchmark operations on revlog chunks.
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1793
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1794 Logically, each revlog is a collection of fulltext revisions. However,
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1795 stored within each revlog are "chunks" of possibly compressed data. This
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1796 data needs to be read and decompressed or compressed and written.
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1797
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1798 This command measures the time it takes to read+decompress and recompress
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1799 chunks in a revlog. It effectively isolates I/O and compression performance.
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1800 For measurements of higher-level operations like resolving revisions,
32564
7236facefd4f perf: rename perfrevlog to perfrevlogrevisions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32501
diff changeset
1801 see ``perfrevlogrevisions`` and ``perfrevlogrevision``.
30460
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1802 """
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
1803 opts = _byteskwargs(opts)
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
1804
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1805 rl = cmdutil.openrevlog(repo, b'perfrevlogchunks', file_, opts)
32269
75e93d95aae6 revlog: rename _chunkraw to _getsegmentforrevs()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32268
diff changeset
1806
75e93d95aae6 revlog: rename _chunkraw to _getsegmentforrevs()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32268
diff changeset
1807 # _chunkraw was renamed to _getsegmentforrevs.
75e93d95aae6 revlog: rename _chunkraw to _getsegmentforrevs()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32268
diff changeset
1808 try:
75e93d95aae6 revlog: rename _chunkraw to _getsegmentforrevs()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32268
diff changeset
1809 segmentforrevs = rl._getsegmentforrevs
75e93d95aae6 revlog: rename _chunkraw to _getsegmentforrevs()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32268
diff changeset
1810 except AttributeError:
75e93d95aae6 revlog: rename _chunkraw to _getsegmentforrevs()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32268
diff changeset
1811 segmentforrevs = rl._chunkraw
30796
168ef0a4eb3b perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30793
diff changeset
1812
168ef0a4eb3b perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30793
diff changeset
1813 # Verify engines argument.
168ef0a4eb3b perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30793
diff changeset
1814 if engines:
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1815 engines = set(e.strip() for e in engines.split(b','))
30796
168ef0a4eb3b perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30793
diff changeset
1816 for engine in engines:
168ef0a4eb3b perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30793
diff changeset
1817 try:
168ef0a4eb3b perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30793
diff changeset
1818 util.compressionengines[engine]
168ef0a4eb3b perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30793
diff changeset
1819 except KeyError:
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1820 raise error.Abort(b'unknown compression engine: %s' % engine)
30796
168ef0a4eb3b perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30793
diff changeset
1821 else:
168ef0a4eb3b perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30793
diff changeset
1822 engines = []
168ef0a4eb3b perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30793
diff changeset
1823 for e in util.compengines:
168ef0a4eb3b perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30793
diff changeset
1824 engine = util.compengines[e]
168ef0a4eb3b perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30793
diff changeset
1825 try:
168ef0a4eb3b perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30793
diff changeset
1826 if engine.available():
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1827 engine.revlogcompressor().compress(b'dummy')
30796
168ef0a4eb3b perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30793
diff changeset
1828 engines.append(e)
168ef0a4eb3b perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30793
diff changeset
1829 except NotImplementedError:
168ef0a4eb3b perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30793
diff changeset
1830 pass
168ef0a4eb3b perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30793
diff changeset
1831
30460
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1832 revs = list(rl.revs(startrev, len(rl) - 1))
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1833
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1834 def rlfh(rl):
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1835 if rl._inline:
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1836 return getsvfs(repo)(rl.indexfile)
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1837 else:
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1838 return getsvfs(repo)(rl.datafile)
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1839
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1840 def doread():
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1841 rl.clearcaches()
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1842 for rev in revs:
32268
112ba1c7d65d perf: store reference to revlog._chunkraw in a local variable
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32265
diff changeset
1843 segmentforrevs(rev, rev)
30460
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1844
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1845 def doreadcachedfh():
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1846 rl.clearcaches()
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1847 fh = rlfh(rl)
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1848 for rev in revs:
32268
112ba1c7d65d perf: store reference to revlog._chunkraw in a local variable
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32265
diff changeset
1849 segmentforrevs(rev, rev, df=fh)
30460
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1850
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1851 def doreadbatch():
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1852 rl.clearcaches()
32268
112ba1c7d65d perf: store reference to revlog._chunkraw in a local variable
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32265
diff changeset
1853 segmentforrevs(revs[0], revs[-1])
30460
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1854
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1855 def doreadbatchcachedfh():
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1856 rl.clearcaches()
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1857 fh = rlfh(rl)
32268
112ba1c7d65d perf: store reference to revlog._chunkraw in a local variable
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32265
diff changeset
1858 segmentforrevs(revs[0], revs[-1], df=fh)
30460
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1859
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1860 def dochunk():
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1861 rl.clearcaches()
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1862 fh = rlfh(rl)
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1863 for rev in revs:
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1864 rl._chunk(rev, df=fh)
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1865
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1866 chunks = [None]
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1867
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1868 def dochunkbatch():
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1869 rl.clearcaches()
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1870 fh = rlfh(rl)
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1871 # Save chunks as a side-effect.
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1872 chunks[0] = rl._chunks(revs, df=fh)
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1873
30796
168ef0a4eb3b perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30793
diff changeset
1874 def docompress(compressor):
30460
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1875 rl.clearcaches()
30796
168ef0a4eb3b perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30793
diff changeset
1876
168ef0a4eb3b perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30793
diff changeset
1877 try:
168ef0a4eb3b perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30793
diff changeset
1878 # Swap in the requested compression engine.
168ef0a4eb3b perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30793
diff changeset
1879 oldcompressor = rl._compressor
168ef0a4eb3b perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30793
diff changeset
1880 rl._compressor = compressor
168ef0a4eb3b perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30793
diff changeset
1881 for chunk in chunks[0]:
168ef0a4eb3b perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30793
diff changeset
1882 rl.compress(chunk)
168ef0a4eb3b perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30793
diff changeset
1883 finally:
168ef0a4eb3b perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30793
diff changeset
1884 rl._compressor = oldcompressor
30460
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1885
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1886 benches = [
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1887 (lambda: doread(), b'read'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1888 (lambda: doreadcachedfh(), b'read w/ reused fd'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1889 (lambda: doreadbatch(), b'read batch'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1890 (lambda: doreadbatchcachedfh(), b'read batch w/ reused fd'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1891 (lambda: dochunk(), b'chunk'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1892 (lambda: dochunkbatch(), b'chunk batch'),
30460
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1893 ]
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1894
30796
168ef0a4eb3b perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30793
diff changeset
1895 for engine in sorted(engines):
168ef0a4eb3b perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30793
diff changeset
1896 compressor = util.compengines[engine].revlogcompressor()
168ef0a4eb3b perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30793
diff changeset
1897 benches.append((functools.partial(docompress, compressor),
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1898 b'compress w/ %s' % engine))
30796
168ef0a4eb3b perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30793
diff changeset
1899
30460
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1900 for fn, title in benches:
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1901 timer, fm = gettimer(ui, opts)
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1902 timer(fn, title=title)
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1903 fm.end()
94ca0e13d1fc perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30435
diff changeset
1904
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1905 @command(b'perfrevlogrevision', revlogopts + formatteropts +
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1906 [(b'', b'cache', False, b'use caches instead of clearing')],
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1907 b'-c|-m|FILE REV')
27470
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
1908 def perfrevlogrevision(ui, repo, file_, rev=None, cache=None, **opts):
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
1909 """Benchmark obtaining a revlog revision.
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
1910
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
1911 Obtaining a revlog revision consists of roughly the following steps:
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
1912
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
1913 1. Compute the delta chain
40581
e6c8a0fd3db4 perf: measure slicing time in perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents: 40580
diff changeset
1914 2. Slice the delta chain if applicable
e6c8a0fd3db4 perf: measure slicing time in perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents: 40580
diff changeset
1915 3. Obtain the raw chunks for that delta chain
e6c8a0fd3db4 perf: measure slicing time in perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents: 40580
diff changeset
1916 4. Decompress each raw chunk
e6c8a0fd3db4 perf: measure slicing time in perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents: 40580
diff changeset
1917 5. Apply binary patches to obtain fulltext
e6c8a0fd3db4 perf: measure slicing time in perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents: 40580
diff changeset
1918 6. Verify hash of fulltext
27470
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
1919
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
1920 This command measures the time spent in each of these phases.
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
1921 """
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
1922 opts = _byteskwargs(opts)
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
1923
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1924 if opts.get(b'changelog') or opts.get(b'manifest'):
27470
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
1925 file_, rev = None, file_
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
1926 elif rev is None:
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1927 raise error.CommandError(b'perfrevlogrevision', b'invalid arguments')
27470
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
1928
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
1929 r = cmdutil.openrevlog(repo, b'perfrevlogrevision', file_, opts)
32269
75e93d95aae6 revlog: rename _chunkraw to _getsegmentforrevs()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32268
diff changeset
1930
75e93d95aae6 revlog: rename _chunkraw to _getsegmentforrevs()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32268
diff changeset
1931 # _chunkraw was renamed to _getsegmentforrevs.
75e93d95aae6 revlog: rename _chunkraw to _getsegmentforrevs()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32268
diff changeset
1932 try:
75e93d95aae6 revlog: rename _chunkraw to _getsegmentforrevs()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32268
diff changeset
1933 segmentforrevs = r._getsegmentforrevs
75e93d95aae6 revlog: rename _chunkraw to _getsegmentforrevs()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32268
diff changeset
1934 except AttributeError:
75e93d95aae6 revlog: rename _chunkraw to _getsegmentforrevs()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32268
diff changeset
1935 segmentforrevs = r._chunkraw
75e93d95aae6 revlog: rename _chunkraw to _getsegmentforrevs()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32268
diff changeset
1936
27470
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
1937 node = r.lookup(rev)
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
1938 rev = r.rev(node)
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
1939
30914
74cfc4357c64 perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30796
diff changeset
1940 def getrawchunks(data, chain):
74cfc4357c64 perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30796
diff changeset
1941 start = r.start
74cfc4357c64 perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30796
diff changeset
1942 length = r.length
74cfc4357c64 perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30796
diff changeset
1943 inline = r._inline
74cfc4357c64 perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30796
diff changeset
1944 iosize = r._io.size
74cfc4357c64 perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30796
diff changeset
1945 buffer = util.buffer
74cfc4357c64 perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30796
diff changeset
1946
74cfc4357c64 perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30796
diff changeset
1947 chunks = []
74cfc4357c64 perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30796
diff changeset
1948 ladd = chunks.append
40580
914079ee3334 perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents: 40579
diff changeset
1949 for idx, item in enumerate(chain):
914079ee3334 perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents: 40579
diff changeset
1950 offset = start(item[0])
914079ee3334 perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents: 40579
diff changeset
1951 bits = data[idx]
914079ee3334 perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents: 40579
diff changeset
1952 for rev in item:
914079ee3334 perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents: 40579
diff changeset
1953 chunkstart = start(rev)
914079ee3334 perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents: 40579
diff changeset
1954 if inline:
914079ee3334 perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents: 40579
diff changeset
1955 chunkstart += (rev + 1) * iosize
914079ee3334 perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents: 40579
diff changeset
1956 chunklength = length(rev)
914079ee3334 perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents: 40579
diff changeset
1957 ladd(buffer(bits, chunkstart - offset, chunklength))
30914
74cfc4357c64 perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30796
diff changeset
1958
74cfc4357c64 perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30796
diff changeset
1959 return chunks
74cfc4357c64 perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30796
diff changeset
1960
27470
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
1961 def dodeltachain(rev):
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
1962 if not cache:
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
1963 r.clearcaches()
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
1964 r._deltachain(rev)
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
1965
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
1966 def doread(chain):
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
1967 if not cache:
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
1968 r.clearcaches()
40580
914079ee3334 perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents: 40579
diff changeset
1969 for item in slicedchain:
914079ee3334 perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents: 40579
diff changeset
1970 segmentforrevs(item[0], item[-1])
27470
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
1971
40581
e6c8a0fd3db4 perf: measure slicing time in perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents: 40580
diff changeset
1972 def doslice(r, chain, size):
e6c8a0fd3db4 perf: measure slicing time in perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents: 40580
diff changeset
1973 for s in slicechunk(r, chain, targetsize=size):
e6c8a0fd3db4 perf: measure slicing time in perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents: 40580
diff changeset
1974 pass
e6c8a0fd3db4 perf: measure slicing time in perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents: 40580
diff changeset
1975
30914
74cfc4357c64 perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30796
diff changeset
1976 def dorawchunks(data, chain):
27470
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
1977 if not cache:
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
1978 r.clearcaches()
30914
74cfc4357c64 perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30796
diff changeset
1979 getrawchunks(data, chain)
27470
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
1980
30914
74cfc4357c64 perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30796
diff changeset
1981 def dodecompress(chunks):
74cfc4357c64 perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30796
diff changeset
1982 decomp = r.decompress
74cfc4357c64 perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30796
diff changeset
1983 for chunk in chunks:
74cfc4357c64 perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30796
diff changeset
1984 decomp(chunk)
27470
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
1985
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
1986 def dopatch(text, bins):
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
1987 if not cache:
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
1988 r.clearcaches()
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
1989 mdiff.patches(text, bins)
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
1990
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
1991 def dohash(text):
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
1992 if not cache:
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
1993 r.clearcaches()
30589
be5b2098a817 revlog: merge hash checking subfunctions
Remi Chaintron <remi@fb.com>
parents: 30460
diff changeset
1994 r.checkhash(text, node, rev=rev)
27470
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
1995
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
1996 def dorevision():
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
1997 if not cache:
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
1998 r.clearcaches()
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
1999 r.revision(node)
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
2000
40580
914079ee3334 perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents: 40579
diff changeset
2001 try:
914079ee3334 perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents: 40579
diff changeset
2002 from mercurial.revlogutils.deltas import slicechunk
914079ee3334 perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents: 40579
diff changeset
2003 except ImportError:
914079ee3334 perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents: 40579
diff changeset
2004 slicechunk = getattr(revlog, '_slicechunk', None)
914079ee3334 perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents: 40579
diff changeset
2005
914079ee3334 perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents: 40579
diff changeset
2006 size = r.length(rev)
27470
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
2007 chain = r._deltachain(rev)[0]
40580
914079ee3334 perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents: 40579
diff changeset
2008 if not getattr(r, '_withsparseread', False):
914079ee3334 perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents: 40579
diff changeset
2009 slicedchain = (chain,)
914079ee3334 perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents: 40579
diff changeset
2010 else:
914079ee3334 perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents: 40579
diff changeset
2011 slicedchain = tuple(slicechunk(r, chain, targetsize=size))
914079ee3334 perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents: 40579
diff changeset
2012 data = [segmentforrevs(seg[0], seg[-1])[1] for seg in slicedchain]
914079ee3334 perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents: 40579
diff changeset
2013 rawchunks = getrawchunks(data, slicedchain)
27470
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
2014 bins = r._chunks(chain)
40214
b456b2e0ad9f py3: make test-contrib-perf.t work on python 3
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 40145
diff changeset
2015 text = bytes(bins[0])
27470
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
2016 bins = bins[1:]
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
2017 text = mdiff.patches(text, bins)
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
2018
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
2019 benches = [
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2020 (lambda: dorevision(), b'full'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2021 (lambda: dodeltachain(rev), b'deltachain'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2022 (lambda: doread(chain), b'read'),
40581
e6c8a0fd3db4 perf: measure slicing time in perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents: 40580
diff changeset
2023 ]
e6c8a0fd3db4 perf: measure slicing time in perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents: 40580
diff changeset
2024
e6c8a0fd3db4 perf: measure slicing time in perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents: 40580
diff changeset
2025 if getattr(r, '_withsparseread', False):
e6c8a0fd3db4 perf: measure slicing time in perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents: 40580
diff changeset
2026 slicing = (lambda: doslice(r, chain, size), b'slice-sparse-chain')
e6c8a0fd3db4 perf: measure slicing time in perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents: 40580
diff changeset
2027 benches.append(slicing)
e6c8a0fd3db4 perf: measure slicing time in perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents: 40580
diff changeset
2028
e6c8a0fd3db4 perf: measure slicing time in perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents: 40580
diff changeset
2029 benches.extend([
40580
914079ee3334 perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents: 40579
diff changeset
2030 (lambda: dorawchunks(data, slicedchain), b'rawchunks'),
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2031 (lambda: dodecompress(rawchunks), b'decompress'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2032 (lambda: dopatch(text, bins), b'patch'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2033 (lambda: dohash(text), b'hash'),
40581
e6c8a0fd3db4 perf: measure slicing time in perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents: 40580
diff changeset
2034 ])
27470
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
2035
40579
cf3bef7f162b perf: use the same timer for all section of perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents: 40349
diff changeset
2036 timer, fm = gettimer(ui, opts)
27470
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
2037 for fn, title in benches:
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
2038 timer(fn, title=title)
40579
cf3bef7f162b perf: use the same timer for all section of perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents: 40349
diff changeset
2039 fm.end()
27470
d394a1a3708a perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27467
diff changeset
2040
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2041 @command(b'perfrevset',
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2042 [(b'C', b'clear', False, b'clear volatile cache between each call.'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2043 (b'', b'contexts', False, b'obtain changectx for each revision')]
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2044 + formatteropts, b"REVSET")
27072
e18a9ceade3b perf: support obtaining contexts from perfrevset
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27017
diff changeset
2045 def perfrevset(ui, repo, expr, clear=False, contexts=False, **opts):
18239
a95f1d619bb7 perftest: add an option to invalidate volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18238
diff changeset
2046 """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
2047
18644
3e92772d5383 spelling: fix some minor issues found by spell checker
Mads Kiilerich <mads@kiilerich.com>
parents: 18304
diff changeset
2048 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
2049 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
2050 and obsolete related cache."""
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
2051 opts = _byteskwargs(opts)
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
2052
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
2053 timer, fm = gettimer(ui, opts)
18062
1471f5e83686 perf: add a command to measure revset performance
Siddharth Agarwal <sid0@fb.com>
parents: 18033
diff changeset
2054 def d():
18239
a95f1d619bb7 perftest: add an option to invalidate volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18238
diff changeset
2055 if clear:
a95f1d619bb7 perftest: add an option to invalidate volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18238
diff changeset
2056 repo.invalidatevolatilesets()
27072
e18a9ceade3b perf: support obtaining contexts from perfrevset
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27017
diff changeset
2057 if contexts:
e18a9ceade3b perf: support obtaining contexts from perfrevset
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27017
diff changeset
2058 for ctx in repo.set(expr): pass
e18a9ceade3b perf: support obtaining contexts from perfrevset
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27017
diff changeset
2059 else:
e18a9ceade3b perf: support obtaining contexts from perfrevset
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27017
diff changeset
2060 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
2061 timer(d)
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
2062 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
2063
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2064 @command(b'perfvolatilesets',
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2065 [(b'', b'clear-obsstore', False, b'drop obsstore between each call.'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2066 ] + formatteropts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
2067 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
2068 """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
2069
a8318715d8bb perftest: add a command to benchmark construction of volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18239
diff changeset
2070 Volatile set computes element related to filtering and obsolescence."""
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
2071 opts = _byteskwargs(opts)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
2072 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
2073 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
2074
a8318715d8bb perftest: add a command to benchmark construction of volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18239
diff changeset
2075 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
2076 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
2077 repo.invalidatevolatilesets()
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2078 if opts[b'clear_obsstore']:
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2079 clearfilecache(repo, b'obsstore')
18240
a8318715d8bb perftest: add a command to benchmark construction of volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18239
diff changeset
2080 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
2081 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
2082
18241
f5ed27c51995 perftest: allow selection of volatile set to benchmark
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18240
diff changeset
2083 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
2084 if names:
f5ed27c51995 perftest: allow selection of volatile set to benchmark
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18240
diff changeset
2085 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
2086
f5ed27c51995 perftest: allow selection of volatile set to benchmark
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18240
diff changeset
2087 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
2088 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
2089
a8318715d8bb perftest: add a command to benchmark construction of volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18239
diff changeset
2090 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
2091 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
2092 repo.invalidatevolatilesets()
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2093 if opts[b'clear_obsstore']:
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2094 clearfilecache(repo, b'obsstore')
20205
d67a7758da6d perf: fix perfvolatilesets
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 20178
diff changeset
2095 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
2096 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
2097
18241
f5ed27c51995 perftest: allow selection of volatile set to benchmark
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18240
diff changeset
2098 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
2099 if names:
f5ed27c51995 perftest: allow selection of volatile set to benchmark
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18240
diff changeset
2100 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
2101
f5ed27c51995 perftest: allow selection of volatile set to benchmark
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18240
diff changeset
2102 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
2103 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
2104 fm.end()
18304
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
2105
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2106 @command(b'perfbranchmap',
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2107 [(b'f', b'full', False,
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2108 b'Includes build time of subset'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2109 (b'', b'clear-revbranch', False,
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2110 b'purge the revbranch cache between computation'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2111 ] + formatteropts)
36393
c25290b98190 perfbranchmap: allow to select the filter to benchmark
Boris Feld <boris.feld@octobus.net>
parents: 36392
diff changeset
2112 def perfbranchmap(ui, repo, *filternames, **opts):
18304
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
2113 """benchmark the update of a branchmap
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
2114
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
2115 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
2116 """
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
2117 opts = _byteskwargs(opts)
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2118 full = opts.get(b"full", False)
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2119 clear_revbranch = opts.get(b"clear_revbranch", False)
25494
e8eb3ecdaa0c perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 24607
diff changeset
2120 timer, fm = gettimer(ui, opts)
18304
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
2121 def getbranchmap(filtername):
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
2122 """generate a benchmark function for the filtername"""
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
2123 if filtername is None:
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
2124 view = repo
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
2125 else:
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
2126 view = repo.filtered(filtername)
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
2127 def d():
32730
326c0e2c1a1d perfbranchmap: add an option to purge the revbranch cache
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32565
diff changeset
2128 if clear_revbranch:
326c0e2c1a1d perfbranchmap: add an option to purge the revbranch cache
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32565
diff changeset
2129 repo.revbranchcache()._clear()
18304
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
2130 if full:
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
2131 view._branchcaches.clear()
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
2132 else:
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
2133 view._branchcaches.pop(filtername, None)
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
2134 view.branchmap()
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
2135 return d
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
2136 # 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
2137 possiblefilters = set(repoview.filtertable)
36393
c25290b98190 perfbranchmap: allow to select the filter to benchmark
Boris Feld <boris.feld@octobus.net>
parents: 36392
diff changeset
2138 if filternames:
c25290b98190 perfbranchmap: allow to select the filter to benchmark
Boris Feld <boris.feld@octobus.net>
parents: 36392
diff changeset
2139 possiblefilters &= set(filternames)
30144
14031d183048 perf: get subsettable from appropriate module for Mercurial earlier than 2.9
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30143
diff changeset
2140 subsettable = getbranchmapsubsettable()
18304
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
2141 allfilters = []
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
2142 while possiblefilters:
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
2143 for name in possiblefilters:
30144
14031d183048 perf: get subsettable from appropriate module for Mercurial earlier than 2.9
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30143
diff changeset
2144 subset = subsettable.get(name)
18304
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
2145 if subset not in possiblefilters:
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
2146 break
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
2147 else:
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2148 assert False, b'subset cycle %s!' % possiblefilters
18304
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
2149 allfilters.append(name)
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
2150 possiblefilters.remove(name)
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
2151
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
2152 # warm the cache
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
2153 if not full:
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
2154 for name in allfilters:
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
2155 repo.filtered(name).branchmap()
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2156 if not filternames or b'unfiltered' in filternames:
36393
c25290b98190 perfbranchmap: allow to select the filter to benchmark
Boris Feld <boris.feld@octobus.net>
parents: 36392
diff changeset
2157 # add unfiltered
c25290b98190 perfbranchmap: allow to select the filter to benchmark
Boris Feld <boris.feld@octobus.net>
parents: 36392
diff changeset
2158 allfilters.append(None)
30145
113aa6145020 perf: avoid actual writing branch cache out correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30144
diff changeset
2159
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2160 branchcacheread = safeattrsetter(branchmap, b'read')
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2161 branchcachewrite = safeattrsetter(branchmap.branchcache, b'write')
30145
113aa6145020 perf: avoid actual writing branch cache out correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30144
diff changeset
2162 branchcacheread.set(lambda repo: None)
113aa6145020 perf: avoid actual writing branch cache out correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30144
diff changeset
2163 branchcachewrite.set(lambda bc, repo: None)
18304
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
2164 try:
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
2165 for name in allfilters:
36392
df3f7f00a3fc perfbranchmap: display 'unfiltered' for unfiltered performance
Boris Feld <boris.feld@octobus.net>
parents: 36216
diff changeset
2166 printname = name
df3f7f00a3fc perfbranchmap: display 'unfiltered' for unfiltered performance
Boris Feld <boris.feld@octobus.net>
parents: 36216
diff changeset
2167 if name is None:
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2168 printname = b'unfiltered'
36392
df3f7f00a3fc perfbranchmap: display 'unfiltered' for unfiltered performance
Boris Feld <boris.feld@octobus.net>
parents: 36216
diff changeset
2169 timer(getbranchmap(name), title=str(printname))
18304
9b6ae29d4801 perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 18241
diff changeset
2170 finally:
30145
113aa6145020 perf: avoid actual writing branch cache out correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30144
diff changeset
2171 branchcacheread.restore()
113aa6145020 perf: avoid actual writing branch cache out correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30144
diff changeset
2172 branchcachewrite.restore()
23171
8afae1d5d108 perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22780
diff changeset
2173 fm.end()
23485
ccb93e9affc1 perf: add a perfloadmarkers command
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23171
diff changeset
2174
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2175 @command(b'perfbranchmapload', [
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2176 (b'f', b'filter', b'', b'Specify repoview filter'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2177 (b'', b'list', False, b'List brachmap filter caches'),
39151
222aba766015 perf: time loading branchmap caches
Martijn Pieters <mj@octobus.net>
parents: 39015
diff changeset
2178 ] + formatteropts)
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2179 def perfbranchmapread(ui, repo, filter=b'', list=False, **opts):
39151
222aba766015 perf: time loading branchmap caches
Martijn Pieters <mj@octobus.net>
parents: 39015
diff changeset
2180 """benchmark reading the branchmap"""
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
2181 opts = _byteskwargs(opts)
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
2182
39151
222aba766015 perf: time loading branchmap caches
Martijn Pieters <mj@octobus.net>
parents: 39015
diff changeset
2183 if list:
222aba766015 perf: time loading branchmap caches
Martijn Pieters <mj@octobus.net>
parents: 39015
diff changeset
2184 for name, kind, st in repo.cachevfs.readdir(stat=True):
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2185 if name.startswith(b'branch2'):
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2186 filtername = name.partition(b'-')[2] or b'unfiltered'
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2187 ui.status(b'%s - %s\n'
39151
222aba766015 perf: time loading branchmap caches
Martijn Pieters <mj@octobus.net>
parents: 39015
diff changeset
2188 % (filtername, util.bytecount(st.st_size)))
222aba766015 perf: time loading branchmap caches
Martijn Pieters <mj@octobus.net>
parents: 39015
diff changeset
2189 return
222aba766015 perf: time loading branchmap caches
Martijn Pieters <mj@octobus.net>
parents: 39015
diff changeset
2190 if filter:
222aba766015 perf: time loading branchmap caches
Martijn Pieters <mj@octobus.net>
parents: 39015
diff changeset
2191 repo = repoview.repoview(repo, filter)
222aba766015 perf: time loading branchmap caches
Martijn Pieters <mj@octobus.net>
parents: 39015
diff changeset
2192 else:
222aba766015 perf: time loading branchmap caches
Martijn Pieters <mj@octobus.net>
parents: 39015
diff changeset
2193 repo = repo.unfiltered()
222aba766015 perf: time loading branchmap caches
Martijn Pieters <mj@octobus.net>
parents: 39015
diff changeset
2194 # try once without timer, the filter may not be cached
222aba766015 perf: time loading branchmap caches
Martijn Pieters <mj@octobus.net>
parents: 39015
diff changeset
2195 if branchmap.read(repo) is None:
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2196 raise error.Abort(b'No brachmap cached for %s repo'
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2197 % (filter or b'unfiltered'))
39151
222aba766015 perf: time loading branchmap caches
Martijn Pieters <mj@octobus.net>
parents: 39015
diff changeset
2198 timer, fm = gettimer(ui, opts)
222aba766015 perf: time loading branchmap caches
Martijn Pieters <mj@octobus.net>
parents: 39015
diff changeset
2199 timer(lambda: branchmap.read(repo) and None)
222aba766015 perf: time loading branchmap caches
Martijn Pieters <mj@octobus.net>
parents: 39015
diff changeset
2200 fm.end()
222aba766015 perf: time loading branchmap caches
Martijn Pieters <mj@octobus.net>
parents: 39015
diff changeset
2201
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2202 @command(b'perfloadmarkers')
23485
ccb93e9affc1 perf: add a perfloadmarkers command
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23171
diff changeset
2203 def perfloadmarkers(ui, repo):
ccb93e9affc1 perf: add a perfloadmarkers command
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23171
diff changeset
2204 """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
2205
ccb93e9affc1 perf: add a perfloadmarkers command
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23171
diff changeset
2206 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
2207 timer, fm = gettimer(ui)
30146
148ccd1d9f2f perf: add functions to get vfs-like object for Mercurial earlier than 2.3
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30145
diff changeset
2208 svfs = getsvfs(repo)
148ccd1d9f2f perf: add functions to get vfs-like object for Mercurial earlier than 2.3
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 30145
diff changeset
2209 timer(lambda: len(obsolete.obsstore(svfs)))
23485
ccb93e9affc1 perf: add a perfloadmarkers command
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23171
diff changeset
2210 fm.end()
27286
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2211
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2212 @command(b'perflrucachedict', formatteropts +
39584
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2213 [(b'', b'costlimit', 0, b'maximum total cost of items in cache'),
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2214 (b'', b'mincost', 0, b'smallest cost of items in cache'),
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2215 (b'', b'maxcost', 100, b'maximum cost of items in cache'),
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2216 (b'', b'size', 4, b'size of cache'),
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2217 (b'', b'gets', 10000, b'number of key lookups'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2218 (b'', b'sets', 10000, b'number of key sets'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2219 (b'', b'mixed', 10000, b'number of mixed mode operations'),
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2220 (b'', b'mixedgetfreq', 50, b'frequency of get vs set ops in mixed mode')],
27286
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2221 norepo=True)
39584
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2222 def perflrucache(ui, mincost=0, maxcost=100, costlimit=0, size=4,
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2223 gets=10000, sets=10000, mixed=10000, mixedgetfreq=50, **opts):
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
2224 opts = _byteskwargs(opts)
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
2225
27286
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2226 def doinit():
39827
86dbeb7c9a11 py3: switch contrib/perf from xrange to pycompat.xrange
Matt Harbison <matt_harbison@yahoo.com>
parents: 39826
diff changeset
2227 for i in _xrange(10000):
27286
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2228 util.lrucachedict(size)
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2229
39584
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2230 costrange = list(range(mincost, maxcost + 1))
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2231
27286
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2232 values = []
39827
86dbeb7c9a11 py3: switch contrib/perf from xrange to pycompat.xrange
Matt Harbison <matt_harbison@yahoo.com>
parents: 39826
diff changeset
2233 for i in _xrange(size):
39828
c4ab9fa81377 py3: work around the lack of sys.maxint in contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39827
diff changeset
2234 values.append(random.randint(0, _maxint))
27286
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2235
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2236 # Get mode fills the cache and tests raw lookup performance with no
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2237 # eviction.
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2238 getseq = []
39827
86dbeb7c9a11 py3: switch contrib/perf from xrange to pycompat.xrange
Matt Harbison <matt_harbison@yahoo.com>
parents: 39826
diff changeset
2239 for i in _xrange(gets):
27286
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2240 getseq.append(random.choice(values))
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2241
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2242 def dogets():
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2243 d = util.lrucachedict(size)
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2244 for v in values:
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2245 d[v] = v
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2246 for key in getseq:
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2247 value = d[key]
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2248 value # silence pyflakes warning
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2249
39584
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2250 def dogetscost():
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2251 d = util.lrucachedict(size, maxcost=costlimit)
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2252 for i, v in enumerate(values):
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2253 d.insert(v, v, cost=costs[i])
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2254 for key in getseq:
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2255 try:
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2256 value = d[key]
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2257 value # silence pyflakes warning
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2258 except KeyError:
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2259 pass
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2260
27286
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2261 # Set mode tests insertion speed with cache eviction.
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2262 setseq = []
39584
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2263 costs = []
39827
86dbeb7c9a11 py3: switch contrib/perf from xrange to pycompat.xrange
Matt Harbison <matt_harbison@yahoo.com>
parents: 39826
diff changeset
2264 for i in _xrange(sets):
39828
c4ab9fa81377 py3: work around the lack of sys.maxint in contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39827
diff changeset
2265 setseq.append(random.randint(0, _maxint))
39584
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2266 costs.append(random.choice(costrange))
27286
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2267
39583
ee087f0d7db5 util: allow lrucachedict to track cost of entries
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39389
diff changeset
2268 def doinserts():
ee087f0d7db5 util: allow lrucachedict to track cost of entries
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39389
diff changeset
2269 d = util.lrucachedict(size)
ee087f0d7db5 util: allow lrucachedict to track cost of entries
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39389
diff changeset
2270 for v in setseq:
ee087f0d7db5 util: allow lrucachedict to track cost of entries
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39389
diff changeset
2271 d.insert(v, v)
ee087f0d7db5 util: allow lrucachedict to track cost of entries
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39389
diff changeset
2272
39584
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2273 def doinsertscost():
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2274 d = util.lrucachedict(size, maxcost=costlimit)
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2275 for i, v in enumerate(setseq):
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2276 d.insert(v, v, cost=costs[i])
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2277
27286
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2278 def dosets():
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2279 d = util.lrucachedict(size)
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2280 for v in setseq:
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2281 d[v] = v
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2282
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2283 # Mixed mode randomly performs gets and sets with eviction.
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2284 mixedops = []
39827
86dbeb7c9a11 py3: switch contrib/perf from xrange to pycompat.xrange
Matt Harbison <matt_harbison@yahoo.com>
parents: 39826
diff changeset
2285 for i in _xrange(mixed):
27286
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2286 r = random.randint(0, 100)
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2287 if r < mixedgetfreq:
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2288 op = 0
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2289 else:
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2290 op = 1
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2291
39584
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2292 mixedops.append((op,
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2293 random.randint(0, size * 2),
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2294 random.choice(costrange)))
27286
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2295
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2296 def domixed():
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2297 d = util.lrucachedict(size)
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2298
39584
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2299 for op, v, cost in mixedops:
27286
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2300 if op == 0:
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2301 try:
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2302 d[v]
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2303 except KeyError:
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2304 pass
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2305 else:
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2306 d[v] = v
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2307
39584
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2308 def domixedcost():
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2309 d = util.lrucachedict(size, maxcost=costlimit)
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2310
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2311 for op, v, cost in mixedops:
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2312 if op == 0:
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2313 try:
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2314 d[v]
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2315 except KeyError:
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2316 pass
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2317 else:
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2318 d.insert(v, v, cost=cost)
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2319
27286
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2320 benches = [
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2321 (doinit, b'init'),
27286
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2322 ]
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2323
39584
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2324 if costlimit:
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2325 benches.extend([
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2326 (dogetscost, b'gets w/ cost limit'),
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2327 (doinsertscost, b'inserts w/ cost limit'),
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2328 (domixedcost, b'mixed w/ cost limit'),
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2329 ])
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2330 else:
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2331 benches.extend([
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2332 (dogets, b'gets'),
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2333 (doinserts, b'inserts'),
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2334 (dosets, b'sets'),
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2335 (domixed, b'mixed')
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2336 ])
842cd0bdda75 util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39583
diff changeset
2337
27286
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2338 for fn, title in benches:
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2339 timer, fm = gettimer(ui, opts)
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2340 timer(fn, title=title)
528cf1a73ae5 perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27100
diff changeset
2341 fm.end()
29495
f83445296213 perf: use locally defined revlog option list for Mercurial earlier than 3.7
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29494
diff changeset
2342
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2343 @command(b'perfwrite', formatteropts)
30997
5a9e4dc8e4fd contrib: add a write microbenchmark to perf.py
Simon Farnsworth <simonfar@fb.com>
parents: 30995
diff changeset
2344 def perfwrite(ui, repo, **opts):
5a9e4dc8e4fd contrib: add a write microbenchmark to perf.py
Simon Farnsworth <simonfar@fb.com>
parents: 30995
diff changeset
2345 """microbenchmark ui.write
5a9e4dc8e4fd contrib: add a write microbenchmark to perf.py
Simon Farnsworth <simonfar@fb.com>
parents: 30995
diff changeset
2346 """
39830
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
2347 opts = _byteskwargs(opts)
874712506b07 py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents: 39829
diff changeset
2348
30997
5a9e4dc8e4fd contrib: add a write microbenchmark to perf.py
Simon Farnsworth <simonfar@fb.com>
parents: 30995
diff changeset
2349 timer, fm = gettimer(ui, opts)
5a9e4dc8e4fd contrib: add a write microbenchmark to perf.py
Simon Farnsworth <simonfar@fb.com>
parents: 30995
diff changeset
2350 def write():
5a9e4dc8e4fd contrib: add a write microbenchmark to perf.py
Simon Farnsworth <simonfar@fb.com>
parents: 30995
diff changeset
2351 for i in range(100000):
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2352 ui.write((b'Testing write performance\n'))
30997
5a9e4dc8e4fd contrib: add a write microbenchmark to perf.py
Simon Farnsworth <simonfar@fb.com>
parents: 30995
diff changeset
2353 timer(write)
5a9e4dc8e4fd contrib: add a write microbenchmark to perf.py
Simon Farnsworth <simonfar@fb.com>
parents: 30995
diff changeset
2354 fm.end()
5a9e4dc8e4fd contrib: add a write microbenchmark to perf.py
Simon Farnsworth <simonfar@fb.com>
parents: 30995
diff changeset
2355
29495
f83445296213 perf: use locally defined revlog option list for Mercurial earlier than 3.7
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29494
diff changeset
2356 def uisetup(ui):
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2357 if (util.safehasattr(cmdutil, b'openrevlog') and
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2358 not util.safehasattr(commands, b'debugrevlogopts')):
29495
f83445296213 perf: use locally defined revlog option list for Mercurial earlier than 3.7
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29494
diff changeset
2359 # for "historical portability":
f83445296213 perf: use locally defined revlog option list for Mercurial earlier than 3.7
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29494
diff changeset
2360 # In this case, Mercurial should be 1.9 (or a79fea6b3e77) -
f83445296213 perf: use locally defined revlog option list for Mercurial earlier than 3.7
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29494
diff changeset
2361 # 3.7 (or 5606f7d0d063). Therefore, '--dir' option for
f83445296213 perf: use locally defined revlog option list for Mercurial earlier than 3.7
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29494
diff changeset
2362 # openrevlog() should cause failure, because it has been
f83445296213 perf: use locally defined revlog option list for Mercurial earlier than 3.7
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29494
diff changeset
2363 # available since 3.5 (or 49c583ca48c4).
f83445296213 perf: use locally defined revlog option list for Mercurial earlier than 3.7
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29494
diff changeset
2364 def openrevlog(orig, repo, cmd, file_, opts):
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2365 if opts.get(b'dir') and not util.safehasattr(repo, b'dirlog'):
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2366 raise error.Abort(b"This version doesn't support --dir option",
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2367 hint=b"use 3.5 or later")
29495
f83445296213 perf: use locally defined revlog option list for Mercurial earlier than 3.7
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 29494
diff changeset
2368 return orig(repo, cmd, file_, opts)
39389
438f3932a432 contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 39346
diff changeset
2369 extensions.wrapfunction(cmdutil, b'openrevlog', openrevlog)