Mercurial > hg
annotate tests/test-profile.t @ 47802:de2e04fe4897
hgwebdir: avoid systematic full garbage collection
Forcing a systematic full garbage collection upon each request
can serioulsy harm performance. This is reported as
https://bz.mercurial-scm.org/show_bug.cgi?id=6075
With this change we're performing the full collection according
to a new setting, `experimental.web.full-garbage-collection-rate`.
The default value is 1, which doesn't change the behavior and will
allow us to test on real use cases. If the value is 0, no full garbage
collection occurs.
Regardless of the value of the setting, a partial garbage collection
still occurs upon each request (not attempting to collect objects from
the oldest generation). This should be enough to take care of
reference cycles that have been created by the last request
(assessment of this requires changing the setting, not to be 1).
In my experience chasing memory leaks in Mercurial servers,
the full collection never reclaimed any memory, but this is with
Python 3 and biased towards small repositories.
On the other hand, as explained in the Python developer docs [1],
frequent full collections are very harmful in terms of performance if
lots of objects survive the collection, and hence stay in the
oldest generation. Note that `gc.collect()` is indeed trying to
collect the oldest generation [2]. This happens usually in two cases:
- unwanted lingering objects (i.e., an actual memory leak that
the GC cannot do anything about). Sadly, we have lots of those
these days.
- desireable long-term objects, typically in caches (not inner caches
carried by repositories, which should be collected with them). This
is a subject of interest for the Heptapod project.
In short, the flat rate that this change still permits is
probably a bad idea in most cases, and the default value can
be tweaked later on (or even be set to 0) according to experiments
in the wild.
The test is inspired from test-hgwebdir-paths.py
[1] https://devguide.python.org/garbage_collector/#collecting-the-oldest-generation
[2] https://docs.python.org/3/library/gc.html#gc.collect
Differential Revision: https://phab.mercurial-scm.org/D11204
author | Georges Racinet <georges.racinet@octobus.net> |
---|---|
date | Tue, 20 Jul 2021 17:20:19 +0200 |
parents | dc3f7aa15423 |
children | 42d2b31cee0b |
rev | line source |
---|---|
12478 | 1 test --time |
5099
105d4cf7ec24
Test --time, --profile and --lsprof
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
2 |
16933
30143c3dd102
dispatch: lowercase --time message
Martin Geisler <mg@aragost.com>
parents:
16913
diff
changeset
|
3 $ hg --time help -q help 2>&1 | grep time > /dev/null |
12478 | 4 $ hg init a |
5 $ cd a | |
8022
4f3fdfaa3874
profiling: Adding profiling.output config variable
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
8021
diff
changeset
|
6 |
33609
a72b2db1a6a9
tests: make test-profile.t pass if statprof didn't collect samples
Martin von Zweigbergk <martinvonz@google.com>
parents:
33097
diff
changeset
|
7 Function to check that statprof ran |
a72b2db1a6a9
tests: make test-profile.t pass if statprof didn't collect samples
Martin von Zweigbergk <martinvonz@google.com>
parents:
33097
diff
changeset
|
8 $ statprofran () { |
a72b2db1a6a9
tests: make test-profile.t pass if statprof didn't collect samples
Martin von Zweigbergk <martinvonz@google.com>
parents:
33097
diff
changeset
|
9 > egrep 'Sample count:|No samples recorded' > /dev/null |
a72b2db1a6a9
tests: make test-profile.t pass if statprof didn't collect samples
Martin von Zweigbergk <martinvonz@google.com>
parents:
33097
diff
changeset
|
10 > } |
16898
bb91c602d4ad
tests: change odd uses of 'if hghave' to #if
Mads Kiilerich <mads@kiilerich.com>
parents:
12478
diff
changeset
|
11 |
12478 | 12 test --profile |
8022
4f3fdfaa3874
profiling: Adding profiling.output config variable
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
8021
diff
changeset
|
13 |
33609
a72b2db1a6a9
tests: make test-profile.t pass if statprof didn't collect samples
Martin von Zweigbergk <martinvonz@google.com>
parents:
33097
diff
changeset
|
14 $ hg st --profile 2>&1 | statprofran |
32787
545f69cd6042
profile: support --profile in alias and abbreviated version (--prof)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32417
diff
changeset
|
15 |
545f69cd6042
profile: support --profile in alias and abbreviated version (--prof)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32417
diff
changeset
|
16 Abreviated version |
545f69cd6042
profile: support --profile in alias and abbreviated version (--prof)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32417
diff
changeset
|
17 |
33609
a72b2db1a6a9
tests: make test-profile.t pass if statprof didn't collect samples
Martin von Zweigbergk <martinvonz@google.com>
parents:
33097
diff
changeset
|
18 $ hg st --prof 2>&1 | statprofran |
32787
545f69cd6042
profile: support --profile in alias and abbreviated version (--prof)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32417
diff
changeset
|
19 |
545f69cd6042
profile: support --profile in alias and abbreviated version (--prof)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32417
diff
changeset
|
20 In alias |
545f69cd6042
profile: support --profile in alias and abbreviated version (--prof)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32417
diff
changeset
|
21 |
33609
a72b2db1a6a9
tests: make test-profile.t pass if statprof didn't collect samples
Martin von Zweigbergk <martinvonz@google.com>
parents:
33097
diff
changeset
|
22 $ hg --config "alias.profst=status --profile" profst 2>&1 | statprofran |
32787
545f69cd6042
profile: support --profile in alias and abbreviated version (--prof)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32417
diff
changeset
|
23 |
545f69cd6042
profile: support --profile in alias and abbreviated version (--prof)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32417
diff
changeset
|
24 #if lsprof |
545f69cd6042
profile: support --profile in alias and abbreviated version (--prof)
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32417
diff
changeset
|
25 |
47562
17fde6763286
windows: use shell function instead of variable substitution
Raphaël Gomès <rgomes@octobus.net>
parents:
46018
diff
changeset
|
26 $ prof () { |
17fde6763286
windows: use shell function instead of variable substitution
Raphaël Gomès <rgomes@octobus.net>
parents:
46018
diff
changeset
|
27 > hg --config profiling.type=ls --profile $@ |
17fde6763286
windows: use shell function instead of variable substitution
Raphaël Gomès <rgomes@octobus.net>
parents:
46018
diff
changeset
|
28 > } |
30259
d06c049695e6
tests: explicitly use ls profiler
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29787
diff
changeset
|
29 |
47562
17fde6763286
windows: use shell function instead of variable substitution
Raphaël Gomès <rgomes@octobus.net>
parents:
46018
diff
changeset
|
30 $ prof st 2>../out |
16898
bb91c602d4ad
tests: change odd uses of 'if hghave' to #if
Mads Kiilerich <mads@kiilerich.com>
parents:
12478
diff
changeset
|
31 $ grep CallCount ../out > /dev/null || cat ../out |
bb91c602d4ad
tests: change odd uses of 'if hghave' to #if
Mads Kiilerich <mads@kiilerich.com>
parents:
12478
diff
changeset
|
32 |
47562
17fde6763286
windows: use shell function instead of variable substitution
Raphaël Gomès <rgomes@octobus.net>
parents:
46018
diff
changeset
|
33 $ prof --config profiling.output=../out st |
16898
bb91c602d4ad
tests: change odd uses of 'if hghave' to #if
Mads Kiilerich <mads@kiilerich.com>
parents:
12478
diff
changeset
|
34 $ grep CallCount ../out > /dev/null || cat ../out |
bb91c602d4ad
tests: change odd uses of 'if hghave' to #if
Mads Kiilerich <mads@kiilerich.com>
parents:
12478
diff
changeset
|
35 |
47562
17fde6763286
windows: use shell function instead of variable substitution
Raphaël Gomès <rgomes@octobus.net>
parents:
46018
diff
changeset
|
36 $ prof --config profiling.output=blackbox --config extensions.blackbox= st |
26191
39a0b11158d8
profiling: allow logging profile to the blackbox
Durham Goode <durham@fb.com>
parents:
18765
diff
changeset
|
37 $ grep CallCount .hg/blackbox.log > /dev/null || cat .hg/blackbox.log |
39a0b11158d8
profiling: allow logging profile to the blackbox
Durham Goode <durham@fb.com>
parents:
18765
diff
changeset
|
38 |
47562
17fde6763286
windows: use shell function instead of variable substitution
Raphaël Gomès <rgomes@octobus.net>
parents:
46018
diff
changeset
|
39 $ prof --config profiling.format=text st 2>../out |
16898
bb91c602d4ad
tests: change odd uses of 'if hghave' to #if
Mads Kiilerich <mads@kiilerich.com>
parents:
12478
diff
changeset
|
40 $ grep CallCount ../out > /dev/null || cat ../out |
bb91c602d4ad
tests: change odd uses of 'if hghave' to #if
Mads Kiilerich <mads@kiilerich.com>
parents:
12478
diff
changeset
|
41 |
bb91c602d4ad
tests: change odd uses of 'if hghave' to #if
Mads Kiilerich <mads@kiilerich.com>
parents:
12478
diff
changeset
|
42 $ echo "[profiling]" >> $HGRCPATH |
bb91c602d4ad
tests: change odd uses of 'if hghave' to #if
Mads Kiilerich <mads@kiilerich.com>
parents:
12478
diff
changeset
|
43 $ echo "format=kcachegrind" >> $HGRCPATH |
bb91c602d4ad
tests: change odd uses of 'if hghave' to #if
Mads Kiilerich <mads@kiilerich.com>
parents:
12478
diff
changeset
|
44 |
47562
17fde6763286
windows: use shell function instead of variable substitution
Raphaël Gomès <rgomes@octobus.net>
parents:
46018
diff
changeset
|
45 $ prof st 2>../out |
16898
bb91c602d4ad
tests: change odd uses of 'if hghave' to #if
Mads Kiilerich <mads@kiilerich.com>
parents:
12478
diff
changeset
|
46 $ grep 'events: Ticks' ../out > /dev/null || cat ../out |
bb91c602d4ad
tests: change odd uses of 'if hghave' to #if
Mads Kiilerich <mads@kiilerich.com>
parents:
12478
diff
changeset
|
47 |
47562
17fde6763286
windows: use shell function instead of variable substitution
Raphaël Gomès <rgomes@octobus.net>
parents:
46018
diff
changeset
|
48 $ prof --config profiling.output=../out st |
16898
bb91c602d4ad
tests: change odd uses of 'if hghave' to #if
Mads Kiilerich <mads@kiilerich.com>
parents:
12478
diff
changeset
|
49 $ grep 'events: Ticks' ../out > /dev/null || cat ../out |
bb91c602d4ad
tests: change odd uses of 'if hghave' to #if
Mads Kiilerich <mads@kiilerich.com>
parents:
12478
diff
changeset
|
50 |
bb91c602d4ad
tests: change odd uses of 'if hghave' to #if
Mads Kiilerich <mads@kiilerich.com>
parents:
12478
diff
changeset
|
51 #endif |
16913
f2719b387380
tests: add missing trailing 'cd ..'
Mads Kiilerich <mads@kiilerich.com>
parents:
16898
diff
changeset
|
52 |
29787
80df04266a16
hgweb: profile HTTP requests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26191
diff
changeset
|
53 #if lsprof serve |
80df04266a16
hgweb: profile HTTP requests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26191
diff
changeset
|
54 |
80df04266a16
hgweb: profile HTTP requests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26191
diff
changeset
|
55 Profiling of HTTP requests works |
80df04266a16
hgweb: profile HTTP requests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26191
diff
changeset
|
56 |
47562
17fde6763286
windows: use shell function instead of variable substitution
Raphaël Gomès <rgomes@octobus.net>
parents:
46018
diff
changeset
|
57 $ prof --config profiling.format=text --config profiling.output=../profile.log serve -d -p $HGPORT --pid-file ../hg.pid -A ../access.log |
29787
80df04266a16
hgweb: profile HTTP requests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26191
diff
changeset
|
58 $ cat ../hg.pid >> $DAEMON_PIDS |
80df04266a16
hgweb: profile HTTP requests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26191
diff
changeset
|
59 $ hg -q clone -U http://localhost:$HGPORT ../clone |
80df04266a16
hgweb: profile HTTP requests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26191
diff
changeset
|
60 |
80df04266a16
hgweb: profile HTTP requests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26191
diff
changeset
|
61 A single profile is logged because file logging doesn't append |
80df04266a16
hgweb: profile HTTP requests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26191
diff
changeset
|
62 $ grep CallCount ../profile.log | wc -l |
80df04266a16
hgweb: profile HTTP requests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26191
diff
changeset
|
63 \s*1 (re) |
80df04266a16
hgweb: profile HTTP requests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26191
diff
changeset
|
64 |
80df04266a16
hgweb: profile HTTP requests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26191
diff
changeset
|
65 #endif |
80df04266a16
hgweb: profile HTTP requests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26191
diff
changeset
|
66 |
30316
faf1b8923da2
profiling: use vendored statprof and upstream enhancements (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30259
diff
changeset
|
67 Install an extension that can sleep and guarantee a profiler has time to run |
faf1b8923da2
profiling: use vendored statprof and upstream enhancements (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30259
diff
changeset
|
68 |
46018
8b0a3ff5ed12
statprof: separate functions and "line", assume 4 digit line numbers
Kyle Lippincott <spectral@google.com>
parents:
46017
diff
changeset
|
69 $ cat >> sleepext_with_a_long_filename.py << EOF |
30316
faf1b8923da2
profiling: use vendored statprof and upstream enhancements (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30259
diff
changeset
|
70 > import time |
40369
ef6cab7930b3
py3: fix module imports in tests, as flagged by test-check-module-imports.t
Matt Harbison <matt_harbison@yahoo.com>
parents:
40200
diff
changeset
|
71 > from mercurial import registrar |
30316
faf1b8923da2
profiling: use vendored statprof and upstream enhancements (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30259
diff
changeset
|
72 > cmdtable = {} |
32337
46ba2cdda476
registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32060
diff
changeset
|
73 > command = registrar.command(cmdtable) |
38075
fd8eedcc3fd2
py3: add b'' prefixes in tests/test-profile.t
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35393
diff
changeset
|
74 > @command(b'sleep', [], b'hg sleep') |
46018
8b0a3ff5ed12
statprof: separate functions and "line", assume 4 digit line numbers
Kyle Lippincott <spectral@google.com>
parents:
46017
diff
changeset
|
75 > def sleep_for_at_least_one_stat_cycle(ui, *args, **kwargs): |
47563
dc3f7aa15423
windows: use cpu-intensive task instead of real time in test
Raphaël Gomès <rgomes@octobus.net>
parents:
47562
diff
changeset
|
76 > t = time.time() # don't use time.sleep because we need CPU time |
dc3f7aa15423
windows: use cpu-intensive task instead of real time in test
Raphaël Gomès <rgomes@octobus.net>
parents:
47562
diff
changeset
|
77 > while time.time() - t < 0.5: |
dc3f7aa15423
windows: use cpu-intensive task instead of real time in test
Raphaël Gomès <rgomes@octobus.net>
parents:
47562
diff
changeset
|
78 > pass |
30316
faf1b8923da2
profiling: use vendored statprof and upstream enhancements (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30259
diff
changeset
|
79 > EOF |
faf1b8923da2
profiling: use vendored statprof and upstream enhancements (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30259
diff
changeset
|
80 |
faf1b8923da2
profiling: use vendored statprof and upstream enhancements (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30259
diff
changeset
|
81 $ cat >> $HGRCPATH << EOF |
faf1b8923da2
profiling: use vendored statprof and upstream enhancements (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30259
diff
changeset
|
82 > [extensions] |
46018
8b0a3ff5ed12
statprof: separate functions and "line", assume 4 digit line numbers
Kyle Lippincott <spectral@google.com>
parents:
46017
diff
changeset
|
83 > sleep = `pwd`/sleepext_with_a_long_filename.py |
30316
faf1b8923da2
profiling: use vendored statprof and upstream enhancements (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30259
diff
changeset
|
84 > EOF |
faf1b8923da2
profiling: use vendored statprof and upstream enhancements (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30259
diff
changeset
|
85 |
faf1b8923da2
profiling: use vendored statprof and upstream enhancements (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30259
diff
changeset
|
86 statistical profiler works |
faf1b8923da2
profiling: use vendored statprof and upstream enhancements (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30259
diff
changeset
|
87 |
30317
3fd53cc1aad8
profiling: make statprof the default profiler (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30316
diff
changeset
|
88 $ hg --profile sleep 2>../out |
33609
a72b2db1a6a9
tests: make test-profile.t pass if statprof didn't collect samples
Martin von Zweigbergk <martinvonz@google.com>
parents:
33097
diff
changeset
|
89 $ cat ../out | statprofran |
30316
faf1b8923da2
profiling: use vendored statprof and upstream enhancements (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30259
diff
changeset
|
90 |
faf1b8923da2
profiling: use vendored statprof and upstream enhancements (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30259
diff
changeset
|
91 Various statprof formatters work |
faf1b8923da2
profiling: use vendored statprof and upstream enhancements (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30259
diff
changeset
|
92 |
40483
4e6ffcb5b9fc
tests: add some helpful `|| cat` bits to test-profile.t
Augie Fackler <augie@google.com>
parents:
40381
diff
changeset
|
93 $ hg --profile --config profiling.statformat=byline sleep 2>../out || cat ../out |
45631
ede4a1bf14bd
test: try to unflaky test-profile.t
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
40639
diff
changeset
|
94 $ grep -v _path_stat ../out | head -n 3 |
30316
faf1b8923da2
profiling: use vendored statprof and upstream enhancements (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30259
diff
changeset
|
95 % cumulative self |
40381
4613f9274fc0
statprof: update the name as the i increases (issue6003)
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
40380
diff
changeset
|
96 time seconds seconds name |
46018
8b0a3ff5ed12
statprof: separate functions and "line", assume 4 digit line numbers
Kyle Lippincott <spectral@google.com>
parents:
46017
diff
changeset
|
97 * sleepext_with_a_long_filename.py:*:sleep_for_at_least_one_stat_cycle (glob) |
33609
a72b2db1a6a9
tests: make test-profile.t pass if statprof didn't collect samples
Martin von Zweigbergk <martinvonz@google.com>
parents:
33097
diff
changeset
|
98 $ cat ../out | statprofran |
30316
faf1b8923da2
profiling: use vendored statprof and upstream enhancements (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30259
diff
changeset
|
99 |
40483
4e6ffcb5b9fc
tests: add some helpful `|| cat` bits to test-profile.t
Augie Fackler <augie@google.com>
parents:
40381
diff
changeset
|
100 $ hg --profile --config profiling.statformat=bymethod sleep 2>../out || cat ../out |
30316
faf1b8923da2
profiling: use vendored statprof and upstream enhancements (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30259
diff
changeset
|
101 $ head -n 1 ../out |
faf1b8923da2
profiling: use vendored statprof and upstream enhancements (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30259
diff
changeset
|
102 % cumulative self |
33609
a72b2db1a6a9
tests: make test-profile.t pass if statprof didn't collect samples
Martin von Zweigbergk <martinvonz@google.com>
parents:
33097
diff
changeset
|
103 $ cat ../out | statprofran |
30316
faf1b8923da2
profiling: use vendored statprof and upstream enhancements (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30259
diff
changeset
|
104 |
47563
dc3f7aa15423
windows: use cpu-intensive task instead of real time in test
Raphaël Gomès <rgomes@octobus.net>
parents:
47562
diff
changeset
|
105 Windows real time tracking is broken, only use CPU |
dc3f7aa15423
windows: use cpu-intensive task instead of real time in test
Raphaël Gomès <rgomes@octobus.net>
parents:
47562
diff
changeset
|
106 |
dc3f7aa15423
windows: use cpu-intensive task instead of real time in test
Raphaël Gomès <rgomes@octobus.net>
parents:
47562
diff
changeset
|
107 #if no-windows |
dc3f7aa15423
windows: use cpu-intensive task instead of real time in test
Raphaël Gomès <rgomes@octobus.net>
parents:
47562
diff
changeset
|
108 $ hg --profile --config profiling.time-track=real --config profiling.statformat=hotpath sleep 2>../out || cat ../out |
33609
a72b2db1a6a9
tests: make test-profile.t pass if statprof didn't collect samples
Martin von Zweigbergk <martinvonz@google.com>
parents:
33097
diff
changeset
|
109 $ cat ../out | statprofran |
47563
dc3f7aa15423
windows: use cpu-intensive task instead of real time in test
Raphaël Gomès <rgomes@octobus.net>
parents:
47562
diff
changeset
|
110 $ grep sleepext_with_a_long_filename.py ../out | head -n 1 |
dc3f7aa15423
windows: use cpu-intensive task instead of real time in test
Raphaël Gomès <rgomes@octobus.net>
parents:
47562
diff
changeset
|
111 .* [0-9.]+% [0-9.]+s sleepext_with_a_long_filename.py:\s*sleep_for_at_least_one_stat_cycle, line \d+:\s+(while|pass).* (re) |
dc3f7aa15423
windows: use cpu-intensive task instead of real time in test
Raphaël Gomès <rgomes@octobus.net>
parents:
47562
diff
changeset
|
112 #endif |
dc3f7aa15423
windows: use cpu-intensive task instead of real time in test
Raphaël Gomès <rgomes@octobus.net>
parents:
47562
diff
changeset
|
113 |
dc3f7aa15423
windows: use cpu-intensive task instead of real time in test
Raphaël Gomès <rgomes@octobus.net>
parents:
47562
diff
changeset
|
114 $ hg --profile --config profiling.time-track=cpu --config profiling.statformat=hotpath sleep 2>../out || cat ../out |
dc3f7aa15423
windows: use cpu-intensive task instead of real time in test
Raphaël Gomès <rgomes@octobus.net>
parents:
47562
diff
changeset
|
115 $ cat ../out | statprofran |
dc3f7aa15423
windows: use cpu-intensive task instead of real time in test
Raphaël Gomès <rgomes@octobus.net>
parents:
47562
diff
changeset
|
116 $ grep sleepext_with_a_long_filename.py ../out | head -n 1 |
dc3f7aa15423
windows: use cpu-intensive task instead of real time in test
Raphaël Gomès <rgomes@octobus.net>
parents:
47562
diff
changeset
|
117 .* [0-9.]+% [0-9.]+s sleepext_with_a_long_filename.py:\s*sleep_for_at_least_one_stat_cycle, line \d+:\s+(while|pass).* (re) |
30316
faf1b8923da2
profiling: use vendored statprof and upstream enhancements (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30259
diff
changeset
|
118 |
40483
4e6ffcb5b9fc
tests: add some helpful `|| cat` bits to test-profile.t
Augie Fackler <augie@google.com>
parents:
40381
diff
changeset
|
119 $ hg --profile --config profiling.statformat=json sleep 2>../out || cat ../out |
30316
faf1b8923da2
profiling: use vendored statprof and upstream enhancements (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30259
diff
changeset
|
120 $ cat ../out |
32060
49145a2b2fb0
test-profile: allow negative time in JSON output (issue5542)
Yuya Nishihara <yuya@tcha.org>
parents:
30845
diff
changeset
|
121 \[\[-?\d+.* (re) |
30316
faf1b8923da2
profiling: use vendored statprof and upstream enhancements (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30259
diff
changeset
|
122 |
30845
262c2be8ea5a
statprof: require input file
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30317
diff
changeset
|
123 statprof can be used as a standalone module |
262c2be8ea5a
statprof: require input file
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30317
diff
changeset
|
124 |
39707
5abc47d4ca6b
tests: quote PYTHON usage
Matt Harbison <matt_harbison@yahoo.com>
parents:
38075
diff
changeset
|
125 $ "$PYTHON" -m mercurial.statprof hotpath |
30845
262c2be8ea5a
statprof: require input file
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30317
diff
changeset
|
126 must specify --file to load |
262c2be8ea5a
statprof: require input file
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30317
diff
changeset
|
127 [1] |
262c2be8ea5a
statprof: require input file
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30317
diff
changeset
|
128 |
16913
f2719b387380
tests: add missing trailing 'cd ..'
Mads Kiilerich <mads@kiilerich.com>
parents:
16898
diff
changeset
|
129 $ cd .. |
32417
f40dc6f7c12f
profiling: allow loading profiling extension before everything else
Jun Wu <quark@fb.com>
parents:
32337
diff
changeset
|
130 |
34445
5b19f0442043
test-profile: gate chg-incompatible part with '#if chg'
Jun Wu <quark@fb.com>
parents:
33609
diff
changeset
|
131 #if no-chg |
32417
f40dc6f7c12f
profiling: allow loading profiling extension before everything else
Jun Wu <quark@fb.com>
parents:
32337
diff
changeset
|
132 profiler extension could be loaded before other extensions |
f40dc6f7c12f
profiling: allow loading profiling extension before everything else
Jun Wu <quark@fb.com>
parents:
32337
diff
changeset
|
133 |
f40dc6f7c12f
profiling: allow loading profiling extension before everything else
Jun Wu <quark@fb.com>
parents:
32337
diff
changeset
|
134 $ cat > fooprof.py <<EOF |
f40dc6f7c12f
profiling: allow loading profiling extension before everything else
Jun Wu <quark@fb.com>
parents:
32337
diff
changeset
|
135 > from __future__ import absolute_import |
f40dc6f7c12f
profiling: allow loading profiling extension before everything else
Jun Wu <quark@fb.com>
parents:
32337
diff
changeset
|
136 > import contextlib |
40200
9cc411952ab9
py3: flush stdout
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39707
diff
changeset
|
137 > import sys |
32417
f40dc6f7c12f
profiling: allow loading profiling extension before everything else
Jun Wu <quark@fb.com>
parents:
32337
diff
changeset
|
138 > @contextlib.contextmanager |
f40dc6f7c12f
profiling: allow loading profiling extension before everything else
Jun Wu <quark@fb.com>
parents:
32337
diff
changeset
|
139 > def profile(ui, fp): |
f40dc6f7c12f
profiling: allow loading profiling extension before everything else
Jun Wu <quark@fb.com>
parents:
32337
diff
changeset
|
140 > print('fooprof: start profile') |
40200
9cc411952ab9
py3: flush stdout
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39707
diff
changeset
|
141 > sys.stdout.flush() |
32417
f40dc6f7c12f
profiling: allow loading profiling extension before everything else
Jun Wu <quark@fb.com>
parents:
32337
diff
changeset
|
142 > yield |
f40dc6f7c12f
profiling: allow loading profiling extension before everything else
Jun Wu <quark@fb.com>
parents:
32337
diff
changeset
|
143 > print('fooprof: end profile') |
40200
9cc411952ab9
py3: flush stdout
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39707
diff
changeset
|
144 > sys.stdout.flush() |
32417
f40dc6f7c12f
profiling: allow loading profiling extension before everything else
Jun Wu <quark@fb.com>
parents:
32337
diff
changeset
|
145 > def extsetup(ui): |
38075
fd8eedcc3fd2
py3: add b'' prefixes in tests/test-profile.t
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35393
diff
changeset
|
146 > ui.write(b'fooprof: loaded\n') |
32417
f40dc6f7c12f
profiling: allow loading profiling extension before everything else
Jun Wu <quark@fb.com>
parents:
32337
diff
changeset
|
147 > EOF |
f40dc6f7c12f
profiling: allow loading profiling extension before everything else
Jun Wu <quark@fb.com>
parents:
32337
diff
changeset
|
148 |
f40dc6f7c12f
profiling: allow loading profiling extension before everything else
Jun Wu <quark@fb.com>
parents:
32337
diff
changeset
|
149 $ cat > otherextension.py <<EOF |
f40dc6f7c12f
profiling: allow loading profiling extension before everything else
Jun Wu <quark@fb.com>
parents:
32337
diff
changeset
|
150 > from __future__ import absolute_import |
f40dc6f7c12f
profiling: allow loading profiling extension before everything else
Jun Wu <quark@fb.com>
parents:
32337
diff
changeset
|
151 > def extsetup(ui): |
38075
fd8eedcc3fd2
py3: add b'' prefixes in tests/test-profile.t
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35393
diff
changeset
|
152 > ui.write(b'otherextension: loaded\n') |
32417
f40dc6f7c12f
profiling: allow loading profiling extension before everything else
Jun Wu <quark@fb.com>
parents:
32337
diff
changeset
|
153 > EOF |
f40dc6f7c12f
profiling: allow loading profiling extension before everything else
Jun Wu <quark@fb.com>
parents:
32337
diff
changeset
|
154 |
f40dc6f7c12f
profiling: allow loading profiling extension before everything else
Jun Wu <quark@fb.com>
parents:
32337
diff
changeset
|
155 $ hg init b |
f40dc6f7c12f
profiling: allow loading profiling extension before everything else
Jun Wu <quark@fb.com>
parents:
32337
diff
changeset
|
156 $ cd b |
f40dc6f7c12f
profiling: allow loading profiling extension before everything else
Jun Wu <quark@fb.com>
parents:
32337
diff
changeset
|
157 $ cat >> .hg/hgrc <<EOF |
f40dc6f7c12f
profiling: allow loading profiling extension before everything else
Jun Wu <quark@fb.com>
parents:
32337
diff
changeset
|
158 > [extensions] |
f40dc6f7c12f
profiling: allow loading profiling extension before everything else
Jun Wu <quark@fb.com>
parents:
32337
diff
changeset
|
159 > other = $TESTTMP/otherextension.py |
f40dc6f7c12f
profiling: allow loading profiling extension before everything else
Jun Wu <quark@fb.com>
parents:
32337
diff
changeset
|
160 > fooprof = $TESTTMP/fooprof.py |
f40dc6f7c12f
profiling: allow loading profiling extension before everything else
Jun Wu <quark@fb.com>
parents:
32337
diff
changeset
|
161 > EOF |
f40dc6f7c12f
profiling: allow loading profiling extension before everything else
Jun Wu <quark@fb.com>
parents:
32337
diff
changeset
|
162 |
f40dc6f7c12f
profiling: allow loading profiling extension before everything else
Jun Wu <quark@fb.com>
parents:
32337
diff
changeset
|
163 $ hg root |
f40dc6f7c12f
profiling: allow loading profiling extension before everything else
Jun Wu <quark@fb.com>
parents:
32337
diff
changeset
|
164 otherextension: loaded |
f40dc6f7c12f
profiling: allow loading profiling extension before everything else
Jun Wu <quark@fb.com>
parents:
32337
diff
changeset
|
165 fooprof: loaded |
35393
4441705b7111
tests: remove (glob) annotations that were only for '\' matches
Matt Harbison <matt_harbison@yahoo.com>
parents:
34445
diff
changeset
|
166 $TESTTMP/b |
32417
f40dc6f7c12f
profiling: allow loading profiling extension before everything else
Jun Wu <quark@fb.com>
parents:
32337
diff
changeset
|
167 $ HGPROF=fooprof hg root --profile |
f40dc6f7c12f
profiling: allow loading profiling extension before everything else
Jun Wu <quark@fb.com>
parents:
32337
diff
changeset
|
168 fooprof: loaded |
f40dc6f7c12f
profiling: allow loading profiling extension before everything else
Jun Wu <quark@fb.com>
parents:
32337
diff
changeset
|
169 fooprof: start profile |
f40dc6f7c12f
profiling: allow loading profiling extension before everything else
Jun Wu <quark@fb.com>
parents:
32337
diff
changeset
|
170 otherextension: loaded |
35393
4441705b7111
tests: remove (glob) annotations that were only for '\' matches
Matt Harbison <matt_harbison@yahoo.com>
parents:
34445
diff
changeset
|
171 $TESTTMP/b |
32417
f40dc6f7c12f
profiling: allow loading profiling extension before everything else
Jun Wu <quark@fb.com>
parents:
32337
diff
changeset
|
172 fooprof: end profile |
f40dc6f7c12f
profiling: allow loading profiling extension before everything else
Jun Wu <quark@fb.com>
parents:
32337
diff
changeset
|
173 |
f40dc6f7c12f
profiling: allow loading profiling extension before everything else
Jun Wu <quark@fb.com>
parents:
32337
diff
changeset
|
174 $ HGPROF=other hg root --profile 2>&1 | head -n 2 |
f40dc6f7c12f
profiling: allow loading profiling extension before everything else
Jun Wu <quark@fb.com>
parents:
32337
diff
changeset
|
175 otherextension: loaded |
f40dc6f7c12f
profiling: allow loading profiling extension before everything else
Jun Wu <quark@fb.com>
parents:
32337
diff
changeset
|
176 unrecognized profiler 'other' - ignored |
f40dc6f7c12f
profiling: allow loading profiling extension before everything else
Jun Wu <quark@fb.com>
parents:
32337
diff
changeset
|
177 |
f40dc6f7c12f
profiling: allow loading profiling extension before everything else
Jun Wu <quark@fb.com>
parents:
32337
diff
changeset
|
178 $ HGPROF=unknown hg root --profile 2>&1 | head -n 1 |
f40dc6f7c12f
profiling: allow loading profiling extension before everything else
Jun Wu <quark@fb.com>
parents:
32337
diff
changeset
|
179 unrecognized profiler 'unknown' - ignored |
f40dc6f7c12f
profiling: allow loading profiling extension before everything else
Jun Wu <quark@fb.com>
parents:
32337
diff
changeset
|
180 |
f40dc6f7c12f
profiling: allow loading profiling extension before everything else
Jun Wu <quark@fb.com>
parents:
32337
diff
changeset
|
181 $ cd .. |
34445
5b19f0442043
test-profile: gate chg-incompatible part with '#if chg'
Jun Wu <quark@fb.com>
parents:
33609
diff
changeset
|
182 #endif |