Mercurial > hg
annotate contrib/perf.py @ 43129:97f9ef777a75
perf: document `perfdirstatewrite`
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Tue, 08 Oct 2019 01:49:34 -0400 |
parents | ad801d4af7cd |
children | c88075eb28e3 |
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 |
42015
dbca2e5563c3
perf: document config options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41652
diff
changeset
|
2 '''helper extension to measure performance |
dbca2e5563c3
perf: document config options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41652
diff
changeset
|
3 |
dbca2e5563c3
perf: document config options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41652
diff
changeset
|
4 Configurations |
dbca2e5563c3
perf: document config options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41652
diff
changeset
|
5 ============== |
dbca2e5563c3
perf: document config options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41652
diff
changeset
|
6 |
dbca2e5563c3
perf: document config options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41652
diff
changeset
|
7 ``perf`` |
dbca2e5563c3
perf: document config options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41652
diff
changeset
|
8 -------- |
dbca2e5563c3
perf: document config options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41652
diff
changeset
|
9 |
dbca2e5563c3
perf: document config options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41652
diff
changeset
|
10 ``all-timing`` |
42021
4c700c847aa2
perf: copyedit a few documentation strings
Augie Fackler <augie@google.com>
parents:
42019
diff
changeset
|
11 When set, additional statistics will be reported for each benchmark: best, |
42015
dbca2e5563c3
perf: document config options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41652
diff
changeset
|
12 worst, median average. If not set only the best timing is reported |
dbca2e5563c3
perf: document config options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41652
diff
changeset
|
13 (default: off). |
dbca2e5563c3
perf: document config options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41652
diff
changeset
|
14 |
dbca2e5563c3
perf: document config options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41652
diff
changeset
|
15 ``presleep`` |
42021
4c700c847aa2
perf: copyedit a few documentation strings
Augie Fackler <augie@google.com>
parents:
42019
diff
changeset
|
16 number of second to wait before any group of runs (default: 1) |
42015
dbca2e5563c3
perf: document config options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41652
diff
changeset
|
17 |
42359
563cd9a72682
perf: add a `pre-run` option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42138
diff
changeset
|
18 ``pre-run`` |
563cd9a72682
perf: add a `pre-run` option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42138
diff
changeset
|
19 number of run to perform before starting measurement. |
563cd9a72682
perf: add a `pre-run` option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42138
diff
changeset
|
20 |
42360
3293086ff663
perf: add an option to profile the benchmark section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42359
diff
changeset
|
21 ``profile-benchmark`` |
3293086ff663
perf: add an option to profile the benchmark section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42359
diff
changeset
|
22 Enable profiling for the benchmarked section. |
3293086ff663
perf: add an option to profile the benchmark section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42359
diff
changeset
|
23 (The first iteration is benchmarked) |
3293086ff663
perf: add an option to profile the benchmark section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42359
diff
changeset
|
24 |
42019
5a1e621b8186
perf: introduce a `perf.run-limits` options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42018
diff
changeset
|
25 ``run-limits`` |
42021
4c700c847aa2
perf: copyedit a few documentation strings
Augie Fackler <augie@google.com>
parents:
42019
diff
changeset
|
26 Control the number of runs each benchmark will perform. The option value |
42019
5a1e621b8186
perf: introduce a `perf.run-limits` options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42018
diff
changeset
|
27 should be a list of `<time>-<numberofrun>` pairs. After each run the |
42021
4c700c847aa2
perf: copyedit a few documentation strings
Augie Fackler <augie@google.com>
parents:
42019
diff
changeset
|
28 conditions are considered in order with the following logic: |
4c700c847aa2
perf: copyedit a few documentation strings
Augie Fackler <augie@google.com>
parents:
42019
diff
changeset
|
29 |
4c700c847aa2
perf: copyedit a few documentation strings
Augie Fackler <augie@google.com>
parents:
42019
diff
changeset
|
30 If benchmark has been running for <time> seconds, and we have performed |
42019
5a1e621b8186
perf: introduce a `perf.run-limits` options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42018
diff
changeset
|
31 <numberofrun> iterations, stop the benchmark, |
5a1e621b8186
perf: introduce a `perf.run-limits` options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42018
diff
changeset
|
32 |
5a1e621b8186
perf: introduce a `perf.run-limits` options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42018
diff
changeset
|
33 The default value is: `3.0-100, 10.0-3` |
5a1e621b8186
perf: introduce a `perf.run-limits` options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42018
diff
changeset
|
34 |
42015
dbca2e5563c3
perf: document config options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41652
diff
changeset
|
35 ``stub`` |
42021
4c700c847aa2
perf: copyedit a few documentation strings
Augie Fackler <augie@google.com>
parents:
42019
diff
changeset
|
36 When set, benchmarks will only be run once, useful for testing |
4c700c847aa2
perf: copyedit a few documentation strings
Augie Fackler <augie@google.com>
parents:
42019
diff
changeset
|
37 (default: off) |
42015
dbca2e5563c3
perf: document config options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
41652
diff
changeset
|
38 ''' |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
39 |
29493
4533f5b47949
perf: add historical portability policy for future reference
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28561
diff
changeset
|
40 # "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
|
41 # |
4533f5b47949
perf: add historical portability policy for future reference
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28561
diff
changeset
|
42 # We have to do: |
4533f5b47949
perf: add historical portability policy for future reference
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28561
diff
changeset
|
43 # - 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
|
44 # 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
|
45 # 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
|
46 # - 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
|
47 # version as possible |
4533f5b47949
perf: add historical portability policy for future reference
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28561
diff
changeset
|
48 # |
4533f5b47949
perf: add historical portability policy for future reference
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28561
diff
changeset
|
49 # 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
|
50 # - 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
|
51 # with early Mercurial |
4533f5b47949
perf: add historical portability policy for future reference
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28561
diff
changeset
|
52 # |
4533f5b47949
perf: add historical portability policy for future reference
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28561
diff
changeset
|
53 # 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
|
54 # - 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
|
55 # Mercurial |
4533f5b47949
perf: add historical portability policy for future reference
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28561
diff
changeset
|
56 |
28561
330584235c22
contrib: make perf.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27649
diff
changeset
|
57 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
|
58 import contextlib |
28561
330584235c22
contrib: make perf.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27649
diff
changeset
|
59 import functools |
31397
8f5ed8fa39f8
perf: perform a garbage collection before each iteration
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30977
diff
changeset
|
60 import gc |
28561
330584235c22
contrib: make perf.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27649
diff
changeset
|
61 import os |
27286
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
62 import random |
40550
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
63 import shutil |
32532
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
64 import struct |
28561
330584235c22
contrib: make perf.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27649
diff
changeset
|
65 import sys |
40550
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
66 import tempfile |
35599
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
67 import threading |
28561
330584235c22
contrib: make perf.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27649
diff
changeset
|
68 import time |
330584235c22
contrib: make perf.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27649
diff
changeset
|
69 from mercurial import ( |
30018
bd6df07ccc24
perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30017
diff
changeset
|
70 changegroup, |
28561
330584235c22
contrib: make perf.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27649
diff
changeset
|
71 cmdutil, |
330584235c22
contrib: make perf.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27649
diff
changeset
|
72 commands, |
330584235c22
contrib: make perf.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27649
diff
changeset
|
73 copies, |
330584235c22
contrib: make perf.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27649
diff
changeset
|
74 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
|
75 extensions, |
40941
db6cace18765
perfdiscovery: benching findcommonheads()
Georges Racinet <gracinet@anybox.fr>
parents:
40925
diff
changeset
|
76 hg, |
28561
330584235c22
contrib: make perf.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27649
diff
changeset
|
77 mdiff, |
330584235c22
contrib: make perf.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27649
diff
changeset
|
78 merge, |
32532
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
79 revlog, |
28561
330584235c22
contrib: make perf.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27649
diff
changeset
|
80 util, |
330584235c22
contrib: make perf.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27649
diff
changeset
|
81 ) |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
82 |
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
|
83 # for "historical portability": |
29567
7e2b389418da
perf: import newer modules separately for earlier Mercurial
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29497
diff
changeset
|
84 # 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
|
85 # 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
|
86 try: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
87 from mercurial import branchmap # since 2.5 (or bcee63733aad) |
29567
7e2b389418da
perf: import newer modules separately for earlier Mercurial
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29497
diff
changeset
|
88 except ImportError: |
7e2b389418da
perf: import newer modules separately for earlier Mercurial
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29497
diff
changeset
|
89 pass |
7e2b389418da
perf: import newer modules separately for earlier Mercurial
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29497
diff
changeset
|
90 try: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
91 from mercurial import obsolete # since 2.3 (or ad0d6c2b3279) |
29567
7e2b389418da
perf: import newer modules separately for earlier Mercurial
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29497
diff
changeset
|
92 except ImportError: |
7e2b389418da
perf: import newer modules separately for earlier Mercurial
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29497
diff
changeset
|
93 pass |
7e2b389418da
perf: import newer modules separately for earlier Mercurial
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29497
diff
changeset
|
94 try: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
95 from mercurial import registrar # since 3.7 (or 37d50250b696) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
96 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
97 dir(registrar) # forcibly load it |
32337
46ba2cdda476
registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32297
diff
changeset
|
98 except ImportError: |
46ba2cdda476
registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32297
diff
changeset
|
99 registrar = None |
46ba2cdda476
registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32297
diff
changeset
|
100 try: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
101 from mercurial import repoview # since 2.5 (or 3a6ddacb7198) |
29567
7e2b389418da
perf: import newer modules separately for earlier Mercurial
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29497
diff
changeset
|
102 except ImportError: |
7e2b389418da
perf: import newer modules separately for earlier Mercurial
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29497
diff
changeset
|
103 pass |
7e2b389418da
perf: import newer modules separately for earlier Mercurial
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29497
diff
changeset
|
104 try: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
105 from mercurial.utils import repoviewutil # since 5.0 |
42138
caebe5e7f4bd
repoview: move subsettable in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42063
diff
changeset
|
106 except ImportError: |
caebe5e7f4bd
repoview: move subsettable in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42063
diff
changeset
|
107 repoviewutil = None |
caebe5e7f4bd
repoview: move subsettable in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42063
diff
changeset
|
108 try: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
109 from mercurial import scmutil # since 1.9 (or 8b252e826c68) |
29567
7e2b389418da
perf: import newer modules separately for earlier Mercurial
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29497
diff
changeset
|
110 except ImportError: |
7e2b389418da
perf: import newer modules separately for earlier Mercurial
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29497
diff
changeset
|
111 pass |
40941
db6cace18765
perfdiscovery: benching findcommonheads()
Georges Racinet <gracinet@anybox.fr>
parents:
40925
diff
changeset
|
112 try: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
113 from mercurial import setdiscovery # since 1.9 (or cb98fed52495) |
40941
db6cace18765
perfdiscovery: benching findcommonheads()
Georges Racinet <gracinet@anybox.fr>
parents:
40925
diff
changeset
|
114 except ImportError: |
db6cace18765
perfdiscovery: benching findcommonheads()
Georges Racinet <gracinet@anybox.fr>
parents:
40925
diff
changeset
|
115 pass |
db6cace18765
perfdiscovery: benching findcommonheads()
Georges Racinet <gracinet@anybox.fr>
parents:
40925
diff
changeset
|
116 |
42360
3293086ff663
perf: add an option to profile the benchmark section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42359
diff
changeset
|
117 try: |
3293086ff663
perf: add an option to profile the benchmark section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42359
diff
changeset
|
118 from mercurial import profiling |
3293086ff663
perf: add an option to profile the benchmark section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42359
diff
changeset
|
119 except ImportError: |
3293086ff663
perf: add an option to profile the benchmark section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42359
diff
changeset
|
120 profiling = None |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
121 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
122 |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
123 def identity(a): |
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
124 return a |
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
125 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
126 |
36178
646002338365
py3: introduce and use pycompat.getargspec
Augie Fackler <augie@google.com>
parents:
35951
diff
changeset
|
127 try: |
646002338365
py3: introduce and use pycompat.getargspec
Augie Fackler <augie@google.com>
parents:
35951
diff
changeset
|
128 from mercurial import pycompat |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
129 |
36178
646002338365
py3: introduce and use pycompat.getargspec
Augie Fackler <augie@google.com>
parents:
35951
diff
changeset
|
130 getargspec = pycompat.getargspec # added to module after 4.5 |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
131 _byteskwargs = pycompat.byteskwargs # since 4.1 (or fbc3f73dc802) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
132 _sysstr = pycompat.sysstr # since 4.0 (or 2219f4f82ede) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
133 _bytestr = pycompat.bytestr # since 4.2 (or b70407bd84d5) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
134 _xrange = pycompat.xrange # since 4.8 (or 7eba8f83129b) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
135 fsencode = pycompat.fsencode # since 3.9 (or f4a5e0e86a7e) |
39823
c4ab9fa81377
py3: work around the lack of sys.maxint in contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39822
diff
changeset
|
136 if pycompat.ispy3: |
c4ab9fa81377
py3: work around the lack of sys.maxint in contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39822
diff
changeset
|
137 _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:
39822
diff
changeset
|
138 else: |
c4ab9fa81377
py3: work around the lack of sys.maxint in contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39822
diff
changeset
|
139 _maxint = sys.maxint |
42783
c8d3af9c7e65
perf: handle NameError for `pycompat.foo` when pycompat wasn't imported
Martin von Zweigbergk <martinvonz@google.com>
parents:
42760
diff
changeset
|
140 except (NameError, ImportError, AttributeError): |
36178
646002338365
py3: introduce and use pycompat.getargspec
Augie Fackler <augie@google.com>
parents:
35951
diff
changeset
|
141 import inspect |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
142 |
36178
646002338365
py3: introduce and use pycompat.getargspec
Augie Fackler <augie@google.com>
parents:
35951
diff
changeset
|
143 getargspec = inspect.getargspec |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
144 _byteskwargs = identity |
42785
c00005975c91
perf: don't depend on pycompat for older Mercurial versions
Martin von Zweigbergk <martinvonz@google.com>
parents:
42784
diff
changeset
|
145 _bytestr = str |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
146 fsencode = identity # no py3 support |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
147 _maxint = sys.maxint # no py3 support |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
148 _sysstr = lambda x: x # no py3 support |
39822
86dbeb7c9a11
py3: switch contrib/perf from xrange to pycompat.xrange
Matt Harbison <matt_harbison@yahoo.com>
parents:
39821
diff
changeset
|
149 _xrange = xrange |
29567
7e2b389418da
perf: import newer modules separately for earlier Mercurial
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29497
diff
changeset
|
150 |
37844
8fb9985382be
pycompat: export queue module instead of symbols in module (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37355
diff
changeset
|
151 try: |
8fb9985382be
pycompat: export queue module instead of symbols in module (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37355
diff
changeset
|
152 # 4.7+ |
8fb9985382be
pycompat: export queue module instead of symbols in module (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37355
diff
changeset
|
153 queue = pycompat.queue.Queue |
42783
c8d3af9c7e65
perf: handle NameError for `pycompat.foo` when pycompat wasn't imported
Martin von Zweigbergk <martinvonz@google.com>
parents:
42760
diff
changeset
|
154 except (NameError, AttributeError, ImportError): |
37844
8fb9985382be
pycompat: export queue module instead of symbols in module (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37355
diff
changeset
|
155 # <4.7. |
8fb9985382be
pycompat: export queue module instead of symbols in module (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37355
diff
changeset
|
156 try: |
8fb9985382be
pycompat: export queue module instead of symbols in module (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37355
diff
changeset
|
157 queue = pycompat.queue |
42783
c8d3af9c7e65
perf: handle NameError for `pycompat.foo` when pycompat wasn't imported
Martin von Zweigbergk <martinvonz@google.com>
parents:
42760
diff
changeset
|
158 except (NameError, AttributeError, ImportError): |
42784
777a9df5a1ef
perf: don't try to call `util.queue` on Mercurial version before it existed
Martin von Zweigbergk <martinvonz@google.com>
parents:
42783
diff
changeset
|
159 import Queue as queue |
37844
8fb9985382be
pycompat: export queue module instead of symbols in module (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37355
diff
changeset
|
160 |
38257
a577a199983c
perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents:
38256
diff
changeset
|
161 try: |
a577a199983c
perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents:
38256
diff
changeset
|
162 from mercurial import logcmdutil |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
163 |
38257
a577a199983c
perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents:
38256
diff
changeset
|
164 makelogtemplater = logcmdutil.maketemplater |
a577a199983c
perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents:
38256
diff
changeset
|
165 except (AttributeError, ImportError): |
a577a199983c
perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents:
38256
diff
changeset
|
166 try: |
a577a199983c
perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents:
38256
diff
changeset
|
167 makelogtemplater = cmdutil.makelogtemplater |
a577a199983c
perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents:
38256
diff
changeset
|
168 except (AttributeError, ImportError): |
a577a199983c
perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents:
38256
diff
changeset
|
169 makelogtemplater = None |
a577a199983c
perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents:
38256
diff
changeset
|
170 |
29567
7e2b389418da
perf: import newer modules separately for earlier Mercurial
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29497
diff
changeset
|
171 # 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
|
172 # 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
|
173 # 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
|
174 _undefined = object() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
175 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
176 |
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
|
177 def safehasattr(thing, attr): |
39821
6787dc1b93a9
py3: handle sysstr conversion around get/set attr in contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39763
diff
changeset
|
178 return getattr(thing, _sysstr(attr), _undefined) is not _undefined |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
179 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
180 |
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
|
181 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
|
182 |
29496
7299370cf304
perf: avoid using formatteropts for Mercurial earlier than 3.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29495
diff
changeset
|
183 # for "historical portability": |
31823
f6d77af84ef3
perf: add historical portability for util.timer
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents:
31476
diff
changeset
|
184 # 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:
31476
diff
changeset
|
185 # since ae5d60bb70c9 |
f6d77af84ef3
perf: add historical portability for util.timer
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents:
31476
diff
changeset
|
186 if safehasattr(time, 'perf_counter'): |
f6d77af84ef3
perf: add historical portability for util.timer
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents:
31476
diff
changeset
|
187 util.timer = time.perf_counter |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
188 elif os.name == b'nt': |
31823
f6d77af84ef3
perf: add historical portability for util.timer
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents:
31476
diff
changeset
|
189 util.timer = time.clock |
f6d77af84ef3
perf: add historical portability for util.timer
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents:
31476
diff
changeset
|
190 else: |
f6d77af84ef3
perf: add historical portability for util.timer
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents:
31476
diff
changeset
|
191 util.timer = time.time |
f6d77af84ef3
perf: add historical portability for util.timer
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents:
31476
diff
changeset
|
192 |
f6d77af84ef3
perf: add historical portability for util.timer
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents:
31476
diff
changeset
|
193 # 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
|
194 # 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
|
195 # 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
|
196 # 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
|
197 # available since 2.2 (or ae5f92e154d3) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
198 formatteropts = getattr( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
199 cmdutil, "formatteropts", getattr(commands, "formatteropts", []) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
200 ) |
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
|
201 |
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
|
202 # 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
|
203 # 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
|
204 # 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
|
205 # 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
|
206 # since 1.9 (or a79fea6b3e77). |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
207 revlogopts = getattr( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
208 cmdutil, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
209 "debugrevlogopts", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
210 getattr( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
211 commands, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
212 "debugrevlogopts", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
213 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
214 (b'c', b'changelog', False, b'open changelog'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
215 (b'm', b'manifest', False, b'open manifest'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
216 (b'', b'dir', False, b'open directory manifest'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
217 ], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
218 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
219 ) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
220 |
18237
4132dc9bd5c4
perftest: migrate to new style command declaration
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18236
diff
changeset
|
221 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
|
222 |
ee2027195847
perf: define command annotation locally for Mercurial earlier than 3.1
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29496
diff
changeset
|
223 # 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
|
224 # 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
|
225 # 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
|
226 def parsealiases(cmd): |
40295
fa88170c10bb
help: adding a proper declaration for shortlist/basic commands (API)
Rodrigo Damazio <rdamazio@google.com>
parents:
40214
diff
changeset
|
227 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
|
228 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
229 |
32337
46ba2cdda476
registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32297
diff
changeset
|
230 if safehasattr(registrar, 'command'): |
46ba2cdda476
registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32297
diff
changeset
|
231 command = registrar.command(cmdtable) |
46ba2cdda476
registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32297
diff
changeset
|
232 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
|
233 command = cmdutil.command(cmdtable) |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
234 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
|
235 # 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
|
236 # 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
|
237 # 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
|
238 _command = command |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
239 |
29497
ee2027195847
perf: define command annotation locally for Mercurial earlier than 3.1
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29496
diff
changeset
|
240 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
|
241 if norepo: |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
242 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
|
243 return _command(name, list(options), synopsis) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
244 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
245 |
29497
ee2027195847
perf: define command annotation locally for Mercurial earlier than 3.1
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29496
diff
changeset
|
246 else: |
ee2027195847
perf: define command annotation locally for Mercurial earlier than 3.1
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29496
diff
changeset
|
247 # 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
|
248 # 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
|
249 # 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
|
250 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
|
251 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
|
252 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
|
253 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
|
254 else: |
ee2027195847
perf: define command annotation locally for Mercurial earlier than 3.1
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29496
diff
changeset
|
255 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
|
256 if norepo: |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
257 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
|
258 return func |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
259 |
29497
ee2027195847
perf: define command annotation locally for Mercurial earlier than 3.1
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29496
diff
changeset
|
260 return decorator |
18237
4132dc9bd5c4
perftest: migrate to new style command declaration
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18236
diff
changeset
|
261 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
262 |
34494
bbb5687e5140
configitems: register the 'perf.stub' config
Boris Feld <boris.feld@octobus.net>
parents:
34343
diff
changeset
|
263 try: |
34749
acdc574cb8d7
contrib-perf: update the config registration
Boris Feld <boris.feld@octobus.net>
parents:
34678
diff
changeset
|
264 import mercurial.registrar |
acdc574cb8d7
contrib-perf: update the config registration
Boris Feld <boris.feld@octobus.net>
parents:
34678
diff
changeset
|
265 import mercurial.configitems |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
266 |
34494
bbb5687e5140
configitems: register the 'perf.stub' config
Boris Feld <boris.feld@octobus.net>
parents:
34343
diff
changeset
|
267 configtable = {} |
34749
acdc574cb8d7
contrib-perf: update the config registration
Boris Feld <boris.feld@octobus.net>
parents:
34678
diff
changeset
|
268 configitem = mercurial.registrar.configitem(configtable) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
269 configitem( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
270 b'perf', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
271 b'presleep', |
34749
acdc574cb8d7
contrib-perf: update the config registration
Boris Feld <boris.feld@octobus.net>
parents:
34678
diff
changeset
|
272 default=mercurial.configitems.dynamicdefault, |
42760
9f2189b6bf2a
config: add experimental argument to the config registrar
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42462
diff
changeset
|
273 experimental=True, |
9f2189b6bf2a
config: add experimental argument to the config registrar
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42462
diff
changeset
|
274 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
275 configitem( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
276 b'perf', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
277 b'stub', |
42760
9f2189b6bf2a
config: add experimental argument to the config registrar
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42462
diff
changeset
|
278 default=mercurial.configitems.dynamicdefault, |
9f2189b6bf2a
config: add experimental argument to the config registrar
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42462
diff
changeset
|
279 experimental=True, |
9f2189b6bf2a
config: add experimental argument to the config registrar
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42462
diff
changeset
|
280 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
281 configitem( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
282 b'perf', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
283 b'parentscount', |
42760
9f2189b6bf2a
config: add experimental argument to the config registrar
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42462
diff
changeset
|
284 default=mercurial.configitems.dynamicdefault, |
9f2189b6bf2a
config: add experimental argument to the config registrar
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42462
diff
changeset
|
285 experimental=True, |
9f2189b6bf2a
config: add experimental argument to the config registrar
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42462
diff
changeset
|
286 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
287 configitem( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
288 b'perf', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
289 b'all-timing', |
42760
9f2189b6bf2a
config: add experimental argument to the config registrar
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42462
diff
changeset
|
290 default=mercurial.configitems.dynamicdefault, |
9f2189b6bf2a
config: add experimental argument to the config registrar
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42462
diff
changeset
|
291 experimental=True, |
9f2189b6bf2a
config: add experimental argument to the config registrar
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42462
diff
changeset
|
292 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
293 configitem( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
294 b'perf', b'pre-run', default=mercurial.configitems.dynamicdefault, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
295 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
296 configitem( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
297 b'perf', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
298 b'profile-benchmark', |
42760
9f2189b6bf2a
config: add experimental argument to the config registrar
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42462
diff
changeset
|
299 default=mercurial.configitems.dynamicdefault, |
9f2189b6bf2a
config: add experimental argument to the config registrar
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42462
diff
changeset
|
300 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
301 configitem( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
302 b'perf', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
303 b'run-limits', |
42760
9f2189b6bf2a
config: add experimental argument to the config registrar
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42462
diff
changeset
|
304 default=mercurial.configitems.dynamicdefault, |
9f2189b6bf2a
config: add experimental argument to the config registrar
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42462
diff
changeset
|
305 experimental=True, |
9f2189b6bf2a
config: add experimental argument to the config registrar
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42462
diff
changeset
|
306 ) |
9f2189b6bf2a
config: add experimental argument to the config registrar
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42462
diff
changeset
|
307 except (ImportError, AttributeError): |
9f2189b6bf2a
config: add experimental argument to the config registrar
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42462
diff
changeset
|
308 pass |
9f2189b6bf2a
config: add experimental argument to the config registrar
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42462
diff
changeset
|
309 except TypeError: |
9f2189b6bf2a
config: add experimental argument to the config registrar
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42462
diff
changeset
|
310 # compatibility fix for a11fd395e83f |
9f2189b6bf2a
config: add experimental argument to the config registrar
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42462
diff
changeset
|
311 # hg version: 5.2 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
312 configitem( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
313 b'perf', b'presleep', default=mercurial.configitems.dynamicdefault, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
314 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
315 configitem( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
316 b'perf', b'stub', default=mercurial.configitems.dynamicdefault, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
317 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
318 configitem( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
319 b'perf', b'parentscount', default=mercurial.configitems.dynamicdefault, |
34749
acdc574cb8d7
contrib-perf: update the config registration
Boris Feld <boris.feld@octobus.net>
parents:
34678
diff
changeset
|
320 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
321 configitem( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
322 b'perf', b'all-timing', default=mercurial.configitems.dynamicdefault, |
34494
bbb5687e5140
configitems: register the 'perf.stub' config
Boris Feld <boris.feld@octobus.net>
parents:
34343
diff
changeset
|
323 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
324 configitem( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
325 b'perf', b'pre-run', default=mercurial.configitems.dynamicdefault, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
326 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
327 configitem( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
328 b'perf', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
329 b'profile-benchmark', |
34750
caf6c446cbe3
contrib-perf: register the 'parentscount' config item
Boris Feld <boris.feld@octobus.net>
parents:
34749
diff
changeset
|
330 default=mercurial.configitems.dynamicdefault, |
caf6c446cbe3
contrib-perf: register the 'parentscount' config item
Boris Feld <boris.feld@octobus.net>
parents:
34749
diff
changeset
|
331 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
332 configitem( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
333 b'perf', b'run-limits', default=mercurial.configitems.dynamicdefault, |
42359
563cd9a72682
perf: add a `pre-run` option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42138
diff
changeset
|
334 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
335 |
34494
bbb5687e5140
configitems: register the 'perf.stub' config
Boris Feld <boris.feld@octobus.net>
parents:
34343
diff
changeset
|
336 |
27307 | 337 def getlen(ui): |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
338 if ui.configbool(b"perf", b"stub", False): |
27307 | 339 return lambda x: 1 |
340 return len | |
341 | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
342 |
42360
3293086ff663
perf: add an option to profile the benchmark section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42359
diff
changeset
|
343 class noop(object): |
3293086ff663
perf: add an option to profile the benchmark section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42359
diff
changeset
|
344 """dummy context manager""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
345 |
42360
3293086ff663
perf: add an option to profile the benchmark section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42359
diff
changeset
|
346 def __enter__(self): |
3293086ff663
perf: add an option to profile the benchmark section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42359
diff
changeset
|
347 pass |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
348 |
42360
3293086ff663
perf: add an option to profile the benchmark section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42359
diff
changeset
|
349 def __exit__(self, *args): |
3293086ff663
perf: add an option to profile the benchmark section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42359
diff
changeset
|
350 pass |
3293086ff663
perf: add an option to profile the benchmark section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42359
diff
changeset
|
351 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
352 |
42364
a09829e14fc0
perf: make sure to explicitly disable any profiler after the first iteration
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42360
diff
changeset
|
353 NOOPCTX = noop() |
a09829e14fc0
perf: make sure to explicitly disable any profiler after the first iteration
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42360
diff
changeset
|
354 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
355 |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
356 def gettimer(ui, opts=None): |
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
357 """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
|
358 |
27303
57bd9c5431a5
perf: improve grammar of gettimer comment
timeless <timeless@mozdev.org>
parents:
27286
diff
changeset
|
359 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
|
360 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
|
361 |
316ad725a1dd
perf: add a configurable sleep on startup
Matt Mackall <mpm@selenic.com>
parents:
23537
diff
changeset
|
362 # 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
|
363 # experimental config: perf.presleep |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
364 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
|
365 |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
366 if opts is None: |
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
367 opts = {} |
30405
e77e8876886f
perf: omit copying ui and redirect to ferr if buffer API is in use
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents:
30370
diff
changeset
|
368 # 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:
30370
diff
changeset
|
369 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:
30370
diff
changeset
|
370 ui = ui.copy() |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
371 uifout = safeattrsetter(ui, b'fout', ignoremissing=True) |
30405
e77e8876886f
perf: omit copying ui and redirect to ferr if buffer API is in use
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents:
30370
diff
changeset
|
372 if uifout: |
e77e8876886f
perf: omit copying ui and redirect to ferr if buffer API is in use
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents:
30370
diff
changeset
|
373 # 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:
30370
diff
changeset
|
374 # 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:
30370
diff
changeset
|
375 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
|
376 |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
377 # 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
|
378 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
|
379 if uiformatter: |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
380 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
|
381 else: |
423bf74d2e5b
perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30146
diff
changeset
|
382 # 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
|
383 # 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
|
384 # 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
|
385 from mercurial import node |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
386 |
30147
423bf74d2e5b
perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30146
diff
changeset
|
387 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
|
388 """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
|
389 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
390 |
30147
423bf74d2e5b
perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30146
diff
changeset
|
391 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
|
392 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
|
393 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
|
394 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
|
395 else: |
423bf74d2e5b
perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30146
diff
changeset
|
396 self.hexfunc = node.short |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
397 |
30147
423bf74d2e5b
perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30146
diff
changeset
|
398 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
|
399 return False |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
400 |
31476
413b44003462
py3: add __bool__ to every class defining __nonzero__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31397
diff
changeset
|
401 __bool__ = __nonzero__ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
402 |
30147
423bf74d2e5b
perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30146
diff
changeset
|
403 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
|
404 pass |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
405 |
30147
423bf74d2e5b
perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30146
diff
changeset
|
406 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
|
407 pass |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
408 |
30147
423bf74d2e5b
perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30146
diff
changeset
|
409 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
|
410 self._ui.write(deftext % fielddata, **opts) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
411 |
30147
423bf74d2e5b
perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30146
diff
changeset
|
412 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
|
413 if cond: |
423bf74d2e5b
perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30146
diff
changeset
|
414 self._ui.write(deftext % fielddata, **opts) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
415 |
30147
423bf74d2e5b
perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30146
diff
changeset
|
416 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
|
417 self._ui.write(text, **opts) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
418 |
30147
423bf74d2e5b
perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30146
diff
changeset
|
419 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
|
420 pass |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
421 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
422 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
|
423 |
27304
a6fd79495770
perf: offer perf.stub to only run one loop
timeless <timeless@mozdev.org>
parents:
27303
diff
changeset
|
424 # 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
|
425 # experimental config: perf.stub |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
426 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
|
427 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
|
428 |
55101513ed94
perf: add a 'perf.all-timing' option to display more than best time
Boris Feld <boris.feld@octobus.net>
parents:
38693
diff
changeset
|
429 # experimental config: perf.all-timing |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
430 displayall = ui.configbool(b"perf", b"all-timing", False) |
42019
5a1e621b8186
perf: introduce a `perf.run-limits` options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42018
diff
changeset
|
431 |
5a1e621b8186
perf: introduce a `perf.run-limits` options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42018
diff
changeset
|
432 # experimental config: perf.run-limits |
5a1e621b8186
perf: introduce a `perf.run-limits` options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42018
diff
changeset
|
433 limitspec = ui.configlist(b"perf", b"run-limits", []) |
5a1e621b8186
perf: introduce a `perf.run-limits` options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42018
diff
changeset
|
434 limits = [] |
5a1e621b8186
perf: introduce a `perf.run-limits` options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42018
diff
changeset
|
435 for item in limitspec: |
42063
912d82daeda3
perf: make perf.run-limits code work with Python 3
Gregory Szorc <gregory.szorc@gmail.com>
parents:
42021
diff
changeset
|
436 parts = item.split(b'-', 1) |
42019
5a1e621b8186
perf: introduce a `perf.run-limits` options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42018
diff
changeset
|
437 if len(parts) < 2: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
438 ui.warn((b'malformatted run limit entry, missing "-": %s\n' % item)) |
42019
5a1e621b8186
perf: introduce a `perf.run-limits` options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42018
diff
changeset
|
439 continue |
5a1e621b8186
perf: introduce a `perf.run-limits` options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42018
diff
changeset
|
440 try: |
42785
c00005975c91
perf: don't depend on pycompat for older Mercurial versions
Martin von Zweigbergk <martinvonz@google.com>
parents:
42784
diff
changeset
|
441 time_limit = float(_sysstr(parts[0])) |
42019
5a1e621b8186
perf: introduce a `perf.run-limits` options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42018
diff
changeset
|
442 except ValueError as e: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
443 ui.warn( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
444 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
445 b'malformatted run limit entry, %s: %s\n' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
446 % (_bytestr(e), item) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
447 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
448 ) |
42019
5a1e621b8186
perf: introduce a `perf.run-limits` options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42018
diff
changeset
|
449 continue |
5a1e621b8186
perf: introduce a `perf.run-limits` options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42018
diff
changeset
|
450 try: |
42785
c00005975c91
perf: don't depend on pycompat for older Mercurial versions
Martin von Zweigbergk <martinvonz@google.com>
parents:
42784
diff
changeset
|
451 run_limit = int(_sysstr(parts[1])) |
42019
5a1e621b8186
perf: introduce a `perf.run-limits` options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42018
diff
changeset
|
452 except ValueError as e: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
453 ui.warn( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
454 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
455 b'malformatted run limit entry, %s: %s\n' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
456 % (_bytestr(e), item) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
457 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
458 ) |
42019
5a1e621b8186
perf: introduce a `perf.run-limits` options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42018
diff
changeset
|
459 continue |
5a1e621b8186
perf: introduce a `perf.run-limits` options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42018
diff
changeset
|
460 limits.append((time_limit, run_limit)) |
5a1e621b8186
perf: introduce a `perf.run-limits` options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42018
diff
changeset
|
461 if not limits: |
5a1e621b8186
perf: introduce a `perf.run-limits` options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42018
diff
changeset
|
462 limits = DEFAULTLIMITS |
5a1e621b8186
perf: introduce a `perf.run-limits` options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42018
diff
changeset
|
463 |
42360
3293086ff663
perf: add an option to profile the benchmark section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42359
diff
changeset
|
464 profiler = None |
3293086ff663
perf: add an option to profile the benchmark section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42359
diff
changeset
|
465 if profiling is not None: |
3293086ff663
perf: add an option to profile the benchmark section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42359
diff
changeset
|
466 if ui.configbool(b"perf", b"profile-benchmark", False): |
3293086ff663
perf: add an option to profile the benchmark section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42359
diff
changeset
|
467 profiler = profiling.profile(ui) |
3293086ff663
perf: add an option to profile the benchmark section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42359
diff
changeset
|
468 |
42359
563cd9a72682
perf: add a `pre-run` option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42138
diff
changeset
|
469 prerun = getint(ui, b"perf", b"pre-run", 0) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
470 t = functools.partial( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
471 _timer, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
472 fm, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
473 displayall=displayall, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
474 limits=limits, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
475 prerun=prerun, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
476 profiler=profiler, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
477 ) |
42019
5a1e621b8186
perf: introduce a `perf.run-limits` options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42018
diff
changeset
|
478 return t, fm |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
479 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
480 |
40680
9d88ae5c635b
perf: add a `setup` argument to run code outside of the timed section
Boris Feld <boris.feld@octobus.net>
parents:
40679
diff
changeset
|
481 def stub_timer(fm, func, setup=None, title=None): |
40721
0adc2c0a0792
perf: run 'setup' function during stub run
Boris Feld <boris.feld@octobus.net>
parents:
40720
diff
changeset
|
482 if setup is not None: |
0adc2c0a0792
perf: run 'setup' function during stub run
Boris Feld <boris.feld@octobus.net>
parents:
40720
diff
changeset
|
483 setup() |
27304
a6fd79495770
perf: offer perf.stub to only run one loop
timeless <timeless@mozdev.org>
parents:
27303
diff
changeset
|
484 func() |
a6fd79495770
perf: offer perf.stub to only run one loop
timeless <timeless@mozdev.org>
parents:
27303
diff
changeset
|
485 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
486 |
40144
acf560bc9b56
perf: extract the timing of a section in a context manager
Boris Feld <boris.feld@octobus.net>
parents:
40143
diff
changeset
|
487 @contextlib.contextmanager |
acf560bc9b56
perf: extract the timing of a section in a context manager
Boris Feld <boris.feld@octobus.net>
parents:
40143
diff
changeset
|
488 def timeone(): |
acf560bc9b56
perf: extract the timing of a section in a context manager
Boris Feld <boris.feld@octobus.net>
parents:
40143
diff
changeset
|
489 r = [] |
acf560bc9b56
perf: extract the timing of a section in a context manager
Boris Feld <boris.feld@octobus.net>
parents:
40143
diff
changeset
|
490 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
|
491 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
|
492 yield r |
acf560bc9b56
perf: extract the timing of a section in a context manager
Boris Feld <boris.feld@octobus.net>
parents:
40143
diff
changeset
|
493 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
|
494 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
|
495 a, b = ostart, ostop |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
496 r.append((cstop - cstart, b[0] - a[0], b[1] - a[1])) |
40144
acf560bc9b56
perf: extract the timing of a section in a context manager
Boris Feld <boris.feld@octobus.net>
parents:
40143
diff
changeset
|
497 |
42017
87066cf5ec0f
perf: more flexible implementation for checking stop conditions
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42016
diff
changeset
|
498 |
87066cf5ec0f
perf: more flexible implementation for checking stop conditions
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42016
diff
changeset
|
499 # list of stop condition (elapsed time, minimal run count) |
87066cf5ec0f
perf: more flexible implementation for checking stop conditions
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42016
diff
changeset
|
500 DEFAULTLIMITS = ( |
87066cf5ec0f
perf: more flexible implementation for checking stop conditions
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42016
diff
changeset
|
501 (3.0, 100), |
87066cf5ec0f
perf: more flexible implementation for checking stop conditions
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42016
diff
changeset
|
502 (10.0, 3), |
87066cf5ec0f
perf: more flexible implementation for checking stop conditions
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42016
diff
changeset
|
503 ) |
87066cf5ec0f
perf: more flexible implementation for checking stop conditions
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42016
diff
changeset
|
504 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
505 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
506 def _timer( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
507 fm, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
508 func, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
509 setup=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
510 title=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
511 displayall=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
512 limits=DEFAULTLIMITS, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
513 prerun=0, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
514 profiler=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
515 ): |
31397
8f5ed8fa39f8
perf: perform a garbage collection before each iteration
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30977
diff
changeset
|
516 gc.collect() |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
517 results = [] |
30975
22fbca1d11ed
mercurial: switch to util.timer for all interval timings
Simon Farnsworth <simonfar@fb.com>
parents:
30882
diff
changeset
|
518 begin = util.timer() |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
519 count = 0 |
42360
3293086ff663
perf: add an option to profile the benchmark section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42359
diff
changeset
|
520 if profiler is None: |
42364
a09829e14fc0
perf: make sure to explicitly disable any profiler after the first iteration
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42360
diff
changeset
|
521 profiler = NOOPCTX |
42370
c2d10506725c
py3: use range() instead of xrange()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
42364
diff
changeset
|
522 for i in range(prerun): |
42359
563cd9a72682
perf: add a `pre-run` option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42138
diff
changeset
|
523 if setup is not None: |
563cd9a72682
perf: add a `pre-run` option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42138
diff
changeset
|
524 setup() |
563cd9a72682
perf: add a `pre-run` option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42138
diff
changeset
|
525 func() |
42017
87066cf5ec0f
perf: more flexible implementation for checking stop conditions
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42016
diff
changeset
|
526 keepgoing = True |
87066cf5ec0f
perf: more flexible implementation for checking stop conditions
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42016
diff
changeset
|
527 while keepgoing: |
40680
9d88ae5c635b
perf: add a `setup` argument to run code outside of the timed section
Boris Feld <boris.feld@octobus.net>
parents:
40679
diff
changeset
|
528 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:
40679
diff
changeset
|
529 setup() |
42360
3293086ff663
perf: add an option to profile the benchmark section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42359
diff
changeset
|
530 with profiler: |
3293086ff663
perf: add an option to profile the benchmark section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42359
diff
changeset
|
531 with timeone() as item: |
3293086ff663
perf: add an option to profile the benchmark section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42359
diff
changeset
|
532 r = func() |
42364
a09829e14fc0
perf: make sure to explicitly disable any profiler after the first iteration
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42360
diff
changeset
|
533 profiler = NOOPCTX |
40144
acf560bc9b56
perf: extract the timing of a section in a context manager
Boris Feld <boris.feld@octobus.net>
parents:
40143
diff
changeset
|
534 count += 1 |
acf560bc9b56
perf: extract the timing of a section in a context manager
Boris Feld <boris.feld@octobus.net>
parents:
40143
diff
changeset
|
535 results.append(item[0]) |
30975
22fbca1d11ed
mercurial: switch to util.timer for all interval timings
Simon Farnsworth <simonfar@fb.com>
parents:
30882
diff
changeset
|
536 cstop = util.timer() |
42017
87066cf5ec0f
perf: more flexible implementation for checking stop conditions
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42016
diff
changeset
|
537 # Look for a stop condition. |
87066cf5ec0f
perf: more flexible implementation for checking stop conditions
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42016
diff
changeset
|
538 elapsed = cstop - begin |
42018
0e6422942c84
perf: pass limits as a function argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42017
diff
changeset
|
539 for t, mincount in limits: |
42017
87066cf5ec0f
perf: more flexible implementation for checking stop conditions
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42016
diff
changeset
|
540 if elapsed >= t and count >= mincount: |
87066cf5ec0f
perf: more flexible implementation for checking stop conditions
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42016
diff
changeset
|
541 keepgoing = False |
87066cf5ec0f
perf: more flexible implementation for checking stop conditions
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42016
diff
changeset
|
542 break |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
543 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
544 formatone(fm, results, title=title, result=r, displayall=displayall) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
545 |
40145
21261fc0fb2b
perf: extract result formatting in its own function
Boris Feld <boris.feld@octobus.net>
parents:
40144
diff
changeset
|
546 |
21261fc0fb2b
perf: extract result formatting in its own function
Boris Feld <boris.feld@octobus.net>
parents:
40144
diff
changeset
|
547 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
|
548 |
21261fc0fb2b
perf: extract result formatting in its own function
Boris Feld <boris.feld@octobus.net>
parents:
40144
diff
changeset
|
549 count = len(timings) |
21261fc0fb2b
perf: extract result formatting in its own function
Boris Feld <boris.feld@octobus.net>
parents:
40144
diff
changeset
|
550 |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
551 fm.startitem() |
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
552 |
9826
d768614578dd
contrib/perf: profile diff of working directory changes
Patrick Mezard <pmezard@gmail.com>
parents:
9146
diff
changeset
|
553 if title: |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
554 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
|
555 if result: |
21261fc0fb2b
perf: extract result formatting in its own function
Boris Feld <boris.feld@octobus.net>
parents:
40144
diff
changeset
|
556 fm.write(b'result', b'! result: %s\n', result) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
557 |
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
|
558 def display(role, entry): |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
559 prefix = b'' |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
560 if role != b'best': |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
561 prefix = b'%s.' % role |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
562 fm.plain(b'!') |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
563 fm.write(prefix + b'wall', b' wall %f', entry[0]) |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
564 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:
39319
diff
changeset
|
565 fm.write(prefix + b'user', b' user %f', entry[1]) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
566 fm.write(prefix + b'sys', b' sys %f', entry[2]) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
567 fm.write(prefix + b'count', b' (%s of %%d)' % role, count) |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
568 fm.plain(b'\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
569 |
40145
21261fc0fb2b
perf: extract result formatting in its own function
Boris Feld <boris.feld@octobus.net>
parents:
40144
diff
changeset
|
570 timings.sort() |
21261fc0fb2b
perf: extract result formatting in its own function
Boris Feld <boris.feld@octobus.net>
parents:
40144
diff
changeset
|
571 min_val = timings[0] |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
572 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
|
573 if displayall: |
40145
21261fc0fb2b
perf: extract result formatting in its own function
Boris Feld <boris.feld@octobus.net>
parents:
40144
diff
changeset
|
574 max_val = timings[-1] |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
575 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
|
576 avg = tuple([sum(x) / count for x in zip(*timings)]) |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
577 display(b'avg', avg) |
40145
21261fc0fb2b
perf: extract result formatting in its own function
Boris Feld <boris.feld@octobus.net>
parents:
40144
diff
changeset
|
578 median = timings[len(timings) // 2] |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
579 display(b'median', median) |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
580 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
581 |
30143
2d858c771760
perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30069
diff
changeset
|
582 # utilities for historical portability |
2d858c771760
perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30069
diff
changeset
|
583 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
584 |
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
|
585 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
|
586 # 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
|
587 # 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
|
588 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
|
589 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
|
590 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
|
591 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
|
592 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
|
593 except ValueError: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
594 raise error.ConfigError( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
595 b"%s.%s is not an integer ('%s')" % (section, name, v) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
596 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
597 |
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
|
598 |
30143
2d858c771760
perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30069
diff
changeset
|
599 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
|
600 """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
|
601 |
2d858c771760
perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30069
diff
changeset
|
602 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
|
603 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
|
604 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
|
605 |
2d858c771760
perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30069
diff
changeset
|
606 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
|
607 (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
|
608 |
2d858c771760
perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30069
diff
changeset
|
609 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
|
610 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
|
611 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
|
612 versions. |
2d858c771760
perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30069
diff
changeset
|
613 """ |
2d858c771760
perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30069
diff
changeset
|
614 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
|
615 if ignoremissing: |
2d858c771760
perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30069
diff
changeset
|
616 return None |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
617 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
618 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
619 b"missing attribute %s of %s might break assumption" |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
620 b" of performance measurement" |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
621 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
622 % (name, obj) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
623 ) |
30143
2d858c771760
perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30069
diff
changeset
|
624 |
39821
6787dc1b93a9
py3: handle sysstr conversion around get/set attr in contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39763
diff
changeset
|
625 origvalue = getattr(obj, _sysstr(name)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
626 |
30143
2d858c771760
perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30069
diff
changeset
|
627 class attrutil(object): |
2d858c771760
perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30069
diff
changeset
|
628 def set(self, newvalue): |
39821
6787dc1b93a9
py3: handle sysstr conversion around get/set attr in contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39763
diff
changeset
|
629 setattr(obj, _sysstr(name), newvalue) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
630 |
30143
2d858c771760
perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30069
diff
changeset
|
631 def restore(self): |
39821
6787dc1b93a9
py3: handle sysstr conversion around get/set attr in contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39763
diff
changeset
|
632 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
|
633 |
2d858c771760
perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30069
diff
changeset
|
634 return attrutil() |
2d858c771760
perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30069
diff
changeset
|
635 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
636 |
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
|
637 # 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
|
638 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
639 |
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
|
640 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
|
641 # 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
|
642 # 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
|
643 # - 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
|
644 # - repoview since 2.5 (or 59a9f18d4587) |
42138
caebe5e7f4bd
repoview: move subsettable in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42063
diff
changeset
|
645 # - repoviewutil since 5.0 |
caebe5e7f4bd
repoview: move subsettable in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42063
diff
changeset
|
646 for mod in (branchmap, repoview, repoviewutil): |
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
|
647 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
|
648 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
|
649 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
|
650 |
14031d183048
perf: get subsettable from appropriate module for Mercurial earlier than 2.9
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30143
diff
changeset
|
651 # 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
|
652 # 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
|
653 # doesn't) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
654 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
655 b"perfbranchmap not available with this Mercurial", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
656 hint=b"use 2.5 or later", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
657 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
658 |
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
|
659 |
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
|
660 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
|
661 """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
|
662 """ |
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
|
663 # 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
|
664 # 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
|
665 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
|
666 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
|
667 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
|
668 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
|
669 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
|
670 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
671 |
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
|
672 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
|
673 """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
|
674 """ |
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
|
675 # 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
|
676 # 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
|
677 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
|
678 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
|
679 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
|
680 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
|
681 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
|
682 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
683 |
30150
c0410814002f
perf: make perftags clear tags cache correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30149
diff
changeset
|
684 def repocleartagscachefunc(repo): |
c0410814002f
perf: make perftags clear tags cache correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30149
diff
changeset
|
685 """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
|
686 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
687 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
|
688 # 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
|
689 # 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
|
690 # 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
|
691 def clearcache(): |
c0410814002f
perf: make perftags clear tags cache correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30149
diff
changeset
|
692 # _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
|
693 # 98c867ac1330), and delattr() can't work in such case |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
694 if b'_tagscache' in vars(repo): |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
695 del repo.__dict__[b'_tagscache'] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
696 |
30150
c0410814002f
perf: make perftags clear tags cache correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30149
diff
changeset
|
697 return clearcache |
c0410814002f
perf: make perftags clear tags cache correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30149
diff
changeset
|
698 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
699 repotags = safeattrsetter(repo, b'_tags', ignoremissing=True) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
700 if repotags: # since 1.4 (or 5614a628d173) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
701 return lambda: repotags.set(None) |
30150
c0410814002f
perf: make perftags clear tags cache correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30149
diff
changeset
|
702 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
703 repotagscache = safeattrsetter(repo, b'tagscache', ignoremissing=True) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
704 if repotagscache: # since 0.6 (or d7df759d0e97) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
705 return lambda: repotagscache.set(None) |
30150
c0410814002f
perf: make perftags clear tags cache correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30149
diff
changeset
|
706 |
c0410814002f
perf: make perftags clear tags cache correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30149
diff
changeset
|
707 # 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
|
708 # 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
|
709 # - 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
|
710 # in perftags() causes failure soon |
c0410814002f
perf: make perftags clear tags cache correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30149
diff
changeset
|
711 # - perf.py itself has been available since 1.1 (or eb240755386d) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
712 raise error.Abort(b"tags API of this hg command is unknown") |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
713 |
30150
c0410814002f
perf: make perftags clear tags cache correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30149
diff
changeset
|
714 |
32731
6f791ca70640
perf: have a generic "clearstorecache" function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32710
diff
changeset
|
715 # utilities to clear cache |
6f791ca70640
perf: have a generic "clearstorecache" function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32710
diff
changeset
|
716 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
717 |
40683
d7936a9dad47
perf: make `clearfilecache` helper work with any object
Boris Feld <boris.feld@octobus.net>
parents:
40682
diff
changeset
|
718 def clearfilecache(obj, attrname): |
d7936a9dad47
perf: make `clearfilecache` helper work with any object
Boris Feld <boris.feld@octobus.net>
parents:
40682
diff
changeset
|
719 unfiltered = getattr(obj, 'unfiltered', None) |
d7936a9dad47
perf: make `clearfilecache` helper work with any object
Boris Feld <boris.feld@octobus.net>
parents:
40682
diff
changeset
|
720 if unfiltered is not None: |
d7936a9dad47
perf: make `clearfilecache` helper work with any object
Boris Feld <boris.feld@octobus.net>
parents:
40682
diff
changeset
|
721 obj = obj.unfiltered() |
d7936a9dad47
perf: make `clearfilecache` helper work with any object
Boris Feld <boris.feld@octobus.net>
parents:
40682
diff
changeset
|
722 if attrname in vars(obj): |
d7936a9dad47
perf: make `clearfilecache` helper work with any object
Boris Feld <boris.feld@octobus.net>
parents:
40682
diff
changeset
|
723 delattr(obj, attrname) |
d7936a9dad47
perf: make `clearfilecache` helper work with any object
Boris Feld <boris.feld@octobus.net>
parents:
40682
diff
changeset
|
724 obj._filecache.pop(attrname, None) |
32731
6f791ca70640
perf: have a generic "clearstorecache" function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32710
diff
changeset
|
725 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
726 |
40701
e4ea63855d5a
perf: introduce a function to fully "unload" a changelog
Boris Feld <boris.feld@octobus.net>
parents:
40700
diff
changeset
|
727 def clearchangelog(repo): |
e4ea63855d5a
perf: introduce a function to fully "unload" a changelog
Boris Feld <boris.feld@octobus.net>
parents:
40700
diff
changeset
|
728 if repo is not repo.unfiltered(): |
e4ea63855d5a
perf: introduce a function to fully "unload" a changelog
Boris Feld <boris.feld@octobus.net>
parents:
40700
diff
changeset
|
729 object.__setattr__(repo, r'_clcachekey', None) |
e4ea63855d5a
perf: introduce a function to fully "unload" a changelog
Boris Feld <boris.feld@octobus.net>
parents:
40700
diff
changeset
|
730 object.__setattr__(repo, r'_clcache', None) |
e4ea63855d5a
perf: introduce a function to fully "unload" a changelog
Boris Feld <boris.feld@octobus.net>
parents:
40700
diff
changeset
|
731 clearfilecache(repo.unfiltered(), 'changelog') |
e4ea63855d5a
perf: introduce a function to fully "unload" a changelog
Boris Feld <boris.feld@octobus.net>
parents:
40700
diff
changeset
|
732 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
733 |
30143
2d858c771760
perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30069
diff
changeset
|
734 # perf commands |
2d858c771760
perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30069
diff
changeset
|
735 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
736 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
737 @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
|
738 def perfwalk(ui, repo, *pats, **opts): |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
739 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
740 timer, fm = gettimer(ui, opts) |
34342
b3538c03a804
perf: remove fallbacks to ancient versions of dirstate.walk()
Martin von Zweigbergk <martinvonz@google.com>
parents:
32888
diff
changeset
|
741 m = scmutil.match(repo[None], pats, {}) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
742 timer( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
743 lambda: len( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
744 list( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
745 repo.dirstate.walk(m, subrepos=[], unknown=True, ignored=False) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
746 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
747 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
748 ) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
749 fm.end() |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
750 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
751 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
752 @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
|
753 def perfannotate(ui, repo, f, **opts): |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
754 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
755 timer, fm = gettimer(ui, opts) |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
756 fc = repo[b'.'][f] |
19292
e0aa6fff8f02
annotate: simplify annotate parent function
Durham Goode <durham@fb.com>
parents:
18877
diff
changeset
|
757 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
|
758 fm.end() |
19292
e0aa6fff8f02
annotate: simplify annotate parent function
Durham Goode <durham@fb.com>
parents:
18877
diff
changeset
|
759 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
760 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
761 @command( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
762 b'perfstatus', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
763 [(b'u', b'unknown', False, b'ask status to look for unknown files')] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
764 + formatteropts, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
765 ) |
18033
00ac420f24ee
perf: add option to perfstatus to get the status of unknown files
Siddharth Agarwal <sid0@fb.com>
parents:
17780
diff
changeset
|
766 def perfstatus(ui, repo, **opts): |
43120
97f80dd21312
perf: document `perfstatus`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43117
diff
changeset
|
767 """benchmark the performance of a single status call |
97f80dd21312
perf: document `perfstatus`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43117
diff
changeset
|
768 |
97f80dd21312
perf: document `perfstatus`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43117
diff
changeset
|
769 The repository data are preserved between each call. |
97f80dd21312
perf: document `perfstatus`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43117
diff
changeset
|
770 |
97f80dd21312
perf: document `perfstatus`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43117
diff
changeset
|
771 By default, only the status of the tracked file are requested. If |
97f80dd21312
perf: document `perfstatus`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43117
diff
changeset
|
772 `--unknown` is passed, the "unknown" files are also tracked. |
97f80dd21312
perf: document `perfstatus`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43117
diff
changeset
|
773 """ |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
774 opts = _byteskwargs(opts) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
775 # m = match.always(repo.root, repo.getcwd()) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
776 # timer(lambda: sum(map(len, repo.dirstate.status(m, [], False, False, |
16683 | 777 # False)))) |
27017
cdc3e437b481
perf: un-bitrot perfstatus
Matt Mackall <mpm@selenic.com>
parents:
26748
diff
changeset
|
778 timer, fm = gettimer(ui, opts) |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
779 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
|
780 fm.end() |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
781 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
782 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
783 @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
|
784 def perfaddremove(ui, repo, **opts): |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
785 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
786 timer, fm = gettimer(ui, opts) |
18871
a2d4ab4f575d
perf: add a command to test addremove performance
Siddharth Agarwal <sid0@fb.com>
parents:
18845
diff
changeset
|
787 try: |
a2d4ab4f575d
perf: add a command to test addremove performance
Siddharth Agarwal <sid0@fb.com>
parents:
18845
diff
changeset
|
788 oldquiet = repo.ui.quiet |
a2d4ab4f575d
perf: add a command to test addremove performance
Siddharth Agarwal <sid0@fb.com>
parents:
18845
diff
changeset
|
789 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
|
790 matcher = scmutil.match(repo[None]) |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
791 opts[b'dry_run'] = True |
41652
6a447a3d1bd0
addremove: pass around uipathfn and use instead of m.uipath() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41615
diff
changeset
|
792 if b'uipathfn' in getargspec(scmutil.addremove).args: |
6a447a3d1bd0
addremove: pass around uipathfn and use instead of m.uipath() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41615
diff
changeset
|
793 uipathfn = scmutil.getuipathfn(repo) |
6a447a3d1bd0
addremove: pass around uipathfn and use instead of m.uipath() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41615
diff
changeset
|
794 timer(lambda: scmutil.addremove(repo, matcher, b"", uipathfn, opts)) |
6a447a3d1bd0
addremove: pass around uipathfn and use instead of m.uipath() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41615
diff
changeset
|
795 else: |
6a447a3d1bd0
addremove: pass around uipathfn and use instead of m.uipath() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41615
diff
changeset
|
796 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
|
797 finally: |
a2d4ab4f575d
perf: add a command to test addremove performance
Siddharth Agarwal <sid0@fb.com>
parents:
18845
diff
changeset
|
798 repo.ui.quiet = oldquiet |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
799 fm.end() |
18871
a2d4ab4f575d
perf: add a command to test addremove performance
Siddharth Agarwal <sid0@fb.com>
parents:
18845
diff
changeset
|
800 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
801 |
16785
1dc08dc63c09
perf: rework perfheads and perftags to clear caches
Bryan O'Sullivan <bryano@fb.com>
parents:
16689
diff
changeset
|
802 def clearcaches(cl): |
1dc08dc63c09
perf: rework perfheads and perftags to clear caches
Bryan O'Sullivan <bryano@fb.com>
parents:
16689
diff
changeset
|
803 # behave somewhat consistently across internal API changes |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
804 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
|
805 cl.clearcaches() |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
806 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
|
807 from mercurial.node import nullid, nullrev |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
808 |
16785
1dc08dc63c09
perf: rework perfheads and perftags to clear caches
Bryan O'Sullivan <bryano@fb.com>
parents:
16689
diff
changeset
|
809 cl._nodecache = {nullid: nullrev} |
1dc08dc63c09
perf: rework perfheads and perftags to clear caches
Bryan O'Sullivan <bryano@fb.com>
parents:
16689
diff
changeset
|
810 cl._nodepos = None |
1dc08dc63c09
perf: rework perfheads and perftags to clear caches
Bryan O'Sullivan <bryano@fb.com>
parents:
16689
diff
changeset
|
811 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
812 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
813 @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
|
814 def perfheads(ui, repo, **opts): |
41434
48394923fbdc
perf: document perfheads
Boris Feld <boris.feld@octobus.net>
parents:
41365
diff
changeset
|
815 """benchmark the computation of a changelog heads""" |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
816 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
817 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
|
818 cl = repo.changelog |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
819 |
41436
ab6d1f82be32
perf: move cache clearing in the `setup` step of `perfheads`
Boris Feld <boris.feld@octobus.net>
parents:
41434
diff
changeset
|
820 def s(): |
ab6d1f82be32
perf: move cache clearing in the `setup` step of `perfheads`
Boris Feld <boris.feld@octobus.net>
parents:
41434
diff
changeset
|
821 clearcaches(cl) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
822 |
16785
1dc08dc63c09
perf: rework perfheads and perftags to clear caches
Bryan O'Sullivan <bryano@fb.com>
parents:
16689
diff
changeset
|
823 def d(): |
1dc08dc63c09
perf: rework perfheads and perftags to clear caches
Bryan O'Sullivan <bryano@fb.com>
parents:
16689
diff
changeset
|
824 len(cl.headrevs()) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
825 |
41436
ab6d1f82be32
perf: move cache clearing in the `setup` step of `perfheads`
Boris Feld <boris.feld@octobus.net>
parents:
41434
diff
changeset
|
826 timer(d, setup=s) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
827 fm.end() |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
828 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
829 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
830 @command( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
831 b'perftags', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
832 formatteropts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
833 + [(b'', b'clear-revlogs', False, b'refresh changelog and manifest'),], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
834 ) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
835 def perftags(ui, repo, **opts): |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
836 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
837 timer, fm = gettimer(ui, opts) |
30150
c0410814002f
perf: make perftags clear tags cache correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30149
diff
changeset
|
838 repocleartagscache = repocleartagscachefunc(repo) |
40744
594e84a2e574
perf: add a `clear-revlogs` flag to `perftags`
Boris Feld <boris.feld@octobus.net>
parents:
40743
diff
changeset
|
839 clearrevlogs = opts[b'clear_revlogs'] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
840 |
40682
4369c00a8ee1
perf: move some of the perftags benchmark to the setup function
Boris Feld <boris.feld@octobus.net>
parents:
40681
diff
changeset
|
841 def s(): |
40744
594e84a2e574
perf: add a `clear-revlogs` flag to `perftags`
Boris Feld <boris.feld@octobus.net>
parents:
40743
diff
changeset
|
842 if clearrevlogs: |
594e84a2e574
perf: add a `clear-revlogs` flag to `perftags`
Boris Feld <boris.feld@octobus.net>
parents:
40743
diff
changeset
|
843 clearchangelog(repo) |
594e84a2e574
perf: add a `clear-revlogs` flag to `perftags`
Boris Feld <boris.feld@octobus.net>
parents:
40743
diff
changeset
|
844 clearfilecache(repo.unfiltered(), 'manifest') |
30150
c0410814002f
perf: make perftags clear tags cache correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30149
diff
changeset
|
845 repocleartagscache() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
846 |
40682
4369c00a8ee1
perf: move some of the perftags benchmark to the setup function
Boris Feld <boris.feld@octobus.net>
parents:
40681
diff
changeset
|
847 def t(): |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
848 return len(repo.tags()) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
849 |
40682
4369c00a8ee1
perf: move some of the perftags benchmark to the setup function
Boris Feld <boris.feld@octobus.net>
parents:
40681
diff
changeset
|
850 timer(t, setup=s) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
851 fm.end() |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
852 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
853 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
854 @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
|
855 def perfancestors(ui, repo, **opts): |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
856 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
857 timer, fm = gettimer(ui, opts) |
16802
7e5d94381cd1
perf: add a perfancestors benchmark
Bryan O'Sullivan <bryano@fb.com>
parents:
16788
diff
changeset
|
858 heads = repo.changelog.headrevs() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
859 |
16802
7e5d94381cd1
perf: add a perfancestors benchmark
Bryan O'Sullivan <bryano@fb.com>
parents:
16788
diff
changeset
|
860 def d(): |
16866
91f3ac205816
revlog: ancestors(*revs) becomes ancestors(revs) (API)
Bryan O'Sullivan <bryano@fb.com>
parents:
16858
diff
changeset
|
861 for a in repo.changelog.ancestors(heads): |
16802
7e5d94381cd1
perf: add a perfancestors benchmark
Bryan O'Sullivan <bryano@fb.com>
parents:
16788
diff
changeset
|
862 pass |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
863 |
16802
7e5d94381cd1
perf: add a perfancestors benchmark
Bryan O'Sullivan <bryano@fb.com>
parents:
16788
diff
changeset
|
864 timer(d) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
865 fm.end() |
16802
7e5d94381cd1
perf: add a perfancestors benchmark
Bryan O'Sullivan <bryano@fb.com>
parents:
16788
diff
changeset
|
866 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
867 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
868 @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
|
869 def perfancestorset(ui, repo, revset, **opts): |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
870 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
871 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
|
872 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
|
873 heads = repo.changelog.headrevs() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
874 |
18080
486bfb200b3f
perf: add command to test performance of membership in ancestor set
Siddharth Agarwal <sid0@fb.com>
parents:
18062
diff
changeset
|
875 def d(): |
18091
f7f8159caad3
ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents:
18080
diff
changeset
|
876 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
|
877 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
|
878 rev in s |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
879 |
18080
486bfb200b3f
perf: add command to test performance of membership in ancestor set
Siddharth Agarwal <sid0@fb.com>
parents:
18062
diff
changeset
|
880 timer(d) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
881 fm.end() |
18080
486bfb200b3f
perf: add command to test performance of membership in ancestor set
Siddharth Agarwal <sid0@fb.com>
parents:
18062
diff
changeset
|
882 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
883 |
40941
db6cace18765
perfdiscovery: benching findcommonheads()
Georges Racinet <gracinet@anybox.fr>
parents:
40925
diff
changeset
|
884 @command(b'perfdiscovery', formatteropts, b'PATH') |
db6cace18765
perfdiscovery: benching findcommonheads()
Georges Racinet <gracinet@anybox.fr>
parents:
40925
diff
changeset
|
885 def perfdiscovery(ui, repo, path, **opts): |
db6cace18765
perfdiscovery: benching findcommonheads()
Georges Racinet <gracinet@anybox.fr>
parents:
40925
diff
changeset
|
886 """benchmark discovery between local repo and the peer at given path |
db6cace18765
perfdiscovery: benching findcommonheads()
Georges Racinet <gracinet@anybox.fr>
parents:
40925
diff
changeset
|
887 """ |
db6cace18765
perfdiscovery: benching findcommonheads()
Georges Racinet <gracinet@anybox.fr>
parents:
40925
diff
changeset
|
888 repos = [repo, None] |
db6cace18765
perfdiscovery: benching findcommonheads()
Georges Racinet <gracinet@anybox.fr>
parents:
40925
diff
changeset
|
889 timer, fm = gettimer(ui, opts) |
db6cace18765
perfdiscovery: benching findcommonheads()
Georges Racinet <gracinet@anybox.fr>
parents:
40925
diff
changeset
|
890 path = ui.expandpath(path) |
db6cace18765
perfdiscovery: benching findcommonheads()
Georges Racinet <gracinet@anybox.fr>
parents:
40925
diff
changeset
|
891 |
db6cace18765
perfdiscovery: benching findcommonheads()
Georges Racinet <gracinet@anybox.fr>
parents:
40925
diff
changeset
|
892 def s(): |
db6cace18765
perfdiscovery: benching findcommonheads()
Georges Racinet <gracinet@anybox.fr>
parents:
40925
diff
changeset
|
893 repos[1] = hg.peer(ui, opts, path) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
894 |
40941
db6cace18765
perfdiscovery: benching findcommonheads()
Georges Racinet <gracinet@anybox.fr>
parents:
40925
diff
changeset
|
895 def d(): |
db6cace18765
perfdiscovery: benching findcommonheads()
Georges Racinet <gracinet@anybox.fr>
parents:
40925
diff
changeset
|
896 setdiscovery.findcommonheads(ui, *repos) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
897 |
40941
db6cace18765
perfdiscovery: benching findcommonheads()
Georges Racinet <gracinet@anybox.fr>
parents:
40925
diff
changeset
|
898 timer(d, setup=s) |
db6cace18765
perfdiscovery: benching findcommonheads()
Georges Racinet <gracinet@anybox.fr>
parents:
40925
diff
changeset
|
899 fm.end() |
db6cace18765
perfdiscovery: benching findcommonheads()
Georges Racinet <gracinet@anybox.fr>
parents:
40925
diff
changeset
|
900 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
901 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
902 @command( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
903 b'perfbookmarks', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
904 formatteropts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
905 + [(b'', b'clear-revlogs', False, b'refresh changelog and manifest'),], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
906 ) |
32733
2b0a8b0f3435
perf: add a perfbookmarks command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32732
diff
changeset
|
907 def perfbookmarks(ui, repo, **opts): |
2b0a8b0f3435
perf: add a perfbookmarks command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32732
diff
changeset
|
908 """benchmark parsing bookmarks from disk to memory""" |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
909 opts = _byteskwargs(opts) |
32733
2b0a8b0f3435
perf: add a perfbookmarks command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32732
diff
changeset
|
910 timer, fm = gettimer(ui, opts) |
40681
c0a1686d9391
perf: use the new setup function in "perfbookmarks"
Boris Feld <boris.feld@octobus.net>
parents:
40680
diff
changeset
|
911 |
40746
82c189c511bd
perf: add a `clear-revlogs` flag to `perfbookmarks`
Boris Feld <boris.feld@octobus.net>
parents:
40744
diff
changeset
|
912 clearrevlogs = opts[b'clear_revlogs'] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
913 |
40681
c0a1686d9391
perf: use the new setup function in "perfbookmarks"
Boris Feld <boris.feld@octobus.net>
parents:
40680
diff
changeset
|
914 def s(): |
40746
82c189c511bd
perf: add a `clear-revlogs` flag to `perfbookmarks`
Boris Feld <boris.feld@octobus.net>
parents:
40744
diff
changeset
|
915 if clearrevlogs: |
82c189c511bd
perf: add a `clear-revlogs` flag to `perfbookmarks`
Boris Feld <boris.feld@octobus.net>
parents:
40744
diff
changeset
|
916 clearchangelog(repo) |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
917 clearfilecache(repo, b'_bookmarks') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
918 |
40681
c0a1686d9391
perf: use the new setup function in "perfbookmarks"
Boris Feld <boris.feld@octobus.net>
parents:
40680
diff
changeset
|
919 def d(): |
32733
2b0a8b0f3435
perf: add a perfbookmarks command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32732
diff
changeset
|
920 repo._bookmarks |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
921 |
40681
c0a1686d9391
perf: use the new setup function in "perfbookmarks"
Boris Feld <boris.feld@octobus.net>
parents:
40680
diff
changeset
|
922 timer(d, setup=s) |
32733
2b0a8b0f3435
perf: add a perfbookmarks command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32732
diff
changeset
|
923 fm.end() |
2b0a8b0f3435
perf: add a perfbookmarks command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32732
diff
changeset
|
924 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
925 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
926 @command(b'perfbundleread', formatteropts, b'BUNDLE') |
35109
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
927 def perfbundleread(ui, repo, bundlepath, **opts): |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
928 """Benchmark reading of bundle files. |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
929 |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
930 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:
35084
diff
changeset
|
931 much as possible. |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
932 """ |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
933 from mercurial import ( |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
934 bundle2, |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
935 exchange, |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
936 streamclone, |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
937 ) |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
938 |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
939 opts = _byteskwargs(opts) |
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
940 |
35109
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
941 def makebench(fn): |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
942 def run(): |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
943 with open(bundlepath, b'rb') as fh: |
35109
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
944 bundle = exchange.readbundle(ui, fh, bundlepath) |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
945 fn(bundle) |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
946 |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
947 return run |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
948 |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
949 def makereadnbytes(size): |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
950 def run(): |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
951 with open(bundlepath, b'rb') as fh: |
35109
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
952 bundle = exchange.readbundle(ui, fh, bundlepath) |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
953 while bundle.read(size): |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
954 pass |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
955 |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
956 return run |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
957 |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
958 def makestdioread(size): |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
959 def run(): |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
960 with open(bundlepath, b'rb') as fh: |
35109
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
961 while fh.read(size): |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
962 pass |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
963 |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
964 return run |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
965 |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
966 # bundle1 |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
967 |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
968 def deltaiter(bundle): |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
969 for delta in bundle.deltaiter(): |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
970 pass |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
971 |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
972 def iterchunks(bundle): |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
973 for chunk in bundle.getchunks(): |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
974 pass |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
975 |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
976 # bundle2 |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
977 |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
978 def forwardchunks(bundle): |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
979 for chunk in bundle._forwardchunks(): |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
980 pass |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
981 |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
982 def iterparts(bundle): |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
983 for part in bundle.iterparts(): |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
984 pass |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
985 |
35116
da91e7309daf
bundle2: don't use seekable bundle2 parts by default (issue5691)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35109
diff
changeset
|
986 def iterpartsseekable(bundle): |
da91e7309daf
bundle2: don't use seekable bundle2 parts by default (issue5691)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35109
diff
changeset
|
987 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:
35109
diff
changeset
|
988 pass |
da91e7309daf
bundle2: don't use seekable bundle2 parts by default (issue5691)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35109
diff
changeset
|
989 |
35109
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
990 def seek(bundle): |
35116
da91e7309daf
bundle2: don't use seekable bundle2 parts by default (issue5691)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35109
diff
changeset
|
991 for part in bundle.iterparts(seekable=True): |
35109
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
992 part.seek(0, os.SEEK_END) |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
993 |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
994 def makepartreadnbytes(size): |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
995 def run(): |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
996 with open(bundlepath, b'rb') as fh: |
35109
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
997 bundle = exchange.readbundle(ui, fh, bundlepath) |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
998 for part in bundle.iterparts(): |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
999 while part.read(size): |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1000 pass |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1001 |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1002 return run |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1003 |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1004 benches = [ |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1005 (makestdioread(8192), b'read(8k)'), |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1006 (makestdioread(16384), b'read(16k)'), |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1007 (makestdioread(32768), b'read(32k)'), |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1008 (makestdioread(131072), b'read(128k)'), |
35109
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1009 ] |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1010 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1011 with open(bundlepath, b'rb') as fh: |
35109
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1012 bundle = exchange.readbundle(ui, fh, bundlepath) |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1013 |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1014 if isinstance(bundle, changegroup.cg1unpacker): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1015 benches.extend( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1016 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1017 (makebench(deltaiter), b'cg1 deltaiter()'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1018 (makebench(iterchunks), b'cg1 getchunks()'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1019 (makereadnbytes(8192), b'cg1 read(8k)'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1020 (makereadnbytes(16384), b'cg1 read(16k)'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1021 (makereadnbytes(32768), b'cg1 read(32k)'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1022 (makereadnbytes(131072), b'cg1 read(128k)'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1023 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1024 ) |
35109
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1025 elif isinstance(bundle, bundle2.unbundle20): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1026 benches.extend( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1027 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1028 (makebench(forwardchunks), b'bundle2 forwardchunks()'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1029 (makebench(iterparts), b'bundle2 iterparts()'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1030 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1031 makebench(iterpartsseekable), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1032 b'bundle2 iterparts() seekable', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1033 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1034 (makebench(seek), b'bundle2 part seek()'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1035 (makepartreadnbytes(8192), b'bundle2 part read(8k)'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1036 (makepartreadnbytes(16384), b'bundle2 part read(16k)'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1037 (makepartreadnbytes(32768), b'bundle2 part read(32k)'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1038 (makepartreadnbytes(131072), b'bundle2 part read(128k)'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1039 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1040 ) |
35109
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1041 elif isinstance(bundle, streamclone.streamcloneapplier): |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1042 raise error.Abort(b'stream clone bundles not supported') |
35109
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1043 else: |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1044 raise error.Abort(b'unhandled bundle type: %s' % type(bundle)) |
35109
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1045 |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1046 for fn, title in benches: |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1047 timer, fm = gettimer(ui, opts) |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1048 timer(fn, title=title) |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1049 fm.end() |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1050 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1051 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1052 @command( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1053 b'perfchangegroupchangelog', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1054 formatteropts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1055 + [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1056 (b'', b'cgversion', b'02', b'changegroup version'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1057 (b'r', b'rev', b'', b'revisions to add to changegroup'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1058 ], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1059 ) |
40713
cfaf3843491b
perf: rename version flag of perfchangegroupchangelog to cgversion
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
40702
diff
changeset
|
1060 def perfchangegroupchangelog(ui, repo, cgversion=b'02', rev=None, **opts): |
30018
bd6df07ccc24
perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30017
diff
changeset
|
1061 """Benchmark producing a changelog group for a changegroup. |
bd6df07ccc24
perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30017
diff
changeset
|
1062 |
bd6df07ccc24
perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30017
diff
changeset
|
1063 This measures the time spent processing the changelog during a |
bd6df07ccc24
perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30017
diff
changeset
|
1064 bundle operation. This occurs during `hg bundle` and on a server |
bd6df07ccc24
perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30017
diff
changeset
|
1065 processing a `getbundle` wire protocol request (handles clones |
bd6df07ccc24
perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30017
diff
changeset
|
1066 and pull requests). |
bd6df07ccc24
perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30017
diff
changeset
|
1067 |
bd6df07ccc24
perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30017
diff
changeset
|
1068 By default, all revisions are added to the changegroup. |
bd6df07ccc24
perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30017
diff
changeset
|
1069 """ |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
1070 opts = _byteskwargs(opts) |
30018
bd6df07ccc24
perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30017
diff
changeset
|
1071 cl = repo.changelog |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1072 nodes = [cl.lookup(r) for r in repo.revs(rev or b'all()')] |
40713
cfaf3843491b
perf: rename version flag of perfchangegroupchangelog to cgversion
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
40702
diff
changeset
|
1073 bundler = changegroup.getbundler(cgversion, repo) |
30018
bd6df07ccc24
perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30017
diff
changeset
|
1074 |
bd6df07ccc24
perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30017
diff
changeset
|
1075 def d(): |
38977
a1f694779b2f
perf: call _generatechangelog() instead of group()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38969
diff
changeset
|
1076 state, chunks = bundler._generatechangelog(cl, nodes) |
a1f694779b2f
perf: call _generatechangelog() instead of group()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38969
diff
changeset
|
1077 for chunk in chunks: |
30018
bd6df07ccc24
perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30017
diff
changeset
|
1078 pass |
bd6df07ccc24
perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30017
diff
changeset
|
1079 |
bd6df07ccc24
perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30017
diff
changeset
|
1080 timer, fm = gettimer(ui, opts) |
38977
a1f694779b2f
perf: call _generatechangelog() instead of group()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38969
diff
changeset
|
1081 |
a1f694779b2f
perf: call _generatechangelog() instead of group()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38969
diff
changeset
|
1082 # Terminal printing can interfere with timing. So disable it. |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1083 with ui.configoverride({(b'progress', b'disable'): True}): |
38977
a1f694779b2f
perf: call _generatechangelog() instead of group()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38969
diff
changeset
|
1084 timer(d) |
a1f694779b2f
perf: call _generatechangelog() instead of group()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38969
diff
changeset
|
1085 |
30018
bd6df07ccc24
perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30017
diff
changeset
|
1086 fm.end() |
bd6df07ccc24
perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30017
diff
changeset
|
1087 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1088 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1089 @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
|
1090 def perfdirs(ui, repo, **opts): |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
1091 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
1092 timer, fm = gettimer(ui, opts) |
18845
c1f416e4bc80
perf: add perfdirs command
Bryan O'Sullivan <bryano@fb.com>
parents:
18837
diff
changeset
|
1093 dirstate = repo.dirstate |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1094 b'a' in dirstate |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1095 |
18845
c1f416e4bc80
perf: add perfdirs command
Bryan O'Sullivan <bryano@fb.com>
parents:
18837
diff
changeset
|
1096 def d(): |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1097 dirstate.hasdir(b'a') |
35084
61888bd0b300
dirstate: add explicit methods for querying directories (API)
Mark Thomas <mbthomas@fb.com>
parents:
34750
diff
changeset
|
1098 del dirstate._map._dirs |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1099 |
18845
c1f416e4bc80
perf: add perfdirs command
Bryan O'Sullivan <bryano@fb.com>
parents:
18837
diff
changeset
|
1100 timer(d) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
1101 fm.end() |
18845
c1f416e4bc80
perf: add perfdirs command
Bryan O'Sullivan <bryano@fb.com>
parents:
18837
diff
changeset
|
1102 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1103 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1104 @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
|
1105 def perfdirstate(ui, repo, **opts): |
43121
ce315b1fc9a7
perf: document `perfdirstate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43120
diff
changeset
|
1106 """benchmap the time necessary to load a dirstate from scratch |
ce315b1fc9a7
perf: document `perfdirstate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43120
diff
changeset
|
1107 |
ce315b1fc9a7
perf: document `perfdirstate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43120
diff
changeset
|
1108 The dirstate is loaded to the point were a "contains" request can be |
ce315b1fc9a7
perf: document `perfdirstate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43120
diff
changeset
|
1109 answered. |
ce315b1fc9a7
perf: document `perfdirstate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43120
diff
changeset
|
1110 """ |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
1111 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
1112 timer, fm = gettimer(ui, opts) |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1113 b"a" in repo.dirstate |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1114 |
43122
436a6a31df38
perf: use `setup` function in `perfdirstate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43121
diff
changeset
|
1115 def setup(): |
436a6a31df38
perf: use `setup` function in `perfdirstate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43121
diff
changeset
|
1116 repo.dirstate.invalidate() |
436a6a31df38
perf: use `setup` function in `perfdirstate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43121
diff
changeset
|
1117 |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1118 def d(): |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1119 b"a" in repo.dirstate |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1120 |
43122
436a6a31df38
perf: use `setup` function in `perfdirstate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43121
diff
changeset
|
1121 timer(d, setup=setup) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
1122 fm.end() |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1123 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1124 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1125 @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
|
1126 def perfdirstatedirs(ui, repo, **opts): |
43123
69301b79fd36
perf: document `perfdirstatedirs`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43122
diff
changeset
|
1127 """benchmap a 'dirstate.hasdir' call from an empty `dirs` cache |
69301b79fd36
perf: document `perfdirstatedirs`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43122
diff
changeset
|
1128 """ |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
1129 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
1130 timer, fm = gettimer(ui, opts) |
43124
100e7e0cdaad
perf: use `setup` function in `perfdirstatedirs`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43123
diff
changeset
|
1131 repo.dirstate.hasdir(b"a") |
100e7e0cdaad
perf: use `setup` function in `perfdirstatedirs`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43123
diff
changeset
|
1132 |
100e7e0cdaad
perf: use `setup` function in `perfdirstatedirs`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43123
diff
changeset
|
1133 def setup(): |
100e7e0cdaad
perf: use `setup` function in `perfdirstatedirs`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43123
diff
changeset
|
1134 del repo.dirstate._map._dirs |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1135 |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1136 def d(): |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1137 repo.dirstate.hasdir(b"a") |
43124
100e7e0cdaad
perf: use `setup` function in `perfdirstatedirs`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43123
diff
changeset
|
1138 |
100e7e0cdaad
perf: use `setup` function in `perfdirstatedirs`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43123
diff
changeset
|
1139 timer(d, setup=setup) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
1140 fm.end() |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1141 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1142 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1143 @command(b'perfdirstatefoldmap', formatteropts) |
27095
aaf4e2d77148
contrib/perf: name functions to match decorators
timeless <timeless@mozdev.org>
parents:
27072
diff
changeset
|
1144 def perfdirstatefoldmap(ui, repo, **opts): |
43125
56494a2bfe2f
perf: document `perfdirstatefoldmap`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43124
diff
changeset
|
1145 """benchmap a `dirstate._map.filefoldmap.get()` request |
56494a2bfe2f
perf: document `perfdirstatefoldmap`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43124
diff
changeset
|
1146 |
56494a2bfe2f
perf: document `perfdirstatefoldmap`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43124
diff
changeset
|
1147 The dirstate filefoldmap cache is dropped between every request. |
56494a2bfe2f
perf: document `perfdirstatefoldmap`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43124
diff
changeset
|
1148 """ |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
1149 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
1150 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
|
1151 dirstate = repo.dirstate |
43126
e337d8247375
perf: use `setup` function in `perfdirstatefoldmap`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43125
diff
changeset
|
1152 dirstate._map.filefoldmap.get(b'a') |
e337d8247375
perf: use `setup` function in `perfdirstatefoldmap`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43125
diff
changeset
|
1153 |
e337d8247375
perf: use `setup` function in `perfdirstatefoldmap`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43125
diff
changeset
|
1154 def setup(): |
e337d8247375
perf: use `setup` function in `perfdirstatefoldmap`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43125
diff
changeset
|
1155 del dirstate._map.filefoldmap |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1156 |
22780
d8ff1f671aed
perf: add a way to measure the perf of constructing the foldmap
Siddharth Agarwal <sid0@fb.com>
parents:
20846
diff
changeset
|
1157 def d(): |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1158 dirstate._map.filefoldmap.get(b'a') |
43126
e337d8247375
perf: use `setup` function in `perfdirstatefoldmap`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43125
diff
changeset
|
1159 |
e337d8247375
perf: use `setup` function in `perfdirstatefoldmap`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43125
diff
changeset
|
1160 timer(d, setup=setup) |
24607
f5b527024fcc
perf: make measuring foldmap perf work again
Siddharth Agarwal <sid0@fb.com>
parents:
24349
diff
changeset
|
1161 fm.end() |
f5b527024fcc
perf: make measuring foldmap perf work again
Siddharth Agarwal <sid0@fb.com>
parents:
24349
diff
changeset
|
1162 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1163 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1164 @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
|
1165 def perfdirfoldmap(ui, repo, **opts): |
43127
0b32206c3c86
perf: document `perfdirfoldmap`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43126
diff
changeset
|
1166 """benchmap a `dirstate._map.dirfoldmap.get()` request |
0b32206c3c86
perf: document `perfdirfoldmap`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43126
diff
changeset
|
1167 |
0b32206c3c86
perf: document `perfdirfoldmap`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43126
diff
changeset
|
1168 The dirstate dirfoldmap cache is dropped between every request. |
0b32206c3c86
perf: document `perfdirfoldmap`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43126
diff
changeset
|
1169 """ |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
1170 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
1171 timer, fm = gettimer(ui, opts) |
24607
f5b527024fcc
perf: make measuring foldmap perf work again
Siddharth Agarwal <sid0@fb.com>
parents:
24349
diff
changeset
|
1172 dirstate = repo.dirstate |
43128
ad801d4af7cd
perf: use `setup` function in `perfdirfoldmap`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43127
diff
changeset
|
1173 dirstate._map.dirfoldmap.get(b'a') |
ad801d4af7cd
perf: use `setup` function in `perfdirfoldmap`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43127
diff
changeset
|
1174 |
ad801d4af7cd
perf: use `setup` function in `perfdirfoldmap`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43127
diff
changeset
|
1175 def setup(): |
ad801d4af7cd
perf: use `setup` function in `perfdirfoldmap`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43127
diff
changeset
|
1176 del dirstate._map.dirfoldmap |
ad801d4af7cd
perf: use `setup` function in `perfdirfoldmap`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43127
diff
changeset
|
1177 del dirstate._map._dirs |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1178 |
24607
f5b527024fcc
perf: make measuring foldmap perf work again
Siddharth Agarwal <sid0@fb.com>
parents:
24349
diff
changeset
|
1179 def d(): |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1180 dirstate._map.dirfoldmap.get(b'a') |
43128
ad801d4af7cd
perf: use `setup` function in `perfdirfoldmap`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43127
diff
changeset
|
1181 |
ad801d4af7cd
perf: use `setup` function in `perfdirfoldmap`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43127
diff
changeset
|
1182 timer(d, setup=setup) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
1183 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
|
1184 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1185 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1186 @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
|
1187 def perfdirstatewrite(ui, repo, **opts): |
43129
97f9ef777a75
perf: document `perfdirstatewrite`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43128
diff
changeset
|
1188 """benchmap the time it take to write a dirstate on disk |
97f9ef777a75
perf: document `perfdirstatewrite`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43128
diff
changeset
|
1189 """ |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
1190 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
1191 timer, fm = gettimer(ui, opts) |
16788
7e72c1609862
perf: add a perfdirstatewrite benchmark
Bryan O'Sullivan <bryano@fb.com>
parents:
16785
diff
changeset
|
1192 ds = repo.dirstate |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1193 b"a" in ds |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1194 |
16788
7e72c1609862
perf: add a perfdirstatewrite benchmark
Bryan O'Sullivan <bryano@fb.com>
parents:
16785
diff
changeset
|
1195 def d(): |
7e72c1609862
perf: add a perfdirstatewrite benchmark
Bryan O'Sullivan <bryano@fb.com>
parents:
16785
diff
changeset
|
1196 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
|
1197 ds.write(repo.currenttransaction()) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1198 |
16788
7e72c1609862
perf: add a perfdirstatewrite benchmark
Bryan O'Sullivan <bryano@fb.com>
parents:
16785
diff
changeset
|
1199 timer(d) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
1200 fm.end() |
16788
7e72c1609862
perf: add a perfdirstatewrite benchmark
Bryan O'Sullivan <bryano@fb.com>
parents:
16785
diff
changeset
|
1201 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1202 |
42383
3a3592b40a95
perf: factor selection of revisions involved in the merge out
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42382
diff
changeset
|
1203 def _getmergerevs(repo, opts): |
3a3592b40a95
perf: factor selection of revisions involved in the merge out
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42382
diff
changeset
|
1204 """parse command argument to return rev involved in merge |
3a3592b40a95
perf: factor selection of revisions involved in the merge out
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42382
diff
changeset
|
1205 |
3a3592b40a95
perf: factor selection of revisions involved in the merge out
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42382
diff
changeset
|
1206 input: options dictionnary with `rev`, `from` and `bse` |
3a3592b40a95
perf: factor selection of revisions involved in the merge out
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42382
diff
changeset
|
1207 output: (localctx, otherctx, basectx) |
3a3592b40a95
perf: factor selection of revisions involved in the merge out
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42382
diff
changeset
|
1208 """ |
42392
4372d56112c9
perf: fix some missing b prefixes
Augie Fackler <augie@google.com>
parents:
42385
diff
changeset
|
1209 if opts[b'from']: |
4372d56112c9
perf: fix some missing b prefixes
Augie Fackler <augie@google.com>
parents:
42385
diff
changeset
|
1210 fromrev = scmutil.revsingle(repo, opts[b'from']) |
42381
e3ee707d42ad
perf: add a --from flag to perfmergecalculate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42370
diff
changeset
|
1211 wctx = repo[fromrev] |
e3ee707d42ad
perf: add a --from flag to perfmergecalculate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42370
diff
changeset
|
1212 else: |
e3ee707d42ad
perf: add a --from flag to perfmergecalculate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42370
diff
changeset
|
1213 wctx = repo[None] |
e3ee707d42ad
perf: add a --from flag to perfmergecalculate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42370
diff
changeset
|
1214 # we don't want working dir files to be stat'd in the benchmark, so |
e3ee707d42ad
perf: add a --from flag to perfmergecalculate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42370
diff
changeset
|
1215 # prime that cache |
e3ee707d42ad
perf: add a --from flag to perfmergecalculate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42370
diff
changeset
|
1216 wctx.dirty() |
42392
4372d56112c9
perf: fix some missing b prefixes
Augie Fackler <augie@google.com>
parents:
42385
diff
changeset
|
1217 rctx = scmutil.revsingle(repo, opts[b'rev'], opts[b'rev']) |
4372d56112c9
perf: fix some missing b prefixes
Augie Fackler <augie@google.com>
parents:
42385
diff
changeset
|
1218 if opts[b'base']: |
4372d56112c9
perf: fix some missing b prefixes
Augie Fackler <augie@google.com>
parents:
42385
diff
changeset
|
1219 fromrev = scmutil.revsingle(repo, opts[b'base']) |
42382
f0bcbbb6541c
perf: allow to specify the base of the merge in perfmergecalculate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42381
diff
changeset
|
1220 ancestor = repo[fromrev] |
f0bcbbb6541c
perf: allow to specify the base of the merge in perfmergecalculate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42381
diff
changeset
|
1221 else: |
f0bcbbb6541c
perf: allow to specify the base of the merge in perfmergecalculate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42381
diff
changeset
|
1222 ancestor = wctx.ancestor(rctx) |
42383
3a3592b40a95
perf: factor selection of revisions involved in the merge out
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42382
diff
changeset
|
1223 return (wctx, rctx, ancestor) |
3a3592b40a95
perf: factor selection of revisions involved in the merge out
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42382
diff
changeset
|
1224 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1225 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1226 @command( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1227 b'perfmergecalculate', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1228 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1229 (b'r', b'rev', b'.', b'rev to merge against'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1230 (b'', b'from', b'', b'rev to merge from'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1231 (b'', b'base', b'', b'the revision to use as base'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1232 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1233 + formatteropts, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1234 ) |
42383
3a3592b40a95
perf: factor selection of revisions involved in the merge out
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42382
diff
changeset
|
1235 def perfmergecalculate(ui, repo, **opts): |
3a3592b40a95
perf: factor selection of revisions involved in the merge out
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42382
diff
changeset
|
1236 opts = _byteskwargs(opts) |
3a3592b40a95
perf: factor selection of revisions involved in the merge out
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42382
diff
changeset
|
1237 timer, fm = gettimer(ui, opts) |
3a3592b40a95
perf: factor selection of revisions involved in the merge out
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42382
diff
changeset
|
1238 |
3a3592b40a95
perf: factor selection of revisions involved in the merge out
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42382
diff
changeset
|
1239 wctx, rctx, ancestor = _getmergerevs(repo, opts) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1240 |
18817
c760acc6f69d
perf: add a command to measure merge.calculateupdates perf
Siddharth Agarwal <sid0@fb.com>
parents:
18644
diff
changeset
|
1241 def d(): |
c760acc6f69d
perf: add a command to measure merge.calculateupdates perf
Siddharth Agarwal <sid0@fb.com>
parents:
18644
diff
changeset
|
1242 # 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
|
1243 # our benchmark |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1244 merge.calculateupdates( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1245 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1246 wctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1247 rctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1248 [ancestor], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1249 branchmerge=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1250 force=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1251 acceptremote=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1252 followcopies=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1253 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1254 |
18817
c760acc6f69d
perf: add a command to measure merge.calculateupdates perf
Siddharth Agarwal <sid0@fb.com>
parents:
18644
diff
changeset
|
1255 timer(d) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
1256 fm.end() |
18817
c760acc6f69d
perf: add a command to measure merge.calculateupdates perf
Siddharth Agarwal <sid0@fb.com>
parents:
18644
diff
changeset
|
1257 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1258 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1259 @command( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1260 b'perfmergecopies', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1261 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1262 (b'r', b'rev', b'.', b'rev to merge against'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1263 (b'', b'from', b'', b'rev to merge from'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1264 (b'', b'base', b'', b'the revision to use as base'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1265 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1266 + formatteropts, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1267 ) |
42384
f5f0a9490c05
perf: add a new `perfmergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42383
diff
changeset
|
1268 def perfmergecopies(ui, repo, **opts): |
f5f0a9490c05
perf: add a new `perfmergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42383
diff
changeset
|
1269 """measure runtime of `copies.mergecopies`""" |
f5f0a9490c05
perf: add a new `perfmergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42383
diff
changeset
|
1270 opts = _byteskwargs(opts) |
f5f0a9490c05
perf: add a new `perfmergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42383
diff
changeset
|
1271 timer, fm = gettimer(ui, opts) |
f5f0a9490c05
perf: add a new `perfmergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42383
diff
changeset
|
1272 wctx, rctx, ancestor = _getmergerevs(repo, opts) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1273 |
42384
f5f0a9490c05
perf: add a new `perfmergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42383
diff
changeset
|
1274 def d(): |
f5f0a9490c05
perf: add a new `perfmergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42383
diff
changeset
|
1275 # acceptremote is True because we don't want prompts in the middle of |
f5f0a9490c05
perf: add a new `perfmergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42383
diff
changeset
|
1276 # our benchmark |
f5f0a9490c05
perf: add a new `perfmergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42383
diff
changeset
|
1277 copies.mergecopies(repo, wctx, rctx, ancestor) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1278 |
42384
f5f0a9490c05
perf: add a new `perfmergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42383
diff
changeset
|
1279 timer(d) |
f5f0a9490c05
perf: add a new `perfmergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42383
diff
changeset
|
1280 fm.end() |
f5f0a9490c05
perf: add a new `perfmergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42383
diff
changeset
|
1281 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1282 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1283 @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
|
1284 def perfpathcopies(ui, repo, rev1, rev2, **opts): |
40739
dc3ab5e5fe64
perf: add a docstring to `perfpathcopies`
Boris Feld <boris.feld@octobus.net>
parents:
40731
diff
changeset
|
1285 """benchmark the copy tracing logic""" |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
1286 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
1287 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
|
1288 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
|
1289 ctx2 = scmutil.revsingle(repo, rev2, rev2) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1290 |
18877
2e9fe9e2671f
perf: add a command to test copies.pathcopies perf
Siddharth Agarwal <sid0@fb.com>
parents:
18871
diff
changeset
|
1291 def d(): |
2e9fe9e2671f
perf: add a command to test copies.pathcopies perf
Siddharth Agarwal <sid0@fb.com>
parents:
18871
diff
changeset
|
1292 copies.pathcopies(ctx1, ctx2) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1293 |
18877
2e9fe9e2671f
perf: add a command to test copies.pathcopies perf
Siddharth Agarwal <sid0@fb.com>
parents:
18871
diff
changeset
|
1294 timer(d) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
1295 fm.end() |
18877
2e9fe9e2671f
perf: add a command to test copies.pathcopies perf
Siddharth Agarwal <sid0@fb.com>
parents:
18871
diff
changeset
|
1296 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1297 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1298 @command( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1299 b'perfphases', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1300 [(b'', b'full', False, b'include file reading time too'),], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1301 b"", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1302 ) |
32467
ad37c569ec81
perfphases: add 'perfphases' command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32390
diff
changeset
|
1303 def perfphases(ui, repo, **opts): |
ad37c569ec81
perfphases: add 'perfphases' command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32390
diff
changeset
|
1304 """benchmark phasesets computation""" |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
1305 opts = _byteskwargs(opts) |
32467
ad37c569ec81
perfphases: add 'perfphases' command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32390
diff
changeset
|
1306 timer, fm = gettimer(ui, opts) |
32732
e36569bd9e28
perfphases: add a flag to also include file access time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32731
diff
changeset
|
1307 _phases = repo._phasecache |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1308 full = opts.get(b'full') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1309 |
32467
ad37c569ec81
perfphases: add 'perfphases' command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32390
diff
changeset
|
1310 def d(): |
32732
e36569bd9e28
perfphases: add a flag to also include file access time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32731
diff
changeset
|
1311 phases = _phases |
e36569bd9e28
perfphases: add a flag to also include file access time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32731
diff
changeset
|
1312 if full: |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1313 clearfilecache(repo, b'_phasecache') |
32732
e36569bd9e28
perfphases: add a flag to also include file access time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32731
diff
changeset
|
1314 phases = repo._phasecache |
32467
ad37c569ec81
perfphases: add 'perfphases' command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32390
diff
changeset
|
1315 phases.invalidate() |
ad37c569ec81
perfphases: add 'perfphases' command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32390
diff
changeset
|
1316 phases.loadphaserevs(repo) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1317 |
32467
ad37c569ec81
perfphases: add 'perfphases' command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32390
diff
changeset
|
1318 timer(d) |
ad37c569ec81
perfphases: add 'perfphases' command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32390
diff
changeset
|
1319 fm.end() |
ad37c569ec81
perfphases: add 'perfphases' command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32390
diff
changeset
|
1320 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1321 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1322 @command(b'perfphasesremote', [], b"[DEST]") |
39140
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1323 def perfphasesremote(ui, repo, dest=None, **opts): |
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1324 """benchmark time needed to analyse phases of the remote server""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1325 from mercurial.node import bin |
39140
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1326 from mercurial import ( |
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1327 exchange, |
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1328 hg, |
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1329 phases, |
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1330 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1331 |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
1332 opts = _byteskwargs(opts) |
39140
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1333 timer, fm = gettimer(ui, opts) |
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1334 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1335 path = ui.paths.getpath(dest, default=(b'default-push', b'default')) |
39140
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1336 if not path: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1337 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1338 b'default repository not configured!', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1339 hint=b"see 'hg help config.paths'", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1340 ) |
39140
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1341 dest = path.pushloc or path.loc |
43080
86e4daa2d54c
cleanup: mark some ui.(status|note|warn|write) calls as not needing i18n
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1342 ui.statusnoi18n(b'analysing phase of %s\n' % util.hidepassword(dest)) |
39140
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1343 other = hg.peer(repo, opts, dest) |
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1344 |
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1345 # easier to perform discovery through the operation |
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1346 op = exchange.pushoperation(repo, other) |
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1347 exchange._pushdiscoverychangeset(op) |
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1348 |
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1349 remotesubset = op.fallbackheads |
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1350 |
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1351 with other.commandexecutor() as e: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1352 remotephases = e.callcommand( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1353 b'listkeys', {b'namespace': b'phases'} |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1354 ).result() |
39140
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1355 del other |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1356 publishing = remotephases.get(b'publishing', False) |
39140
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1357 if publishing: |
43080
86e4daa2d54c
cleanup: mark some ui.(status|note|warn|write) calls as not needing i18n
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1358 ui.statusnoi18n(b'publishing: yes\n') |
39140
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1359 else: |
43080
86e4daa2d54c
cleanup: mark some ui.(status|note|warn|write) calls as not needing i18n
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1360 ui.statusnoi18n(b'publishing: no\n') |
39140
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1361 |
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1362 nodemap = repo.changelog.nodemap |
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1363 nonpublishroots = 0 |
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1364 for nhex, phase in remotephases.iteritems(): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1365 if nhex == b'publishing': # ignore data related to publish option |
39140
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1366 continue |
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1367 node = bin(nhex) |
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1368 if node in nodemap and int(phase): |
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1369 nonpublishroots += 1 |
43080
86e4daa2d54c
cleanup: mark some ui.(status|note|warn|write) calls as not needing i18n
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1370 ui.statusnoi18n(b'number of roots: %d\n' % len(remotephases)) |
86e4daa2d54c
cleanup: mark some ui.(status|note|warn|write) calls as not needing i18n
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1371 ui.statusnoi18n(b'number of known non public roots: %d\n' % nonpublishroots) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1372 |
39140
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1373 def d(): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1374 phases.remotephasessummary(repo, remotesubset, remotephases) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1375 |
39140
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1376 timer(d) |
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1377 fm.end() |
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1378 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1379 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1380 @command( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1381 b'perfmanifest', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1382 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1383 (b'm', b'manifest-rev', False, b'Look up a manifest node revision'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1384 (b'', b'clear-disk', False, b'clear on-disk caches too'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1385 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1386 + formatteropts, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1387 b'REV|NODE', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1388 ) |
38780
ddb15a83ae0b
debug: allow specifying a manifest node rather than a revision
Martijn Pieters <mj@zopatista.com>
parents:
38778
diff
changeset
|
1389 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:
38273
diff
changeset
|
1390 """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:
38273
diff
changeset
|
1391 dict-like object |
9b6a708f2263
perf: document the perfmanifest command
Boris Feld <boris.feld@octobus.net>
parents:
38273
diff
changeset
|
1392 |
9b6a708f2263
perf: document the perfmanifest command
Boris Feld <boris.feld@octobus.net>
parents:
38273
diff
changeset
|
1393 Manifest caches are cleared before retrieval.""" |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
1394 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
1395 timer, fm = gettimer(ui, opts) |
38780
ddb15a83ae0b
debug: allow specifying a manifest node rather than a revision
Martijn Pieters <mj@zopatista.com>
parents:
38778
diff
changeset
|
1396 if not manifest_rev: |
ddb15a83ae0b
debug: allow specifying a manifest node rather than a revision
Martijn Pieters <mj@zopatista.com>
parents:
38778
diff
changeset
|
1397 ctx = scmutil.revsingle(repo, rev, rev) |
ddb15a83ae0b
debug: allow specifying a manifest node rather than a revision
Martijn Pieters <mj@zopatista.com>
parents:
38778
diff
changeset
|
1398 t = ctx.manifestnode() |
ddb15a83ae0b
debug: allow specifying a manifest node rather than a revision
Martijn Pieters <mj@zopatista.com>
parents:
38778
diff
changeset
|
1399 else: |
39318
c03c5f528e9b
perf: use storage API for resolving manifest node
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39194
diff
changeset
|
1400 from mercurial.node import bin |
c03c5f528e9b
perf: use storage API for resolving manifest node
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39194
diff
changeset
|
1401 |
c03c5f528e9b
perf: use storage API for resolving manifest node
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39194
diff
changeset
|
1402 if len(rev) == 40: |
c03c5f528e9b
perf: use storage API for resolving manifest node
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39194
diff
changeset
|
1403 t = bin(rev) |
c03c5f528e9b
perf: use storage API for resolving manifest node
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39194
diff
changeset
|
1404 else: |
c03c5f528e9b
perf: use storage API for resolving manifest node
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39194
diff
changeset
|
1405 try: |
c03c5f528e9b
perf: use storage API for resolving manifest node
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39194
diff
changeset
|
1406 rev = int(rev) |
c03c5f528e9b
perf: use storage API for resolving manifest node
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39194
diff
changeset
|
1407 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1408 if util.safehasattr(repo.manifestlog, b'getstorage'): |
39318
c03c5f528e9b
perf: use storage API for resolving manifest node
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39194
diff
changeset
|
1409 t = repo.manifestlog.getstorage(b'').node(rev) |
c03c5f528e9b
perf: use storage API for resolving manifest node
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39194
diff
changeset
|
1410 else: |
c03c5f528e9b
perf: use storage API for resolving manifest node
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39194
diff
changeset
|
1411 t = repo.manifestlog._revlog.lookup(rev) |
c03c5f528e9b
perf: use storage API for resolving manifest node
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39194
diff
changeset
|
1412 except ValueError: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1413 raise error.Abort( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43080
diff
changeset
|
1414 b'manifest revision must be integer or full node' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1415 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1416 |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1417 def d(): |
38781
0a57945aaf7f
manifest: persist the manifestfulltext cache
Martijn Pieters <mj@zopatista.com>
parents:
38780
diff
changeset
|
1418 repo.manifestlog.clearcaches(clear_persisted_data=clear_disk) |
30369
d79c141fdf41
manifest: remove usages of manifest.read
Durham Goode <durham@fb.com>
parents:
30337
diff
changeset
|
1419 repo.manifestlog[t].read() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1420 |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1421 timer(d) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
1422 fm.end() |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1423 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1424 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1425 @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
|
1426 def perfchangeset(ui, repo, rev, **opts): |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
1427 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
1428 timer, fm = gettimer(ui, opts) |
37355
5bcd5859b505
perf: make perfmanifest and perfnodelookup work with revsets
Martin von Zweigbergk <martinvonz@google.com>
parents:
37269
diff
changeset
|
1429 n = scmutil.revsingle(repo, rev).node() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1430 |
16262
bf7a6c3b2a4a
perf: add perfchangeset to time changeset parsing
Matt Mackall <mpm@selenic.com>
parents:
16260
diff
changeset
|
1431 def d(): |
19378
9de689d20230
cleanup: drop unused variables and an unused import
Simon Heimberg <simohe@besonet.ch>
parents:
19322
diff
changeset
|
1432 repo.changelog.read(n) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1433 # repo.changelog._cache = None |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1434 |
16262
bf7a6c3b2a4a
perf: add perfchangeset to time changeset parsing
Matt Mackall <mpm@selenic.com>
parents:
16260
diff
changeset
|
1435 timer(d) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
1436 fm.end() |
16262
bf7a6c3b2a4a
perf: add perfchangeset to time changeset parsing
Matt Mackall <mpm@selenic.com>
parents:
16260
diff
changeset
|
1437 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1438 |
40750
45a0047c0ebc
perf: add a perfignore command
Boris Feld <boris.feld@octobus.net>
parents:
40747
diff
changeset
|
1439 @command(b'perfignore', formatteropts) |
45a0047c0ebc
perf: add a perfignore command
Boris Feld <boris.feld@octobus.net>
parents:
40747
diff
changeset
|
1440 def perfignore(ui, repo, **opts): |
45a0047c0ebc
perf: add a perfignore command
Boris Feld <boris.feld@octobus.net>
parents:
40747
diff
changeset
|
1441 """benchmark operation related to computing ignore""" |
45a0047c0ebc
perf: add a perfignore command
Boris Feld <boris.feld@octobus.net>
parents:
40747
diff
changeset
|
1442 opts = _byteskwargs(opts) |
45a0047c0ebc
perf: add a perfignore command
Boris Feld <boris.feld@octobus.net>
parents:
40747
diff
changeset
|
1443 timer, fm = gettimer(ui, opts) |
45a0047c0ebc
perf: add a perfignore command
Boris Feld <boris.feld@octobus.net>
parents:
40747
diff
changeset
|
1444 dirstate = repo.dirstate |
45a0047c0ebc
perf: add a perfignore command
Boris Feld <boris.feld@octobus.net>
parents:
40747
diff
changeset
|
1445 |
45a0047c0ebc
perf: add a perfignore command
Boris Feld <boris.feld@octobus.net>
parents:
40747
diff
changeset
|
1446 def setupone(): |
45a0047c0ebc
perf: add a perfignore command
Boris Feld <boris.feld@octobus.net>
parents:
40747
diff
changeset
|
1447 dirstate.invalidate() |
45a0047c0ebc
perf: add a perfignore command
Boris Feld <boris.feld@octobus.net>
parents:
40747
diff
changeset
|
1448 clearfilecache(dirstate, b'_ignore') |
45a0047c0ebc
perf: add a perfignore command
Boris Feld <boris.feld@octobus.net>
parents:
40747
diff
changeset
|
1449 |
45a0047c0ebc
perf: add a perfignore command
Boris Feld <boris.feld@octobus.net>
parents:
40747
diff
changeset
|
1450 def runone(): |
45a0047c0ebc
perf: add a perfignore command
Boris Feld <boris.feld@octobus.net>
parents:
40747
diff
changeset
|
1451 dirstate._ignore |
45a0047c0ebc
perf: add a perfignore command
Boris Feld <boris.feld@octobus.net>
parents:
40747
diff
changeset
|
1452 |
45a0047c0ebc
perf: add a perfignore command
Boris Feld <boris.feld@octobus.net>
parents:
40747
diff
changeset
|
1453 timer(runone, setup=setupone, title=b"load") |
45a0047c0ebc
perf: add a perfignore command
Boris Feld <boris.feld@octobus.net>
parents:
40747
diff
changeset
|
1454 fm.end() |
45a0047c0ebc
perf: add a perfignore command
Boris Feld <boris.feld@octobus.net>
parents:
40747
diff
changeset
|
1455 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1456 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1457 @command( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1458 b'perfindex', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1459 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1460 (b'', b'rev', [], b'revision to be looked up (default tip)'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1461 (b'', b'no-lookup', None, b'do not revision lookup post creation'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1462 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1463 + formatteropts, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1464 ) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
1465 def perfindex(ui, repo, **opts): |
41437
d65ba1ff4559
perf: add some documentation to perfindex
Boris Feld <boris.feld@octobus.net>
parents:
41436
diff
changeset
|
1466 """benchmark index creation time followed by a lookup |
d65ba1ff4559
perf: add some documentation to perfindex
Boris Feld <boris.feld@octobus.net>
parents:
41436
diff
changeset
|
1467 |
d65ba1ff4559
perf: add some documentation to perfindex
Boris Feld <boris.feld@octobus.net>
parents:
41436
diff
changeset
|
1468 The default is to look `tip` up. Depending on the index implementation, |
d65ba1ff4559
perf: add some documentation to perfindex
Boris Feld <boris.feld@octobus.net>
parents:
41436
diff
changeset
|
1469 the revision looked up can matters. For example, an implementation |
d65ba1ff4559
perf: add some documentation to perfindex
Boris Feld <boris.feld@octobus.net>
parents:
41436
diff
changeset
|
1470 scanning the index will have a faster lookup time for `--rev tip` than for |
41439
7eb7637e34bf
perf: support looking up multiple revisions
Boris Feld <boris.feld@octobus.net>
parents:
41438
diff
changeset
|
1471 `--rev 0`. The number of looked up revisions and their order can also |
7eb7637e34bf
perf: support looking up multiple revisions
Boris Feld <boris.feld@octobus.net>
parents:
41438
diff
changeset
|
1472 matters. |
7eb7637e34bf
perf: support looking up multiple revisions
Boris Feld <boris.feld@octobus.net>
parents:
41438
diff
changeset
|
1473 |
7eb7637e34bf
perf: support looking up multiple revisions
Boris Feld <boris.feld@octobus.net>
parents:
41438
diff
changeset
|
1474 Example of useful set to test: |
7eb7637e34bf
perf: support looking up multiple revisions
Boris Feld <boris.feld@octobus.net>
parents:
41438
diff
changeset
|
1475 * tip |
7eb7637e34bf
perf: support looking up multiple revisions
Boris Feld <boris.feld@octobus.net>
parents:
41438
diff
changeset
|
1476 * 0 |
7eb7637e34bf
perf: support looking up multiple revisions
Boris Feld <boris.feld@octobus.net>
parents:
41438
diff
changeset
|
1477 * -10: |
7eb7637e34bf
perf: support looking up multiple revisions
Boris Feld <boris.feld@octobus.net>
parents:
41438
diff
changeset
|
1478 * :10 |
7eb7637e34bf
perf: support looking up multiple revisions
Boris Feld <boris.feld@octobus.net>
parents:
41438
diff
changeset
|
1479 * -10: + :10 |
7eb7637e34bf
perf: support looking up multiple revisions
Boris Feld <boris.feld@octobus.net>
parents:
41438
diff
changeset
|
1480 * :10: + -10: |
7eb7637e34bf
perf: support looking up multiple revisions
Boris Feld <boris.feld@octobus.net>
parents:
41438
diff
changeset
|
1481 * -10000: |
7eb7637e34bf
perf: support looking up multiple revisions
Boris Feld <boris.feld@octobus.net>
parents:
41438
diff
changeset
|
1482 * -10000: + 0 |
41437
d65ba1ff4559
perf: add some documentation to perfindex
Boris Feld <boris.feld@octobus.net>
parents:
41436
diff
changeset
|
1483 |
41469
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1484 It is not currently possible to check for lookup of a missing node. For |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1485 deeper lookup benchmarking, checkout the `perfnodemap` command.""" |
13255
2696730ca233
perf: make perfindex results useful on hg with lazyparser
Matt Mackall <mpm@selenic.com>
parents:
13254
diff
changeset
|
1486 import mercurial.revlog |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1487 |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
1488 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
1489 timer, fm = gettimer(ui, opts) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1490 mercurial.revlog._prereadsize = 2 ** 24 # disable lazy parser in old hg |
41438
e9891c734bf8
perf: add a no-lookup variant to perfindex
Boris Feld <boris.feld@octobus.net>
parents:
41437
diff
changeset
|
1491 if opts[b'no_lookup']: |
41439
7eb7637e34bf
perf: support looking up multiple revisions
Boris Feld <boris.feld@octobus.net>
parents:
41438
diff
changeset
|
1492 if opts['rev']: |
7eb7637e34bf
perf: support looking up multiple revisions
Boris Feld <boris.feld@octobus.net>
parents:
41438
diff
changeset
|
1493 raise error.Abort('--no-lookup and --rev are mutually exclusive') |
7eb7637e34bf
perf: support looking up multiple revisions
Boris Feld <boris.feld@octobus.net>
parents:
41438
diff
changeset
|
1494 nodes = [] |
7eb7637e34bf
perf: support looking up multiple revisions
Boris Feld <boris.feld@octobus.net>
parents:
41438
diff
changeset
|
1495 elif not opts[b'rev']: |
7eb7637e34bf
perf: support looking up multiple revisions
Boris Feld <boris.feld@octobus.net>
parents:
41438
diff
changeset
|
1496 nodes = [repo[b"tip"].node()] |
40784
a0f2641ddd61
perf: add a --rev attribute to perfindex
Boris Feld <boris.feld@octobus.net>
parents:
40783
diff
changeset
|
1497 else: |
41439
7eb7637e34bf
perf: support looking up multiple revisions
Boris Feld <boris.feld@octobus.net>
parents:
41438
diff
changeset
|
1498 revs = scmutil.revrange(repo, opts[b'rev']) |
7eb7637e34bf
perf: support looking up multiple revisions
Boris Feld <boris.feld@octobus.net>
parents:
41438
diff
changeset
|
1499 cl = repo.changelog |
7eb7637e34bf
perf: support looking up multiple revisions
Boris Feld <boris.feld@octobus.net>
parents:
41438
diff
changeset
|
1500 nodes = [cl.node(r) for r in revs] |
40783
e207f0d6c243
perf: update perfindex to be more realistic
Boris Feld <boris.feld@octobus.net>
parents:
40772
diff
changeset
|
1501 |
e207f0d6c243
perf: update perfindex to be more realistic
Boris Feld <boris.feld@octobus.net>
parents:
40772
diff
changeset
|
1502 unfi = repo.unfiltered() |
e207f0d6c243
perf: update perfindex to be more realistic
Boris Feld <boris.feld@octobus.net>
parents:
40772
diff
changeset
|
1503 # find the filecache func directly |
e207f0d6c243
perf: update perfindex to be more realistic
Boris Feld <boris.feld@octobus.net>
parents:
40772
diff
changeset
|
1504 # This avoid polluting the benchmark with the filecache logic |
e207f0d6c243
perf: update perfindex to be more realistic
Boris Feld <boris.feld@octobus.net>
parents:
40772
diff
changeset
|
1505 makecl = unfi.__class__.changelog.func |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1506 |
40783
e207f0d6c243
perf: update perfindex to be more realistic
Boris Feld <boris.feld@octobus.net>
parents:
40772
diff
changeset
|
1507 def setup(): |
e207f0d6c243
perf: update perfindex to be more realistic
Boris Feld <boris.feld@octobus.net>
parents:
40772
diff
changeset
|
1508 # probably not necessary, but for good measure |
e207f0d6c243
perf: update perfindex to be more realistic
Boris Feld <boris.feld@octobus.net>
parents:
40772
diff
changeset
|
1509 clearchangelog(unfi) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1510 |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1511 def d(): |
40783
e207f0d6c243
perf: update perfindex to be more realistic
Boris Feld <boris.feld@octobus.net>
parents:
40772
diff
changeset
|
1512 cl = makecl(unfi) |
41439
7eb7637e34bf
perf: support looking up multiple revisions
Boris Feld <boris.feld@octobus.net>
parents:
41438
diff
changeset
|
1513 for n in nodes: |
41438
e9891c734bf8
perf: add a no-lookup variant to perfindex
Boris Feld <boris.feld@octobus.net>
parents:
41437
diff
changeset
|
1514 cl.rev(n) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1515 |
40783
e207f0d6c243
perf: update perfindex to be more realistic
Boris Feld <boris.feld@octobus.net>
parents:
40772
diff
changeset
|
1516 timer(d, setup=setup) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
1517 fm.end() |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1518 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1519 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1520 @command( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1521 b'perfnodemap', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1522 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1523 (b'', b'rev', [], b'revision to be looked up (default tip)'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1524 (b'', b'clear-caches', True, b'clear revlog cache between calls'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1525 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1526 + formatteropts, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1527 ) |
41469
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1528 def perfnodemap(ui, repo, **opts): |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1529 """benchmark the time necessary to look up revision from a cold nodemap |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1530 |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1531 Depending on the implementation, the amount and order of revision we look |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1532 up can varies. Example of useful set to test: |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1533 * tip |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1534 * 0 |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1535 * -10: |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1536 * :10 |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1537 * -10: + :10 |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1538 * :10: + -10: |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1539 * -10000: |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1540 * -10000: + 0 |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1541 |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1542 The command currently focus on valid binary lookup. Benchmarking for |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1543 hexlookup, prefix lookup and missing lookup would also be valuable. |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1544 """ |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1545 import mercurial.revlog |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1546 |
41469
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1547 opts = _byteskwargs(opts) |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1548 timer, fm = gettimer(ui, opts) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1549 mercurial.revlog._prereadsize = 2 ** 24 # disable lazy parser in old hg |
41469
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1550 |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1551 unfi = repo.unfiltered() |
41470
d1a273074f62
perf: add a --[no-]clear-caches option to `perfnodemap`
Boris Feld <boris.feld@octobus.net>
parents:
41469
diff
changeset
|
1552 clearcaches = opts['clear_caches'] |
41469
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1553 # find the filecache func directly |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1554 # This avoid polluting the benchmark with the filecache logic |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1555 makecl = unfi.__class__.changelog.func |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1556 if not opts[b'rev']: |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1557 raise error.Abort('use --rev to specify revisions to look up') |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1558 revs = scmutil.revrange(repo, opts[b'rev']) |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1559 cl = repo.changelog |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1560 nodes = [cl.node(r) for r in revs] |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1561 |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1562 # use a list to pass reference to a nodemap from one closure to the next |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1563 nodeget = [None] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1564 |
41469
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1565 def setnodeget(): |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1566 # probably not necessary, but for good measure |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1567 clearchangelog(unfi) |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1568 nodeget[0] = makecl(unfi).nodemap.get |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1569 |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1570 def d(): |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1571 get = nodeget[0] |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1572 for n in nodes: |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1573 get(n) |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1574 |
41470
d1a273074f62
perf: add a --[no-]clear-caches option to `perfnodemap`
Boris Feld <boris.feld@octobus.net>
parents:
41469
diff
changeset
|
1575 setup = None |
d1a273074f62
perf: add a --[no-]clear-caches option to `perfnodemap`
Boris Feld <boris.feld@octobus.net>
parents:
41469
diff
changeset
|
1576 if clearcaches: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1577 |
41470
d1a273074f62
perf: add a --[no-]clear-caches option to `perfnodemap`
Boris Feld <boris.feld@octobus.net>
parents:
41469
diff
changeset
|
1578 def setup(): |
d1a273074f62
perf: add a --[no-]clear-caches option to `perfnodemap`
Boris Feld <boris.feld@octobus.net>
parents:
41469
diff
changeset
|
1579 setnodeget() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1580 |
41470
d1a273074f62
perf: add a --[no-]clear-caches option to `perfnodemap`
Boris Feld <boris.feld@octobus.net>
parents:
41469
diff
changeset
|
1581 else: |
d1a273074f62
perf: add a --[no-]clear-caches option to `perfnodemap`
Boris Feld <boris.feld@octobus.net>
parents:
41469
diff
changeset
|
1582 setnodeget() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1583 d() # prewarm the data structure |
41469
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1584 timer(d, setup=setup) |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1585 fm.end() |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1586 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1587 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1588 @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
|
1589 def perfstartup(ui, repo, **opts): |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
1590 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
1591 timer, fm = gettimer(ui, opts) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1592 |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1593 def d(): |
39824
db875f97a969
py3: un-byteify strings around os.system() and os.devnull in contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39823
diff
changeset
|
1594 if os.name != r'nt': |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1595 os.system( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1596 b"HGRCPATH= %s version -q > /dev/null" % fsencode(sys.argv[0]) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1597 ) |
27382
de7bcbc68042
perf: adjust perfstartup() for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
27345
diff
changeset
|
1598 else: |
39824
db875f97a969
py3: un-byteify strings around os.system() and os.devnull in contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39823
diff
changeset
|
1599 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
|
1600 os.system(r"%s version -q > NUL" % sys.argv[0]) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1601 |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1602 timer(d) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
1603 fm.end() |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1604 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1605 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1606 @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
|
1607 def perfparents(ui, repo, **opts): |
42016
b900b392c1cc
perf: document perfparents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42015
diff
changeset
|
1608 """benchmark the time necessary to fetch one changeset's parents. |
b900b392c1cc
perf: document perfparents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42015
diff
changeset
|
1609 |
42021
4c700c847aa2
perf: copyedit a few documentation strings
Augie Fackler <augie@google.com>
parents:
42019
diff
changeset
|
1610 The fetch is done using the `node identifier`, traversing all object layers |
4c700c847aa2
perf: copyedit a few documentation strings
Augie Fackler <augie@google.com>
parents:
42019
diff
changeset
|
1611 from the repository object. The first N revisions will be used for this |
42016
b900b392c1cc
perf: document perfparents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42015
diff
changeset
|
1612 benchmark. N is controlled by the ``perf.parentscount`` config option |
b900b392c1cc
perf: document perfparents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42015
diff
changeset
|
1613 (default: 1000). |
b900b392c1cc
perf: document perfparents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42015
diff
changeset
|
1614 """ |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
1615 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
1616 timer, fm = gettimer(ui, opts) |
27305
5831cfbf0e33
perf: perfparents honor config perf.parentscount
timeless <timeless@mozdev.org>
parents:
27304
diff
changeset
|
1617 # control the number of commits perfparents iterates over |
5831cfbf0e33
perf: perfparents honor config perf.parentscount
timeless <timeless@mozdev.org>
parents:
27304
diff
changeset
|
1618 # experimental config: perf.parentscount |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1619 count = getint(ui, b"perf", b"parentscount", 1000) |
27305
5831cfbf0e33
perf: perfparents honor config perf.parentscount
timeless <timeless@mozdev.org>
parents:
27304
diff
changeset
|
1620 if len(repo.changelog) < count: |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1621 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
|
1622 repo = repo.unfiltered() |
39822
86dbeb7c9a11
py3: switch contrib/perf from xrange to pycompat.xrange
Matt Harbison <matt_harbison@yahoo.com>
parents:
39821
diff
changeset
|
1623 nl = [repo.changelog.node(i) for i in _xrange(count)] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1624 |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1625 def d(): |
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1626 for n in nl: |
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1627 repo.changelog.parents(n) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1628 |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1629 timer(d) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
1630 fm.end() |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1631 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1632 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1633 @command(b'perfctxfiles', formatteropts) |
27095
aaf4e2d77148
contrib/perf: name functions to match decorators
timeless <timeless@mozdev.org>
parents:
27072
diff
changeset
|
1634 def perfctxfiles(ui, repo, x, **opts): |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
1635 opts = _byteskwargs(opts) |
24349
389693a245fa
perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents:
23878
diff
changeset
|
1636 x = int(x) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
1637 timer, fm = gettimer(ui, opts) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1638 |
24349
389693a245fa
perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents:
23878
diff
changeset
|
1639 def d(): |
389693a245fa
perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents:
23878
diff
changeset
|
1640 len(repo[x].files()) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1641 |
24349
389693a245fa
perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents:
23878
diff
changeset
|
1642 timer(d) |
389693a245fa
perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents:
23878
diff
changeset
|
1643 fm.end() |
389693a245fa
perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents:
23878
diff
changeset
|
1644 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1645 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1646 @command(b'perfrawfiles', formatteropts) |
27095
aaf4e2d77148
contrib/perf: name functions to match decorators
timeless <timeless@mozdev.org>
parents:
27072
diff
changeset
|
1647 def perfrawfiles(ui, repo, x, **opts): |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
1648 opts = _byteskwargs(opts) |
24349
389693a245fa
perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents:
23878
diff
changeset
|
1649 x = int(x) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
1650 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
|
1651 cl = repo.changelog |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1652 |
24349
389693a245fa
perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents:
23878
diff
changeset
|
1653 def d(): |
389693a245fa
perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents:
23878
diff
changeset
|
1654 len(cl.read(x)[3]) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1655 |
24349
389693a245fa
perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents:
23878
diff
changeset
|
1656 timer(d) |
389693a245fa
perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents:
23878
diff
changeset
|
1657 fm.end() |
389693a245fa
perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents:
23878
diff
changeset
|
1658 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1659 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1660 @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
|
1661 def perflookup(ui, repo, rev, **opts): |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
1662 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
1663 timer, fm = gettimer(ui, opts) |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1664 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
|
1665 fm.end() |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1666 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1667 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1668 @command( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1669 b'perflinelogedits', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1670 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1671 (b'n', b'edits', 10000, b'number of edits'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1672 (b'', b'max-hunk-lines', 10, b'max lines in a hunk'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1673 ], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1674 norepo=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1675 ) |
38969
1601afbb573c
perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents:
38781
diff
changeset
|
1676 def perflinelogedits(ui, **opts): |
1601afbb573c
perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents:
38781
diff
changeset
|
1677 from mercurial import linelog |
1601afbb573c
perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents:
38781
diff
changeset
|
1678 |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
1679 opts = _byteskwargs(opts) |
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
1680 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1681 edits = opts[b'edits'] |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1682 maxhunklines = opts[b'max_hunk_lines'] |
38969
1601afbb573c
perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents:
38781
diff
changeset
|
1683 |
1601afbb573c
perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents:
38781
diff
changeset
|
1684 maxb1 = 100000 |
1601afbb573c
perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents:
38781
diff
changeset
|
1685 random.seed(0) |
1601afbb573c
perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents:
38781
diff
changeset
|
1686 randint = random.randint |
1601afbb573c
perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents:
38781
diff
changeset
|
1687 currentlines = 0 |
1601afbb573c
perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents:
38781
diff
changeset
|
1688 arglist = [] |
39822
86dbeb7c9a11
py3: switch contrib/perf from xrange to pycompat.xrange
Matt Harbison <matt_harbison@yahoo.com>
parents:
39821
diff
changeset
|
1689 for rev in _xrange(edits): |
38969
1601afbb573c
perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents:
38781
diff
changeset
|
1690 a1 = randint(0, currentlines) |
1601afbb573c
perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents:
38781
diff
changeset
|
1691 a2 = randint(a1, min(currentlines, a1 + maxhunklines)) |
1601afbb573c
perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents:
38781
diff
changeset
|
1692 b1 = randint(0, maxb1) |
1601afbb573c
perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents:
38781
diff
changeset
|
1693 b2 = randint(b1, b1 + maxhunklines) |
1601afbb573c
perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents:
38781
diff
changeset
|
1694 currentlines += (b2 - b1) - (a2 - a1) |
1601afbb573c
perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents:
38781
diff
changeset
|
1695 arglist.append((rev, a1, a2, b1, b2)) |
1601afbb573c
perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents:
38781
diff
changeset
|
1696 |
1601afbb573c
perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents:
38781
diff
changeset
|
1697 def d(): |
1601afbb573c
perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents:
38781
diff
changeset
|
1698 ll = linelog.linelog() |
1601afbb573c
perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents:
38781
diff
changeset
|
1699 for args in arglist: |
1601afbb573c
perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents:
38781
diff
changeset
|
1700 ll.replacelines(*args) |
1601afbb573c
perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents:
38781
diff
changeset
|
1701 |
1601afbb573c
perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents:
38781
diff
changeset
|
1702 timer, fm = gettimer(ui, opts) |
1601afbb573c
perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents:
38781
diff
changeset
|
1703 timer(d) |
1601afbb573c
perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents:
38781
diff
changeset
|
1704 fm.end() |
1601afbb573c
perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents:
38781
diff
changeset
|
1705 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1706 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1707 @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
|
1708 def perfrevrange(ui, repo, *specs, **opts): |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
1709 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
1710 timer, fm = gettimer(ui, opts) |
16858
fdf99e0f60f3
perf: add a benchmark for revrange
Bryan O'Sullivan <bryano@fb.com>
parents:
16802
diff
changeset
|
1711 revrange = scmutil.revrange |
fdf99e0f60f3
perf: add a benchmark for revrange
Bryan O'Sullivan <bryano@fb.com>
parents:
16802
diff
changeset
|
1712 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
|
1713 fm.end() |
16858
fdf99e0f60f3
perf: add a benchmark for revrange
Bryan O'Sullivan <bryano@fb.com>
parents:
16802
diff
changeset
|
1714 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1715 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1716 @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
|
1717 def perfnodelookup(ui, repo, rev, **opts): |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
1718 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
1719 timer, fm = gettimer(ui, opts) |
16309 | 1720 import mercurial.revlog |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1721 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1722 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:
37269
diff
changeset
|
1723 n = scmutil.revsingle(repo, rev).node() |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1724 cl = mercurial.revlog.revlog(getsvfs(repo), b"00changelog.i") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1725 |
16414
e8d37b78acfb
parsers: use base-16 trie for faster node->rev mapping
Bryan O'Sullivan <bryano@fb.com>
parents:
16403
diff
changeset
|
1726 def d(): |
e8d37b78acfb
parsers: use base-16 trie for faster node->rev mapping
Bryan O'Sullivan <bryano@fb.com>
parents:
16403
diff
changeset
|
1727 cl.rev(n) |
16785
1dc08dc63c09
perf: rework perfheads and perftags to clear caches
Bryan O'Sullivan <bryano@fb.com>
parents:
16689
diff
changeset
|
1728 clearcaches(cl) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1729 |
16414
e8d37b78acfb
parsers: use base-16 trie for faster node->rev mapping
Bryan O'Sullivan <bryano@fb.com>
parents:
16403
diff
changeset
|
1730 timer(d) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
1731 fm.end() |
16414
e8d37b78acfb
parsers: use base-16 trie for faster node->rev mapping
Bryan O'Sullivan <bryano@fb.com>
parents:
16403
diff
changeset
|
1732 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1733 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1734 @command( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1735 b'perflog', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1736 [(b'', b'rename', False, b'ask log to follow renames')] + formatteropts, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1737 ) |
27306
bafb1235f505
perf: add optional rev for perflog and perftemplating
timeless <timeless@mozdev.org>
parents:
27305
diff
changeset
|
1738 def perflog(ui, repo, rev=None, **opts): |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
1739 opts = _byteskwargs(opts) |
27306
bafb1235f505
perf: add optional rev for perflog and perftemplating
timeless <timeless@mozdev.org>
parents:
27305
diff
changeset
|
1740 if rev is None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1741 rev = [] |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
1742 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
|
1743 ui.pushbuffer() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1744 timer( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1745 lambda: commands.log( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1746 ui, repo, rev=rev, date=b'', user=b'', copies=opts.get(b'rename') |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1747 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1748 ) |
7872
f680a1bd679b
contrib: add perflog and perftemplating commands to perf extension
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7366
diff
changeset
|
1749 ui.popbuffer() |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
1750 fm.end() |
7872
f680a1bd679b
contrib: add perflog and perftemplating commands to perf extension
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7366
diff
changeset
|
1751 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1752 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1753 @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
|
1754 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
|
1755 """benchmark walking the changelog backwards |
74aea4be8e78
perf: add perfmoonwalk command to walk the changelog backwards
Brodie Rao <brodie@sf.io>
parents:
20032
diff
changeset
|
1756 |
74aea4be8e78
perf: add perfmoonwalk command to walk the changelog backwards
Brodie Rao <brodie@sf.io>
parents:
20032
diff
changeset
|
1757 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
|
1758 """ |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
1759 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
1760 timer, fm = gettimer(ui, opts) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1761 |
20178
74aea4be8e78
perf: add perfmoonwalk command to walk the changelog backwards
Brodie Rao <brodie@sf.io>
parents:
20032
diff
changeset
|
1762 def moonwalk(): |
38778
a4d847cea6f8
perfmoonwalk: make work with filtered repo
Martin von Zweigbergk <martinvonz@google.com>
parents:
38695
diff
changeset
|
1763 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
|
1764 ctx = repo[i] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1765 ctx.branch() # read changelog data (in addition to the index) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1766 |
20178
74aea4be8e78
perf: add perfmoonwalk command to walk the changelog backwards
Brodie Rao <brodie@sf.io>
parents:
20032
diff
changeset
|
1767 timer(moonwalk) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
1768 fm.end() |
20178
74aea4be8e78
perf: add perfmoonwalk command to walk the changelog backwards
Brodie Rao <brodie@sf.io>
parents:
20032
diff
changeset
|
1769 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1770 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1771 @command( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1772 b'perftemplating', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1773 [(b'r', b'rev', [], b'revisions to run the template on'),] + formatteropts, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1774 ) |
38258
ae6e02fcee24
perftemplating: allow to specify the template to test
Boris Feld <boris.feld@octobus.net>
parents:
38257
diff
changeset
|
1775 def perftemplating(ui, repo, testedtemplate=None, **opts): |
ae6e02fcee24
perftemplating: allow to specify the template to test
Boris Feld <boris.feld@octobus.net>
parents:
38257
diff
changeset
|
1776 """test the rendering time of a given template""" |
38257
a577a199983c
perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents:
38256
diff
changeset
|
1777 if makelogtemplater is None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1778 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1779 b"perftemplating not available with this Mercurial", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1780 hint=b"use 4.3 or later", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1781 ) |
38257
a577a199983c
perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents:
38256
diff
changeset
|
1782 |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
1783 opts = _byteskwargs(opts) |
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
1784 |
38255
71d59b487d0c
perftemplating: drop usage of buffer
Boris Feld <boris.feld@octobus.net>
parents:
38254
diff
changeset
|
1785 nullui = ui.copy() |
39824
db875f97a969
py3: un-byteify strings around os.system() and os.devnull in contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39823
diff
changeset
|
1786 nullui.fout = open(os.devnull, r'wb') |
38255
71d59b487d0c
perftemplating: drop usage of buffer
Boris Feld <boris.feld@octobus.net>
parents:
38254
diff
changeset
|
1787 nullui.disablepager() |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1788 revs = opts.get(b'rev') |
38257
a577a199983c
perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents:
38256
diff
changeset
|
1789 if not revs: |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1790 revs = [b'all()'] |
38257
a577a199983c
perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents:
38256
diff
changeset
|
1791 revs = list(scmutil.revrange(repo, revs)) |
a577a199983c
perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents:
38256
diff
changeset
|
1792 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1793 defaulttemplate = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1794 b'{date|shortdate} [{rev}:{node|short}]' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1795 b' {author|person}: {desc|firstline}\n' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1796 ) |
38258
ae6e02fcee24
perftemplating: allow to specify the template to test
Boris Feld <boris.feld@octobus.net>
parents:
38257
diff
changeset
|
1797 if testedtemplate is None: |
ae6e02fcee24
perftemplating: allow to specify the template to test
Boris Feld <boris.feld@octobus.net>
parents:
38257
diff
changeset
|
1798 testedtemplate = defaulttemplate |
ae6e02fcee24
perftemplating: allow to specify the template to test
Boris Feld <boris.feld@octobus.net>
parents:
38257
diff
changeset
|
1799 displayer = makelogtemplater(nullui, repo, testedtemplate) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1800 |
38254
6b91815fcdce
perftemplating: move template formating into its own function
Boris Feld <boris.feld@octobus.net>
parents:
38253
diff
changeset
|
1801 def format(): |
38257
a577a199983c
perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents:
38256
diff
changeset
|
1802 for r in revs: |
a577a199983c
perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents:
38256
diff
changeset
|
1803 ctx = repo[r] |
a577a199983c
perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents:
38256
diff
changeset
|
1804 displayer.show(ctx) |
a577a199983c
perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents:
38256
diff
changeset
|
1805 displayer.flush(ctx) |
38254
6b91815fcdce
perftemplating: move template formating into its own function
Boris Feld <boris.feld@octobus.net>
parents:
38253
diff
changeset
|
1806 |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
1807 timer, fm = gettimer(ui, opts) |
38254
6b91815fcdce
perftemplating: move template formating into its own function
Boris Feld <boris.feld@octobus.net>
parents:
38253
diff
changeset
|
1808 timer(format) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
1809 fm.end() |
7872
f680a1bd679b
contrib: add perflog and perftemplating commands to perf extension
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7366
diff
changeset
|
1810 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1811 |
42941
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1812 def _displaystats(ui, opts, entries, data): |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1813 pass |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1814 # use a second formatter because the data are quite different, not sure |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1815 # how it flies with the templater. |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1816 fm = ui.formatter(b'perf-stats', opts) |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1817 for key, title in entries: |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1818 values = data[key] |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1819 nbvalues = len(data) |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1820 values.sort() |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1821 stats = { |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1822 'key': key, |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1823 'title': title, |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1824 'nbitems': len(values), |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1825 'min': values[0][0], |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1826 '10%': values[(nbvalues * 10) // 100][0], |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1827 '25%': values[(nbvalues * 25) // 100][0], |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1828 '50%': values[(nbvalues * 50) // 100][0], |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1829 '75%': values[(nbvalues * 75) // 100][0], |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1830 '80%': values[(nbvalues * 80) // 100][0], |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1831 '85%': values[(nbvalues * 85) // 100][0], |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1832 '90%': values[(nbvalues * 90) // 100][0], |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1833 '95%': values[(nbvalues * 95) // 100][0], |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1834 '99%': values[(nbvalues * 99) // 100][0], |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1835 'max': values[-1][0], |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1836 } |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1837 fm.startitem() |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1838 fm.data(**stats) |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1839 # make node pretty for the human output |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1840 fm.plain('### %s (%d items)\n' % (title, len(values))) |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1841 lines = [ |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1842 'min', |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1843 '10%', |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1844 '25%', |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1845 '50%', |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1846 '75%', |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1847 '80%', |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1848 '85%', |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1849 '90%', |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1850 '95%', |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1851 '99%', |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1852 'max', |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1853 ] |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1854 for l in lines: |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1855 fm.plain('%s: %s\n' % (l, stats[l])) |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1856 fm.end() |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1857 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1858 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1859 @command( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1860 b'perfhelper-mergecopies', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1861 formatteropts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1862 + [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1863 (b'r', b'revs', [], b'restrict search to these revisions'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1864 (b'', b'timing', False, b'provides extra data (costly)'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1865 (b'', b'stats', False, b'provides statistic about the measured data'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1866 ], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1867 ) |
42385
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1868 def perfhelpermergecopies(ui, repo, revs=[], **opts): |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1869 """find statistics about potential parameters for `perfmergecopies` |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1870 |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1871 This command find (base, p1, p2) triplet relevant for copytracing |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1872 benchmarking in the context of a merge. It reports values for some of the |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1873 parameters that impact merge copy tracing time during merge. |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1874 |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1875 If `--timing` is set, rename detection is run and the associated timing |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1876 will be reported. The extra details come at the cost of slower command |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1877 execution. |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1878 |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1879 Since rename detection is only run once, other factors might easily |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1880 affect the precision of the timing. However it should give a good |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1881 approximation of which revision triplets are very costly. |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1882 """ |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1883 opts = _byteskwargs(opts) |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1884 fm = ui.formatter(b'perf', opts) |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1885 dotiming = opts[b'timing'] |
42941
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1886 dostats = opts[b'stats'] |
42385
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1887 |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1888 output_template = [ |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1889 ("base", "%(base)12s"), |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1890 ("p1", "%(p1.node)12s"), |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1891 ("p2", "%(p2.node)12s"), |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1892 ("p1.nb-revs", "%(p1.nbrevs)12d"), |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1893 ("p1.nb-files", "%(p1.nbmissingfiles)12d"), |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1894 ("p1.renames", "%(p1.renamedfiles)12d"), |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1895 ("p1.time", "%(p1.time)12.3f"), |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1896 ("p2.nb-revs", "%(p2.nbrevs)12d"), |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1897 ("p2.nb-files", "%(p2.nbmissingfiles)12d"), |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1898 ("p2.renames", "%(p2.renamedfiles)12d"), |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1899 ("p2.time", "%(p2.time)12.3f"), |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1900 ("renames", "%(nbrenamedfiles)12d"), |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1901 ("total.time", "%(time)12.3f"), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1902 ] |
42385
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1903 if not dotiming: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1904 output_template = [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1905 i |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1906 for i in output_template |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1907 if not ('time' in i[0] or 'renames' in i[0]) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1908 ] |
42385
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1909 header_names = [h for (h, v) in output_template] |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1910 output = ' '.join([v for (h, v) in output_template]) + '\n' |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1911 header = ' '.join(['%12s'] * len(header_names)) + '\n' |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1912 fm.plain(header % tuple(header_names)) |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1913 |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1914 if not revs: |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1915 revs = ['all()'] |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1916 revs = scmutil.revrange(repo, revs) |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1917 |
42941
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1918 if dostats: |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1919 alldata = { |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1920 'nbrevs': [], |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1921 'nbmissingfiles': [], |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1922 } |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1923 if dotiming: |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1924 alldata['parentnbrenames'] = [] |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1925 alldata['totalnbrenames'] = [] |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1926 alldata['parenttime'] = [] |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1927 alldata['totaltime'] = [] |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1928 |
42385
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1929 roi = repo.revs('merge() and %ld', revs) |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1930 for r in roi: |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1931 ctx = repo[r] |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1932 p1 = ctx.p1() |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1933 p2 = ctx.p2() |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1934 bases = repo.changelog._commonancestorsheads(p1.rev(), p2.rev()) |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1935 for b in bases: |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1936 b = repo[b] |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1937 p1missing = copies._computeforwardmissing(b, p1) |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1938 p2missing = copies._computeforwardmissing(b, p2) |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1939 data = { |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1940 b'base': b.hex(), |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1941 b'p1.node': p1.hex(), |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1942 b'p1.nbrevs': len(repo.revs('%d::%d', b.rev(), p1.rev())), |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1943 b'p1.nbmissingfiles': len(p1missing), |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1944 b'p2.node': p2.hex(), |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1945 b'p2.nbrevs': len(repo.revs('%d::%d', b.rev(), p2.rev())), |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1946 b'p2.nbmissingfiles': len(p2missing), |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1947 } |
42941
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1948 if dostats: |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1949 if p1missing: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1950 alldata['nbrevs'].append( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1951 (data['p1.nbrevs'], b.hex(), p1.hex()) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1952 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1953 alldata['nbmissingfiles'].append( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1954 (data['p1.nbmissingfiles'], b.hex(), p1.hex()) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1955 ) |
42941
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1956 if p2missing: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1957 alldata['nbrevs'].append( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1958 (data['p2.nbrevs'], b.hex(), p2.hex()) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1959 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1960 alldata['nbmissingfiles'].append( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1961 (data['p2.nbmissingfiles'], b.hex(), p2.hex()) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1962 ) |
42385
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1963 if dotiming: |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1964 begin = util.timer() |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1965 mergedata = copies.mergecopies(repo, p1, p2, b) |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1966 end = util.timer() |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1967 # not very stable timing since we did only one run |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1968 data['time'] = end - begin |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1969 # mergedata contains five dicts: "copy", "movewithdir", |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1970 # "diverge", "renamedelete" and "dirmove". |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1971 # The first 4 are about renamed file so lets count that. |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1972 renames = len(mergedata[0]) |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1973 renames += len(mergedata[1]) |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1974 renames += len(mergedata[2]) |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1975 renames += len(mergedata[3]) |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1976 data['nbrenamedfiles'] = renames |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1977 begin = util.timer() |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1978 p1renames = copies.pathcopies(b, p1) |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1979 end = util.timer() |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1980 data['p1.time'] = end - begin |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1981 begin = util.timer() |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1982 p2renames = copies.pathcopies(b, p2) |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1983 data['p2.time'] = end - begin |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1984 end = util.timer() |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1985 data['p1.renamedfiles'] = len(p1renames) |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
1986 data['p2.renamedfiles'] = len(p2renames) |
42941
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1987 |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1988 if dostats: |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1989 if p1missing: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1990 alldata['parentnbrenames'].append( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1991 (data['p1.renamedfiles'], b.hex(), p1.hex()) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1992 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1993 alldata['parenttime'].append( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1994 (data['p1.time'], b.hex(), p1.hex()) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1995 ) |
42941
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
1996 if p2missing: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1997 alldata['parentnbrenames'].append( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1998 (data['p2.renamedfiles'], b.hex(), p2.hex()) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1999 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2000 alldata['parenttime'].append( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2001 (data['p2.time'], b.hex(), p2.hex()) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2002 ) |
42941
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2003 if p1missing or p2missing: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2004 alldata['totalnbrenames'].append( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2005 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2006 data['nbrenamedfiles'], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2007 b.hex(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2008 p1.hex(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2009 p2.hex(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2010 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2011 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2012 alldata['totaltime'].append( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2013 (data['time'], b.hex(), p1.hex(), p2.hex()) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2014 ) |
42385
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2015 fm.startitem() |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2016 fm.data(**data) |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2017 # make node pretty for the human output |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2018 out = data.copy() |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2019 out['base'] = fm.hexfunc(b.node()) |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2020 out['p1.node'] = fm.hexfunc(p1.node()) |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2021 out['p2.node'] = fm.hexfunc(p2.node()) |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2022 fm.plain(output % out) |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2023 |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2024 fm.end() |
42941
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2025 if dostats: |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2026 # use a second formatter because the data are quite different, not sure |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2027 # how it flies with the templater. |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2028 entries = [ |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2029 ('nbrevs', 'number of revision covered'), |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2030 ('nbmissingfiles', 'number of missing files at head'), |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2031 ] |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2032 if dotiming: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2033 entries.append( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2034 ('parentnbrenames', 'rename from one parent to base') |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2035 ) |
42941
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2036 entries.append(('totalnbrenames', 'total number of renames')) |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2037 entries.append(('parenttime', 'time for one parent')) |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2038 entries.append(('totaltime', 'time for both parents')) |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2039 _displaystats(ui, opts, entries, alldata) |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2040 |
42385
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2041 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2042 @command( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2043 b'perfhelper-pathcopies', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2044 formatteropts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2045 + [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2046 (b'r', b'revs', [], b'restrict search to these revisions'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2047 (b'', b'timing', False, b'provides extra data (costly)'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2048 (b'', b'stats', False, b'provides statistic about the measured data'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2049 ], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2050 ) |
40740
30d878cb102d
perf: rename `perfhelper-tracecopies` to `perfhelper-pathcopies`
Boris Feld <boris.feld@octobus.net>
parents:
40739
diff
changeset
|
2051 def perfhelperpathcopies(ui, repo, revs=[], **opts): |
40691
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2052 """find statistic about potential parameters for the `perftracecopies` |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2053 |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2054 This command find source-destination pair relevant for copytracing testing. |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2055 It report value for some of the parameters that impact copy tracing time. |
40731
36077a0f6f12
perf: add a `--timing` argument to `perfhelper-tracecopies`
Boris Feld <boris.feld@octobus.net>
parents:
40721
diff
changeset
|
2056 |
36077a0f6f12
perf: add a `--timing` argument to `perfhelper-tracecopies`
Boris Feld <boris.feld@octobus.net>
parents:
40721
diff
changeset
|
2057 If `--timing` is set, rename detection is run and the associated timing |
36077a0f6f12
perf: add a `--timing` argument to `perfhelper-tracecopies`
Boris Feld <boris.feld@octobus.net>
parents:
40721
diff
changeset
|
2058 will be reported. The extra details comes at the cost of a slower command |
36077a0f6f12
perf: add a `--timing` argument to `perfhelper-tracecopies`
Boris Feld <boris.feld@octobus.net>
parents:
40721
diff
changeset
|
2059 execution. |
36077a0f6f12
perf: add a `--timing` argument to `perfhelper-tracecopies`
Boris Feld <boris.feld@octobus.net>
parents:
40721
diff
changeset
|
2060 |
36077a0f6f12
perf: add a `--timing` argument to `perfhelper-tracecopies`
Boris Feld <boris.feld@octobus.net>
parents:
40721
diff
changeset
|
2061 Since the rename detection is only run once, other factors might easily |
36077a0f6f12
perf: add a `--timing` argument to `perfhelper-tracecopies`
Boris Feld <boris.feld@octobus.net>
parents:
40721
diff
changeset
|
2062 affect the precision of the timing. However it should give a good |
36077a0f6f12
perf: add a `--timing` argument to `perfhelper-tracecopies`
Boris Feld <boris.feld@octobus.net>
parents:
40721
diff
changeset
|
2063 approximation of which revision pairs are very costly. |
40691
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2064 """ |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2065 opts = _byteskwargs(opts) |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2066 fm = ui.formatter(b'perf', opts) |
40731
36077a0f6f12
perf: add a `--timing` argument to `perfhelper-tracecopies`
Boris Feld <boris.feld@octobus.net>
parents:
40721
diff
changeset
|
2067 dotiming = opts[b'timing'] |
42942
adac17faa72e
perf: add a --stats argument to perfhelper-pathcopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42941
diff
changeset
|
2068 dostats = opts[b'stats'] |
40731
36077a0f6f12
perf: add a `--timing` argument to `perfhelper-tracecopies`
Boris Feld <boris.feld@octobus.net>
parents:
40721
diff
changeset
|
2069 |
36077a0f6f12
perf: add a `--timing` argument to `perfhelper-tracecopies`
Boris Feld <boris.feld@octobus.net>
parents:
40721
diff
changeset
|
2070 if dotiming: |
36077a0f6f12
perf: add a `--timing` argument to `perfhelper-tracecopies`
Boris Feld <boris.feld@octobus.net>
parents:
40721
diff
changeset
|
2071 header = '%12s %12s %12s %12s %12s %12s\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2072 output = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2073 "%(source)12s %(destination)12s " |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2074 "%(nbrevs)12d %(nbmissingfiles)12d " |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2075 "%(nbrenamedfiles)12d %(time)18.5f\n" |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2076 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2077 header_names = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2078 "source", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2079 "destination", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2080 "nb-revs", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2081 "nb-files", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2082 "nb-renames", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2083 "time", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2084 ) |
40731
36077a0f6f12
perf: add a `--timing` argument to `perfhelper-tracecopies`
Boris Feld <boris.feld@octobus.net>
parents:
40721
diff
changeset
|
2085 fm.plain(header % header_names) |
36077a0f6f12
perf: add a `--timing` argument to `perfhelper-tracecopies`
Boris Feld <boris.feld@octobus.net>
parents:
40721
diff
changeset
|
2086 else: |
36077a0f6f12
perf: add a `--timing` argument to `perfhelper-tracecopies`
Boris Feld <boris.feld@octobus.net>
parents:
40721
diff
changeset
|
2087 header = '%12s %12s %12s %12s\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2088 output = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2089 "%(source)12s %(destination)12s " |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2090 "%(nbrevs)12d %(nbmissingfiles)12d\n" |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2091 ) |
40731
36077a0f6f12
perf: add a `--timing` argument to `perfhelper-tracecopies`
Boris Feld <boris.feld@octobus.net>
parents:
40721
diff
changeset
|
2092 fm.plain(header % ("source", "destination", "nb-revs", "nb-files")) |
40691
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2093 |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2094 if not revs: |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2095 revs = ['all()'] |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2096 revs = scmutil.revrange(repo, revs) |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2097 |
42942
adac17faa72e
perf: add a --stats argument to perfhelper-pathcopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42941
diff
changeset
|
2098 if dostats: |
adac17faa72e
perf: add a --stats argument to perfhelper-pathcopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42941
diff
changeset
|
2099 alldata = { |
adac17faa72e
perf: add a --stats argument to perfhelper-pathcopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42941
diff
changeset
|
2100 'nbrevs': [], |
adac17faa72e
perf: add a --stats argument to perfhelper-pathcopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42941
diff
changeset
|
2101 'nbmissingfiles': [], |
adac17faa72e
perf: add a --stats argument to perfhelper-pathcopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42941
diff
changeset
|
2102 } |
adac17faa72e
perf: add a --stats argument to perfhelper-pathcopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42941
diff
changeset
|
2103 if dotiming: |
adac17faa72e
perf: add a --stats argument to perfhelper-pathcopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42941
diff
changeset
|
2104 alldata['nbrenames'] = [] |
adac17faa72e
perf: add a --stats argument to perfhelper-pathcopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42941
diff
changeset
|
2105 alldata['time'] = [] |
adac17faa72e
perf: add a --stats argument to perfhelper-pathcopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42941
diff
changeset
|
2106 |
40691
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2107 roi = repo.revs('merge() and %ld', revs) |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2108 for r in roi: |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2109 ctx = repo[r] |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2110 p1 = ctx.p1().rev() |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2111 p2 = ctx.p2().rev() |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2112 bases = repo.changelog._commonancestorsheads(p1, p2) |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2113 for p in (p1, p2): |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2114 for b in bases: |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2115 base = repo[b] |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2116 parent = repo[p] |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2117 missing = copies._computeforwardmissing(base, parent) |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2118 if not missing: |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2119 continue |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2120 data = { |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2121 b'source': base.hex(), |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2122 b'destination': parent.hex(), |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2123 b'nbrevs': len(repo.revs('%d::%d', b, p)), |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2124 b'nbmissingfiles': len(missing), |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2125 } |
43003
bbf77341a956
perf: fix perfhelper-pathcopies without --stats
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42979
diff
changeset
|
2126 if dostats: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2127 alldata['nbrevs'].append( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2128 (data['nbrevs'], base.hex(), parent.hex(),) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2129 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2130 alldata['nbmissingfiles'].append( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2131 (data['nbmissingfiles'], base.hex(), parent.hex(),) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2132 ) |
40731
36077a0f6f12
perf: add a `--timing` argument to `perfhelper-tracecopies`
Boris Feld <boris.feld@octobus.net>
parents:
40721
diff
changeset
|
2133 if dotiming: |
36077a0f6f12
perf: add a `--timing` argument to `perfhelper-tracecopies`
Boris Feld <boris.feld@octobus.net>
parents:
40721
diff
changeset
|
2134 begin = util.timer() |
36077a0f6f12
perf: add a `--timing` argument to `perfhelper-tracecopies`
Boris Feld <boris.feld@octobus.net>
parents:
40721
diff
changeset
|
2135 renames = copies.pathcopies(base, parent) |
36077a0f6f12
perf: add a `--timing` argument to `perfhelper-tracecopies`
Boris Feld <boris.feld@octobus.net>
parents:
40721
diff
changeset
|
2136 end = util.timer() |
36077a0f6f12
perf: add a `--timing` argument to `perfhelper-tracecopies`
Boris Feld <boris.feld@octobus.net>
parents:
40721
diff
changeset
|
2137 # not very stable timing since we did only one run |
36077a0f6f12
perf: add a `--timing` argument to `perfhelper-tracecopies`
Boris Feld <boris.feld@octobus.net>
parents:
40721
diff
changeset
|
2138 data['time'] = end - begin |
36077a0f6f12
perf: add a `--timing` argument to `perfhelper-tracecopies`
Boris Feld <boris.feld@octobus.net>
parents:
40721
diff
changeset
|
2139 data['nbrenamedfiles'] = len(renames) |
43003
bbf77341a956
perf: fix perfhelper-pathcopies without --stats
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42979
diff
changeset
|
2140 if dostats: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2141 alldata['time'].append( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2142 (data['time'], base.hex(), parent.hex(),) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2143 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2144 alldata['nbrenames'].append( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2145 (data['nbrenamedfiles'], base.hex(), parent.hex(),) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2146 ) |
40731
36077a0f6f12
perf: add a `--timing` argument to `perfhelper-tracecopies`
Boris Feld <boris.feld@octobus.net>
parents:
40721
diff
changeset
|
2147 fm.startitem() |
40691
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2148 fm.data(**data) |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2149 out = data.copy() |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2150 out['source'] = fm.hexfunc(base.node()) |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2151 out['destination'] = fm.hexfunc(parent.node()) |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2152 fm.plain(output % out) |
40731
36077a0f6f12
perf: add a `--timing` argument to `perfhelper-tracecopies`
Boris Feld <boris.feld@octobus.net>
parents:
40721
diff
changeset
|
2153 |
40691
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2154 fm.end() |
42942
adac17faa72e
perf: add a --stats argument to perfhelper-pathcopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42941
diff
changeset
|
2155 if dostats: |
adac17faa72e
perf: add a --stats argument to perfhelper-pathcopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42941
diff
changeset
|
2156 # use a second formatter because the data are quite different, not sure |
adac17faa72e
perf: add a --stats argument to perfhelper-pathcopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42941
diff
changeset
|
2157 # how it flies with the templater. |
adac17faa72e
perf: add a --stats argument to perfhelper-pathcopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42941
diff
changeset
|
2158 fm = ui.formatter(b'perf', opts) |
adac17faa72e
perf: add a --stats argument to perfhelper-pathcopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42941
diff
changeset
|
2159 entries = [ |
adac17faa72e
perf: add a --stats argument to perfhelper-pathcopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42941
diff
changeset
|
2160 ('nbrevs', 'number of revision covered'), |
adac17faa72e
perf: add a --stats argument to perfhelper-pathcopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42941
diff
changeset
|
2161 ('nbmissingfiles', 'number of missing files at head'), |
adac17faa72e
perf: add a --stats argument to perfhelper-pathcopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42941
diff
changeset
|
2162 ] |
adac17faa72e
perf: add a --stats argument to perfhelper-pathcopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42941
diff
changeset
|
2163 if dotiming: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2164 entries.append(('nbrenames', 'renamed files')) |
42942
adac17faa72e
perf: add a --stats argument to perfhelper-pathcopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42941
diff
changeset
|
2165 entries.append(('time', 'time')) |
adac17faa72e
perf: add a --stats argument to perfhelper-pathcopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42941
diff
changeset
|
2166 _displaystats(ui, opts, entries, alldata) |
40691
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2167 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2168 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2169 @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
|
2170 def perfcca(ui, repo, **opts): |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
2171 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
2172 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
|
2173 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
|
2174 fm.end() |
16386
ccc173d0914e
perf: add case collision auditor perf
Matt Mackall <mpm@selenic.com>
parents:
16309
diff
changeset
|
2175 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2176 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2177 @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
|
2178 def perffncacheload(ui, repo, **opts): |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
2179 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
2180 timer, fm = gettimer(ui, opts) |
17780
769f66861eb8
perf: simply use repo.store for perffncache* commands
Adrian Buehlmann <adrian@cadifra.com>
parents:
17553
diff
changeset
|
2181 s = repo.store |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2182 |
16403
efae1fea4bbd
perf: time fncache read and write performance
Bryan O'Sullivan <bryano@fb.com>
parents:
16386
diff
changeset
|
2183 def d(): |
efae1fea4bbd
perf: time fncache read and write performance
Bryan O'Sullivan <bryano@fb.com>
parents:
16386
diff
changeset
|
2184 s.fncache._load() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2185 |
16403
efae1fea4bbd
perf: time fncache read and write performance
Bryan O'Sullivan <bryano@fb.com>
parents:
16386
diff
changeset
|
2186 timer(d) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
2187 fm.end() |
16403
efae1fea4bbd
perf: time fncache read and write performance
Bryan O'Sullivan <bryano@fb.com>
parents:
16386
diff
changeset
|
2188 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2189 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2190 @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
|
2191 def perffncachewrite(ui, repo, **opts): |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
2192 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
2193 timer, fm = gettimer(ui, opts) |
17780
769f66861eb8
perf: simply use repo.store for perffncache* commands
Adrian Buehlmann <adrian@cadifra.com>
parents:
17553
diff
changeset
|
2194 s = repo.store |
38695
2cdb82e8fb44
perffncachewrite: load fncache after lock is acquired
Boris Feld <boris.feld@octobus.net>
parents:
38694
diff
changeset
|
2195 lock = repo.lock() |
16403
efae1fea4bbd
perf: time fncache read and write performance
Bryan O'Sullivan <bryano@fb.com>
parents:
16386
diff
changeset
|
2196 s.fncache._load() |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2197 tr = repo.transaction(b'perffncachewrite') |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2198 tr.addbackup(b'fncache') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2199 |
16403
efae1fea4bbd
perf: time fncache read and write performance
Bryan O'Sullivan <bryano@fb.com>
parents:
16386
diff
changeset
|
2200 def d(): |
efae1fea4bbd
perf: time fncache read and write performance
Bryan O'Sullivan <bryano@fb.com>
parents:
16386
diff
changeset
|
2201 s.fncache._dirty = True |
27097
b3e24a9c5f9b
contrib/perf: fix perffncachewrite
timeless <timeless@mozdev.org>
parents:
27096
diff
changeset
|
2202 s.fncache.write(tr) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2203 |
16403
efae1fea4bbd
perf: time fncache read and write performance
Bryan O'Sullivan <bryano@fb.com>
parents:
16386
diff
changeset
|
2204 timer(d) |
30069
98b9846a131e
perf: release lock after transaction in perffncachewrite
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30018
diff
changeset
|
2205 tr.close() |
27097
b3e24a9c5f9b
contrib/perf: fix perffncachewrite
timeless <timeless@mozdev.org>
parents:
27096
diff
changeset
|
2206 lock.release() |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
2207 fm.end() |
16403
efae1fea4bbd
perf: time fncache read and write performance
Bryan O'Sullivan <bryano@fb.com>
parents:
16386
diff
changeset
|
2208 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2209 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2210 @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
|
2211 def perffncacheencode(ui, repo, **opts): |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
2212 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
2213 timer, fm = gettimer(ui, opts) |
17780
769f66861eb8
perf: simply use repo.store for perffncache* commands
Adrian Buehlmann <adrian@cadifra.com>
parents:
17553
diff
changeset
|
2214 s = repo.store |
17553
5ab863922e0f
perf: add perffncacheencode
Adrian Buehlmann <adrian@cadifra.com>
parents:
17216
diff
changeset
|
2215 s.fncache._load() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2216 |
17553
5ab863922e0f
perf: add perffncacheencode
Adrian Buehlmann <adrian@cadifra.com>
parents:
17216
diff
changeset
|
2217 def d(): |
5ab863922e0f
perf: add perffncacheencode
Adrian Buehlmann <adrian@cadifra.com>
parents:
17216
diff
changeset
|
2218 for p in s.fncache.entries: |
5ab863922e0f
perf: add perffncacheencode
Adrian Buehlmann <adrian@cadifra.com>
parents:
17216
diff
changeset
|
2219 s.encode(p) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2220 |
17553
5ab863922e0f
perf: add perffncacheencode
Adrian Buehlmann <adrian@cadifra.com>
parents:
17216
diff
changeset
|
2221 timer(d) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
2222 fm.end() |
17553
5ab863922e0f
perf: add perffncacheencode
Adrian Buehlmann <adrian@cadifra.com>
parents:
17216
diff
changeset
|
2223 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2224 |
36766
d382344c69aa
perf: teach perfbdiff to call blocks() and to use xdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36360
diff
changeset
|
2225 def _bdiffworker(q, blocks, xdiff, ready, done): |
35599
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2226 while not done.is_set(): |
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2227 pair = q.get() |
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2228 while pair is not None: |
36766
d382344c69aa
perf: teach perfbdiff to call blocks() and to use xdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36360
diff
changeset
|
2229 if xdiff: |
d382344c69aa
perf: teach perfbdiff to call blocks() and to use xdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36360
diff
changeset
|
2230 mdiff.bdiff.xdiffblocks(*pair) |
d382344c69aa
perf: teach perfbdiff to call blocks() and to use xdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36360
diff
changeset
|
2231 elif blocks: |
d382344c69aa
perf: teach perfbdiff to call blocks() and to use xdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36360
diff
changeset
|
2232 mdiff.bdiff.blocks(*pair) |
d382344c69aa
perf: teach perfbdiff to call blocks() and to use xdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36360
diff
changeset
|
2233 else: |
d382344c69aa
perf: teach perfbdiff to call blocks() and to use xdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36360
diff
changeset
|
2234 mdiff.textdiff(*pair) |
35599
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2235 q.task_done() |
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2236 pair = q.get() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2237 q.task_done() # for the None one |
35599
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2238 with ready: |
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2239 ready.wait() |
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2240 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2241 |
39319
862d23bc5749
perf: add function for obtaining manifest revision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39318
diff
changeset
|
2242 def _manifestrevision(repo, mnode): |
862d23bc5749
perf: add function for obtaining manifest revision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39318
diff
changeset
|
2243 ml = repo.manifestlog |
862d23bc5749
perf: add function for obtaining manifest revision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39318
diff
changeset
|
2244 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2245 if util.safehasattr(ml, b'getstorage'): |
39319
862d23bc5749
perf: add function for obtaining manifest revision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39318
diff
changeset
|
2246 store = ml.getstorage(b'') |
862d23bc5749
perf: add function for obtaining manifest revision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39318
diff
changeset
|
2247 else: |
862d23bc5749
perf: add function for obtaining manifest revision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39318
diff
changeset
|
2248 store = ml._revlog |
862d23bc5749
perf: add function for obtaining manifest revision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39318
diff
changeset
|
2249 |
862d23bc5749
perf: add function for obtaining manifest revision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39318
diff
changeset
|
2250 return store.revision(mnode) |
862d23bc5749
perf: add function for obtaining manifest revision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39318
diff
changeset
|
2251 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2252 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2253 @command( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2254 b'perfbdiff', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2255 revlogopts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2256 + formatteropts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2257 + [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2258 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2259 b'', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2260 b'count', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2261 1, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2262 b'number of revisions to test (when using --startrev)', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2263 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2264 (b'', b'alldata', False, b'test bdiffs for all associated revisions'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2265 (b'', b'threads', 0, b'number of thread to use (disable with 0)'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2266 (b'', b'blocks', False, b'test computing diffs into blocks'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2267 (b'', b'xdiff', False, b'use xdiff algorithm'), |
35599
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2268 ], |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2269 b'-c|-m|FILE REV', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2270 ) |
35599
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2271 def perfbdiff(ui, repo, file_, rev=None, count=None, threads=0, **opts): |
30336
7ddc8f8d7712
perf: support bdiffing multiple revisions in a single revlog
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30335
diff
changeset
|
2272 """benchmark a bdiff between revisions |
7ddc8f8d7712
perf: support bdiffing multiple revisions in a single revlog
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30335
diff
changeset
|
2273 |
7ddc8f8d7712
perf: support bdiffing multiple revisions in a single revlog
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30335
diff
changeset
|
2274 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:
30335
diff
changeset
|
2275 |
7ddc8f8d7712
perf: support bdiffing multiple revisions in a single revlog
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30335
diff
changeset
|
2276 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:
30335
diff
changeset
|
2277 revisions starting at the specified revision. |
30337
6ecad4b73569
perf: support measuring bdiff for all changeset related data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30336
diff
changeset
|
2278 |
6ecad4b73569
perf: support measuring bdiff for all changeset related data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30336
diff
changeset
|
2279 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:
30336
diff
changeset
|
2280 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:
30336
diff
changeset
|
2281 and filelogs). |
30336
7ddc8f8d7712
perf: support bdiffing multiple revisions in a single revlog
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30335
diff
changeset
|
2282 """ |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
2283 opts = _byteskwargs(opts) |
36766
d382344c69aa
perf: teach perfbdiff to call blocks() and to use xdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36360
diff
changeset
|
2284 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2285 if opts[b'xdiff'] and not opts[b'blocks']: |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2286 raise error.CommandError(b'perfbdiff', b'--xdiff requires --blocks') |
36766
d382344c69aa
perf: teach perfbdiff to call blocks() and to use xdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36360
diff
changeset
|
2287 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2288 if opts[b'alldata']: |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2289 opts[b'changelog'] = True |
30337
6ecad4b73569
perf: support measuring bdiff for all changeset related data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30336
diff
changeset
|
2290 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2291 if opts.get(b'changelog') or opts.get(b'manifest'): |
30307
c8fa7ad1ff90
perf: add perfbdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30219
diff
changeset
|
2292 file_, rev = None, file_ |
c8fa7ad1ff90
perf: add perfbdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30219
diff
changeset
|
2293 elif rev is None: |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2294 raise error.CommandError(b'perfbdiff', b'invalid arguments') |
30307
c8fa7ad1ff90
perf: add perfbdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30219
diff
changeset
|
2295 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2296 blocks = opts[b'blocks'] |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2297 xdiff = opts[b'xdiff'] |
30335
7d91a085ebe6
perf: prepare to handle multiple pairs in perfbdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30307
diff
changeset
|
2298 textpairs = [] |
7d91a085ebe6
perf: prepare to handle multiple pairs in perfbdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30307
diff
changeset
|
2299 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2300 r = cmdutil.openrevlog(repo, b'perfbdiff', file_, opts) |
30307
c8fa7ad1ff90
perf: add perfbdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30219
diff
changeset
|
2301 |
30336
7ddc8f8d7712
perf: support bdiffing multiple revisions in a single revlog
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30335
diff
changeset
|
2302 startrev = r.rev(r.lookup(rev)) |
7ddc8f8d7712
perf: support bdiffing multiple revisions in a single revlog
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30335
diff
changeset
|
2303 for rev in range(startrev, min(startrev + count, len(r) - 1)): |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2304 if opts[b'alldata']: |
30337
6ecad4b73569
perf: support measuring bdiff for all changeset related data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30336
diff
changeset
|
2305 # Load revisions associated with changeset. |
6ecad4b73569
perf: support measuring bdiff for all changeset related data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30336
diff
changeset
|
2306 ctx = repo[rev] |
39319
862d23bc5749
perf: add function for obtaining manifest revision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39318
diff
changeset
|
2307 mtext = _manifestrevision(repo, ctx.manifestnode()) |
30337
6ecad4b73569
perf: support measuring bdiff for all changeset related data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30336
diff
changeset
|
2308 for pctx in ctx.parents(): |
39319
862d23bc5749
perf: add function for obtaining manifest revision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39318
diff
changeset
|
2309 pman = _manifestrevision(repo, pctx.manifestnode()) |
30337
6ecad4b73569
perf: support measuring bdiff for all changeset related data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30336
diff
changeset
|
2310 textpairs.append((pman, mtext)) |
6ecad4b73569
perf: support measuring bdiff for all changeset related data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30336
diff
changeset
|
2311 |
6ecad4b73569
perf: support measuring bdiff for all changeset related data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30336
diff
changeset
|
2312 # Load filelog revisions by iterating manifest delta. |
6ecad4b73569
perf: support measuring bdiff for all changeset related data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30336
diff
changeset
|
2313 man = ctx.manifest() |
6ecad4b73569
perf: support measuring bdiff for all changeset related data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30336
diff
changeset
|
2314 pman = ctx.p1().manifest() |
6ecad4b73569
perf: support measuring bdiff for all changeset related data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30336
diff
changeset
|
2315 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:
30336
diff
changeset
|
2316 fctx = repo.file(filename) |
6ecad4b73569
perf: support measuring bdiff for all changeset related data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30336
diff
changeset
|
2317 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:
30336
diff
changeset
|
2318 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:
30336
diff
changeset
|
2319 textpairs.append((f1, f2)) |
6ecad4b73569
perf: support measuring bdiff for all changeset related data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30336
diff
changeset
|
2320 else: |
6ecad4b73569
perf: support measuring bdiff for all changeset related data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30336
diff
changeset
|
2321 dp = r.deltaparent(rev) |
6ecad4b73569
perf: support measuring bdiff for all changeset related data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30336
diff
changeset
|
2322 textpairs.append((r.revision(dp), r.revision(rev))) |
30307
c8fa7ad1ff90
perf: add perfbdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30219
diff
changeset
|
2323 |
35599
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2324 withthreads = threads > 0 |
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2325 if not withthreads: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2326 |
35599
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2327 def d(): |
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2328 for pair in textpairs: |
36766
d382344c69aa
perf: teach perfbdiff to call blocks() and to use xdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36360
diff
changeset
|
2329 if xdiff: |
d382344c69aa
perf: teach perfbdiff to call blocks() and to use xdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36360
diff
changeset
|
2330 mdiff.bdiff.xdiffblocks(*pair) |
d382344c69aa
perf: teach perfbdiff to call blocks() and to use xdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36360
diff
changeset
|
2331 elif blocks: |
d382344c69aa
perf: teach perfbdiff to call blocks() and to use xdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36360
diff
changeset
|
2332 mdiff.bdiff.blocks(*pair) |
d382344c69aa
perf: teach perfbdiff to call blocks() and to use xdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36360
diff
changeset
|
2333 else: |
d382344c69aa
perf: teach perfbdiff to call blocks() and to use xdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36360
diff
changeset
|
2334 mdiff.textdiff(*pair) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2335 |
35599
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2336 else: |
37844
8fb9985382be
pycompat: export queue module instead of symbols in module (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37355
diff
changeset
|
2337 q = queue() |
39822
86dbeb7c9a11
py3: switch contrib/perf from xrange to pycompat.xrange
Matt Harbison <matt_harbison@yahoo.com>
parents:
39821
diff
changeset
|
2338 for i in _xrange(threads): |
35599
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2339 q.put(None) |
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2340 ready = threading.Condition() |
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2341 done = threading.Event() |
39822
86dbeb7c9a11
py3: switch contrib/perf from xrange to pycompat.xrange
Matt Harbison <matt_harbison@yahoo.com>
parents:
39821
diff
changeset
|
2342 for i in _xrange(threads): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2343 threading.Thread( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2344 target=_bdiffworker, args=(q, blocks, xdiff, ready, done) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2345 ).start() |
35599
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2346 q.join() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2347 |
35599
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2348 def d(): |
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2349 for pair in textpairs: |
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2350 q.put(pair) |
39822
86dbeb7c9a11
py3: switch contrib/perf from xrange to pycompat.xrange
Matt Harbison <matt_harbison@yahoo.com>
parents:
39821
diff
changeset
|
2351 for i in _xrange(threads): |
35599
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2352 q.put(None) |
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2353 with ready: |
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2354 ready.notify_all() |
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2355 q.join() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2356 |
30307
c8fa7ad1ff90
perf: add perfbdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30219
diff
changeset
|
2357 timer, fm = gettimer(ui, opts) |
c8fa7ad1ff90
perf: add perfbdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30219
diff
changeset
|
2358 timer(d) |
c8fa7ad1ff90
perf: add perfbdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30219
diff
changeset
|
2359 fm.end() |
c8fa7ad1ff90
perf: add perfbdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30219
diff
changeset
|
2360 |
35599
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2361 if withthreads: |
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2362 done.set() |
39822
86dbeb7c9a11
py3: switch contrib/perf from xrange to pycompat.xrange
Matt Harbison <matt_harbison@yahoo.com>
parents:
39821
diff
changeset
|
2363 for i in _xrange(threads): |
35599
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2364 q.put(None) |
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2365 with ready: |
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2366 ready.notify_all() |
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2367 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2368 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2369 @command( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2370 b'perfunidiff', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2371 revlogopts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2372 + formatteropts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2373 + [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2374 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2375 b'', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2376 b'count', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2377 1, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2378 b'number of revisions to test (when using --startrev)', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2379 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2380 (b'', b'alldata', False, b'test unidiffs for all associated revisions'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2381 ], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2382 b'-c|-m|FILE REV', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2383 ) |
35861
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2384 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
|
2385 """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
|
2386 |
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2387 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
|
2388 of the texts. |
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2389 |
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2390 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
|
2391 |
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2392 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
|
2393 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
|
2394 |
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2395 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
|
2396 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
|
2397 and filelogs). |
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2398 """ |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
2399 opts = _byteskwargs(opts) |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2400 if opts[b'alldata']: |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2401 opts[b'changelog'] = True |
35861
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2402 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2403 if opts.get(b'changelog') or opts.get(b'manifest'): |
35861
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2404 file_, rev = None, file_ |
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2405 elif rev is None: |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2406 raise error.CommandError(b'perfunidiff', b'invalid arguments') |
35861
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2407 |
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2408 textpairs = [] |
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2409 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2410 r = cmdutil.openrevlog(repo, b'perfunidiff', file_, opts) |
35861
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2411 |
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2412 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
|
2413 for rev in range(startrev, min(startrev + count, len(r) - 1)): |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2414 if opts[b'alldata']: |
35861
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2415 # 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
|
2416 ctx = repo[rev] |
39319
862d23bc5749
perf: add function for obtaining manifest revision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39318
diff
changeset
|
2417 mtext = _manifestrevision(repo, ctx.manifestnode()) |
35861
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2418 for pctx in ctx.parents(): |
39319
862d23bc5749
perf: add function for obtaining manifest revision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39318
diff
changeset
|
2419 pman = _manifestrevision(repo, pctx.manifestnode()) |
35861
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2420 textpairs.append((pman, mtext)) |
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2421 |
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2422 # 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
|
2423 man = ctx.manifest() |
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2424 pman = ctx.p1().manifest() |
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2425 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
|
2426 fctx = repo.file(filename) |
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2427 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
|
2428 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
|
2429 textpairs.append((f1, f2)) |
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2430 else: |
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2431 dp = r.deltaparent(rev) |
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2432 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
|
2433 |
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2434 def d(): |
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2435 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
|
2436 # 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
|
2437 headerlines, hunks = mdiff.unidiff( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2438 left, b'', right, b'', b'left', b'right', binary=False |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2439 ) |
35861
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2440 # 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
|
2441 b'\n'.join(headerlines) |
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2442 b''.join(sum((list(hlines) for hrange, hlines in hunks), [])) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2443 |
35861
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2444 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
|
2445 timer(d) |
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2446 fm.end() |
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2447 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2448 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2449 @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
|
2450 def perfdiffwd(ui, repo, **opts): |
9826
d768614578dd
contrib/perf: profile diff of working directory changes
Patrick Mezard <pmezard@gmail.com>
parents:
9146
diff
changeset
|
2451 """Profile diff of working directory changes""" |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
2452 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
2453 timer, fm = gettimer(ui, opts) |
9826
d768614578dd
contrib/perf: profile diff of working directory changes
Patrick Mezard <pmezard@gmail.com>
parents:
9146
diff
changeset
|
2454 options = { |
40214
b456b2e0ad9f
py3: make test-contrib-perf.t work on python 3
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
40145
diff
changeset
|
2455 '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
|
2456 '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
|
2457 'B': 'ignore_blank_lines', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2458 } |
9826
d768614578dd
contrib/perf: profile diff of working directory changes
Patrick Mezard <pmezard@gmail.com>
parents:
9146
diff
changeset
|
2459 |
40214
b456b2e0ad9f
py3: make test-contrib-perf.t work on python 3
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
40145
diff
changeset
|
2460 for diffopt in ('', 'w', 'b', 'B', 'wB'): |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2461 opts = dict((options[c], b'1') for c in diffopt) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2462 |
9826
d768614578dd
contrib/perf: profile diff of working directory changes
Patrick Mezard <pmezard@gmail.com>
parents:
9146
diff
changeset
|
2463 def d(): |
d768614578dd
contrib/perf: profile diff of working directory changes
Patrick Mezard <pmezard@gmail.com>
parents:
9146
diff
changeset
|
2464 ui.pushbuffer() |
d768614578dd
contrib/perf: profile diff of working directory changes
Patrick Mezard <pmezard@gmail.com>
parents:
9146
diff
changeset
|
2465 commands.diff(ui, repo, **opts) |
d768614578dd
contrib/perf: profile diff of working directory changes
Patrick Mezard <pmezard@gmail.com>
parents:
9146
diff
changeset
|
2466 ui.popbuffer() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2467 |
40214
b456b2e0ad9f
py3: make test-contrib-perf.t work on python 3
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
40145
diff
changeset
|
2468 diffopt = diffopt.encode('ascii') |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2469 title = b'diffopts: %s' % (diffopt and (b'-' + diffopt) or b'none') |
40679
20d2fd6036ed
perf: explicitly pass title as a keyword argument in `perfdiffwd`
Boris Feld <boris.feld@octobus.net>
parents:
40558
diff
changeset
|
2470 timer(d, title=title) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
2471 fm.end() |
9826
d768614578dd
contrib/perf: profile diff of working directory changes
Patrick Mezard <pmezard@gmail.com>
parents:
9146
diff
changeset
|
2472 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2473 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2474 @command(b'perfrevlogindex', revlogopts + formatteropts, b'-c|-m|FILE') |
32532
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2475 def perfrevlogindex(ui, repo, file_=None, **opts): |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2476 """Benchmark operations against a revlog index. |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2477 |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2478 This tests constructing a revlog instance, reading index data, |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2479 parsing index data, and performing various operations related to |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2480 index data. |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2481 """ |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2482 |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
2483 opts = _byteskwargs(opts) |
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
2484 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2485 rl = cmdutil.openrevlog(repo, b'perfrevlogindex', file_, opts) |
32532
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2486 |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2487 opener = getattr(rl, 'opener') # trick linter |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2488 indexfile = rl.indexfile |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2489 data = opener.read(indexfile) |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2490 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2491 header = struct.unpack(b'>I', data[0:4])[0] |
32532
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2492 version = header & 0xFFFF |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2493 if version == 1: |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2494 revlogio = revlog.revlogio() |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2495 inline = header & (1 << 16) |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2496 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2497 raise error.Abort(b'unsupported revlog version: %d' % version) |
32532
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2498 |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2499 rllen = len(rl) |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2500 |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2501 node0 = rl.node(0) |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2502 node25 = rl.node(rllen // 4) |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2503 node50 = rl.node(rllen // 2) |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2504 node75 = rl.node(rllen // 4 * 3) |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2505 node100 = rl.node(rllen - 1) |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2506 |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2507 allrevs = range(rllen) |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2508 allrevsrev = list(reversed(allrevs)) |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2509 allnodes = [rl.node(rev) for rev in range(rllen)] |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2510 allnodesrev = list(reversed(allnodes)) |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2511 |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2512 def constructor(): |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2513 revlog.revlog(opener, indexfile) |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2514 |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2515 def read(): |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2516 with opener(indexfile) as fh: |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2517 fh.read() |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2518 |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2519 def parseindex(): |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2520 revlogio.parseindex(data, inline) |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2521 |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2522 def getentry(revornode): |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2523 index = revlogio.parseindex(data, inline)[0] |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2524 index[revornode] |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2525 |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2526 def getentries(revs, count=1): |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2527 index = revlogio.parseindex(data, inline)[0] |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2528 |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2529 for i in range(count): |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2530 for rev in revs: |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2531 index[rev] |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2532 |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2533 def resolvenode(node): |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2534 nodemap = revlogio.parseindex(data, inline)[1] |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2535 # This only works for the C code. |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2536 if nodemap is None: |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2537 return |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2538 |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2539 try: |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2540 nodemap[node] |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2541 except error.RevlogError: |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2542 pass |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2543 |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2544 def resolvenodes(nodes, count=1): |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2545 nodemap = revlogio.parseindex(data, inline)[1] |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2546 if nodemap is None: |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2547 return |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2548 |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2549 for i in range(count): |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2550 for node in nodes: |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2551 try: |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2552 nodemap[node] |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2553 except error.RevlogError: |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2554 pass |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2555 |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2556 benches = [ |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2557 (constructor, b'revlog constructor'), |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2558 (read, b'read'), |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2559 (parseindex, b'create index object'), |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2560 (lambda: getentry(0), b'retrieve index entry for rev 0'), |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2561 (lambda: resolvenode(b'a' * 20), b'look up missing node'), |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2562 (lambda: resolvenode(node0), b'look up node at rev 0'), |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2563 (lambda: resolvenode(node25), b'look up node at 1/4 len'), |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2564 (lambda: resolvenode(node50), b'look up node at 1/2 len'), |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2565 (lambda: resolvenode(node75), b'look up node at 3/4 len'), |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2566 (lambda: resolvenode(node100), b'look up node at tip'), |
32532
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2567 # 2x variation is to measure caching impact. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2568 (lambda: resolvenodes(allnodes), b'look up all nodes (forward)'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2569 (lambda: resolvenodes(allnodes, 2), b'look up all nodes 2x (forward)'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2570 (lambda: resolvenodes(allnodesrev), b'look up all nodes (reverse)'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2571 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2572 lambda: resolvenodes(allnodesrev, 2), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2573 b'look up all nodes 2x (reverse)', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2574 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2575 (lambda: getentries(allrevs), b'retrieve all index entries (forward)'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2576 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2577 lambda: getentries(allrevs, 2), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2578 b'retrieve all index entries 2x (forward)', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2579 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2580 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2581 lambda: getentries(allrevsrev), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2582 b'retrieve all index entries (reverse)', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2583 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2584 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2585 lambda: getentries(allrevsrev, 2), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2586 b'retrieve all index entries 2x (reverse)', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2587 ), |
32532
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2588 ] |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2589 |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2590 for fn, title in benches: |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2591 timer, fm = gettimer(ui, opts) |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2592 timer(fn, title=title) |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2593 fm.end() |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2594 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2595 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2596 @command( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2597 b'perfrevlogrevisions', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2598 revlogopts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2599 + formatteropts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2600 + [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2601 (b'd', b'dist', 100, b'distance between the revisions'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2602 (b's', b'startrev', 0, b'revision to start reading at'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2603 (b'', b'reverse', False, b'read in reverse'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2604 ], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2605 b'-c|-m|FILE', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2606 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2607 def perfrevlogrevisions( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2608 ui, repo, file_=None, startrev=0, reverse=False, **opts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2609 ): |
27492
ac549d7fbc2b
perf: use standard arguments for perfrevlog
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27472
diff
changeset
|
2610 """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
|
2611 |
ac549d7fbc2b
perf: use standard arguments for perfrevlog
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27472
diff
changeset
|
2612 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
|
2613 the specified revlog. |
27493
14b0930105da
perf: make start revision configurable for perfrevlog
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27492
diff
changeset
|
2614 |
14b0930105da
perf: make start revision configurable for perfrevlog
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27492
diff
changeset
|
2615 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
|
2616 """ |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
2617 opts = _byteskwargs(opts) |
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
2618 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2619 rl = cmdutil.openrevlog(repo, b'perfrevlogrevisions', file_, opts) |
32232
4c6b2076d292
perf: move revlog construction and length calculation out of benchmark
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32231
diff
changeset
|
2620 rllen = getlen(ui)(rl) |
30017
973cf6c3de30
perf: add --reverse to perfrevlog
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29567
diff
changeset
|
2621 |
40143
d5d28d360a19
pref: support negative indexing in perfrevlogrevisions
Boris Feld <boris.feld@octobus.net>
parents:
40142
diff
changeset
|
2622 if startrev < 0: |
d5d28d360a19
pref: support negative indexing in perfrevlogrevisions
Boris Feld <boris.feld@octobus.net>
parents:
40142
diff
changeset
|
2623 startrev = rllen + startrev |
d5d28d360a19
pref: support negative indexing in perfrevlogrevisions
Boris Feld <boris.feld@octobus.net>
parents:
40142
diff
changeset
|
2624 |
11694
bf49d48e4602
perf: add perfrevlog function to check performance of revlog
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
10493
diff
changeset
|
2625 def d(): |
32232
4c6b2076d292
perf: move revlog construction and length calculation out of benchmark
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32231
diff
changeset
|
2626 rl.clearcaches() |
30017
973cf6c3de30
perf: add --reverse to perfrevlog
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29567
diff
changeset
|
2627 |
32224
6b582f9b6e5e
perf: don't clobber startrev variable
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32202
diff
changeset
|
2628 beginrev = startrev |
32232
4c6b2076d292
perf: move revlog construction and length calculation out of benchmark
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32231
diff
changeset
|
2629 endrev = rllen |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2630 dist = opts[b'dist'] |
30017
973cf6c3de30
perf: add --reverse to perfrevlog
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29567
diff
changeset
|
2631 |
973cf6c3de30
perf: add --reverse to perfrevlog
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29567
diff
changeset
|
2632 if reverse: |
40537
cbd251d479bb
perf: fix perfrevlogrevisions --reverse
Boris Feld <boris.feld@octobus.net>
parents:
40531
diff
changeset
|
2633 beginrev, endrev = endrev - 1, beginrev - 1 |
30017
973cf6c3de30
perf: add --reverse to perfrevlog
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29567
diff
changeset
|
2634 dist = -1 * dist |
973cf6c3de30
perf: add --reverse to perfrevlog
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29567
diff
changeset
|
2635 |
39822
86dbeb7c9a11
py3: switch contrib/perf from xrange to pycompat.xrange
Matt Harbison <matt_harbison@yahoo.com>
parents:
39821
diff
changeset
|
2636 for x in _xrange(beginrev, endrev, dist): |
32297
d7efaf6275a7
perf: always pass node to revlog.revision()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32232
diff
changeset
|
2637 # Old revisions don't support passing int. |
d7efaf6275a7
perf: always pass node to revlog.revision()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32232
diff
changeset
|
2638 n = rl.node(x) |
d7efaf6275a7
perf: always pass node to revlog.revision()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32232
diff
changeset
|
2639 rl.revision(n) |
11694
bf49d48e4602
perf: add perfrevlog function to check performance of revlog
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
10493
diff
changeset
|
2640 |
32225
c68c400d0a2d
perf: move gettimer() call
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32224
diff
changeset
|
2641 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
|
2642 timer(d) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
2643 fm.end() |
11694
bf49d48e4602
perf: add perfrevlog function to check performance of revlog
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
10493
diff
changeset
|
2644 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2645 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2646 @command( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2647 b'perfrevlogwrite', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2648 revlogopts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2649 + formatteropts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2650 + [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2651 (b's', b'startrev', 1000, b'revision to start writing at'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2652 (b'', b'stoprev', -1, b'last revision to write'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2653 (b'', b'count', 3, b'number of passes to perform'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2654 (b'', b'details', False, b'print timing for every revisions tested'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2655 (b'', b'source', b'full', b'the kind of data feed in the revlog'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2656 (b'', b'lazydeltabase', True, b'try the provided delta first'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2657 (b'', b'clear-caches', True, b'clear revlog cache between calls'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2658 ], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2659 b'-c|-m|FILE', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2660 ) |
40550
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2661 def perfrevlogwrite(ui, repo, file_=None, startrev=1000, stoprev=-1, **opts): |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2662 """Benchmark writing a series of revisions to a revlog. |
40553
631011ff6771
perf: add the notion of "source" to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40552
diff
changeset
|
2663 |
631011ff6771
perf: add the notion of "source" to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40552
diff
changeset
|
2664 Possible source values are: |
631011ff6771
perf: add the notion of "source" to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40552
diff
changeset
|
2665 * `full`: add from a full text (default). |
40554
6c2357029364
perf: add `parent-1` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40553
diff
changeset
|
2666 * `parent-1`: add from a delta to the first parent |
40555
b5b3dd4e40c3
perf: add `parent-2` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40554
diff
changeset
|
2667 * `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:
40554
diff
changeset
|
2668 (use a delta from the first parent otherwise) |
40556
e14d44772fb3
perf: add `parent-smallest` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40555
diff
changeset
|
2669 * `parent-smallest`: add from the smallest delta (either p1 or p2) |
40557
355ae096faef
perf: add `storage` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40556
diff
changeset
|
2670 * `storage`: add from the existing precomputed deltas |
42461
74e2f4b609f6
perf: clarify some of the custom behavior of `perfrevlogwrite`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42460
diff
changeset
|
2671 |
74e2f4b609f6
perf: clarify some of the custom behavior of `perfrevlogwrite`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42460
diff
changeset
|
2672 Note: This performance command measures performance in a custom way. As a |
74e2f4b609f6
perf: clarify some of the custom behavior of `perfrevlogwrite`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42460
diff
changeset
|
2673 result some of the global configuration of the 'perf' command does not |
74e2f4b609f6
perf: clarify some of the custom behavior of `perfrevlogwrite`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42460
diff
changeset
|
2674 apply to it: |
74e2f4b609f6
perf: clarify some of the custom behavior of `perfrevlogwrite`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42460
diff
changeset
|
2675 |
74e2f4b609f6
perf: clarify some of the custom behavior of `perfrevlogwrite`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42460
diff
changeset
|
2676 * ``pre-run``: disabled |
74e2f4b609f6
perf: clarify some of the custom behavior of `perfrevlogwrite`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42460
diff
changeset
|
2677 |
74e2f4b609f6
perf: clarify some of the custom behavior of `perfrevlogwrite`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42460
diff
changeset
|
2678 * ``profile-benchmark``: disabled |
74e2f4b609f6
perf: clarify some of the custom behavior of `perfrevlogwrite`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42460
diff
changeset
|
2679 |
74e2f4b609f6
perf: clarify some of the custom behavior of `perfrevlogwrite`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42460
diff
changeset
|
2680 * ``run-limits``: disabled use --count instead |
40550
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2681 """ |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2682 opts = _byteskwargs(opts) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2683 |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2684 rl = cmdutil.openrevlog(repo, b'perfrevlogwrite', file_, opts) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2685 rllen = getlen(ui)(rl) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2686 if startrev < 0: |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2687 startrev = rllen + startrev |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2688 if stoprev < 0: |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2689 stoprev = rllen + stoprev |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2690 |
40558
4756a33d0d31
perf: add a lazydeltabase option to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40557
diff
changeset
|
2691 lazydeltabase = opts['lazydeltabase'] |
40553
631011ff6771
perf: add the notion of "source" to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40552
diff
changeset
|
2692 source = opts['source'] |
41002
e88ced97151d
perfrevlogwrite: fix a typo in the option name
Boris Feld <boris.feld@octobus.net>
parents:
40977
diff
changeset
|
2693 clearcaches = opts['clear_caches'] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2694 validsource = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2695 b'full', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2696 b'parent-1', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2697 b'parent-2', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2698 b'parent-smallest', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2699 b'storage', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2700 ) |
40553
631011ff6771
perf: add the notion of "source" to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40552
diff
changeset
|
2701 if source not in validsource: |
631011ff6771
perf: add the notion of "source" to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40552
diff
changeset
|
2702 raise error.Abort('invalid source type: %s' % source) |
631011ff6771
perf: add the notion of "source" to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40552
diff
changeset
|
2703 |
40550
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2704 ### actually gather results |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2705 count = opts['count'] |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2706 if count <= 0: |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2707 raise error.Abort('invalide run count: %d' % count) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2708 allresults = [] |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2709 for c in range(count): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2710 timing = _timeonewrite( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2711 ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2712 rl, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2713 source, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2714 startrev, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2715 stoprev, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2716 c + 1, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2717 lazydeltabase=lazydeltabase, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2718 clearcaches=clearcaches, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2719 ) |
40553
631011ff6771
perf: add the notion of "source" to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40552
diff
changeset
|
2720 allresults.append(timing) |
40550
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2721 |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2722 ### consolidate the results in a single list |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2723 results = [] |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2724 for idx, (rev, t) in enumerate(allresults[0]): |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2725 ts = [t] |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2726 for other in allresults[1:]: |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2727 orev, ot = other[idx] |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2728 assert orev == rev |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2729 ts.append(ot) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2730 results.append((rev, ts)) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2731 resultcount = len(results) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2732 |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2733 ### Compute and display relevant statistics |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2734 |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2735 # get a formatter |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2736 fm = ui.formatter(b'perf', opts) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2737 displayall = ui.configbool(b"perf", b"all-timing", False) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2738 |
40551
4dd7edeb3da9
perf: offer full details in perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40550
diff
changeset
|
2739 # print individual details if requested |
4dd7edeb3da9
perf: offer full details in perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40550
diff
changeset
|
2740 if opts['details']: |
4dd7edeb3da9
perf: offer full details in perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40550
diff
changeset
|
2741 for idx, item in enumerate(results, 1): |
4dd7edeb3da9
perf: offer full details in perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40550
diff
changeset
|
2742 rev, data = item |
4dd7edeb3da9
perf: offer full details in perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40550
diff
changeset
|
2743 title = 'revisions #%d of %d, rev %d' % (idx, resultcount, rev) |
4dd7edeb3da9
perf: offer full details in perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40550
diff
changeset
|
2744 formatone(fm, data, title=title, displayall=displayall) |
4dd7edeb3da9
perf: offer full details in perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40550
diff
changeset
|
2745 |
40550
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2746 # sorts results by median time |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2747 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:
40537
diff
changeset
|
2748 # list of (name, index) to display) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2749 relevants = [ |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2750 ("min", 0), |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2751 ("10%", resultcount * 10 // 100), |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2752 ("25%", resultcount * 25 // 100), |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2753 ("50%", resultcount * 70 // 100), |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2754 ("75%", resultcount * 75 // 100), |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2755 ("90%", resultcount * 90 // 100), |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2756 ("95%", resultcount * 95 // 100), |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2757 ("99%", resultcount * 99 // 100), |
40956
74ee5ff1e81c
perf: report more of the higher range in perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40948
diff
changeset
|
2758 ("99.9%", resultcount * 999 // 1000), |
74ee5ff1e81c
perf: report more of the higher range in perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40948
diff
changeset
|
2759 ("99.99%", resultcount * 9999 // 10000), |
74ee5ff1e81c
perf: report more of the higher range in perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40948
diff
changeset
|
2760 ("99.999%", resultcount * 99999 // 100000), |
40550
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2761 ("max", -1), |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2762 ] |
40552
c63081cd3902
perf: only display the total time for perfrevlogwrite if quiet
Boris Feld <boris.feld@octobus.net>
parents:
40551
diff
changeset
|
2763 if not ui.quiet: |
c63081cd3902
perf: only display the total time for perfrevlogwrite if quiet
Boris Feld <boris.feld@octobus.net>
parents:
40551
diff
changeset
|
2764 for name, idx in relevants: |
c63081cd3902
perf: only display the total time for perfrevlogwrite if quiet
Boris Feld <boris.feld@octobus.net>
parents:
40551
diff
changeset
|
2765 data = results[idx] |
c63081cd3902
perf: only display the total time for perfrevlogwrite if quiet
Boris Feld <boris.feld@octobus.net>
parents:
40551
diff
changeset
|
2766 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:
40551
diff
changeset
|
2767 formatone(fm, data[1], title=title, displayall=displayall) |
40550
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2768 |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2769 # 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:
40537
diff
changeset
|
2770 # for now |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2771 totaltime = [] |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2772 for item in allresults: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2773 totaltime.append( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2774 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2775 sum(x[1][0] for x in item), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2776 sum(x[1][1] for x in item), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2777 sum(x[1][2] for x in item), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2778 ) |
40550
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2779 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2780 formatone( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2781 fm, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2782 totaltime, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2783 title="total time (%d revs)" % resultcount, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2784 displayall=displayall, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2785 ) |
40550
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2786 fm.end() |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2787 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2788 |
40550
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2789 class _faketr(object): |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2790 def add(s, x, y, z=None): |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2791 return None |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2792 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2793 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2794 def _timeonewrite( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2795 ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2796 orig, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2797 source, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2798 startrev, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2799 stoprev, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2800 runidx=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2801 lazydeltabase=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2802 clearcaches=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2803 ): |
40550
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2804 timings = [] |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2805 tr = _faketr() |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2806 with _temprevlog(ui, orig, startrev) as dest: |
40558
4756a33d0d31
perf: add a lazydeltabase option to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40557
diff
changeset
|
2807 dest._lazydeltabase = lazydeltabase |
40550
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2808 revs = list(orig.revs(startrev, stoprev)) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2809 total = len(revs) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2810 topic = 'adding' |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2811 if runidx is not None: |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2812 topic += ' (run #%d)' % runidx |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2813 # Support both old and new progress API |
41156
f36fd52dae8f
perfrevlogwrite: use progress helper on modern hg
Martin von Zweigbergk <martinvonz@google.com>
parents:
41002
diff
changeset
|
2814 if util.safehasattr(ui, 'makeprogress'): |
f36fd52dae8f
perfrevlogwrite: use progress helper on modern hg
Martin von Zweigbergk <martinvonz@google.com>
parents:
41002
diff
changeset
|
2815 progress = ui.makeprogress(topic, unit='revs', total=total) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2816 |
41156
f36fd52dae8f
perfrevlogwrite: use progress helper on modern hg
Martin von Zweigbergk <martinvonz@google.com>
parents:
41002
diff
changeset
|
2817 def updateprogress(pos): |
f36fd52dae8f
perfrevlogwrite: use progress helper on modern hg
Martin von Zweigbergk <martinvonz@google.com>
parents:
41002
diff
changeset
|
2818 progress.update(pos) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2819 |
41156
f36fd52dae8f
perfrevlogwrite: use progress helper on modern hg
Martin von Zweigbergk <martinvonz@google.com>
parents:
41002
diff
changeset
|
2820 def completeprogress(): |
f36fd52dae8f
perfrevlogwrite: use progress helper on modern hg
Martin von Zweigbergk <martinvonz@google.com>
parents:
41002
diff
changeset
|
2821 progress.complete() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2822 |
41156
f36fd52dae8f
perfrevlogwrite: use progress helper on modern hg
Martin von Zweigbergk <martinvonz@google.com>
parents:
41002
diff
changeset
|
2823 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2824 |
41156
f36fd52dae8f
perfrevlogwrite: use progress helper on modern hg
Martin von Zweigbergk <martinvonz@google.com>
parents:
41002
diff
changeset
|
2825 def updateprogress(pos): |
f36fd52dae8f
perfrevlogwrite: use progress helper on modern hg
Martin von Zweigbergk <martinvonz@google.com>
parents:
41002
diff
changeset
|
2826 ui.progress(topic, pos, unit='revs', total=total) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2827 |
41156
f36fd52dae8f
perfrevlogwrite: use progress helper on modern hg
Martin von Zweigbergk <martinvonz@google.com>
parents:
41002
diff
changeset
|
2828 def completeprogress(): |
f36fd52dae8f
perfrevlogwrite: use progress helper on modern hg
Martin von Zweigbergk <martinvonz@google.com>
parents:
41002
diff
changeset
|
2829 ui.progress(topic, None, unit='revs', total=total) |
f36fd52dae8f
perfrevlogwrite: use progress helper on modern hg
Martin von Zweigbergk <martinvonz@google.com>
parents:
41002
diff
changeset
|
2830 |
40550
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2831 for idx, rev in enumerate(revs): |
41156
f36fd52dae8f
perfrevlogwrite: use progress helper on modern hg
Martin von Zweigbergk <martinvonz@google.com>
parents:
41002
diff
changeset
|
2832 updateprogress(idx) |
40553
631011ff6771
perf: add the notion of "source" to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40552
diff
changeset
|
2833 addargs, addkwargs = _getrevisionseed(orig, rev, tr, source) |
40977
21a9cace4bbf
perfrevflogwrite: clear revlog cache between each write
Boris Feld <boris.feld@octobus.net>
parents:
40956
diff
changeset
|
2834 if clearcaches: |
21a9cace4bbf
perfrevflogwrite: clear revlog cache between each write
Boris Feld <boris.feld@octobus.net>
parents:
40956
diff
changeset
|
2835 dest.index.clearcaches() |
21a9cace4bbf
perfrevflogwrite: clear revlog cache between each write
Boris Feld <boris.feld@octobus.net>
parents:
40956
diff
changeset
|
2836 dest.clearcaches() |
40550
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2837 with timeone() as r: |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2838 dest.addrawrevision(*addargs, **addkwargs) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2839 timings.append((rev, r[0])) |
41156
f36fd52dae8f
perfrevlogwrite: use progress helper on modern hg
Martin von Zweigbergk <martinvonz@google.com>
parents:
41002
diff
changeset
|
2840 updateprogress(total) |
f36fd52dae8f
perfrevlogwrite: use progress helper on modern hg
Martin von Zweigbergk <martinvonz@google.com>
parents:
41002
diff
changeset
|
2841 completeprogress() |
40550
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2842 return timings |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2843 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2844 |
40553
631011ff6771
perf: add the notion of "source" to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40552
diff
changeset
|
2845 def _getrevisionseed(orig, rev, tr, source): |
40555
b5b3dd4e40c3
perf: add `parent-2` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40554
diff
changeset
|
2846 from mercurial.node import nullid |
b5b3dd4e40c3
perf: add `parent-2` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40554
diff
changeset
|
2847 |
40550
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2848 linkrev = orig.linkrev(rev) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2849 node = orig.node(rev) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2850 p1, p2 = orig.parents(node) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2851 flags = orig.flags(rev) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2852 cachedelta = None |
40553
631011ff6771
perf: add the notion of "source" to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40552
diff
changeset
|
2853 text = None |
631011ff6771
perf: add the notion of "source" to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40552
diff
changeset
|
2854 |
631011ff6771
perf: add the notion of "source" to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40552
diff
changeset
|
2855 if source == b'full': |
631011ff6771
perf: add the notion of "source" to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40552
diff
changeset
|
2856 text = orig.revision(rev) |
40554
6c2357029364
perf: add `parent-1` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40553
diff
changeset
|
2857 elif source == b'parent-1': |
6c2357029364
perf: add `parent-1` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40553
diff
changeset
|
2858 baserev = orig.rev(p1) |
6c2357029364
perf: add `parent-1` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40553
diff
changeset
|
2859 cachedelta = (baserev, orig.revdiff(p1, rev)) |
40555
b5b3dd4e40c3
perf: add `parent-2` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40554
diff
changeset
|
2860 elif source == b'parent-2': |
b5b3dd4e40c3
perf: add `parent-2` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40554
diff
changeset
|
2861 parent = p2 |
b5b3dd4e40c3
perf: add `parent-2` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40554
diff
changeset
|
2862 if p2 == nullid: |
b5b3dd4e40c3
perf: add `parent-2` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40554
diff
changeset
|
2863 parent = p1 |
b5b3dd4e40c3
perf: add `parent-2` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40554
diff
changeset
|
2864 baserev = orig.rev(parent) |
b5b3dd4e40c3
perf: add `parent-2` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40554
diff
changeset
|
2865 cachedelta = (baserev, orig.revdiff(parent, rev)) |
40556
e14d44772fb3
perf: add `parent-smallest` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40555
diff
changeset
|
2866 elif source == b'parent-smallest': |
e14d44772fb3
perf: add `parent-smallest` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40555
diff
changeset
|
2867 p1diff = orig.revdiff(p1, rev) |
e14d44772fb3
perf: add `parent-smallest` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40555
diff
changeset
|
2868 parent = p1 |
e14d44772fb3
perf: add `parent-smallest` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40555
diff
changeset
|
2869 diff = p1diff |
e14d44772fb3
perf: add `parent-smallest` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40555
diff
changeset
|
2870 if p2 != nullid: |
e14d44772fb3
perf: add `parent-smallest` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40555
diff
changeset
|
2871 p2diff = orig.revdiff(p2, rev) |
e14d44772fb3
perf: add `parent-smallest` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40555
diff
changeset
|
2872 if len(p1diff) > len(p2diff): |
e14d44772fb3
perf: add `parent-smallest` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40555
diff
changeset
|
2873 parent = p2 |
e14d44772fb3
perf: add `parent-smallest` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40555
diff
changeset
|
2874 diff = p2diff |
e14d44772fb3
perf: add `parent-smallest` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40555
diff
changeset
|
2875 baserev = orig.rev(parent) |
e14d44772fb3
perf: add `parent-smallest` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40555
diff
changeset
|
2876 cachedelta = (baserev, diff) |
40557
355ae096faef
perf: add `storage` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40556
diff
changeset
|
2877 elif source == b'storage': |
355ae096faef
perf: add `storage` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40556
diff
changeset
|
2878 baserev = orig.deltaparent(rev) |
355ae096faef
perf: add `storage` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40556
diff
changeset
|
2879 cachedelta = (baserev, orig.revdiff(orig.node(baserev), rev)) |
40550
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2880 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2881 return ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2882 (text, tr, linkrev, p1, p2), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2883 {'node': node, 'flags': flags, 'cachedelta': cachedelta}, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2884 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2885 |
40550
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2886 |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2887 @contextlib.contextmanager |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2888 def _temprevlog(ui, orig, truncaterev): |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2889 from mercurial import vfs as vfsmod |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2890 |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2891 if orig._inline: |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2892 raise error.Abort('not supporting inline revlog (yet)') |
42462
bc4373babd04
revlog: add the option to track the expected compression upper bound
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42461
diff
changeset
|
2893 revlogkwargs = {} |
bc4373babd04
revlog: add the option to track the expected compression upper bound
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42461
diff
changeset
|
2894 k = 'upperboundcomp' |
bc4373babd04
revlog: add the option to track the expected compression upper bound
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42461
diff
changeset
|
2895 if util.safehasattr(orig, k): |
bc4373babd04
revlog: add the option to track the expected compression upper bound
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42461
diff
changeset
|
2896 revlogkwargs[k] = getattr(orig, k) |
40550
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2897 |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2898 origindexpath = orig.opener.join(orig.indexfile) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2899 origdatapath = orig.opener.join(orig.datafile) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2900 indexname = 'revlog.i' |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2901 dataname = 'revlog.d' |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2902 |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2903 tmpdir = tempfile.mkdtemp(prefix='tmp-hgperf-') |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2904 try: |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2905 # copy the data file in a temporary directory |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2906 ui.debug('copying data in %s\n' % tmpdir) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2907 destindexpath = os.path.join(tmpdir, 'revlog.i') |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2908 destdatapath = os.path.join(tmpdir, 'revlog.d') |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2909 shutil.copyfile(origindexpath, destindexpath) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2910 shutil.copyfile(origdatapath, destdatapath) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2911 |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2912 # remove the data we want to add again |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2913 ui.debug('truncating data to be rewritten\n') |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2914 with open(destindexpath, 'ab') as index: |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2915 index.seek(0) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2916 index.truncate(truncaterev * orig._io.size) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2917 with open(destdatapath, 'ab') as data: |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2918 data.seek(0) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2919 data.truncate(orig.start(truncaterev)) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2920 |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2921 # instantiate a new revlog from the temporary copy |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2922 ui.debug('truncating adding to be rewritten\n') |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2923 vfs = vfsmod.vfs(tmpdir) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2924 vfs.options = getattr(orig.opener, 'options', None) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2925 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2926 dest = revlog.revlog( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2927 vfs, indexfile=indexname, datafile=dataname, **revlogkwargs |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2928 ) |
40550
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2929 if dest._inline: |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2930 raise error.Abort('not supporting inline revlog (yet)') |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2931 # make sure internals are initialized |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2932 dest.revision(len(dest) - 1) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2933 yield dest |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2934 del dest, vfs |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2935 finally: |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2936 shutil.rmtree(tmpdir, True) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
2937 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2938 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2939 @command( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2940 b'perfrevlogchunks', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2941 revlogopts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2942 + formatteropts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2943 + [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2944 (b'e', b'engines', b'', b'compression engines to use'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2945 (b's', b'startrev', 0, b'revision to start at'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2946 ], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2947 b'-c|-m|FILE', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2948 ) |
30796
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
2949 def perfrevlogchunks(ui, repo, file_=None, engines=None, startrev=0, **opts): |
30451
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
2950 """Benchmark operations on revlog chunks. |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
2951 |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
2952 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:
30426
diff
changeset
|
2953 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:
30426
diff
changeset
|
2954 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:
30426
diff
changeset
|
2955 |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
2956 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:
30426
diff
changeset
|
2957 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:
30426
diff
changeset
|
2958 For measurements of higher-level operations like resolving revisions, |
32531
7236facefd4f
perf: rename perfrevlog to perfrevlogrevisions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32467
diff
changeset
|
2959 see ``perfrevlogrevisions`` and ``perfrevlogrevision``. |
30451
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
2960 """ |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
2961 opts = _byteskwargs(opts) |
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
2962 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2963 rl = cmdutil.openrevlog(repo, b'perfrevlogchunks', file_, opts) |
32229
75e93d95aae6
revlog: rename _chunkraw to _getsegmentforrevs()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32228
diff
changeset
|
2964 |
75e93d95aae6
revlog: rename _chunkraw to _getsegmentforrevs()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32228
diff
changeset
|
2965 # _chunkraw was renamed to _getsegmentforrevs. |
75e93d95aae6
revlog: rename _chunkraw to _getsegmentforrevs()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32228
diff
changeset
|
2966 try: |
75e93d95aae6
revlog: rename _chunkraw to _getsegmentforrevs()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32228
diff
changeset
|
2967 segmentforrevs = rl._getsegmentforrevs |
75e93d95aae6
revlog: rename _chunkraw to _getsegmentforrevs()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32228
diff
changeset
|
2968 except AttributeError: |
75e93d95aae6
revlog: rename _chunkraw to _getsegmentforrevs()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32228
diff
changeset
|
2969 segmentforrevs = rl._chunkraw |
30796
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
2970 |
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
2971 # Verify engines argument. |
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
2972 if engines: |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2973 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
|
2974 for engine in engines: |
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
2975 try: |
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
2976 util.compressionengines[engine] |
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
2977 except KeyError: |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2978 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
|
2979 else: |
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
2980 engines = [] |
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
2981 for e in util.compengines: |
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
2982 engine = util.compengines[e] |
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
2983 try: |
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
2984 if engine.available(): |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2985 engine.revlogcompressor().compress(b'dummy') |
30796
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
2986 engines.append(e) |
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
2987 except NotImplementedError: |
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
2988 pass |
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
2989 |
30451
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
2990 revs = list(rl.revs(startrev, len(rl) - 1)) |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
2991 |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
2992 def rlfh(rl): |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
2993 if rl._inline: |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
2994 return getsvfs(repo)(rl.indexfile) |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
2995 else: |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
2996 return getsvfs(repo)(rl.datafile) |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
2997 |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
2998 def doread(): |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
2999 rl.clearcaches() |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3000 for rev in revs: |
32228
112ba1c7d65d
perf: store reference to revlog._chunkraw in a local variable
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32225
diff
changeset
|
3001 segmentforrevs(rev, rev) |
30451
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3002 |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3003 def doreadcachedfh(): |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3004 rl.clearcaches() |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3005 fh = rlfh(rl) |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3006 for rev in revs: |
32228
112ba1c7d65d
perf: store reference to revlog._chunkraw in a local variable
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32225
diff
changeset
|
3007 segmentforrevs(rev, rev, df=fh) |
30451
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3008 |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3009 def doreadbatch(): |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3010 rl.clearcaches() |
32228
112ba1c7d65d
perf: store reference to revlog._chunkraw in a local variable
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32225
diff
changeset
|
3011 segmentforrevs(revs[0], revs[-1]) |
30451
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3012 |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3013 def doreadbatchcachedfh(): |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3014 rl.clearcaches() |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3015 fh = rlfh(rl) |
32228
112ba1c7d65d
perf: store reference to revlog._chunkraw in a local variable
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32225
diff
changeset
|
3016 segmentforrevs(revs[0], revs[-1], df=fh) |
30451
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3017 |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3018 def dochunk(): |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3019 rl.clearcaches() |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3020 fh = rlfh(rl) |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3021 for rev in revs: |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3022 rl._chunk(rev, df=fh) |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3023 |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3024 chunks = [None] |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3025 |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3026 def dochunkbatch(): |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3027 rl.clearcaches() |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3028 fh = rlfh(rl) |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3029 # Save chunks as a side-effect. |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3030 chunks[0] = rl._chunks(revs, df=fh) |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3031 |
30796
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
3032 def docompress(compressor): |
30451
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3033 rl.clearcaches() |
30796
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
3034 |
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
3035 try: |
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
3036 # Swap in the requested compression engine. |
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
3037 oldcompressor = rl._compressor |
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
3038 rl._compressor = compressor |
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
3039 for chunk in chunks[0]: |
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
3040 rl.compress(chunk) |
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
3041 finally: |
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
3042 rl._compressor = oldcompressor |
30451
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3043 |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3044 benches = [ |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3045 (lambda: doread(), b'read'), |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3046 (lambda: doreadcachedfh(), b'read w/ reused fd'), |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3047 (lambda: doreadbatch(), b'read batch'), |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3048 (lambda: doreadbatchcachedfh(), b'read batch w/ reused fd'), |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3049 (lambda: dochunk(), b'chunk'), |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3050 (lambda: dochunkbatch(), b'chunk batch'), |
30451
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3051 ] |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3052 |
30796
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
3053 for engine in sorted(engines): |
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
3054 compressor = util.compengines[engine].revlogcompressor() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3055 benches.append( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3056 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3057 functools.partial(docompress, compressor), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3058 b'compress w/ %s' % engine, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3059 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3060 ) |
30796
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
3061 |
30451
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3062 for fn, title in benches: |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3063 timer, fm = gettimer(ui, opts) |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3064 timer(fn, title=title) |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3065 fm.end() |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3066 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3067 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3068 @command( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3069 b'perfrevlogrevision', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3070 revlogopts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3071 + formatteropts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3072 + [(b'', b'cache', False, b'use caches instead of clearing')], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3073 b'-c|-m|FILE REV', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3074 ) |
27470
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3075 def perfrevlogrevision(ui, repo, file_, rev=None, cache=None, **opts): |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3076 """Benchmark obtaining a revlog revision. |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3077 |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3078 Obtaining a revlog revision consists of roughly the following steps: |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3079 |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3080 1. Compute the delta chain |
40531
e6c8a0fd3db4
perf: measure slicing time in perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents:
40530
diff
changeset
|
3081 2. Slice the delta chain if applicable |
e6c8a0fd3db4
perf: measure slicing time in perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents:
40530
diff
changeset
|
3082 3. Obtain the raw chunks for that delta chain |
e6c8a0fd3db4
perf: measure slicing time in perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents:
40530
diff
changeset
|
3083 4. Decompress each raw chunk |
e6c8a0fd3db4
perf: measure slicing time in perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents:
40530
diff
changeset
|
3084 5. Apply binary patches to obtain fulltext |
e6c8a0fd3db4
perf: measure slicing time in perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents:
40530
diff
changeset
|
3085 6. Verify hash of fulltext |
27470
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3086 |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3087 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
|
3088 """ |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
3089 opts = _byteskwargs(opts) |
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
3090 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3091 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
|
3092 file_, rev = None, file_ |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3093 elif rev is None: |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3094 raise error.CommandError(b'perfrevlogrevision', b'invalid arguments') |
27470
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3095 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3096 r = cmdutil.openrevlog(repo, b'perfrevlogrevision', file_, opts) |
32229
75e93d95aae6
revlog: rename _chunkraw to _getsegmentforrevs()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32228
diff
changeset
|
3097 |
75e93d95aae6
revlog: rename _chunkraw to _getsegmentforrevs()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32228
diff
changeset
|
3098 # _chunkraw was renamed to _getsegmentforrevs. |
75e93d95aae6
revlog: rename _chunkraw to _getsegmentforrevs()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32228
diff
changeset
|
3099 try: |
75e93d95aae6
revlog: rename _chunkraw to _getsegmentforrevs()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32228
diff
changeset
|
3100 segmentforrevs = r._getsegmentforrevs |
75e93d95aae6
revlog: rename _chunkraw to _getsegmentforrevs()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32228
diff
changeset
|
3101 except AttributeError: |
75e93d95aae6
revlog: rename _chunkraw to _getsegmentforrevs()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32228
diff
changeset
|
3102 segmentforrevs = r._chunkraw |
75e93d95aae6
revlog: rename _chunkraw to _getsegmentforrevs()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32228
diff
changeset
|
3103 |
27470
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3104 node = r.lookup(rev) |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3105 rev = r.rev(node) |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3106 |
30882
74cfc4357c64
perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30796
diff
changeset
|
3107 def getrawchunks(data, chain): |
74cfc4357c64
perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30796
diff
changeset
|
3108 start = r.start |
74cfc4357c64
perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30796
diff
changeset
|
3109 length = r.length |
74cfc4357c64
perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30796
diff
changeset
|
3110 inline = r._inline |
74cfc4357c64
perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30796
diff
changeset
|
3111 iosize = r._io.size |
74cfc4357c64
perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30796
diff
changeset
|
3112 buffer = util.buffer |
74cfc4357c64
perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30796
diff
changeset
|
3113 |
74cfc4357c64
perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30796
diff
changeset
|
3114 chunks = [] |
74cfc4357c64
perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30796
diff
changeset
|
3115 ladd = chunks.append |
40530
914079ee3334
perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents:
40529
diff
changeset
|
3116 for idx, item in enumerate(chain): |
914079ee3334
perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents:
40529
diff
changeset
|
3117 offset = start(item[0]) |
914079ee3334
perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents:
40529
diff
changeset
|
3118 bits = data[idx] |
914079ee3334
perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents:
40529
diff
changeset
|
3119 for rev in item: |
914079ee3334
perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents:
40529
diff
changeset
|
3120 chunkstart = start(rev) |
914079ee3334
perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents:
40529
diff
changeset
|
3121 if inline: |
914079ee3334
perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents:
40529
diff
changeset
|
3122 chunkstart += (rev + 1) * iosize |
914079ee3334
perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents:
40529
diff
changeset
|
3123 chunklength = length(rev) |
914079ee3334
perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents:
40529
diff
changeset
|
3124 ladd(buffer(bits, chunkstart - offset, chunklength)) |
30882
74cfc4357c64
perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30796
diff
changeset
|
3125 |
74cfc4357c64
perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30796
diff
changeset
|
3126 return chunks |
74cfc4357c64
perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30796
diff
changeset
|
3127 |
27470
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3128 def dodeltachain(rev): |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3129 if not cache: |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3130 r.clearcaches() |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3131 r._deltachain(rev) |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3132 |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3133 def doread(chain): |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3134 if not cache: |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3135 r.clearcaches() |
40530
914079ee3334
perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents:
40529
diff
changeset
|
3136 for item in slicedchain: |
914079ee3334
perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents:
40529
diff
changeset
|
3137 segmentforrevs(item[0], item[-1]) |
27470
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3138 |
40531
e6c8a0fd3db4
perf: measure slicing time in perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents:
40530
diff
changeset
|
3139 def doslice(r, chain, size): |
e6c8a0fd3db4
perf: measure slicing time in perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents:
40530
diff
changeset
|
3140 for s in slicechunk(r, chain, targetsize=size): |
e6c8a0fd3db4
perf: measure slicing time in perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents:
40530
diff
changeset
|
3141 pass |
e6c8a0fd3db4
perf: measure slicing time in perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents:
40530
diff
changeset
|
3142 |
30882
74cfc4357c64
perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30796
diff
changeset
|
3143 def dorawchunks(data, chain): |
27470
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3144 if not cache: |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3145 r.clearcaches() |
30882
74cfc4357c64
perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30796
diff
changeset
|
3146 getrawchunks(data, chain) |
27470
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3147 |
30882
74cfc4357c64
perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30796
diff
changeset
|
3148 def dodecompress(chunks): |
74cfc4357c64
perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30796
diff
changeset
|
3149 decomp = r.decompress |
74cfc4357c64
perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30796
diff
changeset
|
3150 for chunk in chunks: |
74cfc4357c64
perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30796
diff
changeset
|
3151 decomp(chunk) |
27470
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3152 |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3153 def dopatch(text, bins): |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3154 if not cache: |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3155 r.clearcaches() |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3156 mdiff.patches(text, bins) |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3157 |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3158 def dohash(text): |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3159 if not cache: |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3160 r.clearcaches() |
30584
be5b2098a817
revlog: merge hash checking subfunctions
Remi Chaintron <remi@fb.com>
parents:
30451
diff
changeset
|
3161 r.checkhash(text, node, rev=rev) |
27470
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3162 |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3163 def dorevision(): |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3164 if not cache: |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3165 r.clearcaches() |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3166 r.revision(node) |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3167 |
40530
914079ee3334
perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents:
40529
diff
changeset
|
3168 try: |
914079ee3334
perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents:
40529
diff
changeset
|
3169 from mercurial.revlogutils.deltas import slicechunk |
914079ee3334
perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents:
40529
diff
changeset
|
3170 except ImportError: |
914079ee3334
perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents:
40529
diff
changeset
|
3171 slicechunk = getattr(revlog, '_slicechunk', None) |
914079ee3334
perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents:
40529
diff
changeset
|
3172 |
914079ee3334
perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents:
40529
diff
changeset
|
3173 size = r.length(rev) |
27470
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3174 chain = r._deltachain(rev)[0] |
40530
914079ee3334
perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents:
40529
diff
changeset
|
3175 if not getattr(r, '_withsparseread', False): |
914079ee3334
perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents:
40529
diff
changeset
|
3176 slicedchain = (chain,) |
914079ee3334
perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents:
40529
diff
changeset
|
3177 else: |
914079ee3334
perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents:
40529
diff
changeset
|
3178 slicedchain = tuple(slicechunk(r, chain, targetsize=size)) |
914079ee3334
perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents:
40529
diff
changeset
|
3179 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:
40529
diff
changeset
|
3180 rawchunks = getrawchunks(data, slicedchain) |
27470
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3181 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
|
3182 text = bytes(bins[0]) |
27470
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3183 bins = bins[1:] |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3184 text = mdiff.patches(text, bins) |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3185 |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3186 benches = [ |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3187 (lambda: dorevision(), b'full'), |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3188 (lambda: dodeltachain(rev), b'deltachain'), |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3189 (lambda: doread(chain), b'read'), |
40531
e6c8a0fd3db4
perf: measure slicing time in perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents:
40530
diff
changeset
|
3190 ] |
e6c8a0fd3db4
perf: measure slicing time in perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents:
40530
diff
changeset
|
3191 |
e6c8a0fd3db4
perf: measure slicing time in perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents:
40530
diff
changeset
|
3192 if getattr(r, '_withsparseread', False): |
e6c8a0fd3db4
perf: measure slicing time in perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents:
40530
diff
changeset
|
3193 slicing = (lambda: doslice(r, chain, size), b'slice-sparse-chain') |
e6c8a0fd3db4
perf: measure slicing time in perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents:
40530
diff
changeset
|
3194 benches.append(slicing) |
e6c8a0fd3db4
perf: measure slicing time in perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents:
40530
diff
changeset
|
3195 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3196 benches.extend( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3197 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3198 (lambda: dorawchunks(data, slicedchain), b'rawchunks'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3199 (lambda: dodecompress(rawchunks), b'decompress'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3200 (lambda: dopatch(text, bins), b'patch'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3201 (lambda: dohash(text), b'hash'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3202 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3203 ) |
27470
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3204 |
40529
cf3bef7f162b
perf: use the same timer for all section of perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents:
40349
diff
changeset
|
3205 timer, fm = gettimer(ui, opts) |
27470
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3206 for fn, title in benches: |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3207 timer(fn, title=title) |
40529
cf3bef7f162b
perf: use the same timer for all section of perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents:
40349
diff
changeset
|
3208 fm.end() |
27470
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3209 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3210 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3211 @command( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3212 b'perfrevset', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3213 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3214 (b'C', b'clear', False, b'clear volatile cache between each call.'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3215 (b'', b'contexts', False, b'obtain changectx for each revision'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3216 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3217 + formatteropts, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3218 b"REVSET", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3219 ) |
27072
e18a9ceade3b
perf: support obtaining contexts from perfrevset
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27017
diff
changeset
|
3220 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
|
3221 """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
|
3222 |
18644
3e92772d5383
spelling: fix some minor issues found by spell checker
Mads Kiilerich <mads@kiilerich.com>
parents:
18304
diff
changeset
|
3223 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
|
3224 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
|
3225 and obsolete related cache.""" |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
3226 opts = _byteskwargs(opts) |
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
3227 |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
3228 timer, fm = gettimer(ui, opts) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3229 |
18062
1471f5e83686
perf: add a command to measure revset performance
Siddharth Agarwal <sid0@fb.com>
parents:
18033
diff
changeset
|
3230 def d(): |
18239
a95f1d619bb7
perftest: add an option to invalidate volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18238
diff
changeset
|
3231 if clear: |
a95f1d619bb7
perftest: add an option to invalidate volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18238
diff
changeset
|
3232 repo.invalidatevolatilesets() |
27072
e18a9ceade3b
perf: support obtaining contexts from perfrevset
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27017
diff
changeset
|
3233 if contexts: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3234 for ctx in repo.set(expr): |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3235 pass |
27072
e18a9ceade3b
perf: support obtaining contexts from perfrevset
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27017
diff
changeset
|
3236 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3237 for r in repo.revs(expr): |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3238 pass |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3239 |
18062
1471f5e83686
perf: add a command to measure revset performance
Siddharth Agarwal <sid0@fb.com>
parents:
18033
diff
changeset
|
3240 timer(d) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
3241 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
|
3242 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3243 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3244 @command( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3245 b'perfvolatilesets', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3246 [(b'', b'clear-obsstore', False, b'drop obsstore between each call.'),] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3247 + formatteropts, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3248 ) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
3249 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
|
3250 """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
|
3251 |
a8318715d8bb
perftest: add a command to benchmark construction of volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18239
diff
changeset
|
3252 Volatile set computes element related to filtering and obsolescence.""" |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
3253 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
3254 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
|
3255 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
|
3256 |
a8318715d8bb
perftest: add a command to benchmark construction of volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18239
diff
changeset
|
3257 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
|
3258 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
|
3259 repo.invalidatevolatilesets() |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3260 if opts[b'clear_obsstore']: |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3261 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
|
3262 obsolete.getrevs(repo, name) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3263 |
18240
a8318715d8bb
perftest: add a command to benchmark construction of volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18239
diff
changeset
|
3264 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
|
3265 |
18241
f5ed27c51995
perftest: allow selection of volatile set to benchmark
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18240
diff
changeset
|
3266 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
|
3267 if names: |
f5ed27c51995
perftest: allow selection of volatile set to benchmark
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18240
diff
changeset
|
3268 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
|
3269 |
f5ed27c51995
perftest: allow selection of volatile set to benchmark
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18240
diff
changeset
|
3270 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
|
3271 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
|
3272 |
a8318715d8bb
perftest: add a command to benchmark construction of volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18239
diff
changeset
|
3273 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
|
3274 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
|
3275 repo.invalidatevolatilesets() |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3276 if opts[b'clear_obsstore']: |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3277 clearfilecache(repo, b'obsstore') |
20205
d67a7758da6d
perf: fix perfvolatilesets
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
20178
diff
changeset
|
3278 repoview.filterrevs(repo, name) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3279 |
18240
a8318715d8bb
perftest: add a command to benchmark construction of volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18239
diff
changeset
|
3280 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
|
3281 |
18241
f5ed27c51995
perftest: allow selection of volatile set to benchmark
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18240
diff
changeset
|
3282 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
|
3283 if names: |
f5ed27c51995
perftest: allow selection of volatile set to benchmark
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18240
diff
changeset
|
3284 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
|
3285 |
f5ed27c51995
perftest: allow selection of volatile set to benchmark
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18240
diff
changeset
|
3286 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
|
3287 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
|
3288 fm.end() |
18304
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3289 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3290 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3291 @command( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3292 b'perfbranchmap', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3293 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3294 (b'f', b'full', False, b'Includes build time of subset'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3295 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3296 b'', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3297 b'clear-revbranch', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3298 False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3299 b'purge the revbranch cache between computation', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3300 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3301 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3302 + formatteropts, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3303 ) |
36360
c25290b98190
perfbranchmap: allow to select the filter to benchmark
Boris Feld <boris.feld@octobus.net>
parents:
36359
diff
changeset
|
3304 def perfbranchmap(ui, repo, *filternames, **opts): |
18304
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3305 """benchmark the update of a branchmap |
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3306 |
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3307 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
|
3308 """ |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
3309 opts = _byteskwargs(opts) |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3310 full = opts.get(b"full", False) |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3311 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
|
3312 timer, fm = gettimer(ui, opts) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3313 |
18304
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3314 def getbranchmap(filtername): |
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3315 """generate a benchmark function for the filtername""" |
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3316 if filtername is None: |
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3317 view = repo |
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3318 else: |
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3319 view = repo.filtered(filtername) |
41615
328ca3b9e545
branchmap: encapsulate cache updating in the map itself
Martijn Pieters <mj@octobus.net>
parents:
41565
diff
changeset
|
3320 if util.safehasattr(view._branchcaches, '_per_filter'): |
328ca3b9e545
branchmap: encapsulate cache updating in the map itself
Martijn Pieters <mj@octobus.net>
parents:
41565
diff
changeset
|
3321 filtered = view._branchcaches._per_filter |
328ca3b9e545
branchmap: encapsulate cache updating in the map itself
Martijn Pieters <mj@octobus.net>
parents:
41565
diff
changeset
|
3322 else: |
328ca3b9e545
branchmap: encapsulate cache updating in the map itself
Martijn Pieters <mj@octobus.net>
parents:
41565
diff
changeset
|
3323 # older versions |
328ca3b9e545
branchmap: encapsulate cache updating in the map itself
Martijn Pieters <mj@octobus.net>
parents:
41565
diff
changeset
|
3324 filtered = view._branchcaches |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3325 |
18304
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3326 def d(): |
32710
326c0e2c1a1d
perfbranchmap: add an option to purge the revbranch cache
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32532
diff
changeset
|
3327 if clear_revbranch: |
326c0e2c1a1d
perfbranchmap: add an option to purge the revbranch cache
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32532
diff
changeset
|
3328 repo.revbranchcache()._clear() |
18304
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3329 if full: |
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3330 view._branchcaches.clear() |
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3331 else: |
41615
328ca3b9e545
branchmap: encapsulate cache updating in the map itself
Martijn Pieters <mj@octobus.net>
parents:
41565
diff
changeset
|
3332 filtered.pop(filtername, None) |
18304
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3333 view.branchmap() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3334 |
18304
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3335 return d |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3336 |
18304
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3337 # 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
|
3338 possiblefilters = set(repoview.filtertable) |
36360
c25290b98190
perfbranchmap: allow to select the filter to benchmark
Boris Feld <boris.feld@octobus.net>
parents:
36359
diff
changeset
|
3339 if filternames: |
c25290b98190
perfbranchmap: allow to select the filter to benchmark
Boris Feld <boris.feld@octobus.net>
parents:
36359
diff
changeset
|
3340 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
|
3341 subsettable = getbranchmapsubsettable() |
18304
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3342 allfilters = [] |
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3343 while possiblefilters: |
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3344 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
|
3345 subset = subsettable.get(name) |
18304
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3346 if subset not in possiblefilters: |
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3347 break |
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3348 else: |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3349 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
|
3350 allfilters.append(name) |
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3351 possiblefilters.remove(name) |
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3352 |
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3353 # warm the cache |
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3354 if not full: |
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3355 for name in allfilters: |
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3356 repo.filtered(name).branchmap() |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3357 if not filternames or b'unfiltered' in filternames: |
36360
c25290b98190
perfbranchmap: allow to select the filter to benchmark
Boris Feld <boris.feld@octobus.net>
parents:
36359
diff
changeset
|
3358 # add unfiltered |
c25290b98190
perfbranchmap: allow to select the filter to benchmark
Boris Feld <boris.feld@octobus.net>
parents:
36359
diff
changeset
|
3359 allfilters.append(None) |
30145
113aa6145020
perf: avoid actual writing branch cache out correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30144
diff
changeset
|
3360 |
41565
bf7fb97aecf1
branchmap: make branchcache responsible for reading
Martijn Pieters <mj@octobus.net>
parents:
41470
diff
changeset
|
3361 if util.safehasattr(branchmap.branchcache, 'fromfile'): |
bf7fb97aecf1
branchmap: make branchcache responsible for reading
Martijn Pieters <mj@octobus.net>
parents:
41470
diff
changeset
|
3362 branchcacheread = safeattrsetter(branchmap.branchcache, b'fromfile') |
bf7fb97aecf1
branchmap: make branchcache responsible for reading
Martijn Pieters <mj@octobus.net>
parents:
41470
diff
changeset
|
3363 branchcacheread.set(classmethod(lambda *args: None)) |
bf7fb97aecf1
branchmap: make branchcache responsible for reading
Martijn Pieters <mj@octobus.net>
parents:
41470
diff
changeset
|
3364 else: |
bf7fb97aecf1
branchmap: make branchcache responsible for reading
Martijn Pieters <mj@octobus.net>
parents:
41470
diff
changeset
|
3365 # older versions |
bf7fb97aecf1
branchmap: make branchcache responsible for reading
Martijn Pieters <mj@octobus.net>
parents:
41470
diff
changeset
|
3366 branchcacheread = safeattrsetter(branchmap, b'read') |
bf7fb97aecf1
branchmap: make branchcache responsible for reading
Martijn Pieters <mj@octobus.net>
parents:
41470
diff
changeset
|
3367 branchcacheread.set(lambda *args: None) |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3368 branchcachewrite = safeattrsetter(branchmap.branchcache, b'write') |
41565
bf7fb97aecf1
branchmap: make branchcache responsible for reading
Martijn Pieters <mj@octobus.net>
parents:
41470
diff
changeset
|
3369 branchcachewrite.set(lambda *args: None) |
18304
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3370 try: |
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3371 for name in allfilters: |
36359
df3f7f00a3fc
perfbranchmap: display 'unfiltered' for unfiltered performance
Boris Feld <boris.feld@octobus.net>
parents:
36178
diff
changeset
|
3372 printname = name |
df3f7f00a3fc
perfbranchmap: display 'unfiltered' for unfiltered performance
Boris Feld <boris.feld@octobus.net>
parents:
36178
diff
changeset
|
3373 if name is None: |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3374 printname = b'unfiltered' |
36359
df3f7f00a3fc
perfbranchmap: display 'unfiltered' for unfiltered performance
Boris Feld <boris.feld@octobus.net>
parents:
36178
diff
changeset
|
3375 timer(getbranchmap(name), title=str(printname)) |
18304
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3376 finally: |
30145
113aa6145020
perf: avoid actual writing branch cache out correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30144
diff
changeset
|
3377 branchcacheread.restore() |
113aa6145020
perf: avoid actual writing branch cache out correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30144
diff
changeset
|
3378 branchcachewrite.restore() |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
3379 fm.end() |
23485
ccb93e9affc1
perf: add a perfloadmarkers command
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23171
diff
changeset
|
3380 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3381 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3382 @command( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3383 b'perfbranchmapupdate', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3384 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3385 (b'', b'base', [], b'subset of revision to start from'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3386 (b'', b'target', [], b'subset of revision to end with'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3387 (b'', b'clear-caches', False, b'clear cache between each runs'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3388 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3389 + formatteropts, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3390 ) |
40768
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3391 def perfbranchmapupdate(ui, repo, base=(), target=(), **opts): |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3392 """benchmark branchmap update from for <base> revs to <target> revs |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3393 |
40772
5cbb74999040
perf: add a `--clear-caches` to `perfbranchmapupdate`
Boris Feld <boris.feld@octobus.net>
parents:
40771
diff
changeset
|
3394 If `--clear-caches` is passed, the following items will be reset before |
5cbb74999040
perf: add a `--clear-caches` to `perfbranchmapupdate`
Boris Feld <boris.feld@octobus.net>
parents:
40771
diff
changeset
|
3395 each update: |
5cbb74999040
perf: add a `--clear-caches` to `perfbranchmapupdate`
Boris Feld <boris.feld@octobus.net>
parents:
40771
diff
changeset
|
3396 * the changelog instance and associated indexes |
5cbb74999040
perf: add a `--clear-caches` to `perfbranchmapupdate`
Boris Feld <boris.feld@octobus.net>
parents:
40771
diff
changeset
|
3397 * the rev-branch-cache instance |
5cbb74999040
perf: add a `--clear-caches` to `perfbranchmapupdate`
Boris Feld <boris.feld@octobus.net>
parents:
40771
diff
changeset
|
3398 |
40768
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3399 Examples: |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3400 |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3401 # update for the one last revision |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3402 $ hg perfbranchmapupdate --base 'not tip' --target 'tip' |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3403 |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3404 $ update for change coming with a new branch |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3405 $ hg perfbranchmapupdate --base 'stable' --target 'default' |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3406 """ |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3407 from mercurial import branchmap |
40770
b059388d976c
perf: rely on repoview for perfbranchmapupdate
Boris Feld <boris.feld@octobus.net>
parents:
40769
diff
changeset
|
3408 from mercurial import repoview |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3409 |
40768
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3410 opts = _byteskwargs(opts) |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3411 timer, fm = gettimer(ui, opts) |
40772
5cbb74999040
perf: add a `--clear-caches` to `perfbranchmapupdate`
Boris Feld <boris.feld@octobus.net>
parents:
40771
diff
changeset
|
3412 clearcaches = opts[b'clear_caches'] |
40770
b059388d976c
perf: rely on repoview for perfbranchmapupdate
Boris Feld <boris.feld@octobus.net>
parents:
40769
diff
changeset
|
3413 unfi = repo.unfiltered() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3414 x = [None] # used to pass data between closure |
40768
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3415 |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3416 # we use a `list` here to avoid possible side effect from smartset |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3417 baserevs = list(scmutil.revrange(repo, base)) |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3418 targetrevs = list(scmutil.revrange(repo, target)) |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3419 if not baserevs: |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3420 raise error.Abort(b'no revisions selected for --base') |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3421 if not targetrevs: |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3422 raise error.Abort(b'no revisions selected for --target') |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3423 |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3424 # make sure the target branchmap also contains the one in the base |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3425 targetrevs = list(set(baserevs) | set(targetrevs)) |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3426 targetrevs.sort() |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3427 |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3428 cl = repo.changelog |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3429 allbaserevs = list(cl.ancestors(baserevs, inclusive=True)) |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3430 allbaserevs.sort() |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3431 alltargetrevs = frozenset(cl.ancestors(targetrevs, inclusive=True)) |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3432 |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3433 newrevs = list(alltargetrevs.difference(allbaserevs)) |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3434 newrevs.sort() |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3435 |
40770
b059388d976c
perf: rely on repoview for perfbranchmapupdate
Boris Feld <boris.feld@octobus.net>
parents:
40769
diff
changeset
|
3436 allrevs = frozenset(unfi.changelog.revs()) |
b059388d976c
perf: rely on repoview for perfbranchmapupdate
Boris Feld <boris.feld@octobus.net>
parents:
40769
diff
changeset
|
3437 basefilterrevs = frozenset(allrevs.difference(allbaserevs)) |
b059388d976c
perf: rely on repoview for perfbranchmapupdate
Boris Feld <boris.feld@octobus.net>
parents:
40769
diff
changeset
|
3438 targetfilterrevs = frozenset(allrevs.difference(alltargetrevs)) |
b059388d976c
perf: rely on repoview for perfbranchmapupdate
Boris Feld <boris.feld@octobus.net>
parents:
40769
diff
changeset
|
3439 |
b059388d976c
perf: rely on repoview for perfbranchmapupdate
Boris Feld <boris.feld@octobus.net>
parents:
40769
diff
changeset
|
3440 def basefilter(repo, visibilityexceptions=None): |
b059388d976c
perf: rely on repoview for perfbranchmapupdate
Boris Feld <boris.feld@octobus.net>
parents:
40769
diff
changeset
|
3441 return basefilterrevs |
b059388d976c
perf: rely on repoview for perfbranchmapupdate
Boris Feld <boris.feld@octobus.net>
parents:
40769
diff
changeset
|
3442 |
b059388d976c
perf: rely on repoview for perfbranchmapupdate
Boris Feld <boris.feld@octobus.net>
parents:
40769
diff
changeset
|
3443 def targetfilter(repo, visibilityexceptions=None): |
b059388d976c
perf: rely on repoview for perfbranchmapupdate
Boris Feld <boris.feld@octobus.net>
parents:
40769
diff
changeset
|
3444 return targetfilterrevs |
b059388d976c
perf: rely on repoview for perfbranchmapupdate
Boris Feld <boris.feld@octobus.net>
parents:
40769
diff
changeset
|
3445 |
40768
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3446 msg = b'benchmark of branchmap with %d revisions with %d new ones\n' |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3447 ui.status(msg % (len(allbaserevs), len(newrevs))) |
40770
b059388d976c
perf: rely on repoview for perfbranchmapupdate
Boris Feld <boris.feld@octobus.net>
parents:
40769
diff
changeset
|
3448 if targetfilterrevs: |
b059388d976c
perf: rely on repoview for perfbranchmapupdate
Boris Feld <boris.feld@octobus.net>
parents:
40769
diff
changeset
|
3449 msg = b'(%d revisions still filtered)\n' |
b059388d976c
perf: rely on repoview for perfbranchmapupdate
Boris Feld <boris.feld@octobus.net>
parents:
40769
diff
changeset
|
3450 ui.status(msg % len(targetfilterrevs)) |
40768
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3451 |
40770
b059388d976c
perf: rely on repoview for perfbranchmapupdate
Boris Feld <boris.feld@octobus.net>
parents:
40769
diff
changeset
|
3452 try: |
b059388d976c
perf: rely on repoview for perfbranchmapupdate
Boris Feld <boris.feld@octobus.net>
parents:
40769
diff
changeset
|
3453 repoview.filtertable[b'__perf_branchmap_update_base'] = basefilter |
b059388d976c
perf: rely on repoview for perfbranchmapupdate
Boris Feld <boris.feld@octobus.net>
parents:
40769
diff
changeset
|
3454 repoview.filtertable[b'__perf_branchmap_update_target'] = targetfilter |
b059388d976c
perf: rely on repoview for perfbranchmapupdate
Boris Feld <boris.feld@octobus.net>
parents:
40769
diff
changeset
|
3455 |
b059388d976c
perf: rely on repoview for perfbranchmapupdate
Boris Feld <boris.feld@octobus.net>
parents:
40769
diff
changeset
|
3456 baserepo = repo.filtered(b'__perf_branchmap_update_base') |
b059388d976c
perf: rely on repoview for perfbranchmapupdate
Boris Feld <boris.feld@octobus.net>
parents:
40769
diff
changeset
|
3457 targetrepo = repo.filtered(b'__perf_branchmap_update_target') |
b059388d976c
perf: rely on repoview for perfbranchmapupdate
Boris Feld <boris.feld@octobus.net>
parents:
40769
diff
changeset
|
3458 |
40771
58355a1de6b3
perf: start from an existing branchmap if possible
Boris Feld <boris.feld@octobus.net>
parents:
40770
diff
changeset
|
3459 # try to find an existing branchmap to reuse |
58355a1de6b3
perf: start from an existing branchmap if possible
Boris Feld <boris.feld@octobus.net>
parents:
40770
diff
changeset
|
3460 subsettable = getbranchmapsubsettable() |
58355a1de6b3
perf: start from an existing branchmap if possible
Boris Feld <boris.feld@octobus.net>
parents:
40770
diff
changeset
|
3461 candidatefilter = subsettable.get(None) |
58355a1de6b3
perf: start from an existing branchmap if possible
Boris Feld <boris.feld@octobus.net>
parents:
40770
diff
changeset
|
3462 while candidatefilter is not None: |
58355a1de6b3
perf: start from an existing branchmap if possible
Boris Feld <boris.feld@octobus.net>
parents:
40770
diff
changeset
|
3463 candidatebm = repo.filtered(candidatefilter).branchmap() |
58355a1de6b3
perf: start from an existing branchmap if possible
Boris Feld <boris.feld@octobus.net>
parents:
40770
diff
changeset
|
3464 if candidatebm.validfor(baserepo): |
58355a1de6b3
perf: start from an existing branchmap if possible
Boris Feld <boris.feld@octobus.net>
parents:
40770
diff
changeset
|
3465 filtered = repoview.filterrevs(repo, candidatefilter) |
58355a1de6b3
perf: start from an existing branchmap if possible
Boris Feld <boris.feld@octobus.net>
parents:
40770
diff
changeset
|
3466 missing = [r for r in allbaserevs if r in filtered] |
58355a1de6b3
perf: start from an existing branchmap if possible
Boris Feld <boris.feld@octobus.net>
parents:
40770
diff
changeset
|
3467 base = candidatebm.copy() |
58355a1de6b3
perf: start from an existing branchmap if possible
Boris Feld <boris.feld@octobus.net>
parents:
40770
diff
changeset
|
3468 base.update(baserepo, missing) |
58355a1de6b3
perf: start from an existing branchmap if possible
Boris Feld <boris.feld@octobus.net>
parents:
40770
diff
changeset
|
3469 break |
58355a1de6b3
perf: start from an existing branchmap if possible
Boris Feld <boris.feld@octobus.net>
parents:
40770
diff
changeset
|
3470 candidatefilter = subsettable.get(candidatefilter) |
58355a1de6b3
perf: start from an existing branchmap if possible
Boris Feld <boris.feld@octobus.net>
parents:
40770
diff
changeset
|
3471 else: |
58355a1de6b3
perf: start from an existing branchmap if possible
Boris Feld <boris.feld@octobus.net>
parents:
40770
diff
changeset
|
3472 # no suitable subset where found |
58355a1de6b3
perf: start from an existing branchmap if possible
Boris Feld <boris.feld@octobus.net>
parents:
40770
diff
changeset
|
3473 base = branchmap.branchcache() |
58355a1de6b3
perf: start from an existing branchmap if possible
Boris Feld <boris.feld@octobus.net>
parents:
40770
diff
changeset
|
3474 base.update(baserepo, allbaserevs) |
40768
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3475 |
40769
95f35c873463
perf: pre-indent some code in `perfbranchmapupdate`
Boris Feld <boris.feld@octobus.net>
parents:
40768
diff
changeset
|
3476 def setup(): |
95f35c873463
perf: pre-indent some code in `perfbranchmapupdate`
Boris Feld <boris.feld@octobus.net>
parents:
40768
diff
changeset
|
3477 x[0] = base.copy() |
40772
5cbb74999040
perf: add a `--clear-caches` to `perfbranchmapupdate`
Boris Feld <boris.feld@octobus.net>
parents:
40771
diff
changeset
|
3478 if clearcaches: |
5cbb74999040
perf: add a `--clear-caches` to `perfbranchmapupdate`
Boris Feld <boris.feld@octobus.net>
parents:
40771
diff
changeset
|
3479 unfi._revbranchcache = None |
5cbb74999040
perf: add a `--clear-caches` to `perfbranchmapupdate`
Boris Feld <boris.feld@octobus.net>
parents:
40771
diff
changeset
|
3480 clearchangelog(repo) |
40768
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3481 |
40769
95f35c873463
perf: pre-indent some code in `perfbranchmapupdate`
Boris Feld <boris.feld@octobus.net>
parents:
40768
diff
changeset
|
3482 def bench(): |
40770
b059388d976c
perf: rely on repoview for perfbranchmapupdate
Boris Feld <boris.feld@octobus.net>
parents:
40769
diff
changeset
|
3483 x[0].update(targetrepo, newrevs) |
40769
95f35c873463
perf: pre-indent some code in `perfbranchmapupdate`
Boris Feld <boris.feld@octobus.net>
parents:
40768
diff
changeset
|
3484 |
95f35c873463
perf: pre-indent some code in `perfbranchmapupdate`
Boris Feld <boris.feld@octobus.net>
parents:
40768
diff
changeset
|
3485 timer(bench, setup=setup) |
95f35c873463
perf: pre-indent some code in `perfbranchmapupdate`
Boris Feld <boris.feld@octobus.net>
parents:
40768
diff
changeset
|
3486 fm.end() |
40770
b059388d976c
perf: rely on repoview for perfbranchmapupdate
Boris Feld <boris.feld@octobus.net>
parents:
40769
diff
changeset
|
3487 finally: |
b059388d976c
perf: rely on repoview for perfbranchmapupdate
Boris Feld <boris.feld@octobus.net>
parents:
40769
diff
changeset
|
3488 repoview.filtertable.pop(b'__perf_branchmap_update_base', None) |
b059388d976c
perf: rely on repoview for perfbranchmapupdate
Boris Feld <boris.feld@octobus.net>
parents:
40769
diff
changeset
|
3489 repoview.filtertable.pop(b'__perf_branchmap_update_target', None) |
40768
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3490 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3491 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3492 @command( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3493 b'perfbranchmapload', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3494 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3495 (b'f', b'filter', b'', b'Specify repoview filter'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3496 (b'', b'list', False, b'List brachmap filter caches'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3497 (b'', b'clear-revlogs', False, b'refresh changelog and manifest'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3498 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3499 + formatteropts, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3500 ) |
40699
94d76ddac40a
perf: update function name to match `perfbranchmapload` command
Boris Feld <boris.feld@octobus.net>
parents:
40698
diff
changeset
|
3501 def perfbranchmapload(ui, repo, filter=b'', list=False, **opts): |
39114
222aba766015
perf: time loading branchmap caches
Martijn Pieters <mj@octobus.net>
parents:
38977
diff
changeset
|
3502 """benchmark reading the branchmap""" |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
3503 opts = _byteskwargs(opts) |
40702
4240a1da4188
perf: add --clear-revlog flag to branchmapload
Boris Feld <boris.feld@octobus.net>
parents:
40701
diff
changeset
|
3504 clearrevlogs = opts[b'clear_revlogs'] |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
3505 |
39114
222aba766015
perf: time loading branchmap caches
Martijn Pieters <mj@octobus.net>
parents:
38977
diff
changeset
|
3506 if list: |
222aba766015
perf: time loading branchmap caches
Martijn Pieters <mj@octobus.net>
parents:
38977
diff
changeset
|
3507 for name, kind, st in repo.cachevfs.readdir(stat=True): |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3508 if name.startswith(b'branch2'): |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3509 filtername = name.partition(b'-')[2] or b'unfiltered' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3510 ui.status( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3511 b'%s - %s\n' % (filtername, util.bytecount(st.st_size)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3512 ) |
39114
222aba766015
perf: time loading branchmap caches
Martijn Pieters <mj@octobus.net>
parents:
38977
diff
changeset
|
3513 return |
40720
0a3cc351d718
perf: fallback to subset if ondisk cache is missing in perfbranchmapload
Boris Feld <boris.feld@octobus.net>
parents:
40719
diff
changeset
|
3514 if not filter: |
0a3cc351d718
perf: fallback to subset if ondisk cache is missing in perfbranchmapload
Boris Feld <boris.feld@octobus.net>
parents:
40719
diff
changeset
|
3515 filter = None |
0a3cc351d718
perf: fallback to subset if ondisk cache is missing in perfbranchmapload
Boris Feld <boris.feld@octobus.net>
parents:
40719
diff
changeset
|
3516 subsettable = getbranchmapsubsettable() |
0a3cc351d718
perf: fallback to subset if ondisk cache is missing in perfbranchmapload
Boris Feld <boris.feld@octobus.net>
parents:
40719
diff
changeset
|
3517 if filter is None: |
0a3cc351d718
perf: fallback to subset if ondisk cache is missing in perfbranchmapload
Boris Feld <boris.feld@octobus.net>
parents:
40719
diff
changeset
|
3518 repo = repo.unfiltered() |
0a3cc351d718
perf: fallback to subset if ondisk cache is missing in perfbranchmapload
Boris Feld <boris.feld@octobus.net>
parents:
40719
diff
changeset
|
3519 else: |
39114
222aba766015
perf: time loading branchmap caches
Martijn Pieters <mj@octobus.net>
parents:
38977
diff
changeset
|
3520 repo = repoview.repoview(repo, filter) |
40719
578646b1e2b6
perf: prewarm the branchmap in perfbranchmapload
Boris Feld <boris.feld@octobus.net>
parents:
40713
diff
changeset
|
3521 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3522 repo.branchmap() # make sure we have a relevant, up to date branchmap |
40719
578646b1e2b6
perf: prewarm the branchmap in perfbranchmapload
Boris Feld <boris.feld@octobus.net>
parents:
40713
diff
changeset
|
3523 |
41565
bf7fb97aecf1
branchmap: make branchcache responsible for reading
Martijn Pieters <mj@octobus.net>
parents:
41470
diff
changeset
|
3524 try: |
bf7fb97aecf1
branchmap: make branchcache responsible for reading
Martijn Pieters <mj@octobus.net>
parents:
41470
diff
changeset
|
3525 fromfile = branchmap.branchcache.fromfile |
bf7fb97aecf1
branchmap: make branchcache responsible for reading
Martijn Pieters <mj@octobus.net>
parents:
41470
diff
changeset
|
3526 except AttributeError: |
bf7fb97aecf1
branchmap: make branchcache responsible for reading
Martijn Pieters <mj@octobus.net>
parents:
41470
diff
changeset
|
3527 # older versions |
bf7fb97aecf1
branchmap: make branchcache responsible for reading
Martijn Pieters <mj@octobus.net>
parents:
41470
diff
changeset
|
3528 fromfile = branchmap.read |
bf7fb97aecf1
branchmap: make branchcache responsible for reading
Martijn Pieters <mj@octobus.net>
parents:
41470
diff
changeset
|
3529 |
40720
0a3cc351d718
perf: fallback to subset if ondisk cache is missing in perfbranchmapload
Boris Feld <boris.feld@octobus.net>
parents:
40719
diff
changeset
|
3530 currentfilter = filter |
39114
222aba766015
perf: time loading branchmap caches
Martijn Pieters <mj@octobus.net>
parents:
38977
diff
changeset
|
3531 # try once without timer, the filter may not be cached |
41565
bf7fb97aecf1
branchmap: make branchcache responsible for reading
Martijn Pieters <mj@octobus.net>
parents:
41470
diff
changeset
|
3532 while fromfile(repo) is None: |
40720
0a3cc351d718
perf: fallback to subset if ondisk cache is missing in perfbranchmapload
Boris Feld <boris.feld@octobus.net>
parents:
40719
diff
changeset
|
3533 currentfilter = subsettable.get(currentfilter) |
0a3cc351d718
perf: fallback to subset if ondisk cache is missing in perfbranchmapload
Boris Feld <boris.feld@octobus.net>
parents:
40719
diff
changeset
|
3534 if currentfilter is None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3535 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3536 b'No branchmap cached for %s repo' % (filter or b'unfiltered') |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3537 ) |
40720
0a3cc351d718
perf: fallback to subset if ondisk cache is missing in perfbranchmapload
Boris Feld <boris.feld@octobus.net>
parents:
40719
diff
changeset
|
3538 repo = repo.filtered(currentfilter) |
39114
222aba766015
perf: time loading branchmap caches
Martijn Pieters <mj@octobus.net>
parents:
38977
diff
changeset
|
3539 timer, fm = gettimer(ui, opts) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3540 |
40702
4240a1da4188
perf: add --clear-revlog flag to branchmapload
Boris Feld <boris.feld@octobus.net>
parents:
40701
diff
changeset
|
3541 def setup(): |
4240a1da4188
perf: add --clear-revlog flag to branchmapload
Boris Feld <boris.feld@octobus.net>
parents:
40701
diff
changeset
|
3542 if clearrevlogs: |
4240a1da4188
perf: add --clear-revlog flag to branchmapload
Boris Feld <boris.feld@octobus.net>
parents:
40701
diff
changeset
|
3543 clearchangelog(repo) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3544 |
40700
30f443d34a7d
perf: use an explicit function in perfbranchmapload
Boris Feld <boris.feld@octobus.net>
parents:
40699
diff
changeset
|
3545 def bench(): |
41565
bf7fb97aecf1
branchmap: make branchcache responsible for reading
Martijn Pieters <mj@octobus.net>
parents:
41470
diff
changeset
|
3546 fromfile(repo) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3547 |
40702
4240a1da4188
perf: add --clear-revlog flag to branchmapload
Boris Feld <boris.feld@octobus.net>
parents:
40701
diff
changeset
|
3548 timer(bench, setup=setup) |
39114
222aba766015
perf: time loading branchmap caches
Martijn Pieters <mj@octobus.net>
parents:
38977
diff
changeset
|
3549 fm.end() |
222aba766015
perf: time loading branchmap caches
Martijn Pieters <mj@octobus.net>
parents:
38977
diff
changeset
|
3550 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3551 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3552 @command(b'perfloadmarkers') |
23485
ccb93e9affc1
perf: add a perfloadmarkers command
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23171
diff
changeset
|
3553 def perfloadmarkers(ui, repo): |
ccb93e9affc1
perf: add a perfloadmarkers command
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23171
diff
changeset
|
3554 """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
|
3555 |
ccb93e9affc1
perf: add a perfloadmarkers command
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23171
diff
changeset
|
3556 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
|
3557 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
|
3558 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
|
3559 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
|
3560 fm.end() |
27286
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3561 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3562 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3563 @command( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3564 b'perflrucachedict', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3565 formatteropts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3566 + [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3567 (b'', b'costlimit', 0, b'maximum total cost of items in cache'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3568 (b'', b'mincost', 0, b'smallest cost of items in cache'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3569 (b'', b'maxcost', 100, b'maximum cost of items in cache'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3570 (b'', b'size', 4, b'size of cache'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3571 (b'', b'gets', 10000, b'number of key lookups'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3572 (b'', b'sets', 10000, b'number of key sets'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3573 (b'', b'mixed', 10000, b'number of mixed mode operations'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3574 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3575 b'', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3576 b'mixedgetfreq', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3577 50, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3578 b'frequency of get vs set ops in mixed mode', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3579 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3580 ], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3581 norepo=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3582 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3583 def perflrucache( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3584 ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3585 mincost=0, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3586 maxcost=100, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3587 costlimit=0, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3588 size=4, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3589 gets=10000, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3590 sets=10000, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3591 mixed=10000, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3592 mixedgetfreq=50, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3593 **opts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3594 ): |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
3595 opts = _byteskwargs(opts) |
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
3596 |
27286
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3597 def doinit(): |
39822
86dbeb7c9a11
py3: switch contrib/perf from xrange to pycompat.xrange
Matt Harbison <matt_harbison@yahoo.com>
parents:
39821
diff
changeset
|
3598 for i in _xrange(10000): |
27286
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3599 util.lrucachedict(size) |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3600 |
39568
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
3601 costrange = list(range(mincost, maxcost + 1)) |
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
3602 |
27286
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3603 values = [] |
39822
86dbeb7c9a11
py3: switch contrib/perf from xrange to pycompat.xrange
Matt Harbison <matt_harbison@yahoo.com>
parents:
39821
diff
changeset
|
3604 for i in _xrange(size): |
39823
c4ab9fa81377
py3: work around the lack of sys.maxint in contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39822
diff
changeset
|
3605 values.append(random.randint(0, _maxint)) |
27286
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3606 |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3607 # 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
|
3608 # eviction. |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3609 getseq = [] |
39822
86dbeb7c9a11
py3: switch contrib/perf from xrange to pycompat.xrange
Matt Harbison <matt_harbison@yahoo.com>
parents:
39821
diff
changeset
|
3610 for i in _xrange(gets): |
27286
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3611 getseq.append(random.choice(values)) |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3612 |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3613 def dogets(): |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3614 d = util.lrucachedict(size) |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3615 for v in values: |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3616 d[v] = v |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3617 for key in getseq: |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3618 value = d[key] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3619 value # silence pyflakes warning |
27286
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3620 |
39568
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
3621 def dogetscost(): |
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
3622 d = util.lrucachedict(size, maxcost=costlimit) |
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
3623 for i, v in enumerate(values): |
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
3624 d.insert(v, v, cost=costs[i]) |
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
3625 for key in getseq: |
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
3626 try: |
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
3627 value = d[key] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3628 value # silence pyflakes warning |
39568
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
3629 except KeyError: |
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
3630 pass |
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
3631 |
27286
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3632 # Set mode tests insertion speed with cache eviction. |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3633 setseq = [] |
39568
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
3634 costs = [] |
39822
86dbeb7c9a11
py3: switch contrib/perf from xrange to pycompat.xrange
Matt Harbison <matt_harbison@yahoo.com>
parents:
39821
diff
changeset
|
3635 for i in _xrange(sets): |
39823
c4ab9fa81377
py3: work around the lack of sys.maxint in contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39822
diff
changeset
|
3636 setseq.append(random.randint(0, _maxint)) |
39568
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
3637 costs.append(random.choice(costrange)) |
27286
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3638 |
39567
ee087f0d7db5
util: allow lrucachedict to track cost of entries
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39362
diff
changeset
|
3639 def doinserts(): |
ee087f0d7db5
util: allow lrucachedict to track cost of entries
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39362
diff
changeset
|
3640 d = util.lrucachedict(size) |
ee087f0d7db5
util: allow lrucachedict to track cost of entries
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39362
diff
changeset
|
3641 for v in setseq: |
ee087f0d7db5
util: allow lrucachedict to track cost of entries
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39362
diff
changeset
|
3642 d.insert(v, v) |
ee087f0d7db5
util: allow lrucachedict to track cost of entries
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39362
diff
changeset
|
3643 |
39568
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
3644 def doinsertscost(): |
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
3645 d = util.lrucachedict(size, maxcost=costlimit) |
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
3646 for i, v in enumerate(setseq): |
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
3647 d.insert(v, v, cost=costs[i]) |
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
3648 |
27286
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3649 def dosets(): |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3650 d = util.lrucachedict(size) |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3651 for v in setseq: |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3652 d[v] = v |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3653 |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3654 # Mixed mode randomly performs gets and sets with eviction. |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3655 mixedops = [] |
39822
86dbeb7c9a11
py3: switch contrib/perf from xrange to pycompat.xrange
Matt Harbison <matt_harbison@yahoo.com>
parents:
39821
diff
changeset
|
3656 for i in _xrange(mixed): |
27286
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3657 r = random.randint(0, 100) |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3658 if r < mixedgetfreq: |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3659 op = 0 |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3660 else: |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3661 op = 1 |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3662 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3663 mixedops.append( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3664 (op, random.randint(0, size * 2), random.choice(costrange)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3665 ) |
27286
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3666 |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3667 def domixed(): |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3668 d = util.lrucachedict(size) |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3669 |
39568
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
3670 for op, v, cost in mixedops: |
27286
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3671 if op == 0: |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3672 try: |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3673 d[v] |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3674 except KeyError: |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3675 pass |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3676 else: |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3677 d[v] = v |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3678 |
39568
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
3679 def domixedcost(): |
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
3680 d = util.lrucachedict(size, maxcost=costlimit) |
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
3681 |
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
3682 for op, v, cost in mixedops: |
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
3683 if op == 0: |
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
3684 try: |
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
3685 d[v] |
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
3686 except KeyError: |
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
3687 pass |
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
3688 else: |
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
3689 d.insert(v, v, cost=cost) |
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
3690 |
27286
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3691 benches = [ |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3692 (doinit, b'init'), |
27286
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3693 ] |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3694 |
39568
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
3695 if costlimit: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3696 benches.extend( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3697 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3698 (dogetscost, b'gets w/ cost limit'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3699 (doinsertscost, b'inserts w/ cost limit'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3700 (domixedcost, b'mixed w/ cost limit'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3701 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3702 ) |
39568
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
3703 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3704 benches.extend( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3705 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3706 (dogets, b'gets'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3707 (doinserts, b'inserts'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3708 (dosets, b'sets'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3709 (domixed, b'mixed'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3710 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3711 ) |
39568
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
3712 |
27286
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3713 for fn, title in benches: |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3714 timer, fm = gettimer(ui, opts) |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3715 timer(fn, title=title) |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
3716 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
|
3717 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3718 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3719 @command(b'perfwrite', formatteropts) |
30977
5a9e4dc8e4fd
contrib: add a write microbenchmark to perf.py
Simon Farnsworth <simonfar@fb.com>
parents:
30975
diff
changeset
|
3720 def perfwrite(ui, repo, **opts): |
5a9e4dc8e4fd
contrib: add a write microbenchmark to perf.py
Simon Farnsworth <simonfar@fb.com>
parents:
30975
diff
changeset
|
3721 """microbenchmark ui.write |
5a9e4dc8e4fd
contrib: add a write microbenchmark to perf.py
Simon Farnsworth <simonfar@fb.com>
parents:
30975
diff
changeset
|
3722 """ |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
3723 opts = _byteskwargs(opts) |
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
3724 |
30977
5a9e4dc8e4fd
contrib: add a write microbenchmark to perf.py
Simon Farnsworth <simonfar@fb.com>
parents:
30975
diff
changeset
|
3725 timer, fm = gettimer(ui, opts) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3726 |
30977
5a9e4dc8e4fd
contrib: add a write microbenchmark to perf.py
Simon Farnsworth <simonfar@fb.com>
parents:
30975
diff
changeset
|
3727 def write(): |
5a9e4dc8e4fd
contrib: add a write microbenchmark to perf.py
Simon Farnsworth <simonfar@fb.com>
parents:
30975
diff
changeset
|
3728 for i in range(100000): |
43080
86e4daa2d54c
cleanup: mark some ui.(status|note|warn|write) calls as not needing i18n
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
3729 ui.writenoi18n(b'Testing write performance\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3730 |
30977
5a9e4dc8e4fd
contrib: add a write microbenchmark to perf.py
Simon Farnsworth <simonfar@fb.com>
parents:
30975
diff
changeset
|
3731 timer(write) |
5a9e4dc8e4fd
contrib: add a write microbenchmark to perf.py
Simon Farnsworth <simonfar@fb.com>
parents:
30975
diff
changeset
|
3732 fm.end() |
5a9e4dc8e4fd
contrib: add a write microbenchmark to perf.py
Simon Farnsworth <simonfar@fb.com>
parents:
30975
diff
changeset
|
3733 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3734 |
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
|
3735 def uisetup(ui): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3736 if util.safehasattr(cmdutil, b'openrevlog') and not util.safehasattr( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3737 commands, b'debugrevlogopts' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3738 ): |
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
|
3739 # 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
|
3740 # 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
|
3741 # 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
|
3742 # 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
|
3743 # 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
|
3744 def openrevlog(orig, repo, cmd, file_, opts): |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3745 if opts.get(b'dir') and not util.safehasattr(repo, b'dirlog'): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3746 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3747 b"This version doesn't support --dir option", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3748 hint=b"use 3.5 or later", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3749 ) |
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
|
3750 return orig(repo, cmd, file_, opts) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3751 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3752 extensions.wrapfunction(cmdutil, b'openrevlog', openrevlog) |
40925
008f3491dc53
perf: add perfprogress command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40784
diff
changeset
|
3753 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3754 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3755 @command( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3756 b'perfprogress', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3757 formatteropts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3758 + [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3759 (b'', b'topic', b'topic', b'topic for progress messages'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3760 (b'c', b'total', 1000000, b'total value we are progressing to'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3761 ], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3762 norepo=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3763 ) |
40925
008f3491dc53
perf: add perfprogress command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40784
diff
changeset
|
3764 def perfprogress(ui, topic=None, total=None, **opts): |
008f3491dc53
perf: add perfprogress command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40784
diff
changeset
|
3765 """printing of progress bars""" |
008f3491dc53
perf: add perfprogress command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40784
diff
changeset
|
3766 opts = _byteskwargs(opts) |
008f3491dc53
perf: add perfprogress command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40784
diff
changeset
|
3767 |
008f3491dc53
perf: add perfprogress command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40784
diff
changeset
|
3768 timer, fm = gettimer(ui, opts) |
008f3491dc53
perf: add perfprogress command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40784
diff
changeset
|
3769 |
008f3491dc53
perf: add perfprogress command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40784
diff
changeset
|
3770 def doprogress(): |
008f3491dc53
perf: add perfprogress command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40784
diff
changeset
|
3771 with ui.makeprogress(topic, total=total) as progress: |
42785
c00005975c91
perf: don't depend on pycompat for older Mercurial versions
Martin von Zweigbergk <martinvonz@google.com>
parents:
42784
diff
changeset
|
3772 for i in _xrange(total): |
40925
008f3491dc53
perf: add perfprogress command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40784
diff
changeset
|
3773 progress.increment() |
008f3491dc53
perf: add perfprogress command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40784
diff
changeset
|
3774 |
008f3491dc53
perf: add perfprogress command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40784
diff
changeset
|
3775 timer(doprogress) |
008f3491dc53
perf: add perfprogress command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40784
diff
changeset
|
3776 fm.end() |