Mercurial > hg
annotate contrib/perf.py @ 50458:714b63a707b7
perf: introduce a `perf::stream-locked-section` command
This command benchmark the initial part of a stream clone, where the repository
is locked.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Fri, 28 Apr 2023 16:28:43 +0200 |
parents | ec3631290eb7 |
children | b10c786b0145 |
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 |
40144
acf560bc9b56
perf: extract the timing of a section in a context manager
Boris Feld <boris.feld@octobus.net>
parents:
40143
diff
changeset
|
57 import contextlib |
28561
330584235c22
contrib: make perf.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27649
diff
changeset
|
58 import functools |
31397
8f5ed8fa39f8
perf: perform a garbage collection before each iteration
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30977
diff
changeset
|
59 import gc |
28561
330584235c22
contrib: make perf.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27649
diff
changeset
|
60 import os |
27286
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
61 import random |
40550
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
62 import shutil |
32532
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
63 import struct |
28561
330584235c22
contrib: make perf.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27649
diff
changeset
|
64 import sys |
40550
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
65 import tempfile |
35599
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
66 import threading |
28561
330584235c22
contrib: make perf.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27649
diff
changeset
|
67 import time |
47072
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47036
diff
changeset
|
68 |
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47036
diff
changeset
|
69 import mercurial.revlog |
28561
330584235c22
contrib: make perf.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27649
diff
changeset
|
70 from mercurial import ( |
30018
bd6df07ccc24
perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30017
diff
changeset
|
71 changegroup, |
28561
330584235c22
contrib: make perf.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27649
diff
changeset
|
72 cmdutil, |
330584235c22
contrib: make perf.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27649
diff
changeset
|
73 commands, |
330584235c22
contrib: make perf.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27649
diff
changeset
|
74 copies, |
330584235c22
contrib: make perf.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27649
diff
changeset
|
75 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
|
76 extensions, |
40941
db6cace18765
perfdiscovery: benching findcommonheads()
Georges Racinet <gracinet@anybox.fr>
parents:
40925
diff
changeset
|
77 hg, |
28561
330584235c22
contrib: make perf.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27649
diff
changeset
|
78 mdiff, |
330584235c22
contrib: make perf.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
27649
diff
changeset
|
79 merge, |
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 |
47072
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47036
diff
changeset
|
122 try: |
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47036
diff
changeset
|
123 from mercurial.revlogutils import constants as revlog_constants |
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47036
diff
changeset
|
124 |
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47036
diff
changeset
|
125 perf_rl_kind = (revlog_constants.KIND_OTHER, b'created-by-perf') |
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47036
diff
changeset
|
126 |
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47036
diff
changeset
|
127 def revlog(opener, *args, **kwargs): |
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47036
diff
changeset
|
128 return mercurial.revlog.revlog(opener, perf_rl_kind, *args, **kwargs) |
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47036
diff
changeset
|
129 |
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47036
diff
changeset
|
130 |
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47036
diff
changeset
|
131 except (ImportError, AttributeError): |
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47036
diff
changeset
|
132 perf_rl_kind = None |
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47036
diff
changeset
|
133 |
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47036
diff
changeset
|
134 def revlog(opener, *args, **kwargs): |
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47036
diff
changeset
|
135 return mercurial.revlog.revlog(opener, *args, **kwargs) |
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47036
diff
changeset
|
136 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
137 |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
138 def identity(a): |
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
139 return a |
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
140 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
141 |
36178
646002338365
py3: introduce and use pycompat.getargspec
Augie Fackler <augie@google.com>
parents:
35951
diff
changeset
|
142 try: |
646002338365
py3: introduce and use pycompat.getargspec
Augie Fackler <augie@google.com>
parents:
35951
diff
changeset
|
143 from mercurial import pycompat |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
144 |
36178
646002338365
py3: introduce and use pycompat.getargspec
Augie Fackler <augie@google.com>
parents:
35951
diff
changeset
|
145 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
|
146 _byteskwargs = pycompat.byteskwargs # since 4.1 (or fbc3f73dc802) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
147 _sysstr = pycompat.sysstr # since 4.0 (or 2219f4f82ede) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
148 _bytestr = pycompat.bytestr # since 4.2 (or b70407bd84d5) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
149 _xrange = pycompat.xrange # since 4.8 (or 7eba8f83129b) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
150 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
|
151 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
|
152 _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
|
153 else: |
c4ab9fa81377
py3: work around the lack of sys.maxint in contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39822
diff
changeset
|
154 _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
|
155 except (NameError, ImportError, AttributeError): |
36178
646002338365
py3: introduce and use pycompat.getargspec
Augie Fackler <augie@google.com>
parents:
35951
diff
changeset
|
156 import inspect |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
157 |
36178
646002338365
py3: introduce and use pycompat.getargspec
Augie Fackler <augie@google.com>
parents:
35951
diff
changeset
|
158 getargspec = inspect.getargspec |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
159 _byteskwargs = identity |
42785
c00005975c91
perf: don't depend on pycompat for older Mercurial versions
Martin von Zweigbergk <martinvonz@google.com>
parents:
42784
diff
changeset
|
160 _bytestr = str |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
161 fsencode = identity # no py3 support |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
162 _maxint = sys.maxint # no py3 support |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
163 _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
|
164 _xrange = xrange |
29567
7e2b389418da
perf: import newer modules separately for earlier Mercurial
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29497
diff
changeset
|
165 |
37844
8fb9985382be
pycompat: export queue module instead of symbols in module (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37355
diff
changeset
|
166 try: |
8fb9985382be
pycompat: export queue module instead of symbols in module (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37355
diff
changeset
|
167 # 4.7+ |
8fb9985382be
pycompat: export queue module instead of symbols in module (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37355
diff
changeset
|
168 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
|
169 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
|
170 # <4.7. |
8fb9985382be
pycompat: export queue module instead of symbols in module (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37355
diff
changeset
|
171 try: |
8fb9985382be
pycompat: export queue module instead of symbols in module (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37355
diff
changeset
|
172 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
|
173 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
|
174 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
|
175 |
38257
a577a199983c
perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents:
38256
diff
changeset
|
176 try: |
a577a199983c
perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents:
38256
diff
changeset
|
177 from mercurial import logcmdutil |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
178 |
38257
a577a199983c
perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents:
38256
diff
changeset
|
179 makelogtemplater = logcmdutil.maketemplater |
a577a199983c
perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents:
38256
diff
changeset
|
180 except (AttributeError, ImportError): |
a577a199983c
perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents:
38256
diff
changeset
|
181 try: |
a577a199983c
perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents:
38256
diff
changeset
|
182 makelogtemplater = cmdutil.makelogtemplater |
a577a199983c
perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents:
38256
diff
changeset
|
183 except (AttributeError, ImportError): |
a577a199983c
perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents:
38256
diff
changeset
|
184 makelogtemplater = None |
a577a199983c
perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents:
38256
diff
changeset
|
185 |
29567
7e2b389418da
perf: import newer modules separately for earlier Mercurial
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29497
diff
changeset
|
186 # 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
|
187 # 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
|
188 # 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
|
189 _undefined = object() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
190 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
191 |
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
|
192 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
|
193 return getattr(thing, _sysstr(attr), _undefined) is not _undefined |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
194 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
195 |
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
|
196 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
|
197 |
29496
7299370cf304
perf: avoid using formatteropts for Mercurial earlier than 3.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29495
diff
changeset
|
198 # for "historical portability": |
31823
f6d77af84ef3
perf: add historical portability for util.timer
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents:
31476
diff
changeset
|
199 # 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
|
200 # since ae5d60bb70c9 |
f6d77af84ef3
perf: add historical portability for util.timer
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents:
31476
diff
changeset
|
201 if safehasattr(time, 'perf_counter'): |
f6d77af84ef3
perf: add historical portability for util.timer
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents:
31476
diff
changeset
|
202 util.timer = time.perf_counter |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
203 elif os.name == b'nt': |
31823
f6d77af84ef3
perf: add historical portability for util.timer
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents:
31476
diff
changeset
|
204 util.timer = time.clock |
f6d77af84ef3
perf: add historical portability for util.timer
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents:
31476
diff
changeset
|
205 else: |
f6d77af84ef3
perf: add historical portability for util.timer
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents:
31476
diff
changeset
|
206 util.timer = time.time |
f6d77af84ef3
perf: add historical portability for util.timer
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents:
31476
diff
changeset
|
207 |
f6d77af84ef3
perf: add historical portability for util.timer
Philippe Pepiot <philippe.pepiot@logilab.fr>
parents:
31476
diff
changeset
|
208 # 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
|
209 # 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
|
210 # 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
|
211 # 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
|
212 # available since 2.2 (or ae5f92e154d3) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
213 formatteropts = getattr( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
214 cmdutil, "formatteropts", getattr(commands, "formatteropts", []) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
215 ) |
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
|
216 |
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
|
217 # 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
|
218 # 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
|
219 # 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
|
220 # 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
|
221 # since 1.9 (or a79fea6b3e77). |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
222 revlogopts = getattr( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
223 cmdutil, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
224 "debugrevlogopts", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
225 getattr( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
226 commands, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
227 "debugrevlogopts", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
228 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
229 (b'c', b'changelog', False, b'open changelog'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
230 (b'm', b'manifest', False, b'open manifest'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
231 (b'', b'dir', False, b'open directory manifest'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
232 ], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
233 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
234 ) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
235 |
18237
4132dc9bd5c4
perftest: migrate to new style command declaration
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18236
diff
changeset
|
236 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
|
237 |
50008
e859f440daa9
locking: grab the wlock before touching the dirstate in `perfdirstatewrite`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49737
diff
changeset
|
238 |
29497
ee2027195847
perf: define command annotation locally for Mercurial earlier than 3.1
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29496
diff
changeset
|
239 # 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
|
240 # 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
|
241 # 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
|
242 def parsealiases(cmd): |
40295
fa88170c10bb
help: adding a proper declaration for shortlist/basic commands (API)
Rodrigo Damazio <rdamazio@google.com>
parents:
40214
diff
changeset
|
243 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
|
244 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
245 |
32337
46ba2cdda476
registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32297
diff
changeset
|
246 if safehasattr(registrar, 'command'): |
46ba2cdda476
registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32297
diff
changeset
|
247 command = registrar.command(cmdtable) |
46ba2cdda476
registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32297
diff
changeset
|
248 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
|
249 command = cmdutil.command(cmdtable) |
45632
7d0e54056586
py3: use native string when comparing with a function's argspec
Raphaël Gomès <rgomes@octobus.net>
parents:
44996
diff
changeset
|
250 if '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
|
251 # 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
|
252 # 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
|
253 # 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
|
254 _command = command |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
255 |
29497
ee2027195847
perf: define command annotation locally for Mercurial earlier than 3.1
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29496
diff
changeset
|
256 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
|
257 if norepo: |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
258 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
|
259 return _command(name, list(options), synopsis) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
260 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
261 |
29497
ee2027195847
perf: define command annotation locally for Mercurial earlier than 3.1
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29496
diff
changeset
|
262 else: |
ee2027195847
perf: define command annotation locally for Mercurial earlier than 3.1
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29496
diff
changeset
|
263 # 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
|
264 # 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
|
265 # 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
|
266 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
|
267 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
|
268 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
|
269 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
|
270 else: |
ee2027195847
perf: define command annotation locally for Mercurial earlier than 3.1
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29496
diff
changeset
|
271 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
|
272 if norepo: |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
273 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
|
274 return func |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
275 |
29497
ee2027195847
perf: define command annotation locally for Mercurial earlier than 3.1
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
29496
diff
changeset
|
276 return decorator |
18237
4132dc9bd5c4
perftest: migrate to new style command declaration
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
18236
diff
changeset
|
277 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
278 |
34494
bbb5687e5140
configitems: register the 'perf.stub' config
Boris Feld <boris.feld@octobus.net>
parents:
34343
diff
changeset
|
279 try: |
34749
acdc574cb8d7
contrib-perf: update the config registration
Boris Feld <boris.feld@octobus.net>
parents:
34678
diff
changeset
|
280 import mercurial.registrar |
acdc574cb8d7
contrib-perf: update the config registration
Boris Feld <boris.feld@octobus.net>
parents:
34678
diff
changeset
|
281 import mercurial.configitems |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
282 |
34494
bbb5687e5140
configitems: register the 'perf.stub' config
Boris Feld <boris.feld@octobus.net>
parents:
34343
diff
changeset
|
283 configtable = {} |
34749
acdc574cb8d7
contrib-perf: update the config registration
Boris Feld <boris.feld@octobus.net>
parents:
34678
diff
changeset
|
284 configitem = mercurial.registrar.configitem(configtable) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
285 configitem( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
286 b'perf', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
287 b'presleep', |
34749
acdc574cb8d7
contrib-perf: update the config registration
Boris Feld <boris.feld@octobus.net>
parents:
34678
diff
changeset
|
288 default=mercurial.configitems.dynamicdefault, |
42760
9f2189b6bf2a
config: add experimental argument to the config registrar
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42462
diff
changeset
|
289 experimental=True, |
9f2189b6bf2a
config: add experimental argument to the config registrar
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42462
diff
changeset
|
290 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
291 configitem( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
292 b'perf', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
293 b'stub', |
42760
9f2189b6bf2a
config: add experimental argument to the config registrar
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42462
diff
changeset
|
294 default=mercurial.configitems.dynamicdefault, |
9f2189b6bf2a
config: add experimental argument to the config registrar
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42462
diff
changeset
|
295 experimental=True, |
9f2189b6bf2a
config: add experimental argument to the config registrar
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42462
diff
changeset
|
296 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
297 configitem( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
298 b'perf', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
299 b'parentscount', |
42760
9f2189b6bf2a
config: add experimental argument to the config registrar
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42462
diff
changeset
|
300 default=mercurial.configitems.dynamicdefault, |
9f2189b6bf2a
config: add experimental argument to the config registrar
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42462
diff
changeset
|
301 experimental=True, |
9f2189b6bf2a
config: add experimental argument to the config registrar
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42462
diff
changeset
|
302 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
303 configitem( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
304 b'perf', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
305 b'all-timing', |
42760
9f2189b6bf2a
config: add experimental argument to the config registrar
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42462
diff
changeset
|
306 default=mercurial.configitems.dynamicdefault, |
9f2189b6bf2a
config: add experimental argument to the config registrar
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42462
diff
changeset
|
307 experimental=True, |
9f2189b6bf2a
config: add experimental argument to the config registrar
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42462
diff
changeset
|
308 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
309 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
310 b'perf', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
311 b'pre-run', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
312 default=mercurial.configitems.dynamicdefault, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
313 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
314 configitem( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
315 b'perf', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
316 b'profile-benchmark', |
42760
9f2189b6bf2a
config: add experimental argument to the config registrar
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42462
diff
changeset
|
317 default=mercurial.configitems.dynamicdefault, |
9f2189b6bf2a
config: add experimental argument to the config registrar
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42462
diff
changeset
|
318 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
319 configitem( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
320 b'perf', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
321 b'run-limits', |
42760
9f2189b6bf2a
config: add experimental argument to the config registrar
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42462
diff
changeset
|
322 default=mercurial.configitems.dynamicdefault, |
9f2189b6bf2a
config: add experimental argument to the config registrar
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42462
diff
changeset
|
323 experimental=True, |
9f2189b6bf2a
config: add experimental argument to the config registrar
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42462
diff
changeset
|
324 ) |
9f2189b6bf2a
config: add experimental argument to the config registrar
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42462
diff
changeset
|
325 except (ImportError, AttributeError): |
9f2189b6bf2a
config: add experimental argument to the config registrar
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42462
diff
changeset
|
326 pass |
9f2189b6bf2a
config: add experimental argument to the config registrar
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42462
diff
changeset
|
327 except TypeError: |
9f2189b6bf2a
config: add experimental argument to the config registrar
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42462
diff
changeset
|
328 # compatibility fix for a11fd395e83f |
9f2189b6bf2a
config: add experimental argument to the config registrar
Navaneeth Suresh <navaneeths1998@gmail.com>
parents:
42462
diff
changeset
|
329 # hg version: 5.2 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
330 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
331 b'perf', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
332 b'presleep', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
333 default=mercurial.configitems.dynamicdefault, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
334 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
335 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
336 b'perf', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
337 b'stub', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
338 default=mercurial.configitems.dynamicdefault, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
339 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
340 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
341 b'perf', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
342 b'parentscount', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
343 default=mercurial.configitems.dynamicdefault, |
34749
acdc574cb8d7
contrib-perf: update the config registration
Boris Feld <boris.feld@octobus.net>
parents:
34678
diff
changeset
|
344 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
345 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
346 b'perf', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
347 b'all-timing', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
348 default=mercurial.configitems.dynamicdefault, |
34494
bbb5687e5140
configitems: register the 'perf.stub' config
Boris Feld <boris.feld@octobus.net>
parents:
34343
diff
changeset
|
349 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
350 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
351 b'perf', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
352 b'pre-run', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
353 default=mercurial.configitems.dynamicdefault, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
354 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
355 configitem( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
356 b'perf', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
357 b'profile-benchmark', |
34750
caf6c446cbe3
contrib-perf: register the 'parentscount' config item
Boris Feld <boris.feld@octobus.net>
parents:
34749
diff
changeset
|
358 default=mercurial.configitems.dynamicdefault, |
caf6c446cbe3
contrib-perf: register the 'parentscount' config item
Boris Feld <boris.feld@octobus.net>
parents:
34749
diff
changeset
|
359 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
360 configitem( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
361 b'perf', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
362 b'run-limits', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
363 default=mercurial.configitems.dynamicdefault, |
42359
563cd9a72682
perf: add a `pre-run` option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42138
diff
changeset
|
364 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
365 |
34494
bbb5687e5140
configitems: register the 'perf.stub' config
Boris Feld <boris.feld@octobus.net>
parents:
34343
diff
changeset
|
366 |
27307 | 367 def getlen(ui): |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
368 if ui.configbool(b"perf", b"stub", False): |
27307 | 369 return lambda x: 1 |
370 return len | |
371 | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
372 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
373 class noop: |
42360
3293086ff663
perf: add an option to profile the benchmark section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42359
diff
changeset
|
374 """dummy context manager""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
375 |
42360
3293086ff663
perf: add an option to profile the benchmark section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42359
diff
changeset
|
376 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
|
377 pass |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
378 |
42360
3293086ff663
perf: add an option to profile the benchmark section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42359
diff
changeset
|
379 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
|
380 pass |
3293086ff663
perf: add an option to profile the benchmark section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42359
diff
changeset
|
381 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
382 |
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
|
383 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
|
384 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
385 |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
386 def gettimer(ui, opts=None): |
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
387 """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
|
388 |
27303
57bd9c5431a5
perf: improve grammar of gettimer comment
timeless <timeless@mozdev.org>
parents:
27286
diff
changeset
|
389 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
|
390 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
|
391 |
316ad725a1dd
perf: add a configurable sleep on startup
Matt Mackall <mpm@selenic.com>
parents:
23537
diff
changeset
|
392 # 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
|
393 # experimental config: perf.presleep |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
394 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
|
395 |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
396 if opts is None: |
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
397 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
|
398 # 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
|
399 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
|
400 ui = ui.copy() |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
401 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
|
402 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
|
403 # 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
|
404 # 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
|
405 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
|
406 |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
407 # 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
|
408 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
|
409 if uiformatter: |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
410 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
|
411 else: |
423bf74d2e5b
perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30146
diff
changeset
|
412 # 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
|
413 # 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
|
414 # 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
|
415 from mercurial import node |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
416 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
417 class defaultformatter: |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
418 """Minimized composition of baseformatter and plainformatter""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
419 |
30147
423bf74d2e5b
perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30146
diff
changeset
|
420 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
|
421 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
|
422 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
|
423 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
|
424 else: |
423bf74d2e5b
perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30146
diff
changeset
|
425 self.hexfunc = node.short |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
426 |
30147
423bf74d2e5b
perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30146
diff
changeset
|
427 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
|
428 return False |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
429 |
31476
413b44003462
py3: add __bool__ to every class defining __nonzero__
Gregory Szorc <gregory.szorc@gmail.com>
parents:
31397
diff
changeset
|
430 __bool__ = __nonzero__ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
431 |
30147
423bf74d2e5b
perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30146
diff
changeset
|
432 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
|
433 pass |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
434 |
30147
423bf74d2e5b
perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30146
diff
changeset
|
435 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
|
436 pass |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
437 |
30147
423bf74d2e5b
perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30146
diff
changeset
|
438 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
|
439 self._ui.write(deftext % fielddata, **opts) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
440 |
30147
423bf74d2e5b
perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30146
diff
changeset
|
441 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
|
442 if cond: |
423bf74d2e5b
perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30146
diff
changeset
|
443 self._ui.write(deftext % fielddata, **opts) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
444 |
30147
423bf74d2e5b
perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30146
diff
changeset
|
445 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
|
446 self._ui.write(text, **opts) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
447 |
30147
423bf74d2e5b
perf: define formatter locally for Mercurial earlier than 2.2
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30146
diff
changeset
|
448 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
|
449 pass |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
450 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
451 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
|
452 |
27304
a6fd79495770
perf: offer perf.stub to only run one loop
timeless <timeless@mozdev.org>
parents:
27303
diff
changeset
|
453 # 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
|
454 # experimental config: perf.stub |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
455 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
|
456 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
|
457 |
55101513ed94
perf: add a 'perf.all-timing' option to display more than best time
Boris Feld <boris.feld@octobus.net>
parents:
38693
diff
changeset
|
458 # experimental config: perf.all-timing |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
459 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
|
460 |
5a1e621b8186
perf: introduce a `perf.run-limits` options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42018
diff
changeset
|
461 # 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
|
462 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
|
463 limits = [] |
5a1e621b8186
perf: introduce a `perf.run-limits` options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42018
diff
changeset
|
464 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
|
465 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
|
466 if len(parts) < 2: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
467 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
|
468 continue |
5a1e621b8186
perf: introduce a `perf.run-limits` options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42018
diff
changeset
|
469 try: |
42785
c00005975c91
perf: don't depend on pycompat for older Mercurial versions
Martin von Zweigbergk <martinvonz@google.com>
parents:
42784
diff
changeset
|
470 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
|
471 except ValueError as e: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
472 ui.warn( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
473 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
474 b'malformatted run limit entry, %s: %s\n' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
475 % (_bytestr(e), item) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
476 ) |
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 continue |
5a1e621b8186
perf: introduce a `perf.run-limits` options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42018
diff
changeset
|
479 try: |
42785
c00005975c91
perf: don't depend on pycompat for older Mercurial versions
Martin von Zweigbergk <martinvonz@google.com>
parents:
42784
diff
changeset
|
480 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
|
481 except ValueError as e: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
482 ui.warn( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
483 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
484 b'malformatted run limit entry, %s: %s\n' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
485 % (_bytestr(e), item) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
486 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
487 ) |
42019
5a1e621b8186
perf: introduce a `perf.run-limits` options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42018
diff
changeset
|
488 continue |
5a1e621b8186
perf: introduce a `perf.run-limits` options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42018
diff
changeset
|
489 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
|
490 if not limits: |
5a1e621b8186
perf: introduce a `perf.run-limits` options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42018
diff
changeset
|
491 limits = DEFAULTLIMITS |
5a1e621b8186
perf: introduce a `perf.run-limits` options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42018
diff
changeset
|
492 |
42360
3293086ff663
perf: add an option to profile the benchmark section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42359
diff
changeset
|
493 profiler = None |
3293086ff663
perf: add an option to profile the benchmark section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42359
diff
changeset
|
494 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
|
495 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
|
496 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
|
497 |
42359
563cd9a72682
perf: add a `pre-run` option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42138
diff
changeset
|
498 prerun = getint(ui, b"perf", b"pre-run", 0) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
499 t = functools.partial( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
500 _timer, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
501 fm, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
502 displayall=displayall, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
503 limits=limits, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
504 prerun=prerun, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
505 profiler=profiler, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
506 ) |
42019
5a1e621b8186
perf: introduce a `perf.run-limits` options
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42018
diff
changeset
|
507 return t, fm |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
508 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
509 |
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
|
510 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
|
511 if setup is not None: |
0adc2c0a0792
perf: run 'setup' function during stub run
Boris Feld <boris.feld@octobus.net>
parents:
40720
diff
changeset
|
512 setup() |
27304
a6fd79495770
perf: offer perf.stub to only run one loop
timeless <timeless@mozdev.org>
parents:
27303
diff
changeset
|
513 func() |
a6fd79495770
perf: offer perf.stub to only run one loop
timeless <timeless@mozdev.org>
parents:
27303
diff
changeset
|
514 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
515 |
40144
acf560bc9b56
perf: extract the timing of a section in a context manager
Boris Feld <boris.feld@octobus.net>
parents:
40143
diff
changeset
|
516 @contextlib.contextmanager |
acf560bc9b56
perf: extract the timing of a section in a context manager
Boris Feld <boris.feld@octobus.net>
parents:
40143
diff
changeset
|
517 def timeone(): |
acf560bc9b56
perf: extract the timing of a section in a context manager
Boris Feld <boris.feld@octobus.net>
parents:
40143
diff
changeset
|
518 r = [] |
acf560bc9b56
perf: extract the timing of a section in a context manager
Boris Feld <boris.feld@octobus.net>
parents:
40143
diff
changeset
|
519 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
|
520 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
|
521 yield r |
acf560bc9b56
perf: extract the timing of a section in a context manager
Boris Feld <boris.feld@octobus.net>
parents:
40143
diff
changeset
|
522 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
|
523 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
|
524 a, b = ostart, ostop |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
525 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
|
526 |
42017
87066cf5ec0f
perf: more flexible implementation for checking stop conditions
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42016
diff
changeset
|
527 |
87066cf5ec0f
perf: more flexible implementation for checking stop conditions
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42016
diff
changeset
|
528 # 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
|
529 DEFAULTLIMITS = ( |
87066cf5ec0f
perf: more flexible implementation for checking stop conditions
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42016
diff
changeset
|
530 (3.0, 100), |
87066cf5ec0f
perf: more flexible implementation for checking stop conditions
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42016
diff
changeset
|
531 (10.0, 3), |
87066cf5ec0f
perf: more flexible implementation for checking stop conditions
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42016
diff
changeset
|
532 ) |
87066cf5ec0f
perf: more flexible implementation for checking stop conditions
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42016
diff
changeset
|
533 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
534 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
535 def _timer( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
536 fm, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
537 func, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
538 setup=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
539 title=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
540 displayall=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
541 limits=DEFAULTLIMITS, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
542 prerun=0, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
543 profiler=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
544 ): |
31397
8f5ed8fa39f8
perf: perform a garbage collection before each iteration
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30977
diff
changeset
|
545 gc.collect() |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
546 results = [] |
30975
22fbca1d11ed
mercurial: switch to util.timer for all interval timings
Simon Farnsworth <simonfar@fb.com>
parents:
30882
diff
changeset
|
547 begin = util.timer() |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
548 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
|
549 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
|
550 profiler = NOOPCTX |
42370
c2d10506725c
py3: use range() instead of xrange()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
42364
diff
changeset
|
551 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
|
552 if setup is not None: |
563cd9a72682
perf: add a `pre-run` option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42138
diff
changeset
|
553 setup() |
563cd9a72682
perf: add a `pre-run` option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42138
diff
changeset
|
554 func() |
42017
87066cf5ec0f
perf: more flexible implementation for checking stop conditions
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42016
diff
changeset
|
555 keepgoing = True |
87066cf5ec0f
perf: more flexible implementation for checking stop conditions
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42016
diff
changeset
|
556 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
|
557 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
|
558 setup() |
42360
3293086ff663
perf: add an option to profile the benchmark section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42359
diff
changeset
|
559 with profiler: |
3293086ff663
perf: add an option to profile the benchmark section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42359
diff
changeset
|
560 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
|
561 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
|
562 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
|
563 count += 1 |
acf560bc9b56
perf: extract the timing of a section in a context manager
Boris Feld <boris.feld@octobus.net>
parents:
40143
diff
changeset
|
564 results.append(item[0]) |
30975
22fbca1d11ed
mercurial: switch to util.timer for all interval timings
Simon Farnsworth <simonfar@fb.com>
parents:
30882
diff
changeset
|
565 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
|
566 # 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
|
567 elapsed = cstop - begin |
42018
0e6422942c84
perf: pass limits as a function argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42017
diff
changeset
|
568 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
|
569 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
|
570 keepgoing = False |
87066cf5ec0f
perf: more flexible implementation for checking stop conditions
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42016
diff
changeset
|
571 break |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
572 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
573 formatone(fm, results, title=title, result=r, displayall=displayall) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
574 |
40145
21261fc0fb2b
perf: extract result formatting in its own function
Boris Feld <boris.feld@octobus.net>
parents:
40144
diff
changeset
|
575 |
21261fc0fb2b
perf: extract result formatting in its own function
Boris Feld <boris.feld@octobus.net>
parents:
40144
diff
changeset
|
576 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
|
577 count = len(timings) |
21261fc0fb2b
perf: extract result formatting in its own function
Boris Feld <boris.feld@octobus.net>
parents:
40144
diff
changeset
|
578 |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
579 fm.startitem() |
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
580 |
9826
d768614578dd
contrib/perf: profile diff of working directory changes
Patrick Mezard <pmezard@gmail.com>
parents:
9146
diff
changeset
|
581 if title: |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
582 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
|
583 if result: |
21261fc0fb2b
perf: extract result formatting in its own function
Boris Feld <boris.feld@octobus.net>
parents:
40144
diff
changeset
|
584 fm.write(b'result', b'! result: %s\n', result) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
585 |
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
|
586 def display(role, entry): |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
587 prefix = b'' |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
588 if role != b'best': |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
589 prefix = b'%s.' % role |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
590 fm.plain(b'!') |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
591 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
|
592 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
|
593 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
|
594 fm.write(prefix + b'sys', b' sys %f', entry[2]) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
595 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
|
596 fm.plain(b'\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
597 |
40145
21261fc0fb2b
perf: extract result formatting in its own function
Boris Feld <boris.feld@octobus.net>
parents:
40144
diff
changeset
|
598 timings.sort() |
21261fc0fb2b
perf: extract result formatting in its own function
Boris Feld <boris.feld@octobus.net>
parents:
40144
diff
changeset
|
599 min_val = timings[0] |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
600 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
|
601 if displayall: |
40145
21261fc0fb2b
perf: extract result formatting in its own function
Boris Feld <boris.feld@octobus.net>
parents:
40144
diff
changeset
|
602 max_val = timings[-1] |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
603 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
|
604 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
|
605 display(b'avg', avg) |
40145
21261fc0fb2b
perf: extract result formatting in its own function
Boris Feld <boris.feld@octobus.net>
parents:
40144
diff
changeset
|
606 median = timings[len(timings) // 2] |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
607 display(b'median', median) |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
608 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
609 |
30143
2d858c771760
perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30069
diff
changeset
|
610 # utilities for historical portability |
2d858c771760
perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30069
diff
changeset
|
611 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
612 |
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
|
613 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
|
614 # 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
|
615 # 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
|
616 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
|
617 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
|
618 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
|
619 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
|
620 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
|
621 except ValueError: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
622 raise error.ConfigError( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
623 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
|
624 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
625 |
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
|
626 |
30143
2d858c771760
perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30069
diff
changeset
|
627 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
|
628 """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
|
629 |
2d858c771760
perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30069
diff
changeset
|
630 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
|
631 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
|
632 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
|
633 |
2d858c771760
perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30069
diff
changeset
|
634 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
|
635 (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
|
636 |
2d858c771760
perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30069
diff
changeset
|
637 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
|
638 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
|
639 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
|
640 versions. |
2d858c771760
perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30069
diff
changeset
|
641 """ |
2d858c771760
perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30069
diff
changeset
|
642 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
|
643 if ignoremissing: |
2d858c771760
perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30069
diff
changeset
|
644 return None |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
645 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
646 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
647 b"missing attribute %s of %s might break assumption" |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
648 b" of performance measurement" |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
649 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
650 % (name, obj) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
651 ) |
30143
2d858c771760
perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30069
diff
changeset
|
652 |
39821
6787dc1b93a9
py3: handle sysstr conversion around get/set attr in contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39763
diff
changeset
|
653 origvalue = getattr(obj, _sysstr(name)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
654 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
655 class attrutil: |
30143
2d858c771760
perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30069
diff
changeset
|
656 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
|
657 setattr(obj, _sysstr(name), newvalue) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
658 |
30143
2d858c771760
perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30069
diff
changeset
|
659 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
|
660 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
|
661 |
2d858c771760
perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30069
diff
changeset
|
662 return attrutil() |
2d858c771760
perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30069
diff
changeset
|
663 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
664 |
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
|
665 # 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
|
666 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
667 |
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
|
668 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
|
669 # 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
|
670 # 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
|
671 # - 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
|
672 # - 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
|
673 # - repoviewutil since 5.0 |
caebe5e7f4bd
repoview: move subsettable in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42063
diff
changeset
|
674 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
|
675 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
|
676 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
|
677 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
|
678 |
14031d183048
perf: get subsettable from appropriate module for Mercurial earlier than 2.9
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30143
diff
changeset
|
679 # 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
|
680 # 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
|
681 # doesn't) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
682 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
683 b"perfbranchmap not available with this Mercurial", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
684 hint=b"use 2.5 or later", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
685 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
686 |
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
|
687 |
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
|
688 def getsvfs(repo): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
689 """Return appropriate object to access files under .hg/store""" |
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
|
690 # 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
|
691 # 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
|
692 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
|
693 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
|
694 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
|
695 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
|
696 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
|
697 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
698 |
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
|
699 def getvfs(repo): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
700 """Return appropriate object to access files under .hg""" |
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
|
701 # 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
|
702 # 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
|
703 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
|
704 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
|
705 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
|
706 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
|
707 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
|
708 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
709 |
30150
c0410814002f
perf: make perftags clear tags cache correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30149
diff
changeset
|
710 def repocleartagscachefunc(repo): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
711 """Return the function to clear tags cache according to repo internal API""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
712 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
|
713 # 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
|
714 # 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
|
715 # 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
|
716 def clearcache(): |
c0410814002f
perf: make perftags clear tags cache correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30149
diff
changeset
|
717 # _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
|
718 # 98c867ac1330), and delattr() can't work in such case |
43421
be384a2052aa
py3: don't use bytes with vars() or __dict__
Martin von Zweigbergk <martinvonz@google.com>
parents:
43197
diff
changeset
|
719 if '_tagscache' in vars(repo): |
be384a2052aa
py3: don't use bytes with vars() or __dict__
Martin von Zweigbergk <martinvonz@google.com>
parents:
43197
diff
changeset
|
720 del repo.__dict__['_tagscache'] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
721 |
30150
c0410814002f
perf: make perftags clear tags cache correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30149
diff
changeset
|
722 return clearcache |
c0410814002f
perf: make perftags clear tags cache correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30149
diff
changeset
|
723 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
724 repotags = safeattrsetter(repo, b'_tags', ignoremissing=True) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
725 if repotags: # since 1.4 (or 5614a628d173) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
726 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
|
727 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
728 repotagscache = safeattrsetter(repo, b'tagscache', ignoremissing=True) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
729 if repotagscache: # since 0.6 (or d7df759d0e97) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
730 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
|
731 |
c0410814002f
perf: make perftags clear tags cache correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30149
diff
changeset
|
732 # 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
|
733 # 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
|
734 # - 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
|
735 # in perftags() causes failure soon |
c0410814002f
perf: make perftags clear tags cache correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30149
diff
changeset
|
736 # - 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
|
737 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
|
738 |
30150
c0410814002f
perf: make perftags clear tags cache correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30149
diff
changeset
|
739 |
32731
6f791ca70640
perf: have a generic "clearstorecache" function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32710
diff
changeset
|
740 # utilities to clear cache |
6f791ca70640
perf: have a generic "clearstorecache" function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32710
diff
changeset
|
741 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
742 |
40683
d7936a9dad47
perf: make `clearfilecache` helper work with any object
Boris Feld <boris.feld@octobus.net>
parents:
40682
diff
changeset
|
743 def clearfilecache(obj, attrname): |
d7936a9dad47
perf: make `clearfilecache` helper work with any object
Boris Feld <boris.feld@octobus.net>
parents:
40682
diff
changeset
|
744 unfiltered = getattr(obj, 'unfiltered', None) |
d7936a9dad47
perf: make `clearfilecache` helper work with any object
Boris Feld <boris.feld@octobus.net>
parents:
40682
diff
changeset
|
745 if unfiltered is not None: |
d7936a9dad47
perf: make `clearfilecache` helper work with any object
Boris Feld <boris.feld@octobus.net>
parents:
40682
diff
changeset
|
746 obj = obj.unfiltered() |
d7936a9dad47
perf: make `clearfilecache` helper work with any object
Boris Feld <boris.feld@octobus.net>
parents:
40682
diff
changeset
|
747 if attrname in vars(obj): |
d7936a9dad47
perf: make `clearfilecache` helper work with any object
Boris Feld <boris.feld@octobus.net>
parents:
40682
diff
changeset
|
748 delattr(obj, attrname) |
d7936a9dad47
perf: make `clearfilecache` helper work with any object
Boris Feld <boris.feld@octobus.net>
parents:
40682
diff
changeset
|
749 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
|
750 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
751 |
40701
e4ea63855d5a
perf: introduce a function to fully "unload" a changelog
Boris Feld <boris.feld@octobus.net>
parents:
40700
diff
changeset
|
752 def clearchangelog(repo): |
e4ea63855d5a
perf: introduce a function to fully "unload" a changelog
Boris Feld <boris.feld@octobus.net>
parents:
40700
diff
changeset
|
753 if repo is not repo.unfiltered(): |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
754 object.__setattr__(repo, '_clcachekey', None) |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
755 object.__setattr__(repo, '_clcache', None) |
40701
e4ea63855d5a
perf: introduce a function to fully "unload" a changelog
Boris Feld <boris.feld@octobus.net>
parents:
40700
diff
changeset
|
756 clearfilecache(repo.unfiltered(), 'changelog') |
e4ea63855d5a
perf: introduce a function to fully "unload" a changelog
Boris Feld <boris.feld@octobus.net>
parents:
40700
diff
changeset
|
757 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
758 |
30143
2d858c771760
perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30069
diff
changeset
|
759 # perf commands |
2d858c771760
perf: introduce safeattrsetter to replace direct attribute assignment
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30069
diff
changeset
|
760 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
761 |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
762 @command(b'perf::walk|perfwalk', formatteropts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
763 def perfwalk(ui, repo, *pats, **opts): |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
764 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
765 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
|
766 m = scmutil.match(repo[None], pats, {}) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
767 timer( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
768 lambda: len( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
769 list( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
770 repo.dirstate.walk(m, subrepos=[], unknown=True, ignored=False) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
771 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
772 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
773 ) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
774 fm.end() |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
775 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
776 |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
777 @command(b'perf::annotate|perfannotate', formatteropts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
778 def perfannotate(ui, repo, f, **opts): |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
779 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
780 timer, fm = gettimer(ui, opts) |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
781 fc = repo[b'.'][f] |
19292
e0aa6fff8f02
annotate: simplify annotate parent function
Durham Goode <durham@fb.com>
parents:
18877
diff
changeset
|
782 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
|
783 fm.end() |
19292
e0aa6fff8f02
annotate: simplify annotate parent function
Durham Goode <durham@fb.com>
parents:
18877
diff
changeset
|
784 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
785 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
786 @command( |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
787 b'perf::status|perfstatus', |
43436
bfc68404cccd
perf: add a way to benchmark `dirstate.status`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43197
diff
changeset
|
788 [ |
bfc68404cccd
perf: add a way to benchmark `dirstate.status`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43197
diff
changeset
|
789 (b'u', b'unknown', False, b'ask status to look for unknown files'), |
bfc68404cccd
perf: add a way to benchmark `dirstate.status`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43197
diff
changeset
|
790 (b'', b'dirstate', False, b'benchmark the internal dirstate call'), |
bfc68404cccd
perf: add a way to benchmark `dirstate.status`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43197
diff
changeset
|
791 ] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
792 + formatteropts, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
793 ) |
18033
00ac420f24ee
perf: add option to perfstatus to get the status of unknown files
Siddharth Agarwal <sid0@fb.com>
parents:
17780
diff
changeset
|
794 def perfstatus(ui, repo, **opts): |
43120
97f80dd21312
perf: document `perfstatus`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43117
diff
changeset
|
795 """benchmark the performance of a single status call |
97f80dd21312
perf: document `perfstatus`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43117
diff
changeset
|
796 |
97f80dd21312
perf: document `perfstatus`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43117
diff
changeset
|
797 The repository data are preserved between each call. |
97f80dd21312
perf: document `perfstatus`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43117
diff
changeset
|
798 |
97f80dd21312
perf: document `perfstatus`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43117
diff
changeset
|
799 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
|
800 `--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
|
801 """ |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
802 opts = _byteskwargs(opts) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
803 # m = match.always(repo.root, repo.getcwd()) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
804 # timer(lambda: sum(map(len, repo.dirstate.status(m, [], False, False, |
16683 | 805 # False)))) |
27017
cdc3e437b481
perf: un-bitrot perfstatus
Matt Mackall <mpm@selenic.com>
parents:
26748
diff
changeset
|
806 timer, fm = gettimer(ui, opts) |
43436
bfc68404cccd
perf: add a way to benchmark `dirstate.status`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43197
diff
changeset
|
807 if opts[b'dirstate']: |
bfc68404cccd
perf: add a way to benchmark `dirstate.status`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43197
diff
changeset
|
808 dirstate = repo.dirstate |
bfc68404cccd
perf: add a way to benchmark `dirstate.status`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43197
diff
changeset
|
809 m = scmutil.matchall(repo) |
bfc68404cccd
perf: add a way to benchmark `dirstate.status`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43197
diff
changeset
|
810 unknown = opts[b'unknown'] |
bfc68404cccd
perf: add a way to benchmark `dirstate.status`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43197
diff
changeset
|
811 |
bfc68404cccd
perf: add a way to benchmark `dirstate.status`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43197
diff
changeset
|
812 def status_dirstate(): |
bfc68404cccd
perf: add a way to benchmark `dirstate.status`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43197
diff
changeset
|
813 s = dirstate.status( |
bfc68404cccd
perf: add a way to benchmark `dirstate.status`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43197
diff
changeset
|
814 m, subrepos=[], ignored=False, clean=False, unknown=unknown |
bfc68404cccd
perf: add a way to benchmark `dirstate.status`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43197
diff
changeset
|
815 ) |
43653
6186c2a53ea5
perf: bool() elements of dirstate.status return instead of len()
Augie Fackler <augie@google.com>
parents:
43572
diff
changeset
|
816 sum(map(bool, s)) |
43436
bfc68404cccd
perf: add a way to benchmark `dirstate.status`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43197
diff
changeset
|
817 |
50143
ec3631290eb7
contrib-perf: use `running_status` in `perf::status`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50008
diff
changeset
|
818 if util.safehasattr(dirstate, 'running_status'): |
ec3631290eb7
contrib-perf: use `running_status` in `perf::status`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50008
diff
changeset
|
819 with dirstate.running_status(repo): |
ec3631290eb7
contrib-perf: use `running_status` in `perf::status`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50008
diff
changeset
|
820 timer(status_dirstate) |
ec3631290eb7
contrib-perf: use `running_status` in `perf::status`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50008
diff
changeset
|
821 dirstate.invalidate() |
ec3631290eb7
contrib-perf: use `running_status` in `perf::status`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50008
diff
changeset
|
822 else: |
ec3631290eb7
contrib-perf: use `running_status` in `perf::status`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50008
diff
changeset
|
823 timer(status_dirstate) |
43436
bfc68404cccd
perf: add a way to benchmark `dirstate.status`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43197
diff
changeset
|
824 else: |
bfc68404cccd
perf: add a way to benchmark `dirstate.status`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43197
diff
changeset
|
825 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
|
826 fm.end() |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
827 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
828 |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
829 @command(b'perf::addremove|perfaddremove', formatteropts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
830 def perfaddremove(ui, repo, **opts): |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
831 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
832 timer, fm = gettimer(ui, opts) |
18871
a2d4ab4f575d
perf: add a command to test addremove performance
Siddharth Agarwal <sid0@fb.com>
parents:
18845
diff
changeset
|
833 try: |
a2d4ab4f575d
perf: add a command to test addremove performance
Siddharth Agarwal <sid0@fb.com>
parents:
18845
diff
changeset
|
834 oldquiet = repo.ui.quiet |
a2d4ab4f575d
perf: add a command to test addremove performance
Siddharth Agarwal <sid0@fb.com>
parents:
18845
diff
changeset
|
835 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
|
836 matcher = scmutil.match(repo[None]) |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
837 opts[b'dry_run'] = True |
45632
7d0e54056586
py3: use native string when comparing with a function's argspec
Raphaël Gomès <rgomes@octobus.net>
parents:
44996
diff
changeset
|
838 if 'uipathfn' in getargspec(scmutil.addremove).args: |
41652
6a447a3d1bd0
addremove: pass around uipathfn and use instead of m.uipath() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41615
diff
changeset
|
839 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
|
840 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
|
841 else: |
6a447a3d1bd0
addremove: pass around uipathfn and use instead of m.uipath() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41615
diff
changeset
|
842 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
|
843 finally: |
a2d4ab4f575d
perf: add a command to test addremove performance
Siddharth Agarwal <sid0@fb.com>
parents:
18845
diff
changeset
|
844 repo.ui.quiet = oldquiet |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
845 fm.end() |
18871
a2d4ab4f575d
perf: add a command to test addremove performance
Siddharth Agarwal <sid0@fb.com>
parents:
18845
diff
changeset
|
846 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
847 |
16785
1dc08dc63c09
perf: rework perfheads and perftags to clear caches
Bryan O'Sullivan <bryano@fb.com>
parents:
16689
diff
changeset
|
848 def clearcaches(cl): |
1dc08dc63c09
perf: rework perfheads and perftags to clear caches
Bryan O'Sullivan <bryano@fb.com>
parents:
16689
diff
changeset
|
849 # behave somewhat consistently across internal API changes |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
850 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
|
851 cl.clearcaches() |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
852 elif util.safehasattr(cl, b'_nodecache'): |
43527
43424f03d9a4
revlog: clarify which version use the older API in perf
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43526
diff
changeset
|
853 # <= hg-5.2 |
16785
1dc08dc63c09
perf: rework perfheads and perftags to clear caches
Bryan O'Sullivan <bryano@fb.com>
parents:
16689
diff
changeset
|
854 from mercurial.node import nullid, nullrev |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
855 |
16785
1dc08dc63c09
perf: rework perfheads and perftags to clear caches
Bryan O'Sullivan <bryano@fb.com>
parents:
16689
diff
changeset
|
856 cl._nodecache = {nullid: nullrev} |
1dc08dc63c09
perf: rework perfheads and perftags to clear caches
Bryan O'Sullivan <bryano@fb.com>
parents:
16689
diff
changeset
|
857 cl._nodepos = None |
1dc08dc63c09
perf: rework perfheads and perftags to clear caches
Bryan O'Sullivan <bryano@fb.com>
parents:
16689
diff
changeset
|
858 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
859 |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
860 @command(b'perf::heads|perfheads', formatteropts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
861 def perfheads(ui, repo, **opts): |
41434
48394923fbdc
perf: document perfheads
Boris Feld <boris.feld@octobus.net>
parents:
41365
diff
changeset
|
862 """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
|
863 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
864 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
|
865 cl = repo.changelog |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
866 |
41436
ab6d1f82be32
perf: move cache clearing in the `setup` step of `perfheads`
Boris Feld <boris.feld@octobus.net>
parents:
41434
diff
changeset
|
867 def s(): |
ab6d1f82be32
perf: move cache clearing in the `setup` step of `perfheads`
Boris Feld <boris.feld@octobus.net>
parents:
41434
diff
changeset
|
868 clearcaches(cl) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
869 |
16785
1dc08dc63c09
perf: rework perfheads and perftags to clear caches
Bryan O'Sullivan <bryano@fb.com>
parents:
16689
diff
changeset
|
870 def d(): |
1dc08dc63c09
perf: rework perfheads and perftags to clear caches
Bryan O'Sullivan <bryano@fb.com>
parents:
16689
diff
changeset
|
871 len(cl.headrevs()) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
872 |
41436
ab6d1f82be32
perf: move cache clearing in the `setup` step of `perfheads`
Boris Feld <boris.feld@octobus.net>
parents:
41434
diff
changeset
|
873 timer(d, setup=s) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
874 fm.end() |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
875 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
876 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
877 @command( |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
878 b'perf::tags|perftags', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
879 formatteropts |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
880 + [ |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
881 (b'', b'clear-revlogs', False, b'refresh changelog and manifest'), |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
882 ], |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
883 ) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
884 def perftags(ui, repo, **opts): |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
885 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
886 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
|
887 repocleartagscache = repocleartagscachefunc(repo) |
40744
594e84a2e574
perf: add a `clear-revlogs` flag to `perftags`
Boris Feld <boris.feld@octobus.net>
parents:
40743
diff
changeset
|
888 clearrevlogs = opts[b'clear_revlogs'] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
889 |
40682
4369c00a8ee1
perf: move some of the perftags benchmark to the setup function
Boris Feld <boris.feld@octobus.net>
parents:
40681
diff
changeset
|
890 def s(): |
40744
594e84a2e574
perf: add a `clear-revlogs` flag to `perftags`
Boris Feld <boris.feld@octobus.net>
parents:
40743
diff
changeset
|
891 if clearrevlogs: |
594e84a2e574
perf: add a `clear-revlogs` flag to `perftags`
Boris Feld <boris.feld@octobus.net>
parents:
40743
diff
changeset
|
892 clearchangelog(repo) |
594e84a2e574
perf: add a `clear-revlogs` flag to `perftags`
Boris Feld <boris.feld@octobus.net>
parents:
40743
diff
changeset
|
893 clearfilecache(repo.unfiltered(), 'manifest') |
30150
c0410814002f
perf: make perftags clear tags cache correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30149
diff
changeset
|
894 repocleartagscache() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
895 |
40682
4369c00a8ee1
perf: move some of the perftags benchmark to the setup function
Boris Feld <boris.feld@octobus.net>
parents:
40681
diff
changeset
|
896 def t(): |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
897 return len(repo.tags()) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
898 |
40682
4369c00a8ee1
perf: move some of the perftags benchmark to the setup function
Boris Feld <boris.feld@octobus.net>
parents:
40681
diff
changeset
|
899 timer(t, setup=s) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
900 fm.end() |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
901 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
902 |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
903 @command(b'perf::ancestors|perfancestors', formatteropts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
904 def perfancestors(ui, repo, **opts): |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
905 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
906 timer, fm = gettimer(ui, opts) |
16802
7e5d94381cd1
perf: add a perfancestors benchmark
Bryan O'Sullivan <bryano@fb.com>
parents:
16788
diff
changeset
|
907 heads = repo.changelog.headrevs() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
908 |
16802
7e5d94381cd1
perf: add a perfancestors benchmark
Bryan O'Sullivan <bryano@fb.com>
parents:
16788
diff
changeset
|
909 def d(): |
16866
91f3ac205816
revlog: ancestors(*revs) becomes ancestors(revs) (API)
Bryan O'Sullivan <bryano@fb.com>
parents:
16858
diff
changeset
|
910 for a in repo.changelog.ancestors(heads): |
16802
7e5d94381cd1
perf: add a perfancestors benchmark
Bryan O'Sullivan <bryano@fb.com>
parents:
16788
diff
changeset
|
911 pass |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
912 |
16802
7e5d94381cd1
perf: add a perfancestors benchmark
Bryan O'Sullivan <bryano@fb.com>
parents:
16788
diff
changeset
|
913 timer(d) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
914 fm.end() |
16802
7e5d94381cd1
perf: add a perfancestors benchmark
Bryan O'Sullivan <bryano@fb.com>
parents:
16788
diff
changeset
|
915 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
916 |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
917 @command(b'perf::ancestorset|perfancestorset', formatteropts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
918 def perfancestorset(ui, repo, revset, **opts): |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
919 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
920 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
|
921 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
|
922 heads = repo.changelog.headrevs() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
923 |
18080
486bfb200b3f
perf: add command to test performance of membership in ancestor set
Siddharth Agarwal <sid0@fb.com>
parents:
18062
diff
changeset
|
924 def d(): |
18091
f7f8159caad3
ancestor: add lazy membership testing to lazyancestors
Siddharth Agarwal <sid0@fb.com>
parents:
18080
diff
changeset
|
925 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
|
926 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
|
927 rev in s |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
928 |
18080
486bfb200b3f
perf: add command to test performance of membership in ancestor set
Siddharth Agarwal <sid0@fb.com>
parents:
18062
diff
changeset
|
929 timer(d) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
930 fm.end() |
18080
486bfb200b3f
perf: add command to test performance of membership in ancestor set
Siddharth Agarwal <sid0@fb.com>
parents:
18062
diff
changeset
|
931 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
932 |
49438
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
933 @command( |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
934 b'perf::delta-find', |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
935 revlogopts + formatteropts, |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
936 b'-c|-m|FILE REV', |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
937 ) |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
938 def perf_delta_find(ui, repo, arg_1, arg_2=None, **opts): |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
939 """benchmark the process of finding a valid delta for a revlog revision |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
940 |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
941 When a revlog receives a new revision (e.g. from a commit, or from an |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
942 incoming bundle), it searches for a suitable delta-base to produce a delta. |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
943 This perf command measures how much time we spend in this process. It |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
944 operates on an already stored revision. |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
945 |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
946 See `hg help debug-delta-find` for another related command. |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
947 """ |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
948 from mercurial import revlogutils |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
949 import mercurial.revlogutils.deltas as deltautil |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
950 |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
951 opts = _byteskwargs(opts) |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
952 if arg_2 is None: |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
953 file_ = None |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
954 rev = arg_1 |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
955 else: |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
956 file_ = arg_1 |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
957 rev = arg_2 |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
958 |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
959 repo = repo.unfiltered() |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
960 |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
961 timer, fm = gettimer(ui, opts) |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
962 |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
963 rev = int(rev) |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
964 |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
965 revlog = cmdutil.openrevlog(repo, b'perf::delta-find', file_, opts) |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
966 |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
967 deltacomputer = deltautil.deltacomputer(revlog) |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
968 |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
969 node = revlog.node(rev) |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
970 p1r, p2r = revlog.parentrevs(rev) |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
971 p1 = revlog.node(p1r) |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
972 p2 = revlog.node(p2r) |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
973 full_text = revlog.revision(rev) |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
974 textlen = len(full_text) |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
975 cachedelta = None |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
976 flags = revlog.flags(rev) |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
977 |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
978 revinfo = revlogutils.revisioninfo( |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
979 node, |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
980 p1, |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
981 p2, |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
982 [full_text], # btext |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
983 textlen, |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
984 cachedelta, |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
985 flags, |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
986 ) |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
987 |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
988 # Note: we should probably purge the potential caches (like the full |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
989 # manifest cache) between runs. |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
990 def find_one(): |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
991 with revlog._datafp() as fh: |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
992 deltacomputer.finddeltainfo(revinfo, fh, target_rev=rev) |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
993 |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
994 timer(find_one) |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
995 fm.end() |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
996 |
44d4fd09982f
perf: introduce a benchmark for delta-find
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49414
diff
changeset
|
997 |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
998 @command(b'perf::discovery|perfdiscovery', formatteropts, b'PATH') |
40941
db6cace18765
perfdiscovery: benching findcommonheads()
Georges Racinet <gracinet@anybox.fr>
parents:
40925
diff
changeset
|
999 def perfdiscovery(ui, repo, path, **opts): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
1000 """benchmark discovery between local repo and the peer at given path""" |
40941
db6cace18765
perfdiscovery: benching findcommonheads()
Georges Racinet <gracinet@anybox.fr>
parents:
40925
diff
changeset
|
1001 repos = [repo, None] |
db6cace18765
perfdiscovery: benching findcommonheads()
Georges Racinet <gracinet@anybox.fr>
parents:
40925
diff
changeset
|
1002 timer, fm = gettimer(ui, opts) |
46973
92029a43debb
perf-discovery: use `get_unique_pull_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46780
diff
changeset
|
1003 |
92029a43debb
perf-discovery: use `get_unique_pull_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46780
diff
changeset
|
1004 try: |
49737
4cedae992ed1
path: pass `path` to `peer` in `hg perf::discovery`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49705
diff
changeset
|
1005 from mercurial.utils.urlutil import get_unique_pull_path_obj |
4cedae992ed1
path: pass `path` to `peer` in `hg perf::discovery`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49705
diff
changeset
|
1006 |
4cedae992ed1
path: pass `path` to `peer` in `hg perf::discovery`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49705
diff
changeset
|
1007 path = get_unique_pull_path_obj(b'perfdiscovery', ui, path) |
46973
92029a43debb
perf-discovery: use `get_unique_pull_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46780
diff
changeset
|
1008 except ImportError: |
49737
4cedae992ed1
path: pass `path` to `peer` in `hg perf::discovery`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49705
diff
changeset
|
1009 try: |
4cedae992ed1
path: pass `path` to `peer` in `hg perf::discovery`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49705
diff
changeset
|
1010 from mercurial.utils.urlutil import get_unique_pull_path |
4cedae992ed1
path: pass `path` to `peer` in `hg perf::discovery`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49705
diff
changeset
|
1011 |
4cedae992ed1
path: pass `path` to `peer` in `hg perf::discovery`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49705
diff
changeset
|
1012 path = get_unique_pull_path(b'perfdiscovery', repo, ui, path)[0] |
4cedae992ed1
path: pass `path` to `peer` in `hg perf::discovery`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49705
diff
changeset
|
1013 except ImportError: |
4cedae992ed1
path: pass `path` to `peer` in `hg perf::discovery`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49705
diff
changeset
|
1014 path = ui.expandpath(path) |
40941
db6cace18765
perfdiscovery: benching findcommonheads()
Georges Racinet <gracinet@anybox.fr>
parents:
40925
diff
changeset
|
1015 |
db6cace18765
perfdiscovery: benching findcommonheads()
Georges Racinet <gracinet@anybox.fr>
parents:
40925
diff
changeset
|
1016 def s(): |
db6cace18765
perfdiscovery: benching findcommonheads()
Georges Racinet <gracinet@anybox.fr>
parents:
40925
diff
changeset
|
1017 repos[1] = hg.peer(ui, opts, path) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1018 |
40941
db6cace18765
perfdiscovery: benching findcommonheads()
Georges Racinet <gracinet@anybox.fr>
parents:
40925
diff
changeset
|
1019 def d(): |
db6cace18765
perfdiscovery: benching findcommonheads()
Georges Racinet <gracinet@anybox.fr>
parents:
40925
diff
changeset
|
1020 setdiscovery.findcommonheads(ui, *repos) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1021 |
40941
db6cace18765
perfdiscovery: benching findcommonheads()
Georges Racinet <gracinet@anybox.fr>
parents:
40925
diff
changeset
|
1022 timer(d, setup=s) |
db6cace18765
perfdiscovery: benching findcommonheads()
Georges Racinet <gracinet@anybox.fr>
parents:
40925
diff
changeset
|
1023 fm.end() |
db6cace18765
perfdiscovery: benching findcommonheads()
Georges Racinet <gracinet@anybox.fr>
parents:
40925
diff
changeset
|
1024 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1025 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1026 @command( |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
1027 b'perf::bookmarks|perfbookmarks', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1028 formatteropts |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
1029 + [ |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
1030 (b'', b'clear-revlogs', False, b'refresh changelog and manifest'), |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
1031 ], |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1032 ) |
32733
2b0a8b0f3435
perf: add a perfbookmarks command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32732
diff
changeset
|
1033 def perfbookmarks(ui, repo, **opts): |
2b0a8b0f3435
perf: add a perfbookmarks command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32732
diff
changeset
|
1034 """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
|
1035 opts = _byteskwargs(opts) |
32733
2b0a8b0f3435
perf: add a perfbookmarks command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32732
diff
changeset
|
1036 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
|
1037 |
40746
82c189c511bd
perf: add a `clear-revlogs` flag to `perfbookmarks`
Boris Feld <boris.feld@octobus.net>
parents:
40744
diff
changeset
|
1038 clearrevlogs = opts[b'clear_revlogs'] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1039 |
40681
c0a1686d9391
perf: use the new setup function in "perfbookmarks"
Boris Feld <boris.feld@octobus.net>
parents:
40680
diff
changeset
|
1040 def s(): |
40746
82c189c511bd
perf: add a `clear-revlogs` flag to `perfbookmarks`
Boris Feld <boris.feld@octobus.net>
parents:
40744
diff
changeset
|
1041 if clearrevlogs: |
82c189c511bd
perf: add a `clear-revlogs` flag to `perfbookmarks`
Boris Feld <boris.feld@octobus.net>
parents:
40744
diff
changeset
|
1042 clearchangelog(repo) |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1043 clearfilecache(repo, b'_bookmarks') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1044 |
40681
c0a1686d9391
perf: use the new setup function in "perfbookmarks"
Boris Feld <boris.feld@octobus.net>
parents:
40680
diff
changeset
|
1045 def d(): |
32733
2b0a8b0f3435
perf: add a perfbookmarks command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32732
diff
changeset
|
1046 repo._bookmarks |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1047 |
40681
c0a1686d9391
perf: use the new setup function in "perfbookmarks"
Boris Feld <boris.feld@octobus.net>
parents:
40680
diff
changeset
|
1048 timer(d, setup=s) |
32733
2b0a8b0f3435
perf: add a perfbookmarks command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32732
diff
changeset
|
1049 fm.end() |
2b0a8b0f3435
perf: add a perfbookmarks command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32732
diff
changeset
|
1050 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1051 |
49412
3635aae8b2e9
perf-bundle: accept --rev arguments
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49411
diff
changeset
|
1052 @command( |
3635aae8b2e9
perf-bundle: accept --rev arguments
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49411
diff
changeset
|
1053 b'perf::bundle', |
3635aae8b2e9
perf-bundle: accept --rev arguments
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49411
diff
changeset
|
1054 [ |
3635aae8b2e9
perf-bundle: accept --rev arguments
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49411
diff
changeset
|
1055 ( |
3635aae8b2e9
perf-bundle: accept --rev arguments
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49411
diff
changeset
|
1056 b'r', |
3635aae8b2e9
perf-bundle: accept --rev arguments
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49411
diff
changeset
|
1057 b'rev', |
3635aae8b2e9
perf-bundle: accept --rev arguments
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49411
diff
changeset
|
1058 [], |
3635aae8b2e9
perf-bundle: accept --rev arguments
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49411
diff
changeset
|
1059 b'changesets to bundle', |
3635aae8b2e9
perf-bundle: accept --rev arguments
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49411
diff
changeset
|
1060 b'REV', |
3635aae8b2e9
perf-bundle: accept --rev arguments
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49411
diff
changeset
|
1061 ), |
49413
b380583ad2f5
perf-bundle: accept --type argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49412
diff
changeset
|
1062 ( |
b380583ad2f5
perf-bundle: accept --type argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49412
diff
changeset
|
1063 b't', |
b380583ad2f5
perf-bundle: accept --type argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49412
diff
changeset
|
1064 b'type', |
b380583ad2f5
perf-bundle: accept --type argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49412
diff
changeset
|
1065 b'none', |
b380583ad2f5
perf-bundle: accept --type argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49412
diff
changeset
|
1066 b'bundlespec to use (see `hg help bundlespec`)', |
b380583ad2f5
perf-bundle: accept --type argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49412
diff
changeset
|
1067 b'TYPE', |
b380583ad2f5
perf-bundle: accept --type argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49412
diff
changeset
|
1068 ), |
49412
3635aae8b2e9
perf-bundle: accept --rev arguments
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49411
diff
changeset
|
1069 ] |
3635aae8b2e9
perf-bundle: accept --rev arguments
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49411
diff
changeset
|
1070 + formatteropts, |
3635aae8b2e9
perf-bundle: accept --rev arguments
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49411
diff
changeset
|
1071 b'REVS', |
3635aae8b2e9
perf-bundle: accept --rev arguments
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49411
diff
changeset
|
1072 ) |
49411
b081a5aab782
perf-bundle: add a new command to benchmark bundle creation time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
1073 def perfbundle(ui, repo, *revs, **opts): |
b081a5aab782
perf-bundle: add a new command to benchmark bundle creation time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
1074 """benchmark the creation of a bundle from a repository |
b081a5aab782
perf-bundle: add a new command to benchmark bundle creation time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
1075 |
49413
b380583ad2f5
perf-bundle: accept --type argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49412
diff
changeset
|
1076 For now, this only supports "none" compression. |
49411
b081a5aab782
perf-bundle: add a new command to benchmark bundle creation time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
1077 """ |
49475
d513ae93dff3
perf: make perf::bundle compatible down to 5.2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49474
diff
changeset
|
1078 try: |
d513ae93dff3
perf: make perf::bundle compatible down to 5.2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49474
diff
changeset
|
1079 from mercurial import bundlecaches |
d513ae93dff3
perf: make perf::bundle compatible down to 5.2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49474
diff
changeset
|
1080 |
d513ae93dff3
perf: make perf::bundle compatible down to 5.2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49474
diff
changeset
|
1081 parsebundlespec = bundlecaches.parsebundlespec |
d513ae93dff3
perf: make perf::bundle compatible down to 5.2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49474
diff
changeset
|
1082 except ImportError: |
d513ae93dff3
perf: make perf::bundle compatible down to 5.2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49474
diff
changeset
|
1083 from mercurial import exchange |
d513ae93dff3
perf: make perf::bundle compatible down to 5.2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49474
diff
changeset
|
1084 |
d513ae93dff3
perf: make perf::bundle compatible down to 5.2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49474
diff
changeset
|
1085 parsebundlespec = exchange.parsebundlespec |
d513ae93dff3
perf: make perf::bundle compatible down to 5.2
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49474
diff
changeset
|
1086 |
49411
b081a5aab782
perf-bundle: add a new command to benchmark bundle creation time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
1087 from mercurial import discovery |
b081a5aab782
perf-bundle: add a new command to benchmark bundle creation time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
1088 from mercurial import bundle2 |
b081a5aab782
perf-bundle: add a new command to benchmark bundle creation time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
1089 |
b081a5aab782
perf-bundle: add a new command to benchmark bundle creation time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
1090 opts = _byteskwargs(opts) |
b081a5aab782
perf-bundle: add a new command to benchmark bundle creation time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
1091 timer, fm = gettimer(ui, opts) |
b081a5aab782
perf-bundle: add a new command to benchmark bundle creation time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
1092 |
b081a5aab782
perf-bundle: add a new command to benchmark bundle creation time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
1093 cl = repo.changelog |
49412
3635aae8b2e9
perf-bundle: accept --rev arguments
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49411
diff
changeset
|
1094 revs = list(revs) |
3635aae8b2e9
perf-bundle: accept --rev arguments
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49411
diff
changeset
|
1095 revs.extend(opts.get(b'rev', ())) |
49411
b081a5aab782
perf-bundle: add a new command to benchmark bundle creation time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
1096 revs = scmutil.revrange(repo, revs) |
b081a5aab782
perf-bundle: add a new command to benchmark bundle creation time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
1097 if not revs: |
b081a5aab782
perf-bundle: add a new command to benchmark bundle creation time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
1098 raise error.Abort(b"not revision specified") |
b081a5aab782
perf-bundle: add a new command to benchmark bundle creation time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
1099 # make it a consistent set (ie: without topological gaps) |
b081a5aab782
perf-bundle: add a new command to benchmark bundle creation time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
1100 old_len = len(revs) |
b081a5aab782
perf-bundle: add a new command to benchmark bundle creation time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
1101 revs = list(repo.revs(b"%ld::%ld", revs, revs)) |
b081a5aab782
perf-bundle: add a new command to benchmark bundle creation time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
1102 if old_len != len(revs): |
b081a5aab782
perf-bundle: add a new command to benchmark bundle creation time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
1103 new_count = len(revs) - old_len |
b081a5aab782
perf-bundle: add a new command to benchmark bundle creation time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
1104 msg = b"add %d new revisions to make it a consistent set\n" |
b081a5aab782
perf-bundle: add a new command to benchmark bundle creation time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
1105 ui.write_err(msg % new_count) |
b081a5aab782
perf-bundle: add a new command to benchmark bundle creation time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
1106 |
b081a5aab782
perf-bundle: add a new command to benchmark bundle creation time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
1107 targets = [cl.node(r) for r in repo.revs(b"heads(::%ld)", revs)] |
b081a5aab782
perf-bundle: add a new command to benchmark bundle creation time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
1108 bases = [cl.node(r) for r in repo.revs(b"heads(::%ld - %ld)", revs, revs)] |
b081a5aab782
perf-bundle: add a new command to benchmark bundle creation time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
1109 outgoing = discovery.outgoing(repo, bases, targets) |
b081a5aab782
perf-bundle: add a new command to benchmark bundle creation time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
1110 |
49413
b380583ad2f5
perf-bundle: accept --type argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49412
diff
changeset
|
1111 bundle_spec = opts.get(b'type') |
b380583ad2f5
perf-bundle: accept --type argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49412
diff
changeset
|
1112 |
49474
a7a5740b322a
perf: make perf::bundle compatible before 61ba04693d65
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49445
diff
changeset
|
1113 bundle_spec = parsebundlespec(repo, bundle_spec, strict=False) |
a7a5740b322a
perf: make perf::bundle compatible before 61ba04693d65
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49445
diff
changeset
|
1114 |
a7a5740b322a
perf: make perf::bundle compatible before 61ba04693d65
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49445
diff
changeset
|
1115 cgversion = bundle_spec.params.get(b"cg.version") |
a7a5740b322a
perf: make perf::bundle compatible before 61ba04693d65
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49445
diff
changeset
|
1116 if cgversion is None: |
a7a5740b322a
perf: make perf::bundle compatible before 61ba04693d65
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49445
diff
changeset
|
1117 if bundle_spec.version == b'v1': |
a7a5740b322a
perf: make perf::bundle compatible before 61ba04693d65
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49445
diff
changeset
|
1118 cgversion = b'01' |
a7a5740b322a
perf: make perf::bundle compatible before 61ba04693d65
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49445
diff
changeset
|
1119 if bundle_spec.version == b'v2': |
a7a5740b322a
perf: make perf::bundle compatible before 61ba04693d65
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49445
diff
changeset
|
1120 cgversion = b'02' |
49413
b380583ad2f5
perf-bundle: accept --type argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49412
diff
changeset
|
1121 if cgversion not in changegroup.supportedoutgoingversions(repo): |
b380583ad2f5
perf-bundle: accept --type argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49412
diff
changeset
|
1122 err = b"repository does not support bundle version %s" |
b380583ad2f5
perf-bundle: accept --type argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49412
diff
changeset
|
1123 raise error.Abort(err % cgversion) |
b380583ad2f5
perf-bundle: accept --type argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49412
diff
changeset
|
1124 |
b380583ad2f5
perf-bundle: accept --type argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49412
diff
changeset
|
1125 if cgversion == b'01': # bundle1 |
b380583ad2f5
perf-bundle: accept --type argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49412
diff
changeset
|
1126 bversion = b'HG10' + bundle_spec.wirecompression |
b380583ad2f5
perf-bundle: accept --type argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49412
diff
changeset
|
1127 bcompression = None |
b380583ad2f5
perf-bundle: accept --type argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49412
diff
changeset
|
1128 elif cgversion in (b'02', b'03'): |
b380583ad2f5
perf-bundle: accept --type argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49412
diff
changeset
|
1129 bversion = b'HG20' |
b380583ad2f5
perf-bundle: accept --type argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49412
diff
changeset
|
1130 bcompression = bundle_spec.wirecompression |
b380583ad2f5
perf-bundle: accept --type argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49412
diff
changeset
|
1131 else: |
b380583ad2f5
perf-bundle: accept --type argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49412
diff
changeset
|
1132 err = b'perf::bundle: unexpected changegroup version %s' |
b380583ad2f5
perf-bundle: accept --type argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49412
diff
changeset
|
1133 raise error.ProgrammingError(err % cgversion) |
b380583ad2f5
perf-bundle: accept --type argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49412
diff
changeset
|
1134 |
b380583ad2f5
perf-bundle: accept --type argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49412
diff
changeset
|
1135 if bcompression is None: |
b380583ad2f5
perf-bundle: accept --type argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49412
diff
changeset
|
1136 bcompression = b'UN' |
b380583ad2f5
perf-bundle: accept --type argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49412
diff
changeset
|
1137 |
b380583ad2f5
perf-bundle: accept --type argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49412
diff
changeset
|
1138 if bcompression != b'UN': |
b380583ad2f5
perf-bundle: accept --type argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49412
diff
changeset
|
1139 err = b'perf::bundle: compression currently unsupported: %s' |
b380583ad2f5
perf-bundle: accept --type argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49412
diff
changeset
|
1140 raise error.ProgrammingError(err % bcompression) |
49411
b081a5aab782
perf-bundle: add a new command to benchmark bundle creation time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
1141 |
b081a5aab782
perf-bundle: add a new command to benchmark bundle creation time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
1142 def do_bundle(): |
b081a5aab782
perf-bundle: add a new command to benchmark bundle creation time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
1143 bundle2.writenewbundle( |
b081a5aab782
perf-bundle: add a new command to benchmark bundle creation time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
1144 ui, |
b081a5aab782
perf-bundle: add a new command to benchmark bundle creation time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
1145 repo, |
b081a5aab782
perf-bundle: add a new command to benchmark bundle creation time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
1146 b'perf::bundle', |
b081a5aab782
perf-bundle: add a new command to benchmark bundle creation time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
1147 os.devnull, |
b081a5aab782
perf-bundle: add a new command to benchmark bundle creation time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
1148 bversion, |
b081a5aab782
perf-bundle: add a new command to benchmark bundle creation time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
1149 outgoing, |
49413
b380583ad2f5
perf-bundle: accept --type argument
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49412
diff
changeset
|
1150 bundle_spec.params, |
49411
b081a5aab782
perf-bundle: add a new command to benchmark bundle creation time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
1151 ) |
b081a5aab782
perf-bundle: add a new command to benchmark bundle creation time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
1152 |
b081a5aab782
perf-bundle: add a new command to benchmark bundle creation time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
1153 timer(do_bundle) |
b081a5aab782
perf-bundle: add a new command to benchmark bundle creation time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
1154 fm.end() |
b081a5aab782
perf-bundle: add a new command to benchmark bundle creation time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
1155 |
b081a5aab782
perf-bundle: add a new command to benchmark bundle creation time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
1156 |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
1157 @command(b'perf::bundleread|perfbundleread', formatteropts, b'BUNDLE') |
35109
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1158 def perfbundleread(ui, repo, bundlepath, **opts): |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1159 """Benchmark reading of bundle files. |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1160 |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1161 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
|
1162 much as possible. |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1163 """ |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1164 from mercurial import ( |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1165 bundle2, |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1166 exchange, |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1167 streamclone, |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1168 ) |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
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) |
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
1171 |
35109
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1172 def makebench(fn): |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1173 def run(): |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1174 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
|
1175 bundle = exchange.readbundle(ui, fh, bundlepath) |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1176 fn(bundle) |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1177 |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1178 return run |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1179 |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1180 def makereadnbytes(size): |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1181 def run(): |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1182 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
|
1183 bundle = exchange.readbundle(ui, fh, bundlepath) |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1184 while bundle.read(size): |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1185 pass |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1186 |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1187 return run |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1188 |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1189 def makestdioread(size): |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1190 def run(): |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1191 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
|
1192 while fh.read(size): |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1193 pass |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1194 |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1195 return run |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1196 |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1197 # bundle1 |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1198 |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1199 def deltaiter(bundle): |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1200 for delta in bundle.deltaiter(): |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1201 pass |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1202 |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1203 def iterchunks(bundle): |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1204 for chunk in bundle.getchunks(): |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1205 pass |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1206 |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1207 # bundle2 |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1208 |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1209 def forwardchunks(bundle): |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1210 for chunk in bundle._forwardchunks(): |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1211 pass |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1212 |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1213 def iterparts(bundle): |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1214 for part in bundle.iterparts(): |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1215 pass |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1216 |
35116
da91e7309daf
bundle2: don't use seekable bundle2 parts by default (issue5691)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35109
diff
changeset
|
1217 def iterpartsseekable(bundle): |
da91e7309daf
bundle2: don't use seekable bundle2 parts by default (issue5691)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35109
diff
changeset
|
1218 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
|
1219 pass |
da91e7309daf
bundle2: don't use seekable bundle2 parts by default (issue5691)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35109
diff
changeset
|
1220 |
35109
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1221 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
|
1222 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
|
1223 part.seek(0, os.SEEK_END) |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1224 |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1225 def makepartreadnbytes(size): |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1226 def run(): |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1227 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
|
1228 bundle = exchange.readbundle(ui, fh, bundlepath) |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1229 for part in bundle.iterparts(): |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1230 while part.read(size): |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1231 pass |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1232 |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1233 return run |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1234 |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1235 benches = [ |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1236 (makestdioread(8192), b'read(8k)'), |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1237 (makestdioread(16384), b'read(16k)'), |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1238 (makestdioread(32768), b'read(32k)'), |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1239 (makestdioread(131072), b'read(128k)'), |
35109
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1240 ] |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1241 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1242 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
|
1243 bundle = exchange.readbundle(ui, fh, bundlepath) |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1244 |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1245 if isinstance(bundle, changegroup.cg1unpacker): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1246 benches.extend( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1247 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1248 (makebench(deltaiter), b'cg1 deltaiter()'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1249 (makebench(iterchunks), b'cg1 getchunks()'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1250 (makereadnbytes(8192), b'cg1 read(8k)'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1251 (makereadnbytes(16384), b'cg1 read(16k)'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1252 (makereadnbytes(32768), b'cg1 read(32k)'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1253 (makereadnbytes(131072), b'cg1 read(128k)'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1254 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1255 ) |
35109
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1256 elif isinstance(bundle, bundle2.unbundle20): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1257 benches.extend( |
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 (makebench(forwardchunks), b'bundle2 forwardchunks()'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1260 (makebench(iterparts), b'bundle2 iterparts()'), |
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 makebench(iterpartsseekable), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1263 b'bundle2 iterparts() seekable', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1264 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1265 (makebench(seek), b'bundle2 part seek()'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1266 (makepartreadnbytes(8192), b'bundle2 part read(8k)'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1267 (makepartreadnbytes(16384), b'bundle2 part read(16k)'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1268 (makepartreadnbytes(32768), b'bundle2 part read(32k)'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1269 (makepartreadnbytes(131072), b'bundle2 part read(128k)'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1270 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1271 ) |
35109
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1272 elif isinstance(bundle, streamclone.streamcloneapplier): |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1273 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
|
1274 else: |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1275 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
|
1276 |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1277 for fn, title in benches: |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1278 timer, fm = gettimer(ui, opts) |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1279 timer(fn, title=title) |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1280 fm.end() |
e96613048bdd
perf: add command to benchmark bundle reading
Gregory Szorc <gregory.szorc@gmail.com>
parents:
35084
diff
changeset
|
1281 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1282 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1283 @command( |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
1284 b'perf::changegroupchangelog|perfchangegroupchangelog', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1285 formatteropts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1286 + [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1287 (b'', b'cgversion', b'02', b'changegroup version'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1288 (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
|
1289 ], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1290 ) |
40713
cfaf3843491b
perf: rename version flag of perfchangegroupchangelog to cgversion
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
40702
diff
changeset
|
1291 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
|
1292 """Benchmark producing a changelog group for a changegroup. |
bd6df07ccc24
perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30017
diff
changeset
|
1293 |
bd6df07ccc24
perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30017
diff
changeset
|
1294 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
|
1295 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
|
1296 processing a `getbundle` wire protocol request (handles clones |
bd6df07ccc24
perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30017
diff
changeset
|
1297 and pull requests). |
bd6df07ccc24
perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30017
diff
changeset
|
1298 |
bd6df07ccc24
perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30017
diff
changeset
|
1299 By default, all revisions are added to the changegroup. |
bd6df07ccc24
perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30017
diff
changeset
|
1300 """ |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
1301 opts = _byteskwargs(opts) |
30018
bd6df07ccc24
perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30017
diff
changeset
|
1302 cl = repo.changelog |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1303 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
|
1304 bundler = changegroup.getbundler(cgversion, repo) |
30018
bd6df07ccc24
perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30017
diff
changeset
|
1305 |
bd6df07ccc24
perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30017
diff
changeset
|
1306 def d(): |
38977
a1f694779b2f
perf: call _generatechangelog() instead of group()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38969
diff
changeset
|
1307 state, chunks = bundler._generatechangelog(cl, nodes) |
a1f694779b2f
perf: call _generatechangelog() instead of group()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38969
diff
changeset
|
1308 for chunk in chunks: |
30018
bd6df07ccc24
perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30017
diff
changeset
|
1309 pass |
bd6df07ccc24
perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30017
diff
changeset
|
1310 |
bd6df07ccc24
perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30017
diff
changeset
|
1311 timer, fm = gettimer(ui, opts) |
38977
a1f694779b2f
perf: call _generatechangelog() instead of group()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38969
diff
changeset
|
1312 |
a1f694779b2f
perf: call _generatechangelog() instead of group()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38969
diff
changeset
|
1313 # 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
|
1314 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
|
1315 timer(d) |
a1f694779b2f
perf: call _generatechangelog() instead of group()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38969
diff
changeset
|
1316 |
30018
bd6df07ccc24
perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30017
diff
changeset
|
1317 fm.end() |
bd6df07ccc24
perf: add perfchangegroupchangelog command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30017
diff
changeset
|
1318 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1319 |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
1320 @command(b'perf::dirs|perfdirs', formatteropts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
1321 def perfdirs(ui, repo, **opts): |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
1322 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
1323 timer, fm = gettimer(ui, opts) |
18845
c1f416e4bc80
perf: add perfdirs command
Bryan O'Sullivan <bryano@fb.com>
parents:
18837
diff
changeset
|
1324 dirstate = repo.dirstate |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1325 b'a' in dirstate |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1326 |
18845
c1f416e4bc80
perf: add perfdirs command
Bryan O'Sullivan <bryano@fb.com>
parents:
18837
diff
changeset
|
1327 def d(): |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1328 dirstate.hasdir(b'a') |
47477
eb416759af7e
dirstate: Removed unused instances of `DirsMultiset`
Simon Sapin <simon.sapin@octobus.net>
parents:
47150
diff
changeset
|
1329 try: |
eb416759af7e
dirstate: Removed unused instances of `DirsMultiset`
Simon Sapin <simon.sapin@octobus.net>
parents:
47150
diff
changeset
|
1330 del dirstate._map._dirs |
eb416759af7e
dirstate: Removed unused instances of `DirsMultiset`
Simon Sapin <simon.sapin@octobus.net>
parents:
47150
diff
changeset
|
1331 except AttributeError: |
eb416759af7e
dirstate: Removed unused instances of `DirsMultiset`
Simon Sapin <simon.sapin@octobus.net>
parents:
47150
diff
changeset
|
1332 pass |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1333 |
18845
c1f416e4bc80
perf: add perfdirs command
Bryan O'Sullivan <bryano@fb.com>
parents:
18837
diff
changeset
|
1334 timer(d) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
1335 fm.end() |
18845
c1f416e4bc80
perf: add perfdirs command
Bryan O'Sullivan <bryano@fb.com>
parents:
18837
diff
changeset
|
1336 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1337 |
43197
0c4efb6eb4fa
perf: introduce a `--contains` flag to the `perfdirstate` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43196
diff
changeset
|
1338 @command( |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
1339 b'perf::dirstate|perfdirstate', |
43197
0c4efb6eb4fa
perf: introduce a `--contains` flag to the `perfdirstate` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43196
diff
changeset
|
1340 [ |
0c4efb6eb4fa
perf: introduce a `--contains` flag to the `perfdirstate` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43196
diff
changeset
|
1341 ( |
0c4efb6eb4fa
perf: introduce a `--contains` flag to the `perfdirstate` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43196
diff
changeset
|
1342 b'', |
0c4efb6eb4fa
perf: introduce a `--contains` flag to the `perfdirstate` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43196
diff
changeset
|
1343 b'iteration', |
0c4efb6eb4fa
perf: introduce a `--contains` flag to the `perfdirstate` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43196
diff
changeset
|
1344 None, |
0c4efb6eb4fa
perf: introduce a `--contains` flag to the `perfdirstate` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43196
diff
changeset
|
1345 b'benchmark a full iteration for the dirstate', |
0c4efb6eb4fa
perf: introduce a `--contains` flag to the `perfdirstate` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43196
diff
changeset
|
1346 ), |
0c4efb6eb4fa
perf: introduce a `--contains` flag to the `perfdirstate` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43196
diff
changeset
|
1347 ( |
0c4efb6eb4fa
perf: introduce a `--contains` flag to the `perfdirstate` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43196
diff
changeset
|
1348 b'', |
0c4efb6eb4fa
perf: introduce a `--contains` flag to the `perfdirstate` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43196
diff
changeset
|
1349 b'contains', |
0c4efb6eb4fa
perf: introduce a `--contains` flag to the `perfdirstate` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43196
diff
changeset
|
1350 None, |
0c4efb6eb4fa
perf: introduce a `--contains` flag to the `perfdirstate` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43196
diff
changeset
|
1351 b'benchmark a large amount of `nf in dirstate` calls', |
0c4efb6eb4fa
perf: introduce a `--contains` flag to the `perfdirstate` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43196
diff
changeset
|
1352 ), |
0c4efb6eb4fa
perf: introduce a `--contains` flag to the `perfdirstate` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43196
diff
changeset
|
1353 ] |
0c4efb6eb4fa
perf: introduce a `--contains` flag to the `perfdirstate` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43196
diff
changeset
|
1354 + formatteropts, |
0c4efb6eb4fa
perf: introduce a `--contains` flag to the `perfdirstate` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43196
diff
changeset
|
1355 ) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
1356 def perfdirstate(ui, repo, **opts): |
43196
5f9b1250b82a
perf: introduce a `--iteration` to `perfdirstate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43161
diff
changeset
|
1357 """benchmap the time of various distate operations |
5f9b1250b82a
perf: introduce a `--iteration` to `perfdirstate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43161
diff
changeset
|
1358 |
5f9b1250b82a
perf: introduce a `--iteration` to `perfdirstate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43161
diff
changeset
|
1359 By default benchmark the time necessary to load a dirstate from scratch. |
43121
ce315b1fc9a7
perf: document `perfdirstate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43120
diff
changeset
|
1360 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
|
1361 answered. |
ce315b1fc9a7
perf: document `perfdirstate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43120
diff
changeset
|
1362 """ |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
1363 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
1364 timer, fm = gettimer(ui, opts) |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1365 b"a" in repo.dirstate |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1366 |
43197
0c4efb6eb4fa
perf: introduce a `--contains` flag to the `perfdirstate` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43196
diff
changeset
|
1367 if opts[b'iteration'] and opts[b'contains']: |
0c4efb6eb4fa
perf: introduce a `--contains` flag to the `perfdirstate` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43196
diff
changeset
|
1368 msg = b'only specify one of --iteration or --contains' |
0c4efb6eb4fa
perf: introduce a `--contains` flag to the `perfdirstate` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43196
diff
changeset
|
1369 raise error.Abort(msg) |
0c4efb6eb4fa
perf: introduce a `--contains` flag to the `perfdirstate` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43196
diff
changeset
|
1370 |
43196
5f9b1250b82a
perf: introduce a `--iteration` to `perfdirstate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43161
diff
changeset
|
1371 if opts[b'iteration']: |
5f9b1250b82a
perf: introduce a `--iteration` to `perfdirstate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43161
diff
changeset
|
1372 setup = None |
5f9b1250b82a
perf: introduce a `--iteration` to `perfdirstate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43161
diff
changeset
|
1373 dirstate = repo.dirstate |
43197
0c4efb6eb4fa
perf: introduce a `--contains` flag to the `perfdirstate` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43196
diff
changeset
|
1374 |
43196
5f9b1250b82a
perf: introduce a `--iteration` to `perfdirstate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43161
diff
changeset
|
1375 def d(): |
5f9b1250b82a
perf: introduce a `--iteration` to `perfdirstate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43161
diff
changeset
|
1376 for f in dirstate: |
5f9b1250b82a
perf: introduce a `--iteration` to `perfdirstate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43161
diff
changeset
|
1377 pass |
43197
0c4efb6eb4fa
perf: introduce a `--contains` flag to the `perfdirstate` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43196
diff
changeset
|
1378 |
0c4efb6eb4fa
perf: introduce a `--contains` flag to the `perfdirstate` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43196
diff
changeset
|
1379 elif opts[b'contains']: |
0c4efb6eb4fa
perf: introduce a `--contains` flag to the `perfdirstate` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43196
diff
changeset
|
1380 setup = None |
0c4efb6eb4fa
perf: introduce a `--contains` flag to the `perfdirstate` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43196
diff
changeset
|
1381 dirstate = repo.dirstate |
0c4efb6eb4fa
perf: introduce a `--contains` flag to the `perfdirstate` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43196
diff
changeset
|
1382 allfiles = list(dirstate) |
0c4efb6eb4fa
perf: introduce a `--contains` flag to the `perfdirstate` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43196
diff
changeset
|
1383 # also add file path that will be "missing" from the dirstate |
0c4efb6eb4fa
perf: introduce a `--contains` flag to the `perfdirstate` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43196
diff
changeset
|
1384 allfiles.extend([f[::-1] for f in allfiles]) |
0c4efb6eb4fa
perf: introduce a `--contains` flag to the `perfdirstate` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43196
diff
changeset
|
1385 |
0c4efb6eb4fa
perf: introduce a `--contains` flag to the `perfdirstate` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43196
diff
changeset
|
1386 def d(): |
0c4efb6eb4fa
perf: introduce a `--contains` flag to the `perfdirstate` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43196
diff
changeset
|
1387 for f in allfiles: |
0c4efb6eb4fa
perf: introduce a `--contains` flag to the `perfdirstate` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43196
diff
changeset
|
1388 f in dirstate |
0c4efb6eb4fa
perf: introduce a `--contains` flag to the `perfdirstate` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43196
diff
changeset
|
1389 |
43196
5f9b1250b82a
perf: introduce a `--iteration` to `perfdirstate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43161
diff
changeset
|
1390 else: |
43197
0c4efb6eb4fa
perf: introduce a `--contains` flag to the `perfdirstate` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43196
diff
changeset
|
1391 |
43196
5f9b1250b82a
perf: introduce a `--iteration` to `perfdirstate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43161
diff
changeset
|
1392 def setup(): |
5f9b1250b82a
perf: introduce a `--iteration` to `perfdirstate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43161
diff
changeset
|
1393 repo.dirstate.invalidate() |
5f9b1250b82a
perf: introduce a `--iteration` to `perfdirstate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43161
diff
changeset
|
1394 |
5f9b1250b82a
perf: introduce a `--iteration` to `perfdirstate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43161
diff
changeset
|
1395 def d(): |
5f9b1250b82a
perf: introduce a `--iteration` to `perfdirstate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43161
diff
changeset
|
1396 b"a" in repo.dirstate |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1397 |
43122
436a6a31df38
perf: use `setup` function in `perfdirstate`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43121
diff
changeset
|
1398 timer(d, setup=setup) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
1399 fm.end() |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1400 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1401 |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
1402 @command(b'perf::dirstatedirs|perfdirstatedirs', formatteropts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
1403 def perfdirstatedirs(ui, repo, **opts): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
1404 """benchmap a 'dirstate.hasdir' call from an empty `dirs` cache""" |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
1405 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
1406 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
|
1407 repo.dirstate.hasdir(b"a") |
100e7e0cdaad
perf: use `setup` function in `perfdirstatedirs`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43123
diff
changeset
|
1408 |
100e7e0cdaad
perf: use `setup` function in `perfdirstatedirs`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43123
diff
changeset
|
1409 def setup(): |
47477
eb416759af7e
dirstate: Removed unused instances of `DirsMultiset`
Simon Sapin <simon.sapin@octobus.net>
parents:
47150
diff
changeset
|
1410 try: |
eb416759af7e
dirstate: Removed unused instances of `DirsMultiset`
Simon Sapin <simon.sapin@octobus.net>
parents:
47150
diff
changeset
|
1411 del repo.dirstate._map._dirs |
eb416759af7e
dirstate: Removed unused instances of `DirsMultiset`
Simon Sapin <simon.sapin@octobus.net>
parents:
47150
diff
changeset
|
1412 except AttributeError: |
eb416759af7e
dirstate: Removed unused instances of `DirsMultiset`
Simon Sapin <simon.sapin@octobus.net>
parents:
47150
diff
changeset
|
1413 pass |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1414 |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1415 def d(): |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1416 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
|
1417 |
100e7e0cdaad
perf: use `setup` function in `perfdirstatedirs`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43123
diff
changeset
|
1418 timer(d, setup=setup) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
1419 fm.end() |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1420 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1421 |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
1422 @command(b'perf::dirstatefoldmap|perfdirstatefoldmap', formatteropts) |
27095
aaf4e2d77148
contrib/perf: name functions to match decorators
timeless <timeless@mozdev.org>
parents:
27072
diff
changeset
|
1423 def perfdirstatefoldmap(ui, repo, **opts): |
43125
56494a2bfe2f
perf: document `perfdirstatefoldmap`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43124
diff
changeset
|
1424 """benchmap a `dirstate._map.filefoldmap.get()` request |
56494a2bfe2f
perf: document `perfdirstatefoldmap`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43124
diff
changeset
|
1425 |
56494a2bfe2f
perf: document `perfdirstatefoldmap`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43124
diff
changeset
|
1426 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
|
1427 """ |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
1428 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
1429 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
|
1430 dirstate = repo.dirstate |
43126
e337d8247375
perf: use `setup` function in `perfdirstatefoldmap`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43125
diff
changeset
|
1431 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
|
1432 |
e337d8247375
perf: use `setup` function in `perfdirstatefoldmap`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43125
diff
changeset
|
1433 def setup(): |
e337d8247375
perf: use `setup` function in `perfdirstatefoldmap`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43125
diff
changeset
|
1434 del dirstate._map.filefoldmap |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1435 |
22780
d8ff1f671aed
perf: add a way to measure the perf of constructing the foldmap
Siddharth Agarwal <sid0@fb.com>
parents:
20846
diff
changeset
|
1436 def d(): |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1437 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
|
1438 |
e337d8247375
perf: use `setup` function in `perfdirstatefoldmap`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43125
diff
changeset
|
1439 timer(d, setup=setup) |
24607
f5b527024fcc
perf: make measuring foldmap perf work again
Siddharth Agarwal <sid0@fb.com>
parents:
24349
diff
changeset
|
1440 fm.end() |
f5b527024fcc
perf: make measuring foldmap perf work again
Siddharth Agarwal <sid0@fb.com>
parents:
24349
diff
changeset
|
1441 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1442 |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
1443 @command(b'perf::dirfoldmap|perfdirfoldmap', formatteropts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
1444 def perfdirfoldmap(ui, repo, **opts): |
43127
0b32206c3c86
perf: document `perfdirfoldmap`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43126
diff
changeset
|
1445 """benchmap a `dirstate._map.dirfoldmap.get()` request |
0b32206c3c86
perf: document `perfdirfoldmap`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43126
diff
changeset
|
1446 |
0b32206c3c86
perf: document `perfdirfoldmap`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43126
diff
changeset
|
1447 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
|
1448 """ |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
1449 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
1450 timer, fm = gettimer(ui, opts) |
24607
f5b527024fcc
perf: make measuring foldmap perf work again
Siddharth Agarwal <sid0@fb.com>
parents:
24349
diff
changeset
|
1451 dirstate = repo.dirstate |
43128
ad801d4af7cd
perf: use `setup` function in `perfdirfoldmap`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43127
diff
changeset
|
1452 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
|
1453 |
ad801d4af7cd
perf: use `setup` function in `perfdirfoldmap`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43127
diff
changeset
|
1454 def setup(): |
ad801d4af7cd
perf: use `setup` function in `perfdirfoldmap`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43127
diff
changeset
|
1455 del dirstate._map.dirfoldmap |
47477
eb416759af7e
dirstate: Removed unused instances of `DirsMultiset`
Simon Sapin <simon.sapin@octobus.net>
parents:
47150
diff
changeset
|
1456 try: |
eb416759af7e
dirstate: Removed unused instances of `DirsMultiset`
Simon Sapin <simon.sapin@octobus.net>
parents:
47150
diff
changeset
|
1457 del dirstate._map._dirs |
eb416759af7e
dirstate: Removed unused instances of `DirsMultiset`
Simon Sapin <simon.sapin@octobus.net>
parents:
47150
diff
changeset
|
1458 except AttributeError: |
eb416759af7e
dirstate: Removed unused instances of `DirsMultiset`
Simon Sapin <simon.sapin@octobus.net>
parents:
47150
diff
changeset
|
1459 pass |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1460 |
24607
f5b527024fcc
perf: make measuring foldmap perf work again
Siddharth Agarwal <sid0@fb.com>
parents:
24349
diff
changeset
|
1461 def d(): |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1462 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
|
1463 |
ad801d4af7cd
perf: use `setup` function in `perfdirfoldmap`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43127
diff
changeset
|
1464 timer(d, setup=setup) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
1465 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
|
1466 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1467 |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
1468 @command(b'perf::dirstatewrite|perfdirstatewrite', formatteropts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
1469 def perfdirstatewrite(ui, repo, **opts): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
1470 """benchmap the time it take to write a dirstate on disk""" |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
1471 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
1472 timer, fm = gettimer(ui, opts) |
16788
7e72c1609862
perf: add a perfdirstatewrite benchmark
Bryan O'Sullivan <bryano@fb.com>
parents:
16785
diff
changeset
|
1473 ds = repo.dirstate |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1474 b"a" in ds |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1475 |
43130
c88075eb28e3
perf: use `setup` function in `perfdirstatewrite`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43129
diff
changeset
|
1476 def setup(): |
c88075eb28e3
perf: use `setup` function in `perfdirstatewrite`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43129
diff
changeset
|
1477 ds._dirty = True |
c88075eb28e3
perf: use `setup` function in `perfdirstatewrite`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43129
diff
changeset
|
1478 |
16788
7e72c1609862
perf: add a perfdirstatewrite benchmark
Bryan O'Sullivan <bryano@fb.com>
parents:
16785
diff
changeset
|
1479 def d(): |
26748
5ba0a99ff27f
dirstate: make dirstate.write() callers pass transaction object to it
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25850
diff
changeset
|
1480 ds.write(repo.currenttransaction()) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1481 |
50008
e859f440daa9
locking: grab the wlock before touching the dirstate in `perfdirstatewrite`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49737
diff
changeset
|
1482 with repo.wlock(): |
e859f440daa9
locking: grab the wlock before touching the dirstate in `perfdirstatewrite`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49737
diff
changeset
|
1483 timer(d, setup=setup) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
1484 fm.end() |
16788
7e72c1609862
perf: add a perfdirstatewrite benchmark
Bryan O'Sullivan <bryano@fb.com>
parents:
16785
diff
changeset
|
1485 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1486 |
42383
3a3592b40a95
perf: factor selection of revisions involved in the merge out
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42382
diff
changeset
|
1487 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
|
1488 """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
|
1489 |
3a3592b40a95
perf: factor selection of revisions involved in the merge out
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42382
diff
changeset
|
1490 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
|
1491 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
|
1492 """ |
42392
4372d56112c9
perf: fix some missing b prefixes
Augie Fackler <augie@google.com>
parents:
42385
diff
changeset
|
1493 if opts[b'from']: |
4372d56112c9
perf: fix some missing b prefixes
Augie Fackler <augie@google.com>
parents:
42385
diff
changeset
|
1494 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
|
1495 wctx = repo[fromrev] |
e3ee707d42ad
perf: add a --from flag to perfmergecalculate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42370
diff
changeset
|
1496 else: |
e3ee707d42ad
perf: add a --from flag to perfmergecalculate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42370
diff
changeset
|
1497 wctx = repo[None] |
e3ee707d42ad
perf: add a --from flag to perfmergecalculate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42370
diff
changeset
|
1498 # 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
|
1499 # prime that cache |
e3ee707d42ad
perf: add a --from flag to perfmergecalculate
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42370
diff
changeset
|
1500 wctx.dirty() |
42392
4372d56112c9
perf: fix some missing b prefixes
Augie Fackler <augie@google.com>
parents:
42385
diff
changeset
|
1501 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
|
1502 if opts[b'base']: |
4372d56112c9
perf: fix some missing b prefixes
Augie Fackler <augie@google.com>
parents:
42385
diff
changeset
|
1503 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
|
1504 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
|
1505 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
|
1506 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
|
1507 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
|
1508 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1509 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1510 @command( |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
1511 b'perf::mergecalculate|perfmergecalculate', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1512 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1513 (b'r', b'rev', b'.', b'rev to merge against'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1514 (b'', b'from', b'', b'rev to merge from'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1515 (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
|
1516 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1517 + formatteropts, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1518 ) |
42383
3a3592b40a95
perf: factor selection of revisions involved in the merge out
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42382
diff
changeset
|
1519 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
|
1520 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
|
1521 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
|
1522 |
3a3592b40a95
perf: factor selection of revisions involved in the merge out
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42382
diff
changeset
|
1523 wctx, rctx, ancestor = _getmergerevs(repo, opts) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1524 |
18817
c760acc6f69d
perf: add a command to measure merge.calculateupdates perf
Siddharth Agarwal <sid0@fb.com>
parents:
18644
diff
changeset
|
1525 def d(): |
c760acc6f69d
perf: add a command to measure merge.calculateupdates perf
Siddharth Agarwal <sid0@fb.com>
parents:
18644
diff
changeset
|
1526 # 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
|
1527 # our benchmark |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1528 merge.calculateupdates( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1529 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1530 wctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1531 rctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1532 [ancestor], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1533 branchmerge=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1534 force=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1535 acceptremote=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1536 followcopies=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1537 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1538 |
18817
c760acc6f69d
perf: add a command to measure merge.calculateupdates perf
Siddharth Agarwal <sid0@fb.com>
parents:
18644
diff
changeset
|
1539 timer(d) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
1540 fm.end() |
18817
c760acc6f69d
perf: add a command to measure merge.calculateupdates perf
Siddharth Agarwal <sid0@fb.com>
parents:
18644
diff
changeset
|
1541 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1542 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1543 @command( |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
1544 b'perf::mergecopies|perfmergecopies', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1545 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1546 (b'r', b'rev', b'.', b'rev to merge against'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1547 (b'', b'from', b'', b'rev to merge from'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1548 (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
|
1549 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1550 + formatteropts, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1551 ) |
42384
f5f0a9490c05
perf: add a new `perfmergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42383
diff
changeset
|
1552 def perfmergecopies(ui, repo, **opts): |
f5f0a9490c05
perf: add a new `perfmergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42383
diff
changeset
|
1553 """measure runtime of `copies.mergecopies`""" |
f5f0a9490c05
perf: add a new `perfmergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42383
diff
changeset
|
1554 opts = _byteskwargs(opts) |
f5f0a9490c05
perf: add a new `perfmergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42383
diff
changeset
|
1555 timer, fm = gettimer(ui, opts) |
f5f0a9490c05
perf: add a new `perfmergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42383
diff
changeset
|
1556 wctx, rctx, ancestor = _getmergerevs(repo, opts) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1557 |
42384
f5f0a9490c05
perf: add a new `perfmergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42383
diff
changeset
|
1558 def d(): |
f5f0a9490c05
perf: add a new `perfmergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42383
diff
changeset
|
1559 # 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
|
1560 # our benchmark |
f5f0a9490c05
perf: add a new `perfmergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42383
diff
changeset
|
1561 copies.mergecopies(repo, wctx, rctx, ancestor) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1562 |
42384
f5f0a9490c05
perf: add a new `perfmergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42383
diff
changeset
|
1563 timer(d) |
f5f0a9490c05
perf: add a new `perfmergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42383
diff
changeset
|
1564 fm.end() |
f5f0a9490c05
perf: add a new `perfmergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42383
diff
changeset
|
1565 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1566 |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
1567 @command(b'perf::pathcopies|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
|
1568 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
|
1569 """benchmark the copy tracing logic""" |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
1570 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
1571 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
|
1572 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
|
1573 ctx2 = scmutil.revsingle(repo, rev2, rev2) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1574 |
18877
2e9fe9e2671f
perf: add a command to test copies.pathcopies perf
Siddharth Agarwal <sid0@fb.com>
parents:
18871
diff
changeset
|
1575 def d(): |
2e9fe9e2671f
perf: add a command to test copies.pathcopies perf
Siddharth Agarwal <sid0@fb.com>
parents:
18871
diff
changeset
|
1576 copies.pathcopies(ctx1, ctx2) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1577 |
18877
2e9fe9e2671f
perf: add a command to test copies.pathcopies perf
Siddharth Agarwal <sid0@fb.com>
parents:
18871
diff
changeset
|
1578 timer(d) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
1579 fm.end() |
18877
2e9fe9e2671f
perf: add a command to test copies.pathcopies perf
Siddharth Agarwal <sid0@fb.com>
parents:
18871
diff
changeset
|
1580 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1581 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1582 @command( |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
1583 b'perf::phases|perfphases', |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
1584 [ |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
1585 (b'', b'full', False, b'include file reading time too'), |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
1586 ], |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1587 b"", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1588 ) |
32467
ad37c569ec81
perfphases: add 'perfphases' command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32390
diff
changeset
|
1589 def perfphases(ui, repo, **opts): |
ad37c569ec81
perfphases: add 'perfphases' command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32390
diff
changeset
|
1590 """benchmark phasesets computation""" |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
1591 opts = _byteskwargs(opts) |
32467
ad37c569ec81
perfphases: add 'perfphases' command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32390
diff
changeset
|
1592 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
|
1593 _phases = repo._phasecache |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1594 full = opts.get(b'full') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1595 |
32467
ad37c569ec81
perfphases: add 'perfphases' command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32390
diff
changeset
|
1596 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
|
1597 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
|
1598 if full: |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1599 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
|
1600 phases = repo._phasecache |
32467
ad37c569ec81
perfphases: add 'perfphases' command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32390
diff
changeset
|
1601 phases.invalidate() |
ad37c569ec81
perfphases: add 'perfphases' command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32390
diff
changeset
|
1602 phases.loadphaserevs(repo) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1603 |
32467
ad37c569ec81
perfphases: add 'perfphases' command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32390
diff
changeset
|
1604 timer(d) |
ad37c569ec81
perfphases: add 'perfphases' command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32390
diff
changeset
|
1605 fm.end() |
ad37c569ec81
perfphases: add 'perfphases' command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32390
diff
changeset
|
1606 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1607 |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
1608 @command(b'perf::phasesremote|perfphasesremote', [], b"[DEST]") |
39140
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1609 def perfphasesremote(ui, repo, dest=None, **opts): |
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1610 """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
|
1611 from mercurial.node import bin |
39140
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1612 from mercurial import ( |
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1613 exchange, |
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1614 hg, |
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1615 phases, |
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1616 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1617 |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
1618 opts = _byteskwargs(opts) |
39140
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1619 timer, fm = gettimer(ui, opts) |
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1620 |
46720
66fb04552122
ui: pass a `ui` object to `paths.getpath`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46388
diff
changeset
|
1621 path = ui.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
|
1622 if not path: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1623 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1624 b'default repository not configured!', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1625 hint=b"see 'hg help config.paths'", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1626 ) |
49705
ec8140c44b14
path: update logic in `perf` to use the push variant when available
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49562
diff
changeset
|
1627 if util.safehasattr(path, 'main_path'): |
ec8140c44b14
path: update logic in `perf` to use the push variant when available
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49562
diff
changeset
|
1628 path = path.get_push_variant() |
ec8140c44b14
path: update logic in `perf` to use the push variant when available
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49562
diff
changeset
|
1629 dest = path.loc |
ec8140c44b14
path: update logic in `perf` to use the push variant when available
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49562
diff
changeset
|
1630 else: |
ec8140c44b14
path: update logic in `perf` to use the push variant when available
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49562
diff
changeset
|
1631 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
|
1632 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
|
1633 other = hg.peer(repo, opts, dest) |
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1634 |
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1635 # easier to perform discovery through the operation |
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1636 op = exchange.pushoperation(repo, other) |
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1637 exchange._pushdiscoverychangeset(op) |
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1638 |
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1639 remotesubset = op.fallbackheads |
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1640 |
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1641 with other.commandexecutor() as e: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1642 remotephases = e.callcommand( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1643 b'listkeys', {b'namespace': b'phases'} |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1644 ).result() |
39140
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1645 del other |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1646 publishing = remotephases.get(b'publishing', False) |
39140
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1647 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
|
1648 ui.statusnoi18n(b'publishing: yes\n') |
39140
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1649 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
|
1650 ui.statusnoi18n(b'publishing: no\n') |
39140
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1651 |
43551
3350d7aefe67
perf: make `perfphasesremote` use the new `index.has_node` api
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43527
diff
changeset
|
1652 has_node = getattr(repo.changelog.index, 'has_node', None) |
3350d7aefe67
perf: make `perfphasesremote` use the new `index.has_node` api
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43527
diff
changeset
|
1653 if has_node is None: |
3350d7aefe67
perf: make `perfphasesremote` use the new `index.has_node` api
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43527
diff
changeset
|
1654 has_node = repo.changelog.nodemap.__contains__ |
39140
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1655 nonpublishroots = 0 |
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1656 for nhex, phase in remotephases.iteritems(): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1657 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
|
1658 continue |
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1659 node = bin(nhex) |
43551
3350d7aefe67
perf: make `perfphasesremote` use the new `index.has_node` api
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43527
diff
changeset
|
1660 if has_node(node) and int(phase): |
39140
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1661 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
|
1662 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
|
1663 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
|
1664 |
39140
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1665 def d(): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1666 phases.remotephasessummary(repo, remotesubset, remotephases) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1667 |
39140
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1668 timer(d) |
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1669 fm.end() |
1732db2f8210
perf: add a perfphasesremote command
Boris Feld <boris.feld@octobus.net>
parents:
38695
diff
changeset
|
1670 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1671 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1672 @command( |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
1673 b'perf::manifest|perfmanifest', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1674 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1675 (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
|
1676 (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
|
1677 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1678 + formatteropts, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1679 b'REV|NODE', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1680 ) |
38780
ddb15a83ae0b
debug: allow specifying a manifest node rather than a revision
Martijn Pieters <mj@zopatista.com>
parents:
38778
diff
changeset
|
1681 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
|
1682 """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
|
1683 dict-like object |
9b6a708f2263
perf: document the perfmanifest command
Boris Feld <boris.feld@octobus.net>
parents:
38273
diff
changeset
|
1684 |
9b6a708f2263
perf: document the perfmanifest command
Boris Feld <boris.feld@octobus.net>
parents:
38273
diff
changeset
|
1685 Manifest caches are cleared before retrieval.""" |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
1686 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
1687 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
|
1688 if not manifest_rev: |
ddb15a83ae0b
debug: allow specifying a manifest node rather than a revision
Martijn Pieters <mj@zopatista.com>
parents:
38778
diff
changeset
|
1689 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
|
1690 t = ctx.manifestnode() |
ddb15a83ae0b
debug: allow specifying a manifest node rather than a revision
Martijn Pieters <mj@zopatista.com>
parents:
38778
diff
changeset
|
1691 else: |
39318
c03c5f528e9b
perf: use storage API for resolving manifest node
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39194
diff
changeset
|
1692 from mercurial.node import bin |
c03c5f528e9b
perf: use storage API for resolving manifest node
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39194
diff
changeset
|
1693 |
c03c5f528e9b
perf: use storage API for resolving manifest node
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39194
diff
changeset
|
1694 if len(rev) == 40: |
c03c5f528e9b
perf: use storage API for resolving manifest node
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39194
diff
changeset
|
1695 t = bin(rev) |
c03c5f528e9b
perf: use storage API for resolving manifest node
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39194
diff
changeset
|
1696 else: |
c03c5f528e9b
perf: use storage API for resolving manifest node
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39194
diff
changeset
|
1697 try: |
c03c5f528e9b
perf: use storage API for resolving manifest node
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39194
diff
changeset
|
1698 rev = int(rev) |
c03c5f528e9b
perf: use storage API for resolving manifest node
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39194
diff
changeset
|
1699 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1700 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
|
1701 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
|
1702 else: |
c03c5f528e9b
perf: use storage API for resolving manifest node
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39194
diff
changeset
|
1703 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
|
1704 except ValueError: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1705 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
|
1706 b'manifest revision must be integer or full node' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1707 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1708 |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1709 def d(): |
38781
0a57945aaf7f
manifest: persist the manifestfulltext cache
Martijn Pieters <mj@zopatista.com>
parents:
38780
diff
changeset
|
1710 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
|
1711 repo.manifestlog[t].read() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1712 |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1713 timer(d) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
1714 fm.end() |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1715 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1716 |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
1717 @command(b'perf::changeset|perfchangeset', formatteropts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
1718 def perfchangeset(ui, repo, rev, **opts): |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
1719 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
1720 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
|
1721 n = scmutil.revsingle(repo, rev).node() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1722 |
16262
bf7a6c3b2a4a
perf: add perfchangeset to time changeset parsing
Matt Mackall <mpm@selenic.com>
parents:
16260
diff
changeset
|
1723 def d(): |
19378
9de689d20230
cleanup: drop unused variables and an unused import
Simon Heimberg <simohe@besonet.ch>
parents:
19322
diff
changeset
|
1724 repo.changelog.read(n) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1725 # repo.changelog._cache = None |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1726 |
16262
bf7a6c3b2a4a
perf: add perfchangeset to time changeset parsing
Matt Mackall <mpm@selenic.com>
parents:
16260
diff
changeset
|
1727 timer(d) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
1728 fm.end() |
16262
bf7a6c3b2a4a
perf: add perfchangeset to time changeset parsing
Matt Mackall <mpm@selenic.com>
parents:
16260
diff
changeset
|
1729 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1730 |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
1731 @command(b'perf::ignore|perfignore', formatteropts) |
40750
45a0047c0ebc
perf: add a perfignore command
Boris Feld <boris.feld@octobus.net>
parents:
40747
diff
changeset
|
1732 def perfignore(ui, repo, **opts): |
45a0047c0ebc
perf: add a perfignore command
Boris Feld <boris.feld@octobus.net>
parents:
40747
diff
changeset
|
1733 """benchmark operation related to computing ignore""" |
45a0047c0ebc
perf: add a perfignore command
Boris Feld <boris.feld@octobus.net>
parents:
40747
diff
changeset
|
1734 opts = _byteskwargs(opts) |
45a0047c0ebc
perf: add a perfignore command
Boris Feld <boris.feld@octobus.net>
parents:
40747
diff
changeset
|
1735 timer, fm = gettimer(ui, opts) |
45a0047c0ebc
perf: add a perfignore command
Boris Feld <boris.feld@octobus.net>
parents:
40747
diff
changeset
|
1736 dirstate = repo.dirstate |
45a0047c0ebc
perf: add a perfignore command
Boris Feld <boris.feld@octobus.net>
parents:
40747
diff
changeset
|
1737 |
45a0047c0ebc
perf: add a perfignore command
Boris Feld <boris.feld@octobus.net>
parents:
40747
diff
changeset
|
1738 def setupone(): |
45a0047c0ebc
perf: add a perfignore command
Boris Feld <boris.feld@octobus.net>
parents:
40747
diff
changeset
|
1739 dirstate.invalidate() |
45a0047c0ebc
perf: add a perfignore command
Boris Feld <boris.feld@octobus.net>
parents:
40747
diff
changeset
|
1740 clearfilecache(dirstate, b'_ignore') |
45a0047c0ebc
perf: add a perfignore command
Boris Feld <boris.feld@octobus.net>
parents:
40747
diff
changeset
|
1741 |
45a0047c0ebc
perf: add a perfignore command
Boris Feld <boris.feld@octobus.net>
parents:
40747
diff
changeset
|
1742 def runone(): |
45a0047c0ebc
perf: add a perfignore command
Boris Feld <boris.feld@octobus.net>
parents:
40747
diff
changeset
|
1743 dirstate._ignore |
45a0047c0ebc
perf: add a perfignore command
Boris Feld <boris.feld@octobus.net>
parents:
40747
diff
changeset
|
1744 |
45a0047c0ebc
perf: add a perfignore command
Boris Feld <boris.feld@octobus.net>
parents:
40747
diff
changeset
|
1745 timer(runone, setup=setupone, title=b"load") |
45a0047c0ebc
perf: add a perfignore command
Boris Feld <boris.feld@octobus.net>
parents:
40747
diff
changeset
|
1746 fm.end() |
45a0047c0ebc
perf: add a perfignore command
Boris Feld <boris.feld@octobus.net>
parents:
40747
diff
changeset
|
1747 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1748 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1749 @command( |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
1750 b'perf::index|perfindex', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1751 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1752 (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
|
1753 (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
|
1754 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1755 + formatteropts, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1756 ) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
1757 def perfindex(ui, repo, **opts): |
41437
d65ba1ff4559
perf: add some documentation to perfindex
Boris Feld <boris.feld@octobus.net>
parents:
41436
diff
changeset
|
1758 """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
|
1759 |
d65ba1ff4559
perf: add some documentation to perfindex
Boris Feld <boris.feld@octobus.net>
parents:
41436
diff
changeset
|
1760 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
|
1761 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
|
1762 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
|
1763 `--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
|
1764 matters. |
7eb7637e34bf
perf: support looking up multiple revisions
Boris Feld <boris.feld@octobus.net>
parents:
41438
diff
changeset
|
1765 |
7eb7637e34bf
perf: support looking up multiple revisions
Boris Feld <boris.feld@octobus.net>
parents:
41438
diff
changeset
|
1766 Example of useful set to test: |
44260
216fc4633800
perf: fix list formatting in perfindex documentation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43976
diff
changeset
|
1767 |
41439
7eb7637e34bf
perf: support looking up multiple revisions
Boris Feld <boris.feld@octobus.net>
parents:
41438
diff
changeset
|
1768 * tip |
7eb7637e34bf
perf: support looking up multiple revisions
Boris Feld <boris.feld@octobus.net>
parents:
41438
diff
changeset
|
1769 * 0 |
7eb7637e34bf
perf: support looking up multiple revisions
Boris Feld <boris.feld@octobus.net>
parents:
41438
diff
changeset
|
1770 * -10: |
7eb7637e34bf
perf: support looking up multiple revisions
Boris Feld <boris.feld@octobus.net>
parents:
41438
diff
changeset
|
1771 * :10 |
7eb7637e34bf
perf: support looking up multiple revisions
Boris Feld <boris.feld@octobus.net>
parents:
41438
diff
changeset
|
1772 * -10: + :10 |
7eb7637e34bf
perf: support looking up multiple revisions
Boris Feld <boris.feld@octobus.net>
parents:
41438
diff
changeset
|
1773 * :10: + -10: |
7eb7637e34bf
perf: support looking up multiple revisions
Boris Feld <boris.feld@octobus.net>
parents:
41438
diff
changeset
|
1774 * -10000: |
7eb7637e34bf
perf: support looking up multiple revisions
Boris Feld <boris.feld@octobus.net>
parents:
41438
diff
changeset
|
1775 * -10000: + 0 |
41437
d65ba1ff4559
perf: add some documentation to perfindex
Boris Feld <boris.feld@octobus.net>
parents:
41436
diff
changeset
|
1776 |
41469
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1777 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
|
1778 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
|
1779 import mercurial.revlog |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1780 |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
1781 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
1782 timer, fm = gettimer(ui, opts) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1783 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
|
1784 if opts[b'no_lookup']: |
41439
7eb7637e34bf
perf: support looking up multiple revisions
Boris Feld <boris.feld@octobus.net>
parents:
41438
diff
changeset
|
1785 if opts['rev']: |
7eb7637e34bf
perf: support looking up multiple revisions
Boris Feld <boris.feld@octobus.net>
parents:
41438
diff
changeset
|
1786 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
|
1787 nodes = [] |
7eb7637e34bf
perf: support looking up multiple revisions
Boris Feld <boris.feld@octobus.net>
parents:
41438
diff
changeset
|
1788 elif not opts[b'rev']: |
7eb7637e34bf
perf: support looking up multiple revisions
Boris Feld <boris.feld@octobus.net>
parents:
41438
diff
changeset
|
1789 nodes = [repo[b"tip"].node()] |
40784
a0f2641ddd61
perf: add a --rev attribute to perfindex
Boris Feld <boris.feld@octobus.net>
parents:
40783
diff
changeset
|
1790 else: |
41439
7eb7637e34bf
perf: support looking up multiple revisions
Boris Feld <boris.feld@octobus.net>
parents:
41438
diff
changeset
|
1791 revs = scmutil.revrange(repo, opts[b'rev']) |
7eb7637e34bf
perf: support looking up multiple revisions
Boris Feld <boris.feld@octobus.net>
parents:
41438
diff
changeset
|
1792 cl = repo.changelog |
7eb7637e34bf
perf: support looking up multiple revisions
Boris Feld <boris.feld@octobus.net>
parents:
41438
diff
changeset
|
1793 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
|
1794 |
e207f0d6c243
perf: update perfindex to be more realistic
Boris Feld <boris.feld@octobus.net>
parents:
40772
diff
changeset
|
1795 unfi = repo.unfiltered() |
e207f0d6c243
perf: update perfindex to be more realistic
Boris Feld <boris.feld@octobus.net>
parents:
40772
diff
changeset
|
1796 # find the filecache func directly |
e207f0d6c243
perf: update perfindex to be more realistic
Boris Feld <boris.feld@octobus.net>
parents:
40772
diff
changeset
|
1797 # 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
|
1798 makecl = unfi.__class__.changelog.func |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1799 |
40783
e207f0d6c243
perf: update perfindex to be more realistic
Boris Feld <boris.feld@octobus.net>
parents:
40772
diff
changeset
|
1800 def setup(): |
e207f0d6c243
perf: update perfindex to be more realistic
Boris Feld <boris.feld@octobus.net>
parents:
40772
diff
changeset
|
1801 # 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
|
1802 clearchangelog(unfi) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1803 |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1804 def d(): |
40783
e207f0d6c243
perf: update perfindex to be more realistic
Boris Feld <boris.feld@octobus.net>
parents:
40772
diff
changeset
|
1805 cl = makecl(unfi) |
41439
7eb7637e34bf
perf: support looking up multiple revisions
Boris Feld <boris.feld@octobus.net>
parents:
41438
diff
changeset
|
1806 for n in nodes: |
41438
e9891c734bf8
perf: add a no-lookup variant to perfindex
Boris Feld <boris.feld@octobus.net>
parents:
41437
diff
changeset
|
1807 cl.rev(n) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1808 |
40783
e207f0d6c243
perf: update perfindex to be more realistic
Boris Feld <boris.feld@octobus.net>
parents:
40772
diff
changeset
|
1809 timer(d, setup=setup) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
1810 fm.end() |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1811 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1812 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1813 @command( |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
1814 b'perf::nodemap|perfnodemap', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1815 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1816 (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
|
1817 (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
|
1818 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1819 + formatteropts, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1820 ) |
41469
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1821 def perfnodemap(ui, repo, **opts): |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1822 """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
|
1823 |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1824 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
|
1825 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
|
1826 * tip |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1827 * 0 |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1828 * -10: |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1829 * :10 |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1830 * -10: + :10 |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1831 * :10: + -10: |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1832 * -10000: |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1833 * -10000: + 0 |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1834 |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1835 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
|
1836 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
|
1837 """ |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1838 import mercurial.revlog |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1839 |
41469
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1840 opts = _byteskwargs(opts) |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1841 timer, fm = gettimer(ui, opts) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1842 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
|
1843 |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1844 unfi = repo.unfiltered() |
46196
96b73671753a
contrib: py3 compat for perfnodemap
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
1845 clearcaches = opts[b'clear_caches'] |
41469
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1846 # find the filecache func directly |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1847 # 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
|
1848 makecl = unfi.__class__.changelog.func |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1849 if not opts[b'rev']: |
46196
96b73671753a
contrib: py3 compat for perfnodemap
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
1850 raise error.Abort(b'use --rev to specify revisions to look up') |
41469
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1851 revs = scmutil.revrange(repo, opts[b'rev']) |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1852 cl = repo.changelog |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1853 nodes = [cl.node(r) for r in revs] |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1854 |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1855 # 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
|
1856 nodeget = [None] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1857 |
41469
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1858 def setnodeget(): |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1859 # probably not necessary, but for good measure |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1860 clearchangelog(unfi) |
43571
22cd0064370d
perf: make `perfnodemap` use the new `index.get_rev` api if available
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43551
diff
changeset
|
1861 cl = makecl(unfi) |
22cd0064370d
perf: make `perfnodemap` use the new `index.get_rev` api if available
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43551
diff
changeset
|
1862 if util.safehasattr(cl.index, 'get_rev'): |
22cd0064370d
perf: make `perfnodemap` use the new `index.get_rev` api if available
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43551
diff
changeset
|
1863 nodeget[0] = cl.index.get_rev |
22cd0064370d
perf: make `perfnodemap` use the new `index.get_rev` api if available
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43551
diff
changeset
|
1864 else: |
22cd0064370d
perf: make `perfnodemap` use the new `index.get_rev` api if available
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43551
diff
changeset
|
1865 nodeget[0] = cl.nodemap.get |
41469
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1866 |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1867 def d(): |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1868 get = nodeget[0] |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1869 for n in nodes: |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1870 get(n) |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1871 |
41470
d1a273074f62
perf: add a --[no-]clear-caches option to `perfnodemap`
Boris Feld <boris.feld@octobus.net>
parents:
41469
diff
changeset
|
1872 setup = None |
d1a273074f62
perf: add a --[no-]clear-caches option to `perfnodemap`
Boris Feld <boris.feld@octobus.net>
parents:
41469
diff
changeset
|
1873 if clearcaches: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1874 |
41470
d1a273074f62
perf: add a --[no-]clear-caches option to `perfnodemap`
Boris Feld <boris.feld@octobus.net>
parents:
41469
diff
changeset
|
1875 def setup(): |
d1a273074f62
perf: add a --[no-]clear-caches option to `perfnodemap`
Boris Feld <boris.feld@octobus.net>
parents:
41469
diff
changeset
|
1876 setnodeget() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1877 |
41470
d1a273074f62
perf: add a --[no-]clear-caches option to `perfnodemap`
Boris Feld <boris.feld@octobus.net>
parents:
41469
diff
changeset
|
1878 else: |
d1a273074f62
perf: add a --[no-]clear-caches option to `perfnodemap`
Boris Feld <boris.feld@octobus.net>
parents:
41469
diff
changeset
|
1879 setnodeget() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1880 d() # prewarm the data structure |
41469
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1881 timer(d, setup=setup) |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1882 fm.end() |
c9ff93889550
perf: add a perfnodemap command
Boris Feld <boris.feld@octobus.net>
parents:
41439
diff
changeset
|
1883 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1884 |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
1885 @command(b'perf::startup|perfstartup', formatteropts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
1886 def perfstartup(ui, repo, **opts): |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
1887 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
1888 timer, fm = gettimer(ui, opts) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1889 |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1890 def d(): |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
1891 if os.name != 'nt': |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1892 os.system( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1893 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
|
1894 ) |
27382
de7bcbc68042
perf: adjust perfstartup() for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
27345
diff
changeset
|
1895 else: |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
1896 os.environ['HGRCPATH'] = r' ' |
43503
313e3a279828
cleanup: remove pointless r-prefixes on double-quoted strings
Augie Fackler <augie@google.com>
parents:
43495
diff
changeset
|
1897 os.system("%s version -q > NUL" % sys.argv[0]) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1898 |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1899 timer(d) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
1900 fm.end() |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1901 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1902 |
50458
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1903 @command( |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1904 b'perf::stream-locked-section', |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1905 [ |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1906 ( |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1907 b'', |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1908 b'stream-version', |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1909 b'latest', |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1910 b'stream version to us ("v1", "v2" or "latest", (the default))', |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1911 ), |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1912 ] |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1913 + formatteropts, |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1914 ) |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1915 def perf_stream_clone_scan(ui, repo, stream_version, **opts): |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1916 """benchmark the initial, repo-locked, section of a stream-clone""" |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1917 import mercurial.streamclone |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1918 |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1919 generatev1 = mercurial.streamclone.generatev1 |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1920 generatev2 = mercurial.streamclone.generatev2 |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1921 |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1922 opts = _byteskwargs(opts) |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1923 timer, fm = gettimer(ui, opts) |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1924 |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1925 # deletion of the generator may trigger some cleanup that we do not want to |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1926 # measure |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1927 result_holder = [None] |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1928 |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1929 def setupone(): |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1930 result_holder[0] = None |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1931 |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1932 def runone_v1(): |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1933 # the lock is held for the duration the initialisation |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1934 result_holder[0] = generatev1(repo) |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1935 |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1936 def runone_v2(): |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1937 # the lock is held for the duration the initialisation |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1938 result_holder[0] = generatev2(repo, None, None, True) |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1939 |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1940 if stream_version == b'latest': |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1941 runone = runone_v2 |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1942 elif stream_version == b'v2': |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1943 runone = runone_v2 |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1944 elif stream_version == b'v1': |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1945 runone = runone_v1 |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1946 else: |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1947 msg = b'unknown stream version: "%s"' % stream_version |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1948 raise error.Abort(msg) |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1949 |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1950 timer(runone, setup=setupone, title=b"load") |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1951 fm.end() |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1952 |
714b63a707b7
perf: introduce a `perf::stream-locked-section` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50143
diff
changeset
|
1953 |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
1954 @command(b'perf::parents|perfparents', formatteropts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
1955 def perfparents(ui, repo, **opts): |
42016
b900b392c1cc
perf: document perfparents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42015
diff
changeset
|
1956 """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
|
1957 |
42021
4c700c847aa2
perf: copyedit a few documentation strings
Augie Fackler <augie@google.com>
parents:
42019
diff
changeset
|
1958 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
|
1959 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
|
1960 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
|
1961 (default: 1000). |
b900b392c1cc
perf: document perfparents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42015
diff
changeset
|
1962 """ |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
1963 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
1964 timer, fm = gettimer(ui, opts) |
27305
5831cfbf0e33
perf: perfparents honor config perf.parentscount
timeless <timeless@mozdev.org>
parents:
27304
diff
changeset
|
1965 # control the number of commits perfparents iterates over |
5831cfbf0e33
perf: perfparents honor config perf.parentscount
timeless <timeless@mozdev.org>
parents:
27304
diff
changeset
|
1966 # experimental config: perf.parentscount |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1967 count = getint(ui, b"perf", b"parentscount", 1000) |
27305
5831cfbf0e33
perf: perfparents honor config perf.parentscount
timeless <timeless@mozdev.org>
parents:
27304
diff
changeset
|
1968 if len(repo.changelog) < count: |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
1969 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
|
1970 repo = repo.unfiltered() |
39822
86dbeb7c9a11
py3: switch contrib/perf from xrange to pycompat.xrange
Matt Harbison <matt_harbison@yahoo.com>
parents:
39821
diff
changeset
|
1971 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
|
1972 |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1973 def d(): |
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1974 for n in nl: |
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1975 repo.changelog.parents(n) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1976 |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1977 timer(d) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
1978 fm.end() |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1979 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1980 |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
1981 @command(b'perf::ctxfiles|perfctxfiles', formatteropts) |
27095
aaf4e2d77148
contrib/perf: name functions to match decorators
timeless <timeless@mozdev.org>
parents:
27072
diff
changeset
|
1982 def perfctxfiles(ui, repo, x, **opts): |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
1983 opts = _byteskwargs(opts) |
24349
389693a245fa
perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents:
23878
diff
changeset
|
1984 x = int(x) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
1985 timer, fm = gettimer(ui, opts) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1986 |
24349
389693a245fa
perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents:
23878
diff
changeset
|
1987 def d(): |
389693a245fa
perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents:
23878
diff
changeset
|
1988 len(repo[x].files()) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1989 |
24349
389693a245fa
perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents:
23878
diff
changeset
|
1990 timer(d) |
389693a245fa
perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents:
23878
diff
changeset
|
1991 fm.end() |
389693a245fa
perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents:
23878
diff
changeset
|
1992 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
1993 |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
1994 @command(b'perf::rawfiles|perfrawfiles', formatteropts) |
27095
aaf4e2d77148
contrib/perf: name functions to match decorators
timeless <timeless@mozdev.org>
parents:
27072
diff
changeset
|
1995 def perfrawfiles(ui, repo, x, **opts): |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
1996 opts = _byteskwargs(opts) |
24349
389693a245fa
perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents:
23878
diff
changeset
|
1997 x = int(x) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
1998 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
|
1999 cl = repo.changelog |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2000 |
24349
389693a245fa
perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents:
23878
diff
changeset
|
2001 def d(): |
389693a245fa
perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents:
23878
diff
changeset
|
2002 len(cl.read(x)[3]) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2003 |
24349
389693a245fa
perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents:
23878
diff
changeset
|
2004 timer(d) |
389693a245fa
perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents:
23878
diff
changeset
|
2005 fm.end() |
389693a245fa
perf: add methods for timing changeset file list reading
Matt Mackall <mpm@selenic.com>
parents:
23878
diff
changeset
|
2006 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2007 |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
2008 @command(b'perf::lookup|perflookup', formatteropts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
2009 def perflookup(ui, repo, rev, **opts): |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
2010 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
2011 timer, fm = gettimer(ui, opts) |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
2012 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
|
2013 fm.end() |
7366
eb240755386d
Add contrib/perf.py for performance testing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
2014 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2015 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2016 @command( |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
2017 b'perf::linelogedits|perflinelogedits', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2018 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2019 (b'n', b'edits', 10000, b'number of edits'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2020 (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
|
2021 ], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2022 norepo=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2023 ) |
38969
1601afbb573c
perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents:
38781
diff
changeset
|
2024 def perflinelogedits(ui, **opts): |
1601afbb573c
perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents:
38781
diff
changeset
|
2025 from mercurial import linelog |
1601afbb573c
perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents:
38781
diff
changeset
|
2026 |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
2027 opts = _byteskwargs(opts) |
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
2028 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2029 edits = opts[b'edits'] |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2030 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
|
2031 |
1601afbb573c
perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents:
38781
diff
changeset
|
2032 maxb1 = 100000 |
1601afbb573c
perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents:
38781
diff
changeset
|
2033 random.seed(0) |
1601afbb573c
perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents:
38781
diff
changeset
|
2034 randint = random.randint |
1601afbb573c
perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents:
38781
diff
changeset
|
2035 currentlines = 0 |
1601afbb573c
perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents:
38781
diff
changeset
|
2036 arglist = [] |
39822
86dbeb7c9a11
py3: switch contrib/perf from xrange to pycompat.xrange
Matt Harbison <matt_harbison@yahoo.com>
parents:
39821
diff
changeset
|
2037 for rev in _xrange(edits): |
38969
1601afbb573c
perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents:
38781
diff
changeset
|
2038 a1 = randint(0, currentlines) |
1601afbb573c
perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents:
38781
diff
changeset
|
2039 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
|
2040 b1 = randint(0, maxb1) |
1601afbb573c
perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents:
38781
diff
changeset
|
2041 b2 = randint(b1, b1 + maxhunklines) |
1601afbb573c
perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents:
38781
diff
changeset
|
2042 currentlines += (b2 - b1) - (a2 - a1) |
1601afbb573c
perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents:
38781
diff
changeset
|
2043 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
|
2044 |
1601afbb573c
perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents:
38781
diff
changeset
|
2045 def d(): |
1601afbb573c
perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents:
38781
diff
changeset
|
2046 ll = linelog.linelog() |
1601afbb573c
perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents:
38781
diff
changeset
|
2047 for args in arglist: |
1601afbb573c
perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents:
38781
diff
changeset
|
2048 ll.replacelines(*args) |
1601afbb573c
perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents:
38781
diff
changeset
|
2049 |
1601afbb573c
perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents:
38781
diff
changeset
|
2050 timer, fm = gettimer(ui, opts) |
1601afbb573c
perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents:
38781
diff
changeset
|
2051 timer(d) |
1601afbb573c
perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents:
38781
diff
changeset
|
2052 fm.end() |
1601afbb573c
perf: add a command to benchmark linelog edits
Jun Wu <quark@fb.com>
parents:
38781
diff
changeset
|
2053 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2054 |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
2055 @command(b'perf::revrange|perfrevrange', formatteropts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
2056 def perfrevrange(ui, repo, *specs, **opts): |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
2057 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
2058 timer, fm = gettimer(ui, opts) |
16858
fdf99e0f60f3
perf: add a benchmark for revrange
Bryan O'Sullivan <bryano@fb.com>
parents:
16802
diff
changeset
|
2059 revrange = scmutil.revrange |
fdf99e0f60f3
perf: add a benchmark for revrange
Bryan O'Sullivan <bryano@fb.com>
parents:
16802
diff
changeset
|
2060 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
|
2061 fm.end() |
16858
fdf99e0f60f3
perf: add a benchmark for revrange
Bryan O'Sullivan <bryano@fb.com>
parents:
16802
diff
changeset
|
2062 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2063 |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
2064 @command(b'perf::nodelookup|perfnodelookup', formatteropts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
2065 def perfnodelookup(ui, repo, rev, **opts): |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
2066 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
2067 timer, fm = gettimer(ui, opts) |
16309 | 2068 import mercurial.revlog |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2069 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2070 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
|
2071 n = scmutil.revsingle(repo, rev).node() |
47072
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47036
diff
changeset
|
2072 |
47150
8d3c2f9d4af7
revlog: use a "radix" to address revlog
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47149
diff
changeset
|
2073 try: |
8d3c2f9d4af7
revlog: use a "radix" to address revlog
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47149
diff
changeset
|
2074 cl = revlog(getsvfs(repo), radix=b"00changelog") |
8d3c2f9d4af7
revlog: use a "radix" to address revlog
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47149
diff
changeset
|
2075 except TypeError: |
8d3c2f9d4af7
revlog: use a "radix" to address revlog
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47149
diff
changeset
|
2076 cl = revlog(getsvfs(repo), indexfile=b"00changelog.i") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2077 |
16414
e8d37b78acfb
parsers: use base-16 trie for faster node->rev mapping
Bryan O'Sullivan <bryano@fb.com>
parents:
16403
diff
changeset
|
2078 def d(): |
e8d37b78acfb
parsers: use base-16 trie for faster node->rev mapping
Bryan O'Sullivan <bryano@fb.com>
parents:
16403
diff
changeset
|
2079 cl.rev(n) |
16785
1dc08dc63c09
perf: rework perfheads and perftags to clear caches
Bryan O'Sullivan <bryano@fb.com>
parents:
16689
diff
changeset
|
2080 clearcaches(cl) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2081 |
16414
e8d37b78acfb
parsers: use base-16 trie for faster node->rev mapping
Bryan O'Sullivan <bryano@fb.com>
parents:
16403
diff
changeset
|
2082 timer(d) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
2083 fm.end() |
16414
e8d37b78acfb
parsers: use base-16 trie for faster node->rev mapping
Bryan O'Sullivan <bryano@fb.com>
parents:
16403
diff
changeset
|
2084 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2085 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2086 @command( |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
2087 b'perf::log|perflog', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2088 [(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
|
2089 ) |
27306
bafb1235f505
perf: add optional rev for perflog and perftemplating
timeless <timeless@mozdev.org>
parents:
27305
diff
changeset
|
2090 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
|
2091 opts = _byteskwargs(opts) |
27306
bafb1235f505
perf: add optional rev for perflog and perftemplating
timeless <timeless@mozdev.org>
parents:
27305
diff
changeset
|
2092 if rev is None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2093 rev = [] |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
2094 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
|
2095 ui.pushbuffer() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2096 timer( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2097 lambda: commands.log( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2098 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
|
2099 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2100 ) |
7872
f680a1bd679b
contrib: add perflog and perftemplating commands to perf extension
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7366
diff
changeset
|
2101 ui.popbuffer() |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
2102 fm.end() |
7872
f680a1bd679b
contrib: add perflog and perftemplating commands to perf extension
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7366
diff
changeset
|
2103 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2104 |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
2105 @command(b'perf::moonwalk|perfmoonwalk', formatteropts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
2106 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
|
2107 """benchmark walking the changelog backwards |
74aea4be8e78
perf: add perfmoonwalk command to walk the changelog backwards
Brodie Rao <brodie@sf.io>
parents:
20032
diff
changeset
|
2108 |
74aea4be8e78
perf: add perfmoonwalk command to walk the changelog backwards
Brodie Rao <brodie@sf.io>
parents:
20032
diff
changeset
|
2109 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
|
2110 """ |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
2111 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
2112 timer, fm = gettimer(ui, opts) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2113 |
20178
74aea4be8e78
perf: add perfmoonwalk command to walk the changelog backwards
Brodie Rao <brodie@sf.io>
parents:
20032
diff
changeset
|
2114 def moonwalk(): |
38778
a4d847cea6f8
perfmoonwalk: make work with filtered repo
Martin von Zweigbergk <martinvonz@google.com>
parents:
38695
diff
changeset
|
2115 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
|
2116 ctx = repo[i] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2117 ctx.branch() # read changelog data (in addition to the index) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2118 |
20178
74aea4be8e78
perf: add perfmoonwalk command to walk the changelog backwards
Brodie Rao <brodie@sf.io>
parents:
20032
diff
changeset
|
2119 timer(moonwalk) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
2120 fm.end() |
20178
74aea4be8e78
perf: add perfmoonwalk command to walk the changelog backwards
Brodie Rao <brodie@sf.io>
parents:
20032
diff
changeset
|
2121 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2122 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2123 @command( |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
2124 b'perf::templating|perftemplating', |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
2125 [ |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
2126 (b'r', b'rev', [], b'revisions to run the template on'), |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
2127 ] |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
2128 + formatteropts, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2129 ) |
38258
ae6e02fcee24
perftemplating: allow to specify the template to test
Boris Feld <boris.feld@octobus.net>
parents:
38257
diff
changeset
|
2130 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
|
2131 """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
|
2132 if makelogtemplater is None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2133 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2134 b"perftemplating not available with this Mercurial", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2135 hint=b"use 4.3 or later", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2136 ) |
38257
a577a199983c
perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents:
38256
diff
changeset
|
2137 |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
2138 opts = _byteskwargs(opts) |
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
2139 |
38255
71d59b487d0c
perftemplating: drop usage of buffer
Boris Feld <boris.feld@octobus.net>
parents:
38254
diff
changeset
|
2140 nullui = ui.copy() |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43503
diff
changeset
|
2141 nullui.fout = open(os.devnull, 'wb') |
38255
71d59b487d0c
perftemplating: drop usage of buffer
Boris Feld <boris.feld@octobus.net>
parents:
38254
diff
changeset
|
2142 nullui.disablepager() |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2143 revs = opts.get(b'rev') |
38257
a577a199983c
perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents:
38256
diff
changeset
|
2144 if not revs: |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2145 revs = [b'all()'] |
38257
a577a199983c
perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents:
38256
diff
changeset
|
2146 revs = list(scmutil.revrange(repo, revs)) |
a577a199983c
perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents:
38256
diff
changeset
|
2147 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2148 defaulttemplate = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2149 b'{date|shortdate} [{rev}:{node|short}]' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2150 b' {author|person}: {desc|firstline}\n' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2151 ) |
38258
ae6e02fcee24
perftemplating: allow to specify the template to test
Boris Feld <boris.feld@octobus.net>
parents:
38257
diff
changeset
|
2152 if testedtemplate is None: |
ae6e02fcee24
perftemplating: allow to specify the template to test
Boris Feld <boris.feld@octobus.net>
parents:
38257
diff
changeset
|
2153 testedtemplate = defaulttemplate |
ae6e02fcee24
perftemplating: allow to specify the template to test
Boris Feld <boris.feld@octobus.net>
parents:
38257
diff
changeset
|
2154 displayer = makelogtemplater(nullui, repo, testedtemplate) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2155 |
38254
6b91815fcdce
perftemplating: move template formating into its own function
Boris Feld <boris.feld@octobus.net>
parents:
38253
diff
changeset
|
2156 def format(): |
38257
a577a199983c
perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents:
38256
diff
changeset
|
2157 for r in revs: |
a577a199983c
perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents:
38256
diff
changeset
|
2158 ctx = repo[r] |
a577a199983c
perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents:
38256
diff
changeset
|
2159 displayer.show(ctx) |
a577a199983c
perftemplating: stop going through the log command
Boris Feld <boris.feld@octobus.net>
parents:
38256
diff
changeset
|
2160 displayer.flush(ctx) |
38254
6b91815fcdce
perftemplating: move template formating into its own function
Boris Feld <boris.feld@octobus.net>
parents:
38253
diff
changeset
|
2161 |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
2162 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
|
2163 timer(format) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
2164 fm.end() |
7872
f680a1bd679b
contrib: add perflog and perftemplating commands to perf extension
Alexander Solovyov <piranha@piranha.org.ua>
parents:
7366
diff
changeset
|
2165 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2166 |
42941
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2167 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
|
2168 # 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
|
2169 # 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
|
2170 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
|
2171 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
|
2172 values = data[key] |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2173 nbvalues = len(data) |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2174 values.sort() |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2175 stats = { |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2176 'key': key, |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2177 'title': title, |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2178 'nbitems': len(values), |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2179 '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
|
2180 '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
|
2181 '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
|
2182 '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
|
2183 '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
|
2184 '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
|
2185 '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
|
2186 '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
|
2187 '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
|
2188 '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
|
2189 '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
|
2190 } |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2191 fm.startitem() |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2192 fm.data(**stats) |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2193 # 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
|
2194 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
|
2195 lines = [ |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2196 'min', |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2197 '10%', |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2198 '25%', |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2199 '50%', |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2200 '75%', |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2201 '80%', |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2202 '85%', |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2203 '90%', |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2204 '95%', |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2205 '99%', |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2206 'max', |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2207 ] |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2208 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
|
2209 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
|
2210 fm.end() |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2211 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2212 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2213 @command( |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
2214 b'perf::helper-mergecopies|perfhelper-mergecopies', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2215 formatteropts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2216 + [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2217 (b'r', b'revs', [], b'restrict search to these revisions'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2218 (b'', b'timing', False, b'provides extra data (costly)'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2219 (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
|
2220 ], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2221 ) |
42385
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2222 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
|
2223 """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
|
2224 |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2225 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
|
2226 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
|
2227 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
|
2228 |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2229 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
|
2230 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
|
2231 execution. |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2232 |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2233 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
|
2234 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
|
2235 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
|
2236 """ |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2237 opts = _byteskwargs(opts) |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2238 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
|
2239 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
|
2240 dostats = opts[b'stats'] |
42385
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2241 |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2242 output_template = [ |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2243 ("base", "%(base)12s"), |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2244 ("p1", "%(p1.node)12s"), |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2245 ("p2", "%(p2.node)12s"), |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2246 ("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
|
2247 ("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
|
2248 ("p1.renames", "%(p1.renamedfiles)12d"), |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2249 ("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
|
2250 ("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
|
2251 ("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
|
2252 ("p2.renames", "%(p2.renamedfiles)12d"), |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2253 ("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
|
2254 ("renames", "%(nbrenamedfiles)12d"), |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2255 ("total.time", "%(time)12.3f"), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2256 ] |
42385
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2257 if not dotiming: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2258 output_template = [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2259 i |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2260 for i in output_template |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2261 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
|
2262 ] |
42385
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2263 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
|
2264 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
|
2265 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
|
2266 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
|
2267 |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2268 if not revs: |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2269 revs = ['all()'] |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2270 revs = scmutil.revrange(repo, revs) |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2271 |
42941
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2272 if dostats: |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2273 alldata = { |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2274 'nbrevs': [], |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2275 'nbmissingfiles': [], |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2276 } |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2277 if dotiming: |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2278 alldata['parentnbrenames'] = [] |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2279 alldata['totalnbrenames'] = [] |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2280 alldata['parenttime'] = [] |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2281 alldata['totaltime'] = [] |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2282 |
42385
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2283 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
|
2284 for r in roi: |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2285 ctx = repo[r] |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2286 p1 = ctx.p1() |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2287 p2 = ctx.p2() |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2288 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
|
2289 for b in bases: |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2290 b = repo[b] |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2291 p1missing = copies._computeforwardmissing(b, p1) |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2292 p2missing = copies._computeforwardmissing(b, p2) |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2293 data = { |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2294 b'base': b.hex(), |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2295 b'p1.node': p1.hex(), |
43161
9d57c2df7b5f
perf: fix `perfhelper-mergecopies` report of #changesets
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43160
diff
changeset
|
2296 b'p1.nbrevs': len(repo.revs('only(%d, %d)', p1.rev(), b.rev())), |
42385
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2297 b'p1.nbmissingfiles': len(p1missing), |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2298 b'p2.node': p2.hex(), |
43161
9d57c2df7b5f
perf: fix `perfhelper-mergecopies` report of #changesets
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43160
diff
changeset
|
2299 b'p2.nbrevs': len(repo.revs('only(%d, %d)', p2.rev(), b.rev())), |
42385
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2300 b'p2.nbmissingfiles': len(p2missing), |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2301 } |
42941
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2302 if dostats: |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2303 if p1missing: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2304 alldata['nbrevs'].append( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2305 (data['p1.nbrevs'], b.hex(), p1.hex()) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2306 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2307 alldata['nbmissingfiles'].append( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2308 (data['p1.nbmissingfiles'], b.hex(), p1.hex()) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2309 ) |
42941
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2310 if p2missing: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2311 alldata['nbrevs'].append( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2312 (data['p2.nbrevs'], b.hex(), p2.hex()) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2313 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2314 alldata['nbmissingfiles'].append( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2315 (data['p2.nbmissingfiles'], b.hex(), p2.hex()) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2316 ) |
42385
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2317 if dotiming: |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2318 begin = util.timer() |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2319 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
|
2320 end = util.timer() |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2321 # 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
|
2322 data['time'] = end - begin |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2323 # 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
|
2324 # "diverge", "renamedelete" and "dirmove". |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2325 # 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
|
2326 renames = len(mergedata[0]) |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2327 renames += len(mergedata[1]) |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2328 renames += len(mergedata[2]) |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2329 renames += len(mergedata[3]) |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2330 data['nbrenamedfiles'] = renames |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2331 begin = util.timer() |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2332 p1renames = copies.pathcopies(b, p1) |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2333 end = util.timer() |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2334 data['p1.time'] = end - begin |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2335 begin = util.timer() |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2336 p2renames = copies.pathcopies(b, p2) |
43974
a2ad5aeedfdf
perf: fix the time measurement for pathcopies relative to p2
Matt Harbison <matt_harbison@yahoo.com>
parents:
43653
diff
changeset
|
2337 end = util.timer() |
42385
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2338 data['p2.time'] = end - begin |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2339 data['p1.renamedfiles'] = len(p1renames) |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2340 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
|
2341 |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2342 if dostats: |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2343 if p1missing: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2344 alldata['parentnbrenames'].append( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2345 (data['p1.renamedfiles'], b.hex(), p1.hex()) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2346 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2347 alldata['parenttime'].append( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2348 (data['p1.time'], b.hex(), p1.hex()) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2349 ) |
42941
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2350 if p2missing: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2351 alldata['parentnbrenames'].append( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2352 (data['p2.renamedfiles'], b.hex(), p2.hex()) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2353 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2354 alldata['parenttime'].append( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2355 (data['p2.time'], b.hex(), p2.hex()) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2356 ) |
42941
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2357 if p1missing or p2missing: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2358 alldata['totalnbrenames'].append( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2359 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2360 data['nbrenamedfiles'], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2361 b.hex(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2362 p1.hex(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2363 p2.hex(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2364 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2365 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2366 alldata['totaltime'].append( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2367 (data['time'], b.hex(), p1.hex(), p2.hex()) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2368 ) |
42385
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2369 fm.startitem() |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2370 fm.data(**data) |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2371 # 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
|
2372 out = data.copy() |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2373 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
|
2374 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
|
2375 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
|
2376 fm.plain(output % out) |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2377 |
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2378 fm.end() |
42941
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2379 if dostats: |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2380 # 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
|
2381 # 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
|
2382 entries = [ |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2383 ('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
|
2384 ('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
|
2385 ] |
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2386 if dotiming: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2387 entries.append( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2388 ('parentnbrenames', 'rename from one parent to base') |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2389 ) |
42941
3a1ad3aeb64a
perf: add a --stats argument to perfhelper-mergecopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42785
diff
changeset
|
2390 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
|
2391 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
|
2392 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
|
2393 _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
|
2394 |
42385
21c436a3a4e8
perf: add a `perfhelper-mergecopies` command
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42384
diff
changeset
|
2395 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2396 @command( |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
2397 b'perf::helper-pathcopies|perfhelper-pathcopies', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2398 formatteropts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2399 + [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2400 (b'r', b'revs', [], b'restrict search to these revisions'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2401 (b'', b'timing', False, b'provides extra data (costly)'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2402 (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
|
2403 ], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2404 ) |
40740
30d878cb102d
perf: rename `perfhelper-tracecopies` to `perfhelper-pathcopies`
Boris Feld <boris.feld@octobus.net>
parents:
40739
diff
changeset
|
2405 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
|
2406 """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
|
2407 |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2408 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
|
2409 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
|
2410 |
36077a0f6f12
perf: add a `--timing` argument to `perfhelper-tracecopies`
Boris Feld <boris.feld@octobus.net>
parents:
40721
diff
changeset
|
2411 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
|
2412 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
|
2413 execution. |
36077a0f6f12
perf: add a `--timing` argument to `perfhelper-tracecopies`
Boris Feld <boris.feld@octobus.net>
parents:
40721
diff
changeset
|
2414 |
36077a0f6f12
perf: add a `--timing` argument to `perfhelper-tracecopies`
Boris Feld <boris.feld@octobus.net>
parents:
40721
diff
changeset
|
2415 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
|
2416 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
|
2417 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
|
2418 """ |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2419 opts = _byteskwargs(opts) |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2420 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
|
2421 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
|
2422 dostats = opts[b'stats'] |
40731
36077a0f6f12
perf: add a `--timing` argument to `perfhelper-tracecopies`
Boris Feld <boris.feld@octobus.net>
parents:
40721
diff
changeset
|
2423 |
36077a0f6f12
perf: add a `--timing` argument to `perfhelper-tracecopies`
Boris Feld <boris.feld@octobus.net>
parents:
40721
diff
changeset
|
2424 if dotiming: |
36077a0f6f12
perf: add a `--timing` argument to `perfhelper-tracecopies`
Boris Feld <boris.feld@octobus.net>
parents:
40721
diff
changeset
|
2425 header = '%12s %12s %12s %12s %12s %12s\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2426 output = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2427 "%(source)12s %(destination)12s " |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2428 "%(nbrevs)12d %(nbmissingfiles)12d " |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2429 "%(nbrenamedfiles)12d %(time)18.5f\n" |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2430 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2431 header_names = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2432 "source", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2433 "destination", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2434 "nb-revs", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2435 "nb-files", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2436 "nb-renames", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2437 "time", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2438 ) |
40731
36077a0f6f12
perf: add a `--timing` argument to `perfhelper-tracecopies`
Boris Feld <boris.feld@octobus.net>
parents:
40721
diff
changeset
|
2439 fm.plain(header % header_names) |
36077a0f6f12
perf: add a `--timing` argument to `perfhelper-tracecopies`
Boris Feld <boris.feld@octobus.net>
parents:
40721
diff
changeset
|
2440 else: |
36077a0f6f12
perf: add a `--timing` argument to `perfhelper-tracecopies`
Boris Feld <boris.feld@octobus.net>
parents:
40721
diff
changeset
|
2441 header = '%12s %12s %12s %12s\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2442 output = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2443 "%(source)12s %(destination)12s " |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2444 "%(nbrevs)12d %(nbmissingfiles)12d\n" |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2445 ) |
40731
36077a0f6f12
perf: add a `--timing` argument to `perfhelper-tracecopies`
Boris Feld <boris.feld@octobus.net>
parents:
40721
diff
changeset
|
2446 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
|
2447 |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2448 if not revs: |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2449 revs = ['all()'] |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2450 revs = scmutil.revrange(repo, revs) |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2451 |
42942
adac17faa72e
perf: add a --stats argument to perfhelper-pathcopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42941
diff
changeset
|
2452 if dostats: |
adac17faa72e
perf: add a --stats argument to perfhelper-pathcopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42941
diff
changeset
|
2453 alldata = { |
adac17faa72e
perf: add a --stats argument to perfhelper-pathcopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42941
diff
changeset
|
2454 'nbrevs': [], |
adac17faa72e
perf: add a --stats argument to perfhelper-pathcopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42941
diff
changeset
|
2455 'nbmissingfiles': [], |
adac17faa72e
perf: add a --stats argument to perfhelper-pathcopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42941
diff
changeset
|
2456 } |
adac17faa72e
perf: add a --stats argument to perfhelper-pathcopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42941
diff
changeset
|
2457 if dotiming: |
adac17faa72e
perf: add a --stats argument to perfhelper-pathcopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42941
diff
changeset
|
2458 alldata['nbrenames'] = [] |
adac17faa72e
perf: add a --stats argument to perfhelper-pathcopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42941
diff
changeset
|
2459 alldata['time'] = [] |
adac17faa72e
perf: add a --stats argument to perfhelper-pathcopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42941
diff
changeset
|
2460 |
40691
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2461 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
|
2462 for r in roi: |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2463 ctx = repo[r] |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2464 p1 = ctx.p1().rev() |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2465 p2 = ctx.p2().rev() |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2466 bases = repo.changelog._commonancestorsheads(p1, p2) |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2467 for p in (p1, p2): |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2468 for b in bases: |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2469 base = repo[b] |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2470 parent = repo[p] |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2471 missing = copies._computeforwardmissing(base, parent) |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2472 if not missing: |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2473 continue |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2474 data = { |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2475 b'source': base.hex(), |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2476 b'destination': parent.hex(), |
43160
84a950007619
perf: fix `perfhelper-pathcopies` report of #changesets
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43130
diff
changeset
|
2477 b'nbrevs': len(repo.revs('only(%d, %d)', p, b)), |
40691
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2478 b'nbmissingfiles': len(missing), |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2479 } |
43003
bbf77341a956
perf: fix perfhelper-pathcopies without --stats
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42979
diff
changeset
|
2480 if dostats: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2481 alldata['nbrevs'].append( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
2482 ( |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
2483 data['nbrevs'], |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
2484 base.hex(), |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
2485 parent.hex(), |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
2486 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2487 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2488 alldata['nbmissingfiles'].append( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
2489 ( |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
2490 data['nbmissingfiles'], |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
2491 base.hex(), |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
2492 parent.hex(), |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
2493 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2494 ) |
40731
36077a0f6f12
perf: add a `--timing` argument to `perfhelper-tracecopies`
Boris Feld <boris.feld@octobus.net>
parents:
40721
diff
changeset
|
2495 if dotiming: |
36077a0f6f12
perf: add a `--timing` argument to `perfhelper-tracecopies`
Boris Feld <boris.feld@octobus.net>
parents:
40721
diff
changeset
|
2496 begin = util.timer() |
36077a0f6f12
perf: add a `--timing` argument to `perfhelper-tracecopies`
Boris Feld <boris.feld@octobus.net>
parents:
40721
diff
changeset
|
2497 renames = copies.pathcopies(base, parent) |
36077a0f6f12
perf: add a `--timing` argument to `perfhelper-tracecopies`
Boris Feld <boris.feld@octobus.net>
parents:
40721
diff
changeset
|
2498 end = util.timer() |
36077a0f6f12
perf: add a `--timing` argument to `perfhelper-tracecopies`
Boris Feld <boris.feld@octobus.net>
parents:
40721
diff
changeset
|
2499 # 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
|
2500 data['time'] = end - begin |
36077a0f6f12
perf: add a `--timing` argument to `perfhelper-tracecopies`
Boris Feld <boris.feld@octobus.net>
parents:
40721
diff
changeset
|
2501 data['nbrenamedfiles'] = len(renames) |
43003
bbf77341a956
perf: fix perfhelper-pathcopies without --stats
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42979
diff
changeset
|
2502 if dostats: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2503 alldata['time'].append( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
2504 ( |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
2505 data['time'], |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
2506 base.hex(), |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
2507 parent.hex(), |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
2508 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2509 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2510 alldata['nbrenames'].append( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
2511 ( |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
2512 data['nbrenamedfiles'], |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
2513 base.hex(), |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
2514 parent.hex(), |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
2515 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2516 ) |
40731
36077a0f6f12
perf: add a `--timing` argument to `perfhelper-tracecopies`
Boris Feld <boris.feld@octobus.net>
parents:
40721
diff
changeset
|
2517 fm.startitem() |
40691
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2518 fm.data(**data) |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2519 out = data.copy() |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2520 out['source'] = fm.hexfunc(base.node()) |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2521 out['destination'] = fm.hexfunc(parent.node()) |
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2522 fm.plain(output % out) |
40731
36077a0f6f12
perf: add a `--timing` argument to `perfhelper-tracecopies`
Boris Feld <boris.feld@octobus.net>
parents:
40721
diff
changeset
|
2523 |
40691
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2524 fm.end() |
42942
adac17faa72e
perf: add a --stats argument to perfhelper-pathcopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42941
diff
changeset
|
2525 if dostats: |
adac17faa72e
perf: add a --stats argument to perfhelper-pathcopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42941
diff
changeset
|
2526 entries = [ |
adac17faa72e
perf: add a --stats argument to perfhelper-pathcopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42941
diff
changeset
|
2527 ('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
|
2528 ('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
|
2529 ] |
adac17faa72e
perf: add a --stats argument to perfhelper-pathcopies
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42941
diff
changeset
|
2530 if dotiming: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2531 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
|
2532 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
|
2533 _displaystats(ui, opts, entries, alldata) |
40691
a65fe13de84f
perf: add a new `perfhelper-tracecopies` command
Boris Feld <boris.feld@octobus.net>
parents:
40683
diff
changeset
|
2534 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2535 |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
2536 @command(b'perf::cca|perfcca', formatteropts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
2537 def perfcca(ui, repo, **opts): |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
2538 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
2539 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
|
2540 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
|
2541 fm.end() |
16386
ccc173d0914e
perf: add case collision auditor perf
Matt Mackall <mpm@selenic.com>
parents:
16309
diff
changeset
|
2542 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2543 |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
2544 @command(b'perf::fncacheload|perffncacheload', formatteropts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
2545 def perffncacheload(ui, repo, **opts): |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
2546 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
2547 timer, fm = gettimer(ui, opts) |
17780
769f66861eb8
perf: simply use repo.store for perffncache* commands
Adrian Buehlmann <adrian@cadifra.com>
parents:
17553
diff
changeset
|
2548 s = repo.store |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2549 |
16403
efae1fea4bbd
perf: time fncache read and write performance
Bryan O'Sullivan <bryano@fb.com>
parents:
16386
diff
changeset
|
2550 def d(): |
efae1fea4bbd
perf: time fncache read and write performance
Bryan O'Sullivan <bryano@fb.com>
parents:
16386
diff
changeset
|
2551 s.fncache._load() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2552 |
16403
efae1fea4bbd
perf: time fncache read and write performance
Bryan O'Sullivan <bryano@fb.com>
parents:
16386
diff
changeset
|
2553 timer(d) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
2554 fm.end() |
16403
efae1fea4bbd
perf: time fncache read and write performance
Bryan O'Sullivan <bryano@fb.com>
parents:
16386
diff
changeset
|
2555 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2556 |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
2557 @command(b'perf::fncachewrite|perffncachewrite', formatteropts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
2558 def perffncachewrite(ui, repo, **opts): |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
2559 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
2560 timer, fm = gettimer(ui, opts) |
17780
769f66861eb8
perf: simply use repo.store for perffncache* commands
Adrian Buehlmann <adrian@cadifra.com>
parents:
17553
diff
changeset
|
2561 s = repo.store |
38695
2cdb82e8fb44
perffncachewrite: load fncache after lock is acquired
Boris Feld <boris.feld@octobus.net>
parents:
38694
diff
changeset
|
2562 lock = repo.lock() |
16403
efae1fea4bbd
perf: time fncache read and write performance
Bryan O'Sullivan <bryano@fb.com>
parents:
16386
diff
changeset
|
2563 s.fncache._load() |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2564 tr = repo.transaction(b'perffncachewrite') |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2565 tr.addbackup(b'fncache') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2566 |
16403
efae1fea4bbd
perf: time fncache read and write performance
Bryan O'Sullivan <bryano@fb.com>
parents:
16386
diff
changeset
|
2567 def d(): |
efae1fea4bbd
perf: time fncache read and write performance
Bryan O'Sullivan <bryano@fb.com>
parents:
16386
diff
changeset
|
2568 s.fncache._dirty = True |
27097
b3e24a9c5f9b
contrib/perf: fix perffncachewrite
timeless <timeless@mozdev.org>
parents:
27096
diff
changeset
|
2569 s.fncache.write(tr) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2570 |
16403
efae1fea4bbd
perf: time fncache read and write performance
Bryan O'Sullivan <bryano@fb.com>
parents:
16386
diff
changeset
|
2571 timer(d) |
30069
98b9846a131e
perf: release lock after transaction in perffncachewrite
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
30018
diff
changeset
|
2572 tr.close() |
27097
b3e24a9c5f9b
contrib/perf: fix perffncachewrite
timeless <timeless@mozdev.org>
parents:
27096
diff
changeset
|
2573 lock.release() |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
2574 fm.end() |
16403
efae1fea4bbd
perf: time fncache read and write performance
Bryan O'Sullivan <bryano@fb.com>
parents:
16386
diff
changeset
|
2575 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2576 |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
2577 @command(b'perf::fncacheencode|perffncacheencode', formatteropts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
2578 def perffncacheencode(ui, repo, **opts): |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
2579 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
2580 timer, fm = gettimer(ui, opts) |
17780
769f66861eb8
perf: simply use repo.store for perffncache* commands
Adrian Buehlmann <adrian@cadifra.com>
parents:
17553
diff
changeset
|
2581 s = repo.store |
17553
5ab863922e0f
perf: add perffncacheencode
Adrian Buehlmann <adrian@cadifra.com>
parents:
17216
diff
changeset
|
2582 s.fncache._load() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2583 |
17553
5ab863922e0f
perf: add perffncacheencode
Adrian Buehlmann <adrian@cadifra.com>
parents:
17216
diff
changeset
|
2584 def d(): |
5ab863922e0f
perf: add perffncacheencode
Adrian Buehlmann <adrian@cadifra.com>
parents:
17216
diff
changeset
|
2585 for p in s.fncache.entries: |
5ab863922e0f
perf: add perffncacheencode
Adrian Buehlmann <adrian@cadifra.com>
parents:
17216
diff
changeset
|
2586 s.encode(p) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2587 |
17553
5ab863922e0f
perf: add perffncacheencode
Adrian Buehlmann <adrian@cadifra.com>
parents:
17216
diff
changeset
|
2588 timer(d) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
2589 fm.end() |
17553
5ab863922e0f
perf: add perffncacheencode
Adrian Buehlmann <adrian@cadifra.com>
parents:
17216
diff
changeset
|
2590 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2591 |
36766
d382344c69aa
perf: teach perfbdiff to call blocks() and to use xdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36360
diff
changeset
|
2592 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
|
2593 while not done.is_set(): |
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2594 pair = q.get() |
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2595 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
|
2596 if xdiff: |
d382344c69aa
perf: teach perfbdiff to call blocks() and to use xdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36360
diff
changeset
|
2597 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
|
2598 elif blocks: |
d382344c69aa
perf: teach perfbdiff to call blocks() and to use xdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36360
diff
changeset
|
2599 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
|
2600 else: |
d382344c69aa
perf: teach perfbdiff to call blocks() and to use xdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36360
diff
changeset
|
2601 mdiff.textdiff(*pair) |
35599
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2602 q.task_done() |
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2603 pair = q.get() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2604 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
|
2605 with ready: |
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2606 ready.wait() |
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2607 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2608 |
39319
862d23bc5749
perf: add function for obtaining manifest revision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39318
diff
changeset
|
2609 def _manifestrevision(repo, mnode): |
862d23bc5749
perf: add function for obtaining manifest revision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39318
diff
changeset
|
2610 ml = repo.manifestlog |
862d23bc5749
perf: add function for obtaining manifest revision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39318
diff
changeset
|
2611 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2612 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
|
2613 store = ml.getstorage(b'') |
862d23bc5749
perf: add function for obtaining manifest revision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39318
diff
changeset
|
2614 else: |
862d23bc5749
perf: add function for obtaining manifest revision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39318
diff
changeset
|
2615 store = ml._revlog |
862d23bc5749
perf: add function for obtaining manifest revision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39318
diff
changeset
|
2616 |
862d23bc5749
perf: add function for obtaining manifest revision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39318
diff
changeset
|
2617 return store.revision(mnode) |
862d23bc5749
perf: add function for obtaining manifest revision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39318
diff
changeset
|
2618 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2619 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2620 @command( |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
2621 b'perf::bdiff|perfbdiff', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2622 revlogopts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2623 + formatteropts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2624 + [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2625 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2626 b'', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2627 b'count', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2628 1, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2629 b'number of revisions to test (when using --startrev)', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2630 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2631 (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
|
2632 (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
|
2633 (b'', b'blocks', False, b'test computing diffs into blocks'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2634 (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
|
2635 ], |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2636 b'-c|-m|FILE REV', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2637 ) |
35599
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2638 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
|
2639 """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
|
2640 |
7ddc8f8d7712
perf: support bdiffing multiple revisions in a single revlog
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30335
diff
changeset
|
2641 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
|
2642 |
7ddc8f8d7712
perf: support bdiffing multiple revisions in a single revlog
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30335
diff
changeset
|
2643 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
|
2644 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
|
2645 |
6ecad4b73569
perf: support measuring bdiff for all changeset related data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30336
diff
changeset
|
2646 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
|
2647 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
|
2648 and filelogs). |
30336
7ddc8f8d7712
perf: support bdiffing multiple revisions in a single revlog
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30335
diff
changeset
|
2649 """ |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
2650 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
|
2651 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2652 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
|
2653 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
|
2654 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2655 if opts[b'alldata']: |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2656 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
|
2657 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2658 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
|
2659 file_, rev = None, file_ |
c8fa7ad1ff90
perf: add perfbdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30219
diff
changeset
|
2660 elif rev is None: |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2661 raise error.CommandError(b'perfbdiff', b'invalid arguments') |
30307
c8fa7ad1ff90
perf: add perfbdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30219
diff
changeset
|
2662 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2663 blocks = opts[b'blocks'] |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2664 xdiff = opts[b'xdiff'] |
30335
7d91a085ebe6
perf: prepare to handle multiple pairs in perfbdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30307
diff
changeset
|
2665 textpairs = [] |
7d91a085ebe6
perf: prepare to handle multiple pairs in perfbdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30307
diff
changeset
|
2666 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2667 r = cmdutil.openrevlog(repo, b'perfbdiff', file_, opts) |
30307
c8fa7ad1ff90
perf: add perfbdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30219
diff
changeset
|
2668 |
30336
7ddc8f8d7712
perf: support bdiffing multiple revisions in a single revlog
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30335
diff
changeset
|
2669 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
|
2670 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
|
2671 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
|
2672 # 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
|
2673 ctx = repo[rev] |
39319
862d23bc5749
perf: add function for obtaining manifest revision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39318
diff
changeset
|
2674 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
|
2675 for pctx in ctx.parents(): |
39319
862d23bc5749
perf: add function for obtaining manifest revision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39318
diff
changeset
|
2676 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
|
2677 textpairs.append((pman, mtext)) |
6ecad4b73569
perf: support measuring bdiff for all changeset related data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30336
diff
changeset
|
2678 |
6ecad4b73569
perf: support measuring bdiff for all changeset related data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30336
diff
changeset
|
2679 # 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
|
2680 man = ctx.manifest() |
6ecad4b73569
perf: support measuring bdiff for all changeset related data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30336
diff
changeset
|
2681 pman = ctx.p1().manifest() |
6ecad4b73569
perf: support measuring bdiff for all changeset related data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30336
diff
changeset
|
2682 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
|
2683 fctx = repo.file(filename) |
6ecad4b73569
perf: support measuring bdiff for all changeset related data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30336
diff
changeset
|
2684 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
|
2685 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
|
2686 textpairs.append((f1, f2)) |
6ecad4b73569
perf: support measuring bdiff for all changeset related data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30336
diff
changeset
|
2687 else: |
6ecad4b73569
perf: support measuring bdiff for all changeset related data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30336
diff
changeset
|
2688 dp = r.deltaparent(rev) |
6ecad4b73569
perf: support measuring bdiff for all changeset related data
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30336
diff
changeset
|
2689 textpairs.append((r.revision(dp), r.revision(rev))) |
30307
c8fa7ad1ff90
perf: add perfbdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30219
diff
changeset
|
2690 |
35599
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2691 withthreads = threads > 0 |
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2692 if not withthreads: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2693 |
35599
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2694 def d(): |
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2695 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
|
2696 if xdiff: |
d382344c69aa
perf: teach perfbdiff to call blocks() and to use xdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36360
diff
changeset
|
2697 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
|
2698 elif blocks: |
d382344c69aa
perf: teach perfbdiff to call blocks() and to use xdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36360
diff
changeset
|
2699 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
|
2700 else: |
d382344c69aa
perf: teach perfbdiff to call blocks() and to use xdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36360
diff
changeset
|
2701 mdiff.textdiff(*pair) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2702 |
35599
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2703 else: |
37844
8fb9985382be
pycompat: export queue module instead of symbols in module (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37355
diff
changeset
|
2704 q = queue() |
39822
86dbeb7c9a11
py3: switch contrib/perf from xrange to pycompat.xrange
Matt Harbison <matt_harbison@yahoo.com>
parents:
39821
diff
changeset
|
2705 for i in _xrange(threads): |
35599
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2706 q.put(None) |
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2707 ready = threading.Condition() |
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2708 done = threading.Event() |
39822
86dbeb7c9a11
py3: switch contrib/perf from xrange to pycompat.xrange
Matt Harbison <matt_harbison@yahoo.com>
parents:
39821
diff
changeset
|
2709 for i in _xrange(threads): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2710 threading.Thread( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2711 target=_bdiffworker, args=(q, blocks, xdiff, ready, done) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2712 ).start() |
35599
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2713 q.join() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2714 |
35599
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2715 def d(): |
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2716 for pair in textpairs: |
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2717 q.put(pair) |
39822
86dbeb7c9a11
py3: switch contrib/perf from xrange to pycompat.xrange
Matt Harbison <matt_harbison@yahoo.com>
parents:
39821
diff
changeset
|
2718 for i in _xrange(threads): |
35599
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2719 q.put(None) |
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2720 with ready: |
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2721 ready.notify_all() |
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2722 q.join() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2723 |
30307
c8fa7ad1ff90
perf: add perfbdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30219
diff
changeset
|
2724 timer, fm = gettimer(ui, opts) |
c8fa7ad1ff90
perf: add perfbdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30219
diff
changeset
|
2725 timer(d) |
c8fa7ad1ff90
perf: add perfbdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30219
diff
changeset
|
2726 fm.end() |
c8fa7ad1ff90
perf: add perfbdiff
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30219
diff
changeset
|
2727 |
35599
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2728 if withthreads: |
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2729 done.set() |
39822
86dbeb7c9a11
py3: switch contrib/perf from xrange to pycompat.xrange
Matt Harbison <matt_harbison@yahoo.com>
parents:
39821
diff
changeset
|
2730 for i in _xrange(threads): |
35599
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2731 q.put(None) |
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2732 with ready: |
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2733 ready.notify_all() |
af25237be091
perf: add threading capability to perfbdiff
Boris Feld <boris.feld@octobus.net>
parents:
35116
diff
changeset
|
2734 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2735 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2736 @command( |
49414
3c5d0f879404
perf-unbundle: add a perf command to time the unbundle operation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49413
diff
changeset
|
2737 b'perf::unbundle', |
3c5d0f879404
perf-unbundle: add a perf command to time the unbundle operation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49413
diff
changeset
|
2738 formatteropts, |
3c5d0f879404
perf-unbundle: add a perf command to time the unbundle operation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49413
diff
changeset
|
2739 b'BUNDLE_FILE', |
3c5d0f879404
perf-unbundle: add a perf command to time the unbundle operation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49413
diff
changeset
|
2740 ) |
3c5d0f879404
perf-unbundle: add a perf command to time the unbundle operation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49413
diff
changeset
|
2741 def perf_unbundle(ui, repo, fname, **opts): |
3c5d0f879404
perf-unbundle: add a perf command to time the unbundle operation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49413
diff
changeset
|
2742 """benchmark application of a bundle in a repository. |
3c5d0f879404
perf-unbundle: add a perf command to time the unbundle operation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49413
diff
changeset
|
2743 |
3c5d0f879404
perf-unbundle: add a perf command to time the unbundle operation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49413
diff
changeset
|
2744 This does not include the final transaction processing""" |
49562
27bff60887fe
perf-unbundle: do a quick and dirty fix to make it run on more commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49561
diff
changeset
|
2745 |
49414
3c5d0f879404
perf-unbundle: add a perf command to time the unbundle operation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49413
diff
changeset
|
2746 from mercurial import exchange |
3c5d0f879404
perf-unbundle: add a perf command to time the unbundle operation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49413
diff
changeset
|
2747 from mercurial import bundle2 |
49562
27bff60887fe
perf-unbundle: do a quick and dirty fix to make it run on more commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49561
diff
changeset
|
2748 from mercurial import transaction |
49414
3c5d0f879404
perf-unbundle: add a perf command to time the unbundle operation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49413
diff
changeset
|
2749 |
49445
cd21f2b4226f
perf: properly process formatter option in perf::unbundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49444
diff
changeset
|
2750 opts = _byteskwargs(opts) |
cd21f2b4226f
perf: properly process formatter option in perf::unbundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49444
diff
changeset
|
2751 |
49562
27bff60887fe
perf-unbundle: do a quick and dirty fix to make it run on more commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49561
diff
changeset
|
2752 ### some compatibility hotfix |
27bff60887fe
perf-unbundle: do a quick and dirty fix to make it run on more commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49561
diff
changeset
|
2753 # |
27bff60887fe
perf-unbundle: do a quick and dirty fix to make it run on more commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49561
diff
changeset
|
2754 # the data attribute is dropped in 63edc384d3b7 a changeset introducing a |
27bff60887fe
perf-unbundle: do a quick and dirty fix to make it run on more commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49561
diff
changeset
|
2755 # critical regression that break transaction rollback for files that are |
27bff60887fe
perf-unbundle: do a quick and dirty fix to make it run on more commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49561
diff
changeset
|
2756 # de-inlined. |
27bff60887fe
perf-unbundle: do a quick and dirty fix to make it run on more commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49561
diff
changeset
|
2757 method = transaction.transaction._addentry |
27bff60887fe
perf-unbundle: do a quick and dirty fix to make it run on more commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49561
diff
changeset
|
2758 pre_63edc384d3b7 = "data" in getargspec(method).args |
27bff60887fe
perf-unbundle: do a quick and dirty fix to make it run on more commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49561
diff
changeset
|
2759 # the `detailed_exit_code` attribute is introduced in 33c0c25d0b0f |
27bff60887fe
perf-unbundle: do a quick and dirty fix to make it run on more commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49561
diff
changeset
|
2760 # a changeset that is a close descendant of 18415fc918a1, the changeset |
27bff60887fe
perf-unbundle: do a quick and dirty fix to make it run on more commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49561
diff
changeset
|
2761 # that conclude the fix run for the bug introduced in 63edc384d3b7. |
27bff60887fe
perf-unbundle: do a quick and dirty fix to make it run on more commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49561
diff
changeset
|
2762 args = getargspec(error.Abort.__init__).args |
27bff60887fe
perf-unbundle: do a quick and dirty fix to make it run on more commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49561
diff
changeset
|
2763 post_18415fc918a1 = "detailed_exit_code" in args |
27bff60887fe
perf-unbundle: do a quick and dirty fix to make it run on more commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49561
diff
changeset
|
2764 |
27bff60887fe
perf-unbundle: do a quick and dirty fix to make it run on more commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49561
diff
changeset
|
2765 old_max_inline = None |
27bff60887fe
perf-unbundle: do a quick and dirty fix to make it run on more commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49561
diff
changeset
|
2766 try: |
27bff60887fe
perf-unbundle: do a quick and dirty fix to make it run on more commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49561
diff
changeset
|
2767 if not (pre_63edc384d3b7 or post_18415fc918a1): |
27bff60887fe
perf-unbundle: do a quick and dirty fix to make it run on more commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49561
diff
changeset
|
2768 # disable inlining |
27bff60887fe
perf-unbundle: do a quick and dirty fix to make it run on more commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49561
diff
changeset
|
2769 old_max_inline = mercurial.revlog._maxinline |
27bff60887fe
perf-unbundle: do a quick and dirty fix to make it run on more commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49561
diff
changeset
|
2770 # large enough to never happen |
27bff60887fe
perf-unbundle: do a quick and dirty fix to make it run on more commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49561
diff
changeset
|
2771 mercurial.revlog._maxinline = 2 ** 50 |
27bff60887fe
perf-unbundle: do a quick and dirty fix to make it run on more commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49561
diff
changeset
|
2772 |
49561
220738a53d05
perf-unbundle: pre-indent the main block in per::unbundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49475
diff
changeset
|
2773 with repo.lock(): |
220738a53d05
perf-unbundle: pre-indent the main block in per::unbundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49475
diff
changeset
|
2774 bundle = [None, None] |
220738a53d05
perf-unbundle: pre-indent the main block in per::unbundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49475
diff
changeset
|
2775 orig_quiet = repo.ui.quiet |
220738a53d05
perf-unbundle: pre-indent the main block in per::unbundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49475
diff
changeset
|
2776 try: |
220738a53d05
perf-unbundle: pre-indent the main block in per::unbundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49475
diff
changeset
|
2777 repo.ui.quiet = True |
220738a53d05
perf-unbundle: pre-indent the main block in per::unbundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49475
diff
changeset
|
2778 with open(fname, mode="rb") as f: |
220738a53d05
perf-unbundle: pre-indent the main block in per::unbundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49475
diff
changeset
|
2779 |
220738a53d05
perf-unbundle: pre-indent the main block in per::unbundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49475
diff
changeset
|
2780 def noop_report(*args, **kwargs): |
220738a53d05
perf-unbundle: pre-indent the main block in per::unbundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49475
diff
changeset
|
2781 pass |
220738a53d05
perf-unbundle: pre-indent the main block in per::unbundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49475
diff
changeset
|
2782 |
220738a53d05
perf-unbundle: pre-indent the main block in per::unbundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49475
diff
changeset
|
2783 def setup(): |
220738a53d05
perf-unbundle: pre-indent the main block in per::unbundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49475
diff
changeset
|
2784 gen, tr = bundle |
220738a53d05
perf-unbundle: pre-indent the main block in per::unbundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49475
diff
changeset
|
2785 if tr is not None: |
220738a53d05
perf-unbundle: pre-indent the main block in per::unbundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49475
diff
changeset
|
2786 tr.abort() |
220738a53d05
perf-unbundle: pre-indent the main block in per::unbundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49475
diff
changeset
|
2787 bundle[:] = [None, None] |
220738a53d05
perf-unbundle: pre-indent the main block in per::unbundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49475
diff
changeset
|
2788 f.seek(0) |
220738a53d05
perf-unbundle: pre-indent the main block in per::unbundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49475
diff
changeset
|
2789 bundle[0] = exchange.readbundle(ui, f, fname) |
220738a53d05
perf-unbundle: pre-indent the main block in per::unbundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49475
diff
changeset
|
2790 bundle[1] = repo.transaction(b'perf::unbundle') |
220738a53d05
perf-unbundle: pre-indent the main block in per::unbundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49475
diff
changeset
|
2791 # silence the transaction |
220738a53d05
perf-unbundle: pre-indent the main block in per::unbundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49475
diff
changeset
|
2792 bundle[1]._report = noop_report |
220738a53d05
perf-unbundle: pre-indent the main block in per::unbundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49475
diff
changeset
|
2793 |
220738a53d05
perf-unbundle: pre-indent the main block in per::unbundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49475
diff
changeset
|
2794 def apply(): |
220738a53d05
perf-unbundle: pre-indent the main block in per::unbundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49475
diff
changeset
|
2795 gen, tr = bundle |
220738a53d05
perf-unbundle: pre-indent the main block in per::unbundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49475
diff
changeset
|
2796 bundle2.applybundle( |
220738a53d05
perf-unbundle: pre-indent the main block in per::unbundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49475
diff
changeset
|
2797 repo, |
220738a53d05
perf-unbundle: pre-indent the main block in per::unbundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49475
diff
changeset
|
2798 gen, |
220738a53d05
perf-unbundle: pre-indent the main block in per::unbundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49475
diff
changeset
|
2799 tr, |
220738a53d05
perf-unbundle: pre-indent the main block in per::unbundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49475
diff
changeset
|
2800 source=b'perf::unbundle', |
220738a53d05
perf-unbundle: pre-indent the main block in per::unbundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49475
diff
changeset
|
2801 url=fname, |
220738a53d05
perf-unbundle: pre-indent the main block in per::unbundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49475
diff
changeset
|
2802 ) |
220738a53d05
perf-unbundle: pre-indent the main block in per::unbundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49475
diff
changeset
|
2803 |
220738a53d05
perf-unbundle: pre-indent the main block in per::unbundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49475
diff
changeset
|
2804 timer, fm = gettimer(ui, opts) |
220738a53d05
perf-unbundle: pre-indent the main block in per::unbundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49475
diff
changeset
|
2805 timer(apply, setup=setup) |
220738a53d05
perf-unbundle: pre-indent the main block in per::unbundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49475
diff
changeset
|
2806 fm.end() |
220738a53d05
perf-unbundle: pre-indent the main block in per::unbundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49475
diff
changeset
|
2807 finally: |
220738a53d05
perf-unbundle: pre-indent the main block in per::unbundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49475
diff
changeset
|
2808 repo.ui.quiet == orig_quiet |
220738a53d05
perf-unbundle: pre-indent the main block in per::unbundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49475
diff
changeset
|
2809 gen, tr = bundle |
220738a53d05
perf-unbundle: pre-indent the main block in per::unbundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49475
diff
changeset
|
2810 if tr is not None: |
220738a53d05
perf-unbundle: pre-indent the main block in per::unbundle
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49475
diff
changeset
|
2811 tr.abort() |
49562
27bff60887fe
perf-unbundle: do a quick and dirty fix to make it run on more commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49561
diff
changeset
|
2812 finally: |
27bff60887fe
perf-unbundle: do a quick and dirty fix to make it run on more commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49561
diff
changeset
|
2813 if old_max_inline is not None: |
27bff60887fe
perf-unbundle: do a quick and dirty fix to make it run on more commit
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49561
diff
changeset
|
2814 mercurial.revlog._maxinline = old_max_inline |
49414
3c5d0f879404
perf-unbundle: add a perf command to time the unbundle operation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49413
diff
changeset
|
2815 |
3c5d0f879404
perf-unbundle: add a perf command to time the unbundle operation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49413
diff
changeset
|
2816 |
3c5d0f879404
perf-unbundle: add a perf command to time the unbundle operation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49413
diff
changeset
|
2817 @command( |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
2818 b'perf::unidiff|perfunidiff', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2819 revlogopts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2820 + formatteropts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2821 + [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2822 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2823 b'', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2824 b'count', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2825 1, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2826 b'number of revisions to test (when using --startrev)', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2827 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2828 (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
|
2829 ], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2830 b'-c|-m|FILE REV', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2831 ) |
35861
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2832 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
|
2833 """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
|
2834 |
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2835 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
|
2836 of the texts. |
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2837 |
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2838 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
|
2839 |
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2840 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
|
2841 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
|
2842 |
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2843 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
|
2844 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
|
2845 and filelogs). |
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2846 """ |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
2847 opts = _byteskwargs(opts) |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2848 if opts[b'alldata']: |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2849 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
|
2850 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2851 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
|
2852 file_, rev = None, file_ |
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2853 elif rev is None: |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2854 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
|
2855 |
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2856 textpairs = [] |
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2857 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2858 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
|
2859 |
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2860 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
|
2861 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
|
2862 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
|
2863 # 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
|
2864 ctx = repo[rev] |
39319
862d23bc5749
perf: add function for obtaining manifest revision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39318
diff
changeset
|
2865 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
|
2866 for pctx in ctx.parents(): |
39319
862d23bc5749
perf: add function for obtaining manifest revision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39318
diff
changeset
|
2867 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
|
2868 textpairs.append((pman, mtext)) |
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2869 |
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2870 # 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
|
2871 man = ctx.manifest() |
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2872 pman = ctx.p1().manifest() |
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2873 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
|
2874 fctx = repo.file(filename) |
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2875 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
|
2876 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
|
2877 textpairs.append((f1, f2)) |
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2878 else: |
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2879 dp = r.deltaparent(rev) |
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2880 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
|
2881 |
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2882 def d(): |
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2883 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
|
2884 # 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
|
2885 headerlines, hunks = mdiff.unidiff( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2886 left, b'', right, b'', b'left', b'right', binary=False |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2887 ) |
35861
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2888 # 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
|
2889 b'\n'.join(headerlines) |
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2890 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
|
2891 |
35861
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2892 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
|
2893 timer(d) |
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2894 fm.end() |
ed939545edd0
perf: add a perfunidiff command for benchmarking unified diff speed
Augie Fackler <augie@google.com>
parents:
35602
diff
changeset
|
2895 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2896 |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
2897 @command(b'perf::diffwd|perfdiffwd', formatteropts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
2898 def perfdiffwd(ui, repo, **opts): |
9826
d768614578dd
contrib/perf: profile diff of working directory changes
Patrick Mezard <pmezard@gmail.com>
parents:
9146
diff
changeset
|
2899 """Profile diff of working directory changes""" |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
2900 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
2901 timer, fm = gettimer(ui, opts) |
9826
d768614578dd
contrib/perf: profile diff of working directory changes
Patrick Mezard <pmezard@gmail.com>
parents:
9146
diff
changeset
|
2902 options = { |
40214
b456b2e0ad9f
py3: make test-contrib-perf.t work on python 3
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
40145
diff
changeset
|
2903 '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
|
2904 '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
|
2905 'B': 'ignore_blank_lines', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2906 } |
9826
d768614578dd
contrib/perf: profile diff of working directory changes
Patrick Mezard <pmezard@gmail.com>
parents:
9146
diff
changeset
|
2907 |
40214
b456b2e0ad9f
py3: make test-contrib-perf.t work on python 3
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
40145
diff
changeset
|
2908 for diffopt in ('', 'w', 'b', 'B', 'wB'): |
44452
9d2b2df2c2ba
cleanup: run pyupgrade on our source tree to clean up varying things
Augie Fackler <augie@google.com>
parents:
44260
diff
changeset
|
2909 opts = {options[c]: b'1' for c in diffopt} |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2910 |
9826
d768614578dd
contrib/perf: profile diff of working directory changes
Patrick Mezard <pmezard@gmail.com>
parents:
9146
diff
changeset
|
2911 def d(): |
d768614578dd
contrib/perf: profile diff of working directory changes
Patrick Mezard <pmezard@gmail.com>
parents:
9146
diff
changeset
|
2912 ui.pushbuffer() |
d768614578dd
contrib/perf: profile diff of working directory changes
Patrick Mezard <pmezard@gmail.com>
parents:
9146
diff
changeset
|
2913 commands.diff(ui, repo, **opts) |
d768614578dd
contrib/perf: profile diff of working directory changes
Patrick Mezard <pmezard@gmail.com>
parents:
9146
diff
changeset
|
2914 ui.popbuffer() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2915 |
40214
b456b2e0ad9f
py3: make test-contrib-perf.t work on python 3
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
40145
diff
changeset
|
2916 diffopt = diffopt.encode('ascii') |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2917 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
|
2918 timer(d, title=title) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
2919 fm.end() |
9826
d768614578dd
contrib/perf: profile diff of working directory changes
Patrick Mezard <pmezard@gmail.com>
parents:
9146
diff
changeset
|
2920 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2921 |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
2922 @command( |
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
2923 b'perf::revlogindex|perfrevlogindex', |
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
2924 revlogopts + formatteropts, |
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
2925 b'-c|-m|FILE', |
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
2926 ) |
32532
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2927 def perfrevlogindex(ui, repo, file_=None, **opts): |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2928 """Benchmark operations against a revlog index. |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2929 |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2930 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
|
2931 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
|
2932 index data. |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2933 """ |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2934 |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
2935 opts = _byteskwargs(opts) |
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
2936 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2937 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
|
2938 |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2939 opener = getattr(rl, 'opener') # trick linter |
47148
a07d5cb03a85
revlog: rename `indexfile` to `_indexfile`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47072
diff
changeset
|
2940 # compat with hg <= 5.8 |
47150
8d3c2f9d4af7
revlog: use a "radix" to address revlog
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47149
diff
changeset
|
2941 radix = getattr(rl, 'radix', None) |
47148
a07d5cb03a85
revlog: rename `indexfile` to `_indexfile`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47072
diff
changeset
|
2942 indexfile = getattr(rl, '_indexfile', None) |
a07d5cb03a85
revlog: rename `indexfile` to `_indexfile`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47072
diff
changeset
|
2943 if indexfile is None: |
a07d5cb03a85
revlog: rename `indexfile` to `_indexfile`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47072
diff
changeset
|
2944 # compatibility with <= hg-5.8 |
a07d5cb03a85
revlog: rename `indexfile` to `_indexfile`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47072
diff
changeset
|
2945 indexfile = getattr(rl, 'indexfile') |
32532
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2946 data = opener.read(indexfile) |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2947 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
2948 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
|
2949 version = header & 0xFFFF |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2950 if version == 1: |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2951 inline = header & (1 << 16) |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2952 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
2953 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
|
2954 |
47072
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47036
diff
changeset
|
2955 parse_index_v1 = getattr(mercurial.revlog, 'parse_index_v1', None) |
47036
5e64c93d5f94
revlog: remove the revlogio class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46974
diff
changeset
|
2956 if parse_index_v1 is None: |
47072
4c041c71ec01
revlog: introduce an explicit tracking of what the revlog is about
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47036
diff
changeset
|
2957 parse_index_v1 = mercurial.revlog.revlogio().parseindex |
47036
5e64c93d5f94
revlog: remove the revlogio class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46974
diff
changeset
|
2958 |
32532
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2959 rllen = len(rl) |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2960 |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2961 node0 = rl.node(0) |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2962 node25 = rl.node(rllen // 4) |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2963 node50 = rl.node(rllen // 2) |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2964 node75 = rl.node(rllen // 4 * 3) |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2965 node100 = rl.node(rllen - 1) |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2966 |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2967 allrevs = range(rllen) |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2968 allrevsrev = list(reversed(allrevs)) |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2969 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
|
2970 allnodesrev = list(reversed(allnodes)) |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2971 |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2972 def constructor(): |
47150
8d3c2f9d4af7
revlog: use a "radix" to address revlog
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47149
diff
changeset
|
2973 if radix is not None: |
8d3c2f9d4af7
revlog: use a "radix" to address revlog
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47149
diff
changeset
|
2974 revlog(opener, radix=radix) |
8d3c2f9d4af7
revlog: use a "radix" to address revlog
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47149
diff
changeset
|
2975 else: |
8d3c2f9d4af7
revlog: use a "radix" to address revlog
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47149
diff
changeset
|
2976 # hg <= 5.8 |
8d3c2f9d4af7
revlog: use a "radix" to address revlog
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47149
diff
changeset
|
2977 revlog(opener, indexfile=indexfile) |
32532
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2978 |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2979 def read(): |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2980 with opener(indexfile) as fh: |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2981 fh.read() |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2982 |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2983 def parseindex(): |
47036
5e64c93d5f94
revlog: remove the revlogio class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46974
diff
changeset
|
2984 parse_index_v1(data, inline) |
32532
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2985 |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2986 def getentry(revornode): |
47036
5e64c93d5f94
revlog: remove the revlogio class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46974
diff
changeset
|
2987 index = parse_index_v1(data, inline)[0] |
32532
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2988 index[revornode] |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2989 |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2990 def getentries(revs, count=1): |
47036
5e64c93d5f94
revlog: remove the revlogio class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46974
diff
changeset
|
2991 index = parse_index_v1(data, inline)[0] |
32532
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2992 |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2993 for i in range(count): |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2994 for rev in revs: |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2995 index[rev] |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2996 |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
2997 def resolvenode(node): |
47036
5e64c93d5f94
revlog: remove the revlogio class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46974
diff
changeset
|
2998 index = parse_index_v1(data, inline)[0] |
43572
c314177eb9bb
perf: make `perfrevlogindex` use the new `index.rev` api if available
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43571
diff
changeset
|
2999 rev = getattr(index, 'rev', None) |
c314177eb9bb
perf: make `perfrevlogindex` use the new `index.rev` api if available
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43571
diff
changeset
|
3000 if rev is None: |
47036
5e64c93d5f94
revlog: remove the revlogio class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46974
diff
changeset
|
3001 nodemap = getattr(parse_index_v1(data, inline)[0], 'nodemap', None) |
43572
c314177eb9bb
perf: make `perfrevlogindex` use the new `index.rev` api if available
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43571
diff
changeset
|
3002 # This only works for the C code. |
c314177eb9bb
perf: make `perfrevlogindex` use the new `index.rev` api if available
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43571
diff
changeset
|
3003 if nodemap is None: |
c314177eb9bb
perf: make `perfrevlogindex` use the new `index.rev` api if available
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43571
diff
changeset
|
3004 return |
c314177eb9bb
perf: make `perfrevlogindex` use the new `index.rev` api if available
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43571
diff
changeset
|
3005 rev = nodemap.__getitem__ |
32532
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
3006 |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
3007 try: |
43572
c314177eb9bb
perf: make `perfrevlogindex` use the new `index.rev` api if available
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43571
diff
changeset
|
3008 rev(node) |
32532
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
3009 except error.RevlogError: |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
3010 pass |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
3011 |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
3012 def resolvenodes(nodes, count=1): |
47036
5e64c93d5f94
revlog: remove the revlogio class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46974
diff
changeset
|
3013 index = parse_index_v1(data, inline)[0] |
43572
c314177eb9bb
perf: make `perfrevlogindex` use the new `index.rev` api if available
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43571
diff
changeset
|
3014 rev = getattr(index, 'rev', None) |
c314177eb9bb
perf: make `perfrevlogindex` use the new `index.rev` api if available
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43571
diff
changeset
|
3015 if rev is None: |
47036
5e64c93d5f94
revlog: remove the revlogio class
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46974
diff
changeset
|
3016 nodemap = getattr(parse_index_v1(data, inline)[0], 'nodemap', None) |
43572
c314177eb9bb
perf: make `perfrevlogindex` use the new `index.rev` api if available
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43571
diff
changeset
|
3017 # This only works for the C code. |
c314177eb9bb
perf: make `perfrevlogindex` use the new `index.rev` api if available
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43571
diff
changeset
|
3018 if nodemap is None: |
c314177eb9bb
perf: make `perfrevlogindex` use the new `index.rev` api if available
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43571
diff
changeset
|
3019 return |
c314177eb9bb
perf: make `perfrevlogindex` use the new `index.rev` api if available
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43571
diff
changeset
|
3020 rev = nodemap.__getitem__ |
32532
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
3021 |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
3022 for i in range(count): |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
3023 for node in nodes: |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
3024 try: |
43572
c314177eb9bb
perf: make `perfrevlogindex` use the new `index.rev` api if available
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
43571
diff
changeset
|
3025 rev(node) |
32532
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
3026 except error.RevlogError: |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
3027 pass |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
3028 |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
3029 benches = [ |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3030 (constructor, b'revlog constructor'), |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3031 (read, b'read'), |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3032 (parseindex, b'create index object'), |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3033 (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
|
3034 (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
|
3035 (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
|
3036 (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
|
3037 (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
|
3038 (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
|
3039 (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
|
3040 # 2x variation is to measure caching impact. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3041 (lambda: resolvenodes(allnodes), b'look up all nodes (forward)'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3042 (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
|
3043 (lambda: resolvenodes(allnodesrev), b'look up all nodes (reverse)'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3044 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3045 lambda: resolvenodes(allnodesrev, 2), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3046 b'look up all nodes 2x (reverse)', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3047 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3048 (lambda: getentries(allrevs), b'retrieve all index entries (forward)'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3049 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3050 lambda: getentries(allrevs, 2), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3051 b'retrieve all index entries 2x (forward)', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3052 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3053 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3054 lambda: getentries(allrevsrev), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3055 b'retrieve all index entries (reverse)', |
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 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3058 lambda: getentries(allrevsrev, 2), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3059 b'retrieve all index entries 2x (reverse)', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3060 ), |
32532
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
3061 ] |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
3062 |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
3063 for fn, title in benches: |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
3064 timer, fm = gettimer(ui, opts) |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
3065 timer(fn, title=title) |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
3066 fm.end() |
e4f514627514
perf: benchmark command for revlog indexes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32531
diff
changeset
|
3067 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3068 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3069 @command( |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
3070 b'perf::revlogrevisions|perfrevlogrevisions', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3071 revlogopts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3072 + formatteropts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3073 + [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3074 (b'd', b'dist', 100, b'distance between the revisions'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3075 (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
|
3076 (b'', b'reverse', False, b'read in reverse'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3077 ], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3078 b'-c|-m|FILE', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3079 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3080 def perfrevlogrevisions( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3081 ui, repo, file_=None, startrev=0, reverse=False, **opts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3082 ): |
27492
ac549d7fbc2b
perf: use standard arguments for perfrevlog
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27472
diff
changeset
|
3083 """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
|
3084 |
ac549d7fbc2b
perf: use standard arguments for perfrevlog
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27472
diff
changeset
|
3085 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
|
3086 the specified revlog. |
27493
14b0930105da
perf: make start revision configurable for perfrevlog
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27492
diff
changeset
|
3087 |
14b0930105da
perf: make start revision configurable for perfrevlog
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27492
diff
changeset
|
3088 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
|
3089 """ |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
3090 opts = _byteskwargs(opts) |
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
3091 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3092 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
|
3093 rllen = getlen(ui)(rl) |
30017
973cf6c3de30
perf: add --reverse to perfrevlog
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29567
diff
changeset
|
3094 |
40143
d5d28d360a19
pref: support negative indexing in perfrevlogrevisions
Boris Feld <boris.feld@octobus.net>
parents:
40142
diff
changeset
|
3095 if startrev < 0: |
d5d28d360a19
pref: support negative indexing in perfrevlogrevisions
Boris Feld <boris.feld@octobus.net>
parents:
40142
diff
changeset
|
3096 startrev = rllen + startrev |
d5d28d360a19
pref: support negative indexing in perfrevlogrevisions
Boris Feld <boris.feld@octobus.net>
parents:
40142
diff
changeset
|
3097 |
11694
bf49d48e4602
perf: add perfrevlog function to check performance of revlog
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
10493
diff
changeset
|
3098 def d(): |
32232
4c6b2076d292
perf: move revlog construction and length calculation out of benchmark
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32231
diff
changeset
|
3099 rl.clearcaches() |
30017
973cf6c3de30
perf: add --reverse to perfrevlog
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29567
diff
changeset
|
3100 |
32224
6b582f9b6e5e
perf: don't clobber startrev variable
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32202
diff
changeset
|
3101 beginrev = startrev |
32232
4c6b2076d292
perf: move revlog construction and length calculation out of benchmark
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32231
diff
changeset
|
3102 endrev = rllen |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3103 dist = opts[b'dist'] |
30017
973cf6c3de30
perf: add --reverse to perfrevlog
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29567
diff
changeset
|
3104 |
973cf6c3de30
perf: add --reverse to perfrevlog
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29567
diff
changeset
|
3105 if reverse: |
40537
cbd251d479bb
perf: fix perfrevlogrevisions --reverse
Boris Feld <boris.feld@octobus.net>
parents:
40531
diff
changeset
|
3106 beginrev, endrev = endrev - 1, beginrev - 1 |
30017
973cf6c3de30
perf: add --reverse to perfrevlog
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29567
diff
changeset
|
3107 dist = -1 * dist |
973cf6c3de30
perf: add --reverse to perfrevlog
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29567
diff
changeset
|
3108 |
39822
86dbeb7c9a11
py3: switch contrib/perf from xrange to pycompat.xrange
Matt Harbison <matt_harbison@yahoo.com>
parents:
39821
diff
changeset
|
3109 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
|
3110 # 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
|
3111 n = rl.node(x) |
d7efaf6275a7
perf: always pass node to revlog.revision()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32232
diff
changeset
|
3112 rl.revision(n) |
11694
bf49d48e4602
perf: add perfrevlog function to check performance of revlog
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
10493
diff
changeset
|
3113 |
32225
c68c400d0a2d
perf: move gettimer() call
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32224
diff
changeset
|
3114 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
|
3115 timer(d) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
3116 fm.end() |
11694
bf49d48e4602
perf: add perfrevlog function to check performance of revlog
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
10493
diff
changeset
|
3117 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3118 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3119 @command( |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
3120 b'perf::revlogwrite|perfrevlogwrite', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3121 revlogopts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3122 + formatteropts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3123 + [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3124 (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
|
3125 (b'', b'stoprev', -1, b'last revision to write'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3126 (b'', b'count', 3, b'number of passes to perform'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3127 (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
|
3128 (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
|
3129 (b'', b'lazydeltabase', True, b'try the provided delta first'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3130 (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
|
3131 ], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3132 b'-c|-m|FILE', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3133 ) |
40550
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3134 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
|
3135 """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
|
3136 |
631011ff6771
perf: add the notion of "source" to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40552
diff
changeset
|
3137 Possible source values are: |
631011ff6771
perf: add the notion of "source" to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40552
diff
changeset
|
3138 * `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
|
3139 * `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
|
3140 * `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
|
3141 (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
|
3142 * `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
|
3143 * `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
|
3144 |
74e2f4b609f6
perf: clarify some of the custom behavior of `perfrevlogwrite`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42460
diff
changeset
|
3145 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
|
3146 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
|
3147 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
|
3148 |
74e2f4b609f6
perf: clarify some of the custom behavior of `perfrevlogwrite`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42460
diff
changeset
|
3149 * ``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
|
3150 |
74e2f4b609f6
perf: clarify some of the custom behavior of `perfrevlogwrite`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42460
diff
changeset
|
3151 * ``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
|
3152 |
74e2f4b609f6
perf: clarify some of the custom behavior of `perfrevlogwrite`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42460
diff
changeset
|
3153 * ``run-limits``: disabled use --count instead |
40550
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3154 """ |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3155 opts = _byteskwargs(opts) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3156 |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3157 rl = cmdutil.openrevlog(repo, b'perfrevlogwrite', file_, opts) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3158 rllen = getlen(ui)(rl) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3159 if startrev < 0: |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3160 startrev = rllen + startrev |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3161 if stoprev < 0: |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3162 stoprev = rllen + stoprev |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3163 |
40558
4756a33d0d31
perf: add a lazydeltabase option to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40557
diff
changeset
|
3164 lazydeltabase = opts['lazydeltabase'] |
40553
631011ff6771
perf: add the notion of "source" to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40552
diff
changeset
|
3165 source = opts['source'] |
41002
e88ced97151d
perfrevlogwrite: fix a typo in the option name
Boris Feld <boris.feld@octobus.net>
parents:
40977
diff
changeset
|
3166 clearcaches = opts['clear_caches'] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3167 validsource = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3168 b'full', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3169 b'parent-1', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3170 b'parent-2', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3171 b'parent-smallest', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3172 b'storage', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3173 ) |
40553
631011ff6771
perf: add the notion of "source" to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40552
diff
changeset
|
3174 if source not in validsource: |
631011ff6771
perf: add the notion of "source" to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40552
diff
changeset
|
3175 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
|
3176 |
40550
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3177 ### actually gather results |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3178 count = opts['count'] |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3179 if count <= 0: |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3180 raise error.Abort('invalide run count: %d' % count) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3181 allresults = [] |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3182 for c in range(count): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3183 timing = _timeonewrite( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3184 ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3185 rl, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3186 source, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3187 startrev, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3188 stoprev, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3189 c + 1, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3190 lazydeltabase=lazydeltabase, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3191 clearcaches=clearcaches, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3192 ) |
40553
631011ff6771
perf: add the notion of "source" to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40552
diff
changeset
|
3193 allresults.append(timing) |
40550
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3194 |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3195 ### consolidate the results in a single list |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3196 results = [] |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3197 for idx, (rev, t) in enumerate(allresults[0]): |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3198 ts = [t] |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3199 for other in allresults[1:]: |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3200 orev, ot = other[idx] |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3201 assert orev == rev |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3202 ts.append(ot) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3203 results.append((rev, ts)) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3204 resultcount = len(results) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3205 |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3206 ### Compute and display relevant statistics |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3207 |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3208 # get a formatter |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3209 fm = ui.formatter(b'perf', opts) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3210 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
|
3211 |
40551
4dd7edeb3da9
perf: offer full details in perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40550
diff
changeset
|
3212 # print individual details if requested |
4dd7edeb3da9
perf: offer full details in perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40550
diff
changeset
|
3213 if opts['details']: |
4dd7edeb3da9
perf: offer full details in perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40550
diff
changeset
|
3214 for idx, item in enumerate(results, 1): |
4dd7edeb3da9
perf: offer full details in perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40550
diff
changeset
|
3215 rev, data = item |
4dd7edeb3da9
perf: offer full details in perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40550
diff
changeset
|
3216 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
|
3217 formatone(fm, data, title=title, displayall=displayall) |
4dd7edeb3da9
perf: offer full details in perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40550
diff
changeset
|
3218 |
40550
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3219 # sorts results by median time |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3220 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
|
3221 # list of (name, index) to display) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3222 relevants = [ |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3223 ("min", 0), |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3224 ("10%", resultcount * 10 // 100), |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3225 ("25%", resultcount * 25 // 100), |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3226 ("50%", resultcount * 70 // 100), |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3227 ("75%", resultcount * 75 // 100), |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3228 ("90%", resultcount * 90 // 100), |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3229 ("95%", resultcount * 95 // 100), |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3230 ("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
|
3231 ("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
|
3232 ("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
|
3233 ("99.999%", resultcount * 99999 // 100000), |
40550
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3234 ("max", -1), |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3235 ] |
40552
c63081cd3902
perf: only display the total time for perfrevlogwrite if quiet
Boris Feld <boris.feld@octobus.net>
parents:
40551
diff
changeset
|
3236 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
|
3237 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
|
3238 data = results[idx] |
c63081cd3902
perf: only display the total time for perfrevlogwrite if quiet
Boris Feld <boris.feld@octobus.net>
parents:
40551
diff
changeset
|
3239 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
|
3240 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
|
3241 |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3242 # 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
|
3243 # for now |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3244 totaltime = [] |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3245 for item in allresults: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3246 totaltime.append( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3247 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3248 sum(x[1][0] for x in item), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3249 sum(x[1][1] for x in item), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3250 sum(x[1][2] for x in item), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3251 ) |
40550
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3252 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3253 formatone( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3254 fm, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3255 totaltime, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3256 title="total time (%d revs)" % resultcount, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3257 displayall=displayall, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3258 ) |
40550
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3259 fm.end() |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3260 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3261 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
3262 class _faketr: |
40550
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3263 def add(s, x, y, z=None): |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3264 return None |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3265 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3266 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3267 def _timeonewrite( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3268 ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3269 orig, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3270 source, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3271 startrev, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3272 stoprev, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3273 runidx=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3274 lazydeltabase=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3275 clearcaches=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3276 ): |
40550
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3277 timings = [] |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3278 tr = _faketr() |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3279 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
|
3280 dest._lazydeltabase = lazydeltabase |
40550
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3281 revs = list(orig.revs(startrev, stoprev)) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3282 total = len(revs) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3283 topic = 'adding' |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3284 if runidx is not None: |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3285 topic += ' (run #%d)' % runidx |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3286 # 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
|
3287 if util.safehasattr(ui, 'makeprogress'): |
f36fd52dae8f
perfrevlogwrite: use progress helper on modern hg
Martin von Zweigbergk <martinvonz@google.com>
parents:
41002
diff
changeset
|
3288 progress = ui.makeprogress(topic, unit='revs', total=total) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3289 |
41156
f36fd52dae8f
perfrevlogwrite: use progress helper on modern hg
Martin von Zweigbergk <martinvonz@google.com>
parents:
41002
diff
changeset
|
3290 def updateprogress(pos): |
f36fd52dae8f
perfrevlogwrite: use progress helper on modern hg
Martin von Zweigbergk <martinvonz@google.com>
parents:
41002
diff
changeset
|
3291 progress.update(pos) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3292 |
41156
f36fd52dae8f
perfrevlogwrite: use progress helper on modern hg
Martin von Zweigbergk <martinvonz@google.com>
parents:
41002
diff
changeset
|
3293 def completeprogress(): |
f36fd52dae8f
perfrevlogwrite: use progress helper on modern hg
Martin von Zweigbergk <martinvonz@google.com>
parents:
41002
diff
changeset
|
3294 progress.complete() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3295 |
41156
f36fd52dae8f
perfrevlogwrite: use progress helper on modern hg
Martin von Zweigbergk <martinvonz@google.com>
parents:
41002
diff
changeset
|
3296 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3297 |
41156
f36fd52dae8f
perfrevlogwrite: use progress helper on modern hg
Martin von Zweigbergk <martinvonz@google.com>
parents:
41002
diff
changeset
|
3298 def updateprogress(pos): |
f36fd52dae8f
perfrevlogwrite: use progress helper on modern hg
Martin von Zweigbergk <martinvonz@google.com>
parents:
41002
diff
changeset
|
3299 ui.progress(topic, pos, unit='revs', total=total) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3300 |
41156
f36fd52dae8f
perfrevlogwrite: use progress helper on modern hg
Martin von Zweigbergk <martinvonz@google.com>
parents:
41002
diff
changeset
|
3301 def completeprogress(): |
f36fd52dae8f
perfrevlogwrite: use progress helper on modern hg
Martin von Zweigbergk <martinvonz@google.com>
parents:
41002
diff
changeset
|
3302 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
|
3303 |
40550
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3304 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
|
3305 updateprogress(idx) |
40553
631011ff6771
perf: add the notion of "source" to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40552
diff
changeset
|
3306 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
|
3307 if clearcaches: |
21a9cace4bbf
perfrevflogwrite: clear revlog cache between each write
Boris Feld <boris.feld@octobus.net>
parents:
40956
diff
changeset
|
3308 dest.index.clearcaches() |
21a9cace4bbf
perfrevflogwrite: clear revlog cache between each write
Boris Feld <boris.feld@octobus.net>
parents:
40956
diff
changeset
|
3309 dest.clearcaches() |
40550
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3310 with timeone() as r: |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3311 dest.addrawrevision(*addargs, **addkwargs) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3312 timings.append((rev, r[0])) |
41156
f36fd52dae8f
perfrevlogwrite: use progress helper on modern hg
Martin von Zweigbergk <martinvonz@google.com>
parents:
41002
diff
changeset
|
3313 updateprogress(total) |
f36fd52dae8f
perfrevlogwrite: use progress helper on modern hg
Martin von Zweigbergk <martinvonz@google.com>
parents:
41002
diff
changeset
|
3314 completeprogress() |
40550
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3315 return timings |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3316 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3317 |
40553
631011ff6771
perf: add the notion of "source" to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40552
diff
changeset
|
3318 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
|
3319 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
|
3320 |
40550
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3321 linkrev = orig.linkrev(rev) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3322 node = orig.node(rev) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3323 p1, p2 = orig.parents(node) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3324 flags = orig.flags(rev) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3325 cachedelta = None |
40553
631011ff6771
perf: add the notion of "source" to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40552
diff
changeset
|
3326 text = None |
631011ff6771
perf: add the notion of "source" to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40552
diff
changeset
|
3327 |
631011ff6771
perf: add the notion of "source" to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40552
diff
changeset
|
3328 if source == b'full': |
631011ff6771
perf: add the notion of "source" to perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40552
diff
changeset
|
3329 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
|
3330 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
|
3331 baserev = orig.rev(p1) |
6c2357029364
perf: add `parent-1` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40553
diff
changeset
|
3332 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
|
3333 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
|
3334 parent = p2 |
b5b3dd4e40c3
perf: add `parent-2` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40554
diff
changeset
|
3335 if p2 == nullid: |
b5b3dd4e40c3
perf: add `parent-2` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40554
diff
changeset
|
3336 parent = p1 |
b5b3dd4e40c3
perf: add `parent-2` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40554
diff
changeset
|
3337 baserev = orig.rev(parent) |
b5b3dd4e40c3
perf: add `parent-2` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40554
diff
changeset
|
3338 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
|
3339 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
|
3340 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
|
3341 parent = p1 |
e14d44772fb3
perf: add `parent-smallest` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40555
diff
changeset
|
3342 diff = p1diff |
e14d44772fb3
perf: add `parent-smallest` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40555
diff
changeset
|
3343 if p2 != nullid: |
e14d44772fb3
perf: add `parent-smallest` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40555
diff
changeset
|
3344 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
|
3345 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
|
3346 parent = p2 |
e14d44772fb3
perf: add `parent-smallest` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40555
diff
changeset
|
3347 diff = p2diff |
e14d44772fb3
perf: add `parent-smallest` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40555
diff
changeset
|
3348 baserev = orig.rev(parent) |
e14d44772fb3
perf: add `parent-smallest` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40555
diff
changeset
|
3349 cachedelta = (baserev, diff) |
40557
355ae096faef
perf: add `storage` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40556
diff
changeset
|
3350 elif source == b'storage': |
355ae096faef
perf: add `storage` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40556
diff
changeset
|
3351 baserev = orig.deltaparent(rev) |
355ae096faef
perf: add `storage` as possible source for perfrevlogwrite
Boris Feld <boris.feld@octobus.net>
parents:
40556
diff
changeset
|
3352 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
|
3353 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3354 return ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3355 (text, tr, linkrev, p1, p2), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3356 {'node': node, 'flags': flags, 'cachedelta': cachedelta}, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3357 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3358 |
40550
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3359 |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3360 @contextlib.contextmanager |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3361 def _temprevlog(ui, orig, truncaterev): |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3362 from mercurial import vfs as vfsmod |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3363 |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3364 if orig._inline: |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3365 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
|
3366 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
|
3367 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
|
3368 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
|
3369 revlogkwargs[k] = getattr(orig, k) |
40550
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3370 |
47148
a07d5cb03a85
revlog: rename `indexfile` to `_indexfile`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47072
diff
changeset
|
3371 indexfile = getattr(orig, '_indexfile', None) |
a07d5cb03a85
revlog: rename `indexfile` to `_indexfile`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47072
diff
changeset
|
3372 if indexfile is None: |
a07d5cb03a85
revlog: rename `indexfile` to `_indexfile`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47072
diff
changeset
|
3373 # compatibility with <= hg-5.8 |
a07d5cb03a85
revlog: rename `indexfile` to `_indexfile`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47072
diff
changeset
|
3374 indexfile = getattr(orig, 'indexfile') |
a07d5cb03a85
revlog: rename `indexfile` to `_indexfile`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47072
diff
changeset
|
3375 origindexpath = orig.opener.join(indexfile) |
47149
396442cd7e6a
revlog: rename `datafile` to `datafile`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47148
diff
changeset
|
3376 |
396442cd7e6a
revlog: rename `datafile` to `datafile`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47148
diff
changeset
|
3377 datafile = getattr(orig, '_datafile', getattr(orig, 'datafile')) |
396442cd7e6a
revlog: rename `datafile` to `datafile`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47148
diff
changeset
|
3378 origdatapath = orig.opener.join(datafile) |
47150
8d3c2f9d4af7
revlog: use a "radix" to address revlog
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47149
diff
changeset
|
3379 radix = b'revlog' |
8d3c2f9d4af7
revlog: use a "radix" to address revlog
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47149
diff
changeset
|
3380 indexname = b'revlog.i' |
8d3c2f9d4af7
revlog: use a "radix" to address revlog
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47149
diff
changeset
|
3381 dataname = b'revlog.d' |
40550
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3382 |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3383 tmpdir = tempfile.mkdtemp(prefix='tmp-hgperf-') |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3384 try: |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3385 # copy the data file in a temporary directory |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3386 ui.debug('copying data in %s\n' % tmpdir) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3387 destindexpath = os.path.join(tmpdir, 'revlog.i') |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3388 destdatapath = os.path.join(tmpdir, 'revlog.d') |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3389 shutil.copyfile(origindexpath, destindexpath) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3390 shutil.copyfile(origdatapath, destdatapath) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3391 |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3392 # remove the data we want to add again |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3393 ui.debug('truncating data to be rewritten\n') |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3394 with open(destindexpath, 'ab') as index: |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3395 index.seek(0) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3396 index.truncate(truncaterev * orig._io.size) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3397 with open(destdatapath, 'ab') as data: |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3398 data.seek(0) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3399 data.truncate(orig.start(truncaterev)) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3400 |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3401 # instantiate a new revlog from the temporary copy |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3402 ui.debug('truncating adding to be rewritten\n') |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3403 vfs = vfsmod.vfs(tmpdir) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3404 vfs.options = getattr(orig.opener, 'options', None) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3405 |
47150
8d3c2f9d4af7
revlog: use a "radix" to address revlog
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47149
diff
changeset
|
3406 try: |
8d3c2f9d4af7
revlog: use a "radix" to address revlog
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47149
diff
changeset
|
3407 dest = revlog(vfs, radix=radix, **revlogkwargs) |
8d3c2f9d4af7
revlog: use a "radix" to address revlog
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47149
diff
changeset
|
3408 except TypeError: |
8d3c2f9d4af7
revlog: use a "radix" to address revlog
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47149
diff
changeset
|
3409 dest = revlog( |
8d3c2f9d4af7
revlog: use a "radix" to address revlog
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47149
diff
changeset
|
3410 vfs, indexfile=indexname, datafile=dataname, **revlogkwargs |
8d3c2f9d4af7
revlog: use a "radix" to address revlog
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47149
diff
changeset
|
3411 ) |
40550
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3412 if dest._inline: |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3413 raise error.Abort('not supporting inline revlog (yet)') |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3414 # make sure internals are initialized |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3415 dest.revision(len(dest) - 1) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3416 yield dest |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3417 del dest, vfs |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3418 finally: |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3419 shutil.rmtree(tmpdir, True) |
164b2e77f9a5
perf: introduce a perfrevlogwrite command
Boris Feld <boris.feld@octobus.net>
parents:
40537
diff
changeset
|
3420 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3421 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3422 @command( |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
3423 b'perf::revlogchunks|perfrevlogchunks', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3424 revlogopts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3425 + formatteropts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3426 + [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3427 (b'e', b'engines', b'', b'compression engines to use'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3428 (b's', b'startrev', 0, b'revision to start at'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3429 ], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3430 b'-c|-m|FILE', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3431 ) |
30796
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
3432 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
|
3433 """Benchmark operations on revlog chunks. |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3434 |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3435 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
|
3436 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
|
3437 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
|
3438 |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3439 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
|
3440 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
|
3441 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
|
3442 see ``perfrevlogrevisions`` and ``perfrevlogrevision``. |
30451
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3443 """ |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
3444 opts = _byteskwargs(opts) |
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
3445 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3446 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
|
3447 |
75e93d95aae6
revlog: rename _chunkraw to _getsegmentforrevs()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32228
diff
changeset
|
3448 # _chunkraw was renamed to _getsegmentforrevs. |
75e93d95aae6
revlog: rename _chunkraw to _getsegmentforrevs()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32228
diff
changeset
|
3449 try: |
75e93d95aae6
revlog: rename _chunkraw to _getsegmentforrevs()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32228
diff
changeset
|
3450 segmentforrevs = rl._getsegmentforrevs |
75e93d95aae6
revlog: rename _chunkraw to _getsegmentforrevs()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32228
diff
changeset
|
3451 except AttributeError: |
75e93d95aae6
revlog: rename _chunkraw to _getsegmentforrevs()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32228
diff
changeset
|
3452 segmentforrevs = rl._chunkraw |
30796
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
3453 |
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
3454 # Verify engines argument. |
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
3455 if engines: |
44452
9d2b2df2c2ba
cleanup: run pyupgrade on our source tree to clean up varying things
Augie Fackler <augie@google.com>
parents:
44260
diff
changeset
|
3456 engines = {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
|
3457 for engine in engines: |
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
3458 try: |
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
3459 util.compressionengines[engine] |
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
3460 except KeyError: |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3461 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
|
3462 else: |
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
3463 engines = [] |
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
3464 for e in util.compengines: |
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
3465 engine = util.compengines[e] |
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
3466 try: |
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
3467 if engine.available(): |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3468 engine.revlogcompressor().compress(b'dummy') |
30796
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
3469 engines.append(e) |
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
3470 except NotImplementedError: |
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
3471 pass |
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
3472 |
30451
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3473 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
|
3474 |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3475 def rlfh(rl): |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3476 if rl._inline: |
47148
a07d5cb03a85
revlog: rename `indexfile` to `_indexfile`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47072
diff
changeset
|
3477 indexfile = getattr(rl, '_indexfile', None) |
a07d5cb03a85
revlog: rename `indexfile` to `_indexfile`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47072
diff
changeset
|
3478 if indexfile is None: |
a07d5cb03a85
revlog: rename `indexfile` to `_indexfile`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47072
diff
changeset
|
3479 # compatibility with <= hg-5.8 |
a07d5cb03a85
revlog: rename `indexfile` to `_indexfile`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47072
diff
changeset
|
3480 indexfile = getattr(rl, 'indexfile') |
a07d5cb03a85
revlog: rename `indexfile` to `_indexfile`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47072
diff
changeset
|
3481 return getsvfs(repo)(indexfile) |
30451
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3482 else: |
47149
396442cd7e6a
revlog: rename `datafile` to `datafile`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47148
diff
changeset
|
3483 datafile = getattr(rl, 'datafile', getattr(rl, 'datafile')) |
396442cd7e6a
revlog: rename `datafile` to `datafile`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47148
diff
changeset
|
3484 return getsvfs(repo)(datafile) |
30451
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3485 |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3486 def doread(): |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3487 rl.clearcaches() |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3488 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
|
3489 segmentforrevs(rev, rev) |
30451
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3490 |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3491 def doreadcachedfh(): |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3492 rl.clearcaches() |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3493 fh = rlfh(rl) |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3494 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
|
3495 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
|
3496 |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3497 def doreadbatch(): |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3498 rl.clearcaches() |
32228
112ba1c7d65d
perf: store reference to revlog._chunkraw in a local variable
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32225
diff
changeset
|
3499 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
|
3500 |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3501 def doreadbatchcachedfh(): |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3502 rl.clearcaches() |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3503 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
|
3504 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
|
3505 |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3506 def dochunk(): |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3507 rl.clearcaches() |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3508 fh = rlfh(rl) |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3509 for rev in revs: |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3510 rl._chunk(rev, df=fh) |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3511 |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3512 chunks = [None] |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3513 |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3514 def dochunkbatch(): |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3515 rl.clearcaches() |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3516 fh = rlfh(rl) |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3517 # 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
|
3518 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
|
3519 |
30796
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
3520 def docompress(compressor): |
30451
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3521 rl.clearcaches() |
30796
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
3522 |
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
3523 try: |
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
3524 # Swap in the requested compression engine. |
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
3525 oldcompressor = rl._compressor |
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
3526 rl._compressor = compressor |
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
3527 for chunk in chunks[0]: |
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
3528 rl.compress(chunk) |
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
3529 finally: |
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
3530 rl._compressor = oldcompressor |
30451
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3531 |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3532 benches = [ |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3533 (lambda: doread(), b'read'), |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3534 (lambda: doreadcachedfh(), b'read w/ reused fd'), |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3535 (lambda: doreadbatch(), b'read batch'), |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3536 (lambda: doreadbatchcachedfh(), b'read batch w/ reused fd'), |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3537 (lambda: dochunk(), b'chunk'), |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3538 (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
|
3539 ] |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3540 |
30796
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
3541 for engine in sorted(engines): |
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
3542 compressor = util.compengines[engine].revlogcompressor() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3543 benches.append( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3544 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3545 functools.partial(docompress, compressor), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3546 b'compress w/ %s' % engine, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3547 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3548 ) |
30796
168ef0a4eb3b
perf: support multiple compression engines in perfrevlogchunks
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30793
diff
changeset
|
3549 |
30451
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3550 for fn, title in benches: |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3551 timer, fm = gettimer(ui, opts) |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3552 timer(fn, title=title) |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3553 fm.end() |
94ca0e13d1fc
perf: add command for measuring revlog chunk operations
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30426
diff
changeset
|
3554 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3555 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3556 @command( |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
3557 b'perf::revlogrevision|perfrevlogrevision', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3558 revlogopts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3559 + formatteropts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3560 + [(b'', b'cache', False, b'use caches instead of clearing')], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3561 b'-c|-m|FILE REV', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3562 ) |
27470
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3563 def perfrevlogrevision(ui, repo, file_, rev=None, cache=None, **opts): |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3564 """Benchmark obtaining a revlog revision. |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3565 |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3566 Obtaining a revlog revision consists of roughly the following steps: |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3567 |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3568 1. Compute the delta chain |
40531
e6c8a0fd3db4
perf: measure slicing time in perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents:
40530
diff
changeset
|
3569 2. Slice the delta chain if applicable |
e6c8a0fd3db4
perf: measure slicing time in perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents:
40530
diff
changeset
|
3570 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
|
3571 4. Decompress each raw chunk |
e6c8a0fd3db4
perf: measure slicing time in perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents:
40530
diff
changeset
|
3572 5. Apply binary patches to obtain fulltext |
e6c8a0fd3db4
perf: measure slicing time in perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents:
40530
diff
changeset
|
3573 6. Verify hash of fulltext |
27470
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3574 |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3575 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
|
3576 """ |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
3577 opts = _byteskwargs(opts) |
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
3578 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3579 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
|
3580 file_, rev = None, file_ |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3581 elif rev is None: |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3582 raise error.CommandError(b'perfrevlogrevision', b'invalid arguments') |
27470
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3583 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3584 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
|
3585 |
75e93d95aae6
revlog: rename _chunkraw to _getsegmentforrevs()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32228
diff
changeset
|
3586 # _chunkraw was renamed to _getsegmentforrevs. |
75e93d95aae6
revlog: rename _chunkraw to _getsegmentforrevs()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32228
diff
changeset
|
3587 try: |
75e93d95aae6
revlog: rename _chunkraw to _getsegmentforrevs()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32228
diff
changeset
|
3588 segmentforrevs = r._getsegmentforrevs |
75e93d95aae6
revlog: rename _chunkraw to _getsegmentforrevs()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32228
diff
changeset
|
3589 except AttributeError: |
75e93d95aae6
revlog: rename _chunkraw to _getsegmentforrevs()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32228
diff
changeset
|
3590 segmentforrevs = r._chunkraw |
75e93d95aae6
revlog: rename _chunkraw to _getsegmentforrevs()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
32228
diff
changeset
|
3591 |
27470
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3592 node = r.lookup(rev) |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3593 rev = r.rev(node) |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3594 |
30882
74cfc4357c64
perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30796
diff
changeset
|
3595 def getrawchunks(data, chain): |
74cfc4357c64
perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30796
diff
changeset
|
3596 start = r.start |
74cfc4357c64
perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30796
diff
changeset
|
3597 length = r.length |
74cfc4357c64
perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30796
diff
changeset
|
3598 inline = r._inline |
46974
3c9208702db3
revlog: replace revlog._io.size with a new revlog.index.entry_size
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46973
diff
changeset
|
3599 try: |
3c9208702db3
revlog: replace revlog._io.size with a new revlog.index.entry_size
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46973
diff
changeset
|
3600 iosize = r.index.entry_size |
3c9208702db3
revlog: replace revlog._io.size with a new revlog.index.entry_size
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46973
diff
changeset
|
3601 except AttributeError: |
3c9208702db3
revlog: replace revlog._io.size with a new revlog.index.entry_size
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46973
diff
changeset
|
3602 iosize = r._io.size |
30882
74cfc4357c64
perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30796
diff
changeset
|
3603 buffer = util.buffer |
74cfc4357c64
perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30796
diff
changeset
|
3604 |
74cfc4357c64
perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30796
diff
changeset
|
3605 chunks = [] |
74cfc4357c64
perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30796
diff
changeset
|
3606 ladd = chunks.append |
40530
914079ee3334
perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents:
40529
diff
changeset
|
3607 for idx, item in enumerate(chain): |
914079ee3334
perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents:
40529
diff
changeset
|
3608 offset = start(item[0]) |
914079ee3334
perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents:
40529
diff
changeset
|
3609 bits = data[idx] |
914079ee3334
perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents:
40529
diff
changeset
|
3610 for rev in item: |
914079ee3334
perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents:
40529
diff
changeset
|
3611 chunkstart = start(rev) |
914079ee3334
perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents:
40529
diff
changeset
|
3612 if inline: |
914079ee3334
perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents:
40529
diff
changeset
|
3613 chunkstart += (rev + 1) * iosize |
914079ee3334
perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents:
40529
diff
changeset
|
3614 chunklength = length(rev) |
914079ee3334
perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents:
40529
diff
changeset
|
3615 ladd(buffer(bits, chunkstart - offset, chunklength)) |
30882
74cfc4357c64
perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30796
diff
changeset
|
3616 |
74cfc4357c64
perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30796
diff
changeset
|
3617 return chunks |
74cfc4357c64
perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30796
diff
changeset
|
3618 |
27470
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3619 def dodeltachain(rev): |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3620 if not cache: |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3621 r.clearcaches() |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3622 r._deltachain(rev) |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3623 |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3624 def doread(chain): |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3625 if not cache: |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3626 r.clearcaches() |
40530
914079ee3334
perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents:
40529
diff
changeset
|
3627 for item in slicedchain: |
914079ee3334
perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents:
40529
diff
changeset
|
3628 segmentforrevs(item[0], item[-1]) |
27470
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3629 |
40531
e6c8a0fd3db4
perf: measure slicing time in perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents:
40530
diff
changeset
|
3630 def doslice(r, chain, size): |
e6c8a0fd3db4
perf: measure slicing time in perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents:
40530
diff
changeset
|
3631 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
|
3632 pass |
e6c8a0fd3db4
perf: measure slicing time in perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents:
40530
diff
changeset
|
3633 |
30882
74cfc4357c64
perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30796
diff
changeset
|
3634 def dorawchunks(data, chain): |
27470
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3635 if not cache: |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3636 r.clearcaches() |
30882
74cfc4357c64
perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30796
diff
changeset
|
3637 getrawchunks(data, chain) |
27470
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3638 |
30882
74cfc4357c64
perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30796
diff
changeset
|
3639 def dodecompress(chunks): |
74cfc4357c64
perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30796
diff
changeset
|
3640 decomp = r.decompress |
74cfc4357c64
perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30796
diff
changeset
|
3641 for chunk in chunks: |
74cfc4357c64
perf: split obtaining chunks from decompression
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30796
diff
changeset
|
3642 decomp(chunk) |
27470
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3643 |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3644 def dopatch(text, bins): |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3645 if not cache: |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3646 r.clearcaches() |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3647 mdiff.patches(text, bins) |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3648 |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3649 def dohash(text): |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3650 if not cache: |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3651 r.clearcaches() |
30584
be5b2098a817
revlog: merge hash checking subfunctions
Remi Chaintron <remi@fb.com>
parents:
30451
diff
changeset
|
3652 r.checkhash(text, node, rev=rev) |
27470
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3653 |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3654 def dorevision(): |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3655 if not cache: |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3656 r.clearcaches() |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3657 r.revision(node) |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3658 |
40530
914079ee3334
perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents:
40529
diff
changeset
|
3659 try: |
914079ee3334
perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents:
40529
diff
changeset
|
3660 from mercurial.revlogutils.deltas import slicechunk |
914079ee3334
perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents:
40529
diff
changeset
|
3661 except ImportError: |
914079ee3334
perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents:
40529
diff
changeset
|
3662 slicechunk = getattr(revlog, '_slicechunk', None) |
914079ee3334
perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents:
40529
diff
changeset
|
3663 |
914079ee3334
perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents:
40529
diff
changeset
|
3664 size = r.length(rev) |
27470
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3665 chain = r._deltachain(rev)[0] |
40530
914079ee3334
perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents:
40529
diff
changeset
|
3666 if not getattr(r, '_withsparseread', False): |
914079ee3334
perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents:
40529
diff
changeset
|
3667 slicedchain = (chain,) |
914079ee3334
perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents:
40529
diff
changeset
|
3668 else: |
914079ee3334
perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents:
40529
diff
changeset
|
3669 slicedchain = tuple(slicechunk(r, chain, targetsize=size)) |
914079ee3334
perf: teach perfrevlogrevision about sparse reading
Boris Feld <boris.feld@octobus.net>
parents:
40529
diff
changeset
|
3670 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
|
3671 rawchunks = getrawchunks(data, slicedchain) |
27470
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3672 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
|
3673 text = bytes(bins[0]) |
27470
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3674 bins = bins[1:] |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3675 text = mdiff.patches(text, bins) |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3676 |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3677 benches = [ |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3678 (lambda: dorevision(), b'full'), |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3679 (lambda: dodeltachain(rev), b'deltachain'), |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3680 (lambda: doread(chain), b'read'), |
40531
e6c8a0fd3db4
perf: measure slicing time in perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents:
40530
diff
changeset
|
3681 ] |
e6c8a0fd3db4
perf: measure slicing time in perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents:
40530
diff
changeset
|
3682 |
e6c8a0fd3db4
perf: measure slicing time in perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents:
40530
diff
changeset
|
3683 if getattr(r, '_withsparseread', False): |
e6c8a0fd3db4
perf: measure slicing time in perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents:
40530
diff
changeset
|
3684 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
|
3685 benches.append(slicing) |
e6c8a0fd3db4
perf: measure slicing time in perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents:
40530
diff
changeset
|
3686 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3687 benches.extend( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3688 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3689 (lambda: dorawchunks(data, slicedchain), b'rawchunks'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3690 (lambda: dodecompress(rawchunks), b'decompress'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3691 (lambda: dopatch(text, bins), b'patch'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3692 (lambda: dohash(text), b'hash'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3693 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3694 ) |
27470
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3695 |
40529
cf3bef7f162b
perf: use the same timer for all section of perfrevlogrevision
Boris Feld <boris.feld@octobus.net>
parents:
40349
diff
changeset
|
3696 timer, fm = gettimer(ui, opts) |
27470
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3697 for fn, title in benches: |
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3698 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
|
3699 fm.end() |
27470
d394a1a3708a
perf: add perfrevlogrevision
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27467
diff
changeset
|
3700 |
43076
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 @command( |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
3703 b'perf::revset|perfrevset', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3704 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3705 (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
|
3706 (b'', b'contexts', False, b'obtain changectx for each revision'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3707 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3708 + formatteropts, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3709 b"REVSET", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3710 ) |
27072
e18a9ceade3b
perf: support obtaining contexts from perfrevset
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27017
diff
changeset
|
3711 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
|
3712 """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
|
3713 |
18644
3e92772d5383
spelling: fix some minor issues found by spell checker
Mads Kiilerich <mads@kiilerich.com>
parents:
18304
diff
changeset
|
3714 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
|
3715 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
|
3716 and obsolete related cache.""" |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
3717 opts = _byteskwargs(opts) |
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
3718 |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
3719 timer, fm = gettimer(ui, opts) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3720 |
18062
1471f5e83686
perf: add a command to measure revset performance
Siddharth Agarwal <sid0@fb.com>
parents:
18033
diff
changeset
|
3721 def d(): |
18239
a95f1d619bb7
perftest: add an option to invalidate volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18238
diff
changeset
|
3722 if clear: |
a95f1d619bb7
perftest: add an option to invalidate volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18238
diff
changeset
|
3723 repo.invalidatevolatilesets() |
27072
e18a9ceade3b
perf: support obtaining contexts from perfrevset
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27017
diff
changeset
|
3724 if contexts: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3725 for ctx in repo.set(expr): |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3726 pass |
27072
e18a9ceade3b
perf: support obtaining contexts from perfrevset
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27017
diff
changeset
|
3727 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3728 for r in repo.revs(expr): |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3729 pass |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3730 |
18062
1471f5e83686
perf: add a command to measure revset performance
Siddharth Agarwal <sid0@fb.com>
parents:
18033
diff
changeset
|
3731 timer(d) |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
3732 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
|
3733 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3734 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3735 @command( |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
3736 b'perf::volatilesets|perfvolatilesets', |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
3737 [ |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
3738 (b'', b'clear-obsstore', False, b'drop obsstore between each call.'), |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
3739 ] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3740 + formatteropts, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3741 ) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
3742 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
|
3743 """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
|
3744 |
a8318715d8bb
perftest: add a command to benchmark construction of volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18239
diff
changeset
|
3745 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
|
3746 opts = _byteskwargs(opts) |
25494
e8eb3ecdaa0c
perf: support -T for every perf commands
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24607
diff
changeset
|
3747 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
|
3748 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
|
3749 |
a8318715d8bb
perftest: add a command to benchmark construction of volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18239
diff
changeset
|
3750 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
|
3751 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
|
3752 repo.invalidatevolatilesets() |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3753 if opts[b'clear_obsstore']: |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3754 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
|
3755 obsolete.getrevs(repo, name) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3756 |
18240
a8318715d8bb
perftest: add a command to benchmark construction of volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18239
diff
changeset
|
3757 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
|
3758 |
18241
f5ed27c51995
perftest: allow selection of volatile set to benchmark
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18240
diff
changeset
|
3759 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
|
3760 if names: |
f5ed27c51995
perftest: allow selection of volatile set to benchmark
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18240
diff
changeset
|
3761 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
|
3762 |
f5ed27c51995
perftest: allow selection of volatile set to benchmark
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18240
diff
changeset
|
3763 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
|
3764 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
|
3765 |
a8318715d8bb
perftest: add a command to benchmark construction of volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18239
diff
changeset
|
3766 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
|
3767 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
|
3768 repo.invalidatevolatilesets() |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3769 if opts[b'clear_obsstore']: |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3770 clearfilecache(repo, b'obsstore') |
20205
d67a7758da6d
perf: fix perfvolatilesets
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
20178
diff
changeset
|
3771 repoview.filterrevs(repo, name) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3772 |
18240
a8318715d8bb
perftest: add a command to benchmark construction of volatile cache
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18239
diff
changeset
|
3773 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
|
3774 |
18241
f5ed27c51995
perftest: allow selection of volatile set to benchmark
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18240
diff
changeset
|
3775 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
|
3776 if names: |
f5ed27c51995
perftest: allow selection of volatile set to benchmark
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18240
diff
changeset
|
3777 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
|
3778 |
f5ed27c51995
perftest: allow selection of volatile set to benchmark
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18240
diff
changeset
|
3779 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
|
3780 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
|
3781 fm.end() |
18304
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3782 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3783 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3784 @command( |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
3785 b'perf::branchmap|perfbranchmap', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3786 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3787 (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
|
3788 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3789 b'', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3790 b'clear-revbranch', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3791 False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3792 b'purge the revbranch cache between computation', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3793 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3794 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3795 + formatteropts, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3796 ) |
36360
c25290b98190
perfbranchmap: allow to select the filter to benchmark
Boris Feld <boris.feld@octobus.net>
parents:
36359
diff
changeset
|
3797 def perfbranchmap(ui, repo, *filternames, **opts): |
18304
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3798 """benchmark the update of a branchmap |
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3799 |
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3800 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
|
3801 """ |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
3802 opts = _byteskwargs(opts) |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3803 full = opts.get(b"full", False) |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3804 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
|
3805 timer, fm = gettimer(ui, opts) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3806 |
18304
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3807 def getbranchmap(filtername): |
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3808 """generate a benchmark function for the filtername""" |
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3809 if filtername is None: |
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3810 view = repo |
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3811 else: |
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3812 view = repo.filtered(filtername) |
41615
328ca3b9e545
branchmap: encapsulate cache updating in the map itself
Martijn Pieters <mj@octobus.net>
parents:
41565
diff
changeset
|
3813 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
|
3814 filtered = view._branchcaches._per_filter |
328ca3b9e545
branchmap: encapsulate cache updating in the map itself
Martijn Pieters <mj@octobus.net>
parents:
41565
diff
changeset
|
3815 else: |
328ca3b9e545
branchmap: encapsulate cache updating in the map itself
Martijn Pieters <mj@octobus.net>
parents:
41565
diff
changeset
|
3816 # older versions |
328ca3b9e545
branchmap: encapsulate cache updating in the map itself
Martijn Pieters <mj@octobus.net>
parents:
41565
diff
changeset
|
3817 filtered = view._branchcaches |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3818 |
18304
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3819 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
|
3820 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
|
3821 repo.revbranchcache()._clear() |
18304
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3822 if full: |
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3823 view._branchcaches.clear() |
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3824 else: |
41615
328ca3b9e545
branchmap: encapsulate cache updating in the map itself
Martijn Pieters <mj@octobus.net>
parents:
41565
diff
changeset
|
3825 filtered.pop(filtername, None) |
18304
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3826 view.branchmap() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3827 |
18304
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3828 return d |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3829 |
18304
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3830 # 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
|
3831 possiblefilters = set(repoview.filtertable) |
36360
c25290b98190
perfbranchmap: allow to select the filter to benchmark
Boris Feld <boris.feld@octobus.net>
parents:
36359
diff
changeset
|
3832 if filternames: |
c25290b98190
perfbranchmap: allow to select the filter to benchmark
Boris Feld <boris.feld@octobus.net>
parents:
36359
diff
changeset
|
3833 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
|
3834 subsettable = getbranchmapsubsettable() |
18304
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3835 allfilters = [] |
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3836 while possiblefilters: |
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3837 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
|
3838 subset = subsettable.get(name) |
18304
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3839 if subset not in possiblefilters: |
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3840 break |
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3841 else: |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3842 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
|
3843 allfilters.append(name) |
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3844 possiblefilters.remove(name) |
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3845 |
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3846 # warm the cache |
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3847 if not full: |
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3848 for name in allfilters: |
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3849 repo.filtered(name).branchmap() |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3850 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
|
3851 # add unfiltered |
c25290b98190
perfbranchmap: allow to select the filter to benchmark
Boris Feld <boris.feld@octobus.net>
parents:
36359
diff
changeset
|
3852 allfilters.append(None) |
30145
113aa6145020
perf: avoid actual writing branch cache out correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30144
diff
changeset
|
3853 |
41565
bf7fb97aecf1
branchmap: make branchcache responsible for reading
Martijn Pieters <mj@octobus.net>
parents:
41470
diff
changeset
|
3854 if util.safehasattr(branchmap.branchcache, 'fromfile'): |
bf7fb97aecf1
branchmap: make branchcache responsible for reading
Martijn Pieters <mj@octobus.net>
parents:
41470
diff
changeset
|
3855 branchcacheread = safeattrsetter(branchmap.branchcache, b'fromfile') |
bf7fb97aecf1
branchmap: make branchcache responsible for reading
Martijn Pieters <mj@octobus.net>
parents:
41470
diff
changeset
|
3856 branchcacheread.set(classmethod(lambda *args: None)) |
bf7fb97aecf1
branchmap: make branchcache responsible for reading
Martijn Pieters <mj@octobus.net>
parents:
41470
diff
changeset
|
3857 else: |
bf7fb97aecf1
branchmap: make branchcache responsible for reading
Martijn Pieters <mj@octobus.net>
parents:
41470
diff
changeset
|
3858 # older versions |
bf7fb97aecf1
branchmap: make branchcache responsible for reading
Martijn Pieters <mj@octobus.net>
parents:
41470
diff
changeset
|
3859 branchcacheread = safeattrsetter(branchmap, b'read') |
bf7fb97aecf1
branchmap: make branchcache responsible for reading
Martijn Pieters <mj@octobus.net>
parents:
41470
diff
changeset
|
3860 branchcacheread.set(lambda *args: None) |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3861 branchcachewrite = safeattrsetter(branchmap.branchcache, b'write') |
41565
bf7fb97aecf1
branchmap: make branchcache responsible for reading
Martijn Pieters <mj@octobus.net>
parents:
41470
diff
changeset
|
3862 branchcachewrite.set(lambda *args: None) |
18304
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3863 try: |
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3864 for name in allfilters: |
36359
df3f7f00a3fc
perfbranchmap: display 'unfiltered' for unfiltered performance
Boris Feld <boris.feld@octobus.net>
parents:
36178
diff
changeset
|
3865 printname = name |
df3f7f00a3fc
perfbranchmap: display 'unfiltered' for unfiltered performance
Boris Feld <boris.feld@octobus.net>
parents:
36178
diff
changeset
|
3866 if name is None: |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
3867 printname = b'unfiltered' |
46255
cce05a6c271f
perf: don't turn byte to string when formatting perfbranchmap
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46196
diff
changeset
|
3868 timer(getbranchmap(name), title=printname) |
18304
9b6ae29d4801
perf: add perfbranchmap command
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18241
diff
changeset
|
3869 finally: |
30145
113aa6145020
perf: avoid actual writing branch cache out correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30144
diff
changeset
|
3870 branchcacheread.restore() |
113aa6145020
perf: avoid actual writing branch cache out correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
30144
diff
changeset
|
3871 branchcachewrite.restore() |
23171
8afae1d5d108
perf: use a formatter for output
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22780
diff
changeset
|
3872 fm.end() |
23485
ccb93e9affc1
perf: add a perfloadmarkers command
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23171
diff
changeset
|
3873 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3874 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3875 @command( |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
3876 b'perf::branchmapupdate|perfbranchmapupdate', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3877 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3878 (b'', b'base', [], b'subset of revision to start from'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3879 (b'', b'target', [], b'subset of revision to end with'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3880 (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
|
3881 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3882 + formatteropts, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3883 ) |
40768
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3884 def perfbranchmapupdate(ui, repo, base=(), target=(), **opts): |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3885 """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
|
3886 |
40772
5cbb74999040
perf: add a `--clear-caches` to `perfbranchmapupdate`
Boris Feld <boris.feld@octobus.net>
parents:
40771
diff
changeset
|
3887 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
|
3888 each update: |
5cbb74999040
perf: add a `--clear-caches` to `perfbranchmapupdate`
Boris Feld <boris.feld@octobus.net>
parents:
40771
diff
changeset
|
3889 * the changelog instance and associated indexes |
5cbb74999040
perf: add a `--clear-caches` to `perfbranchmapupdate`
Boris Feld <boris.feld@octobus.net>
parents:
40771
diff
changeset
|
3890 * the rev-branch-cache instance |
5cbb74999040
perf: add a `--clear-caches` to `perfbranchmapupdate`
Boris Feld <boris.feld@octobus.net>
parents:
40771
diff
changeset
|
3891 |
40768
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3892 Examples: |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3893 |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3894 # update for the one last revision |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3895 $ hg perfbranchmapupdate --base 'not tip' --target 'tip' |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3896 |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3897 $ update for change coming with a new branch |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3898 $ hg perfbranchmapupdate --base 'stable' --target 'default' |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3899 """ |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3900 from mercurial import branchmap |
40770
b059388d976c
perf: rely on repoview for perfbranchmapupdate
Boris Feld <boris.feld@octobus.net>
parents:
40769
diff
changeset
|
3901 from mercurial import repoview |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3902 |
40768
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3903 opts = _byteskwargs(opts) |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3904 timer, fm = gettimer(ui, opts) |
40772
5cbb74999040
perf: add a `--clear-caches` to `perfbranchmapupdate`
Boris Feld <boris.feld@octobus.net>
parents:
40771
diff
changeset
|
3905 clearcaches = opts[b'clear_caches'] |
40770
b059388d976c
perf: rely on repoview for perfbranchmapupdate
Boris Feld <boris.feld@octobus.net>
parents:
40769
diff
changeset
|
3906 unfi = repo.unfiltered() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3907 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
|
3908 |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3909 # 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
|
3910 baserevs = list(scmutil.revrange(repo, base)) |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3911 targetrevs = list(scmutil.revrange(repo, target)) |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3912 if not baserevs: |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3913 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
|
3914 if not targetrevs: |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3915 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
|
3916 |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3917 # 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
|
3918 targetrevs = list(set(baserevs) | set(targetrevs)) |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3919 targetrevs.sort() |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3920 |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3921 cl = repo.changelog |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3922 allbaserevs = list(cl.ancestors(baserevs, inclusive=True)) |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3923 allbaserevs.sort() |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3924 alltargetrevs = frozenset(cl.ancestors(targetrevs, inclusive=True)) |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3925 |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3926 newrevs = list(alltargetrevs.difference(allbaserevs)) |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3927 newrevs.sort() |
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3928 |
40770
b059388d976c
perf: rely on repoview for perfbranchmapupdate
Boris Feld <boris.feld@octobus.net>
parents:
40769
diff
changeset
|
3929 allrevs = frozenset(unfi.changelog.revs()) |
b059388d976c
perf: rely on repoview for perfbranchmapupdate
Boris Feld <boris.feld@octobus.net>
parents:
40769
diff
changeset
|
3930 basefilterrevs = frozenset(allrevs.difference(allbaserevs)) |
b059388d976c
perf: rely on repoview for perfbranchmapupdate
Boris Feld <boris.feld@octobus.net>
parents:
40769
diff
changeset
|
3931 targetfilterrevs = frozenset(allrevs.difference(alltargetrevs)) |
b059388d976c
perf: rely on repoview for perfbranchmapupdate
Boris Feld <boris.feld@octobus.net>
parents:
40769
diff
changeset
|
3932 |
b059388d976c
perf: rely on repoview for perfbranchmapupdate
Boris Feld <boris.feld@octobus.net>
parents:
40769
diff
changeset
|
3933 def basefilter(repo, visibilityexceptions=None): |
b059388d976c
perf: rely on repoview for perfbranchmapupdate
Boris Feld <boris.feld@octobus.net>
parents:
40769
diff
changeset
|
3934 return basefilterrevs |
b059388d976c
perf: rely on repoview for perfbranchmapupdate
Boris Feld <boris.feld@octobus.net>
parents:
40769
diff
changeset
|
3935 |
b059388d976c
perf: rely on repoview for perfbranchmapupdate
Boris Feld <boris.feld@octobus.net>
parents:
40769
diff
changeset
|
3936 def targetfilter(repo, visibilityexceptions=None): |
b059388d976c
perf: rely on repoview for perfbranchmapupdate
Boris Feld <boris.feld@octobus.net>
parents:
40769
diff
changeset
|
3937 return targetfilterrevs |
b059388d976c
perf: rely on repoview for perfbranchmapupdate
Boris Feld <boris.feld@octobus.net>
parents:
40769
diff
changeset
|
3938 |
40768
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3939 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
|
3940 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
|
3941 if targetfilterrevs: |
b059388d976c
perf: rely on repoview for perfbranchmapupdate
Boris Feld <boris.feld@octobus.net>
parents:
40769
diff
changeset
|
3942 msg = b'(%d revisions still filtered)\n' |
b059388d976c
perf: rely on repoview for perfbranchmapupdate
Boris Feld <boris.feld@octobus.net>
parents:
40769
diff
changeset
|
3943 ui.status(msg % len(targetfilterrevs)) |
40768
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3944 |
40770
b059388d976c
perf: rely on repoview for perfbranchmapupdate
Boris Feld <boris.feld@octobus.net>
parents:
40769
diff
changeset
|
3945 try: |
b059388d976c
perf: rely on repoview for perfbranchmapupdate
Boris Feld <boris.feld@octobus.net>
parents:
40769
diff
changeset
|
3946 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
|
3947 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
|
3948 |
b059388d976c
perf: rely on repoview for perfbranchmapupdate
Boris Feld <boris.feld@octobus.net>
parents:
40769
diff
changeset
|
3949 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
|
3950 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
|
3951 |
40771
58355a1de6b3
perf: start from an existing branchmap if possible
Boris Feld <boris.feld@octobus.net>
parents:
40770
diff
changeset
|
3952 # 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
|
3953 subsettable = getbranchmapsubsettable() |
58355a1de6b3
perf: start from an existing branchmap if possible
Boris Feld <boris.feld@octobus.net>
parents:
40770
diff
changeset
|
3954 candidatefilter = subsettable.get(None) |
58355a1de6b3
perf: start from an existing branchmap if possible
Boris Feld <boris.feld@octobus.net>
parents:
40770
diff
changeset
|
3955 while candidatefilter is not None: |
58355a1de6b3
perf: start from an existing branchmap if possible
Boris Feld <boris.feld@octobus.net>
parents:
40770
diff
changeset
|
3956 candidatebm = repo.filtered(candidatefilter).branchmap() |
58355a1de6b3
perf: start from an existing branchmap if possible
Boris Feld <boris.feld@octobus.net>
parents:
40770
diff
changeset
|
3957 if candidatebm.validfor(baserepo): |
58355a1de6b3
perf: start from an existing branchmap if possible
Boris Feld <boris.feld@octobus.net>
parents:
40770
diff
changeset
|
3958 filtered = repoview.filterrevs(repo, candidatefilter) |
58355a1de6b3
perf: start from an existing branchmap if possible
Boris Feld <boris.feld@octobus.net>
parents:
40770
diff
changeset
|
3959 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
|
3960 base = candidatebm.copy() |
58355a1de6b3
perf: start from an existing branchmap if possible
Boris Feld <boris.feld@octobus.net>
parents:
40770
diff
changeset
|
3961 base.update(baserepo, missing) |
58355a1de6b3
perf: start from an existing branchmap if possible
Boris Feld <boris.feld@octobus.net>
parents:
40770
diff
changeset
|
3962 break |
58355a1de6b3
perf: start from an existing branchmap if possible
Boris Feld <boris.feld@octobus.net>
parents:
40770
diff
changeset
|
3963 candidatefilter = subsettable.get(candidatefilter) |
58355a1de6b3
perf: start from an existing branchmap if possible
Boris Feld <boris.feld@octobus.net>
parents:
40770
diff
changeset
|
3964 else: |
58355a1de6b3
perf: start from an existing branchmap if possible
Boris Feld <boris.feld@octobus.net>
parents:
40770
diff
changeset
|
3965 # no suitable subset where found |
58355a1de6b3
perf: start from an existing branchmap if possible
Boris Feld <boris.feld@octobus.net>
parents:
40770
diff
changeset
|
3966 base = branchmap.branchcache() |
58355a1de6b3
perf: start from an existing branchmap if possible
Boris Feld <boris.feld@octobus.net>
parents:
40770
diff
changeset
|
3967 base.update(baserepo, allbaserevs) |
40768
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3968 |
40769
95f35c873463
perf: pre-indent some code in `perfbranchmapupdate`
Boris Feld <boris.feld@octobus.net>
parents:
40768
diff
changeset
|
3969 def setup(): |
95f35c873463
perf: pre-indent some code in `perfbranchmapupdate`
Boris Feld <boris.feld@octobus.net>
parents:
40768
diff
changeset
|
3970 x[0] = base.copy() |
40772
5cbb74999040
perf: add a `--clear-caches` to `perfbranchmapupdate`
Boris Feld <boris.feld@octobus.net>
parents:
40771
diff
changeset
|
3971 if clearcaches: |
5cbb74999040
perf: add a `--clear-caches` to `perfbranchmapupdate`
Boris Feld <boris.feld@octobus.net>
parents:
40771
diff
changeset
|
3972 unfi._revbranchcache = None |
5cbb74999040
perf: add a `--clear-caches` to `perfbranchmapupdate`
Boris Feld <boris.feld@octobus.net>
parents:
40771
diff
changeset
|
3973 clearchangelog(repo) |
40768
f723014677a5
perf: add a `perfbranchmapupdate` command
Boris Feld <boris.feld@octobus.net>
parents:
40750
diff
changeset
|
3974 |
40769
95f35c873463
perf: pre-indent some code in `perfbranchmapupdate`
Boris Feld <boris.feld@octobus.net>
parents:
40768
diff
changeset
|
3975 def bench(): |
40770
b059388d976c
perf: rely on repoview for perfbranchmapupdate
Boris Feld <boris.feld@octobus.net>
parents:
40769
diff
changeset
|
3976 x[0].update(targetrepo, newrevs) |
40769
95f35c873463
perf: pre-indent some code in `perfbranchmapupdate`
Boris Feld <boris.feld@octobus.net>
parents:
40768
diff
changeset
|
3977 |
95f35c873463
perf: pre-indent some code in `perfbranchmapupdate`
Boris Feld <boris.feld@octobus.net>
parents:
40768
diff
changeset
|
3978 timer(bench, setup=setup) |
95f35c873463
perf: pre-indent some code in `perfbranchmapupdate`
Boris Feld <boris.feld@octobus.net>
parents:
40768
diff
changeset
|
3979 fm.end() |
40770
b059388d976c
perf: rely on repoview for perfbranchmapupdate
Boris Feld <boris.feld@octobus.net>
parents:
40769
diff
changeset
|
3980 finally: |
b059388d976c
perf: rely on repoview for perfbranchmapupdate
Boris Feld <boris.feld@octobus.net>
parents:
40769
diff
changeset
|
3981 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
|
3982 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
|
3983 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3984 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3985 @command( |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
3986 b'perf::branchmapload|perfbranchmapload', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3987 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3988 (b'f', b'filter', b'', b'Specify repoview filter'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3989 (b'', b'list', False, b'List brachmap filter caches'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3990 (b'', b'clear-revlogs', False, b'refresh changelog and manifest'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3991 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3992 + formatteropts, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
3993 ) |
40699
94d76ddac40a
perf: update function name to match `perfbranchmapload` command
Boris Feld <boris.feld@octobus.net>
parents:
40698
diff
changeset
|
3994 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
|
3995 """benchmark reading the branchmap""" |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
3996 opts = _byteskwargs(opts) |
40702
4240a1da4188
perf: add --clear-revlog flag to branchmapload
Boris Feld <boris.feld@octobus.net>
parents:
40701
diff
changeset
|
3997 clearrevlogs = opts[b'clear_revlogs'] |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
3998 |
39114
222aba766015
perf: time loading branchmap caches
Martijn Pieters <mj@octobus.net>
parents:
38977
diff
changeset
|
3999 if list: |
222aba766015
perf: time loading branchmap caches
Martijn Pieters <mj@octobus.net>
parents:
38977
diff
changeset
|
4000 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
|
4001 if name.startswith(b'branch2'): |
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
4002 filtername = name.partition(b'-')[2] or b'unfiltered' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4003 ui.status( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4004 b'%s - %s\n' % (filtername, util.bytecount(st.st_size)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4005 ) |
39114
222aba766015
perf: time loading branchmap caches
Martijn Pieters <mj@octobus.net>
parents:
38977
diff
changeset
|
4006 return |
40720
0a3cc351d718
perf: fallback to subset if ondisk cache is missing in perfbranchmapload
Boris Feld <boris.feld@octobus.net>
parents:
40719
diff
changeset
|
4007 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
|
4008 filter = None |
0a3cc351d718
perf: fallback to subset if ondisk cache is missing in perfbranchmapload
Boris Feld <boris.feld@octobus.net>
parents:
40719
diff
changeset
|
4009 subsettable = getbranchmapsubsettable() |
0a3cc351d718
perf: fallback to subset if ondisk cache is missing in perfbranchmapload
Boris Feld <boris.feld@octobus.net>
parents:
40719
diff
changeset
|
4010 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
|
4011 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
|
4012 else: |
39114
222aba766015
perf: time loading branchmap caches
Martijn Pieters <mj@octobus.net>
parents:
38977
diff
changeset
|
4013 repo = repoview.repoview(repo, filter) |
40719
578646b1e2b6
perf: prewarm the branchmap in perfbranchmapload
Boris Feld <boris.feld@octobus.net>
parents:
40713
diff
changeset
|
4014 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4015 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
|
4016 |
41565
bf7fb97aecf1
branchmap: make branchcache responsible for reading
Martijn Pieters <mj@octobus.net>
parents:
41470
diff
changeset
|
4017 try: |
bf7fb97aecf1
branchmap: make branchcache responsible for reading
Martijn Pieters <mj@octobus.net>
parents:
41470
diff
changeset
|
4018 fromfile = branchmap.branchcache.fromfile |
bf7fb97aecf1
branchmap: make branchcache responsible for reading
Martijn Pieters <mj@octobus.net>
parents:
41470
diff
changeset
|
4019 except AttributeError: |
bf7fb97aecf1
branchmap: make branchcache responsible for reading
Martijn Pieters <mj@octobus.net>
parents:
41470
diff
changeset
|
4020 # older versions |
bf7fb97aecf1
branchmap: make branchcache responsible for reading
Martijn Pieters <mj@octobus.net>
parents:
41470
diff
changeset
|
4021 fromfile = branchmap.read |
bf7fb97aecf1
branchmap: make branchcache responsible for reading
Martijn Pieters <mj@octobus.net>
parents:
41470
diff
changeset
|
4022 |
40720
0a3cc351d718
perf: fallback to subset if ondisk cache is missing in perfbranchmapload
Boris Feld <boris.feld@octobus.net>
parents:
40719
diff
changeset
|
4023 currentfilter = filter |
39114
222aba766015
perf: time loading branchmap caches
Martijn Pieters <mj@octobus.net>
parents:
38977
diff
changeset
|
4024 # 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
|
4025 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
|
4026 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
|
4027 if currentfilter is None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4028 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4029 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
|
4030 ) |
40720
0a3cc351d718
perf: fallback to subset if ondisk cache is missing in perfbranchmapload
Boris Feld <boris.feld@octobus.net>
parents:
40719
diff
changeset
|
4031 repo = repo.filtered(currentfilter) |
39114
222aba766015
perf: time loading branchmap caches
Martijn Pieters <mj@octobus.net>
parents:
38977
diff
changeset
|
4032 timer, fm = gettimer(ui, opts) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4033 |
40702
4240a1da4188
perf: add --clear-revlog flag to branchmapload
Boris Feld <boris.feld@octobus.net>
parents:
40701
diff
changeset
|
4034 def setup(): |
4240a1da4188
perf: add --clear-revlog flag to branchmapload
Boris Feld <boris.feld@octobus.net>
parents:
40701
diff
changeset
|
4035 if clearrevlogs: |
4240a1da4188
perf: add --clear-revlog flag to branchmapload
Boris Feld <boris.feld@octobus.net>
parents:
40701
diff
changeset
|
4036 clearchangelog(repo) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4037 |
40700
30f443d34a7d
perf: use an explicit function in perfbranchmapload
Boris Feld <boris.feld@octobus.net>
parents:
40699
diff
changeset
|
4038 def bench(): |
41565
bf7fb97aecf1
branchmap: make branchcache responsible for reading
Martijn Pieters <mj@octobus.net>
parents:
41470
diff
changeset
|
4039 fromfile(repo) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4040 |
40702
4240a1da4188
perf: add --clear-revlog flag to branchmapload
Boris Feld <boris.feld@octobus.net>
parents:
40701
diff
changeset
|
4041 timer(bench, setup=setup) |
39114
222aba766015
perf: time loading branchmap caches
Martijn Pieters <mj@octobus.net>
parents:
38977
diff
changeset
|
4042 fm.end() |
222aba766015
perf: time loading branchmap caches
Martijn Pieters <mj@octobus.net>
parents:
38977
diff
changeset
|
4043 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4044 |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
4045 @command(b'perf::loadmarkers|perfloadmarkers') |
23485
ccb93e9affc1
perf: add a perfloadmarkers command
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23171
diff
changeset
|
4046 def perfloadmarkers(ui, repo): |
ccb93e9affc1
perf: add a perfloadmarkers command
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23171
diff
changeset
|
4047 """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
|
4048 |
ccb93e9affc1
perf: add a perfloadmarkers command
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23171
diff
changeset
|
4049 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
|
4050 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
|
4051 svfs = getsvfs(repo) |
46780
6266d19556ad
node: introduce nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46720
diff
changeset
|
4052 timer(lambda: len(obsolete.obsstore(repo, svfs))) |
23485
ccb93e9affc1
perf: add a perfloadmarkers command
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
23171
diff
changeset
|
4053 fm.end() |
27286
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4054 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4055 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4056 @command( |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
4057 b'perf::lrucachedict|perflrucachedict', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4058 formatteropts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4059 + [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4060 (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
|
4061 (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
|
4062 (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
|
4063 (b'', b'size', 4, b'size of cache'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4064 (b'', b'gets', 10000, b'number of key lookups'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4065 (b'', b'sets', 10000, b'number of key sets'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4066 (b'', b'mixed', 10000, b'number of mixed mode operations'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4067 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4068 b'', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4069 b'mixedgetfreq', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4070 50, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4071 b'frequency of get vs set ops in mixed mode', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4072 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4073 ], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4074 norepo=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4075 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4076 def perflrucache( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4077 ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4078 mincost=0, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4079 maxcost=100, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4080 costlimit=0, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4081 size=4, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4082 gets=10000, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4083 sets=10000, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4084 mixed=10000, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4085 mixedgetfreq=50, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4086 **opts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4087 ): |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
4088 opts = _byteskwargs(opts) |
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
4089 |
27286
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4090 def doinit(): |
39822
86dbeb7c9a11
py3: switch contrib/perf from xrange to pycompat.xrange
Matt Harbison <matt_harbison@yahoo.com>
parents:
39821
diff
changeset
|
4091 for i in _xrange(10000): |
27286
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4092 util.lrucachedict(size) |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4093 |
39568
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
4094 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
|
4095 |
27286
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4096 values = [] |
39822
86dbeb7c9a11
py3: switch contrib/perf from xrange to pycompat.xrange
Matt Harbison <matt_harbison@yahoo.com>
parents:
39821
diff
changeset
|
4097 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
|
4098 values.append(random.randint(0, _maxint)) |
27286
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4099 |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4100 # 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
|
4101 # eviction. |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4102 getseq = [] |
39822
86dbeb7c9a11
py3: switch contrib/perf from xrange to pycompat.xrange
Matt Harbison <matt_harbison@yahoo.com>
parents:
39821
diff
changeset
|
4103 for i in _xrange(gets): |
27286
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4104 getseq.append(random.choice(values)) |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4105 |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4106 def dogets(): |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4107 d = util.lrucachedict(size) |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4108 for v in values: |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4109 d[v] = v |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4110 for key in getseq: |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4111 value = d[key] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4112 value # silence pyflakes warning |
27286
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4113 |
39568
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
4114 def dogetscost(): |
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
4115 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
|
4116 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
|
4117 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
|
4118 for key in getseq: |
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
4119 try: |
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
4120 value = d[key] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4121 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
|
4122 except KeyError: |
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
4123 pass |
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
4124 |
27286
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4125 # Set mode tests insertion speed with cache eviction. |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4126 setseq = [] |
39568
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
4127 costs = [] |
39822
86dbeb7c9a11
py3: switch contrib/perf from xrange to pycompat.xrange
Matt Harbison <matt_harbison@yahoo.com>
parents:
39821
diff
changeset
|
4128 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
|
4129 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
|
4130 costs.append(random.choice(costrange)) |
27286
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4131 |
39567
ee087f0d7db5
util: allow lrucachedict to track cost of entries
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39362
diff
changeset
|
4132 def doinserts(): |
ee087f0d7db5
util: allow lrucachedict to track cost of entries
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39362
diff
changeset
|
4133 d = util.lrucachedict(size) |
ee087f0d7db5
util: allow lrucachedict to track cost of entries
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39362
diff
changeset
|
4134 for v in setseq: |
ee087f0d7db5
util: allow lrucachedict to track cost of entries
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39362
diff
changeset
|
4135 d.insert(v, v) |
ee087f0d7db5
util: allow lrucachedict to track cost of entries
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39362
diff
changeset
|
4136 |
39568
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
4137 def doinsertscost(): |
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
4138 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
|
4139 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
|
4140 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
|
4141 |
27286
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4142 def dosets(): |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4143 d = util.lrucachedict(size) |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4144 for v in setseq: |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4145 d[v] = v |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4146 |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4147 # Mixed mode randomly performs gets and sets with eviction. |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4148 mixedops = [] |
39822
86dbeb7c9a11
py3: switch contrib/perf from xrange to pycompat.xrange
Matt Harbison <matt_harbison@yahoo.com>
parents:
39821
diff
changeset
|
4149 for i in _xrange(mixed): |
27286
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4150 r = random.randint(0, 100) |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4151 if r < mixedgetfreq: |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4152 op = 0 |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4153 else: |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4154 op = 1 |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4155 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4156 mixedops.append( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4157 (op, random.randint(0, size * 2), random.choice(costrange)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4158 ) |
27286
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4159 |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4160 def domixed(): |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4161 d = util.lrucachedict(size) |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4162 |
39568
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
4163 for op, v, cost in mixedops: |
27286
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4164 if op == 0: |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4165 try: |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4166 d[v] |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4167 except KeyError: |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4168 pass |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4169 else: |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4170 d[v] = v |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4171 |
39568
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
4172 def domixedcost(): |
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
4173 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
|
4174 |
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
4175 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
|
4176 if op == 0: |
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
4177 try: |
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
4178 d[v] |
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
4179 except KeyError: |
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
4180 pass |
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
4181 else: |
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
4182 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
|
4183 |
27286
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4184 benches = [ |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
4185 (doinit, b'init'), |
27286
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4186 ] |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4187 |
39568
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
4188 if costlimit: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4189 benches.extend( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4190 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4191 (dogetscost, b'gets w/ cost limit'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4192 (doinsertscost, b'inserts w/ cost limit'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4193 (domixedcost, b'mixed w/ cost limit'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4194 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4195 ) |
39568
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
4196 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4197 benches.extend( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4198 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4199 (dogets, b'gets'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4200 (doinserts, b'inserts'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4201 (dosets, b'sets'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4202 (domixed, b'mixed'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4203 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4204 ) |
39568
842cd0bdda75
util: teach lrucachedict to enforce a max total cost
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39567
diff
changeset
|
4205 |
27286
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4206 for fn, title in benches: |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4207 timer, fm = gettimer(ui, opts) |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4208 timer(fn, title=title) |
528cf1a73ae5
perf: add perflrucachedict command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27100
diff
changeset
|
4209 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
|
4210 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4211 |
44996
c2df0bca0dfa
perf: make `hg perfwrite` more flexible
Manuel Jacob <me@manueljacob.de>
parents:
44452
diff
changeset
|
4212 @command( |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
4213 b'perf::write|perfwrite', |
44996
c2df0bca0dfa
perf: make `hg perfwrite` more flexible
Manuel Jacob <me@manueljacob.de>
parents:
44452
diff
changeset
|
4214 formatteropts |
c2df0bca0dfa
perf: make `hg perfwrite` more flexible
Manuel Jacob <me@manueljacob.de>
parents:
44452
diff
changeset
|
4215 + [ |
c2df0bca0dfa
perf: make `hg perfwrite` more flexible
Manuel Jacob <me@manueljacob.de>
parents:
44452
diff
changeset
|
4216 (b'', b'write-method', b'write', b'ui write method'), |
c2df0bca0dfa
perf: make `hg perfwrite` more flexible
Manuel Jacob <me@manueljacob.de>
parents:
44452
diff
changeset
|
4217 (b'', b'nlines', 100, b'number of lines'), |
c2df0bca0dfa
perf: make `hg perfwrite` more flexible
Manuel Jacob <me@manueljacob.de>
parents:
44452
diff
changeset
|
4218 (b'', b'nitems', 100, b'number of items (per line)'), |
c2df0bca0dfa
perf: make `hg perfwrite` more flexible
Manuel Jacob <me@manueljacob.de>
parents:
44452
diff
changeset
|
4219 (b'', b'item', b'x', b'item that is written'), |
c2df0bca0dfa
perf: make `hg perfwrite` more flexible
Manuel Jacob <me@manueljacob.de>
parents:
44452
diff
changeset
|
4220 (b'', b'batch-line', None, b'pass whole line to write method at once'), |
c2df0bca0dfa
perf: make `hg perfwrite` more flexible
Manuel Jacob <me@manueljacob.de>
parents:
44452
diff
changeset
|
4221 (b'', b'flush-line', None, b'flush after each line'), |
c2df0bca0dfa
perf: make `hg perfwrite` more flexible
Manuel Jacob <me@manueljacob.de>
parents:
44452
diff
changeset
|
4222 ], |
c2df0bca0dfa
perf: make `hg perfwrite` more flexible
Manuel Jacob <me@manueljacob.de>
parents:
44452
diff
changeset
|
4223 ) |
30977
5a9e4dc8e4fd
contrib: add a write microbenchmark to perf.py
Simon Farnsworth <simonfar@fb.com>
parents:
30975
diff
changeset
|
4224 def perfwrite(ui, repo, **opts): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45632
diff
changeset
|
4225 """microbenchmark ui.write (and others)""" |
39825
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
4226 opts = _byteskwargs(opts) |
874712506b07
py3: apply byteskwargs to contrib/perf
Matt Harbison <matt_harbison@yahoo.com>
parents:
39824
diff
changeset
|
4227 |
44996
c2df0bca0dfa
perf: make `hg perfwrite` more flexible
Manuel Jacob <me@manueljacob.de>
parents:
44452
diff
changeset
|
4228 write = getattr(ui, _sysstr(opts[b'write_method'])) |
c2df0bca0dfa
perf: make `hg perfwrite` more flexible
Manuel Jacob <me@manueljacob.de>
parents:
44452
diff
changeset
|
4229 nlines = int(opts[b'nlines']) |
c2df0bca0dfa
perf: make `hg perfwrite` more flexible
Manuel Jacob <me@manueljacob.de>
parents:
44452
diff
changeset
|
4230 nitems = int(opts[b'nitems']) |
c2df0bca0dfa
perf: make `hg perfwrite` more flexible
Manuel Jacob <me@manueljacob.de>
parents:
44452
diff
changeset
|
4231 item = opts[b'item'] |
c2df0bca0dfa
perf: make `hg perfwrite` more flexible
Manuel Jacob <me@manueljacob.de>
parents:
44452
diff
changeset
|
4232 batch_line = opts.get(b'batch_line') |
c2df0bca0dfa
perf: make `hg perfwrite` more flexible
Manuel Jacob <me@manueljacob.de>
parents:
44452
diff
changeset
|
4233 flush_line = opts.get(b'flush_line') |
c2df0bca0dfa
perf: make `hg perfwrite` more flexible
Manuel Jacob <me@manueljacob.de>
parents:
44452
diff
changeset
|
4234 |
c2df0bca0dfa
perf: make `hg perfwrite` more flexible
Manuel Jacob <me@manueljacob.de>
parents:
44452
diff
changeset
|
4235 if batch_line: |
c2df0bca0dfa
perf: make `hg perfwrite` more flexible
Manuel Jacob <me@manueljacob.de>
parents:
44452
diff
changeset
|
4236 line = item * nitems + b'\n' |
c2df0bca0dfa
perf: make `hg perfwrite` more flexible
Manuel Jacob <me@manueljacob.de>
parents:
44452
diff
changeset
|
4237 |
c2df0bca0dfa
perf: make `hg perfwrite` more flexible
Manuel Jacob <me@manueljacob.de>
parents:
44452
diff
changeset
|
4238 def benchmark(): |
c2df0bca0dfa
perf: make `hg perfwrite` more flexible
Manuel Jacob <me@manueljacob.de>
parents:
44452
diff
changeset
|
4239 for i in pycompat.xrange(nlines): |
c2df0bca0dfa
perf: make `hg perfwrite` more flexible
Manuel Jacob <me@manueljacob.de>
parents:
44452
diff
changeset
|
4240 if batch_line: |
c2df0bca0dfa
perf: make `hg perfwrite` more flexible
Manuel Jacob <me@manueljacob.de>
parents:
44452
diff
changeset
|
4241 write(line) |
c2df0bca0dfa
perf: make `hg perfwrite` more flexible
Manuel Jacob <me@manueljacob.de>
parents:
44452
diff
changeset
|
4242 else: |
c2df0bca0dfa
perf: make `hg perfwrite` more flexible
Manuel Jacob <me@manueljacob.de>
parents:
44452
diff
changeset
|
4243 for i in pycompat.xrange(nitems): |
c2df0bca0dfa
perf: make `hg perfwrite` more flexible
Manuel Jacob <me@manueljacob.de>
parents:
44452
diff
changeset
|
4244 write(item) |
c2df0bca0dfa
perf: make `hg perfwrite` more flexible
Manuel Jacob <me@manueljacob.de>
parents:
44452
diff
changeset
|
4245 write(b'\n') |
c2df0bca0dfa
perf: make `hg perfwrite` more flexible
Manuel Jacob <me@manueljacob.de>
parents:
44452
diff
changeset
|
4246 if flush_line: |
c2df0bca0dfa
perf: make `hg perfwrite` more flexible
Manuel Jacob <me@manueljacob.de>
parents:
44452
diff
changeset
|
4247 ui.flush() |
c2df0bca0dfa
perf: make `hg perfwrite` more flexible
Manuel Jacob <me@manueljacob.de>
parents:
44452
diff
changeset
|
4248 ui.flush() |
c2df0bca0dfa
perf: make `hg perfwrite` more flexible
Manuel Jacob <me@manueljacob.de>
parents:
44452
diff
changeset
|
4249 |
30977
5a9e4dc8e4fd
contrib: add a write microbenchmark to perf.py
Simon Farnsworth <simonfar@fb.com>
parents:
30975
diff
changeset
|
4250 timer, fm = gettimer(ui, opts) |
44996
c2df0bca0dfa
perf: make `hg perfwrite` more flexible
Manuel Jacob <me@manueljacob.de>
parents:
44452
diff
changeset
|
4251 timer(benchmark) |
30977
5a9e4dc8e4fd
contrib: add a write microbenchmark to perf.py
Simon Farnsworth <simonfar@fb.com>
parents:
30975
diff
changeset
|
4252 fm.end() |
5a9e4dc8e4fd
contrib: add a write microbenchmark to perf.py
Simon Farnsworth <simonfar@fb.com>
parents:
30975
diff
changeset
|
4253 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4254 |
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
|
4255 def uisetup(ui): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4256 if util.safehasattr(cmdutil, b'openrevlog') and not util.safehasattr( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4257 commands, b'debugrevlogopts' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4258 ): |
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
|
4259 # 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
|
4260 # 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
|
4261 # 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
|
4262 # 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
|
4263 # 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
|
4264 def openrevlog(orig, repo, cmd, file_, opts): |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
4265 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
|
4266 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4267 b"This version doesn't support --dir option", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4268 hint=b"use 3.5 or later", |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4269 ) |
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
|
4270 return orig(repo, cmd, file_, opts) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4271 |
39362
438f3932a432
contrib: byteify perf.py file
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
39319
diff
changeset
|
4272 extensions.wrapfunction(cmdutil, b'openrevlog', openrevlog) |
40925
008f3491dc53
perf: add perfprogress command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40784
diff
changeset
|
4273 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4274 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4275 @command( |
46388
d8ad391e10f5
command-namespace: use `::` are the command separator
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46354
diff
changeset
|
4276 b'perf::progress|perfprogress', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4277 formatteropts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4278 + [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4279 (b'', b'topic', b'topic', b'topic for progress messages'), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4280 (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
|
4281 ], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4282 norepo=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43003
diff
changeset
|
4283 ) |
40925
008f3491dc53
perf: add perfprogress command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40784
diff
changeset
|
4284 def perfprogress(ui, topic=None, total=None, **opts): |
008f3491dc53
perf: add perfprogress command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40784
diff
changeset
|
4285 """printing of progress bars""" |
008f3491dc53
perf: add perfprogress command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40784
diff
changeset
|
4286 opts = _byteskwargs(opts) |
008f3491dc53
perf: add perfprogress command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40784
diff
changeset
|
4287 |
008f3491dc53
perf: add perfprogress command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40784
diff
changeset
|
4288 timer, fm = gettimer(ui, opts) |
008f3491dc53
perf: add perfprogress command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40784
diff
changeset
|
4289 |
008f3491dc53
perf: add perfprogress command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40784
diff
changeset
|
4290 def doprogress(): |
008f3491dc53
perf: add perfprogress command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40784
diff
changeset
|
4291 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
|
4292 for i in _xrange(total): |
40925
008f3491dc53
perf: add perfprogress command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40784
diff
changeset
|
4293 progress.increment() |
008f3491dc53
perf: add perfprogress command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40784
diff
changeset
|
4294 |
008f3491dc53
perf: add perfprogress command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40784
diff
changeset
|
4295 timer(doprogress) |
008f3491dc53
perf: add perfprogress command
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40784
diff
changeset
|
4296 fm.end() |