test-contrib-perf.t
425 lines
| 12.9 KiB
| text/troff
|
Tads3Lexer
/ tests / test-contrib-perf.t
timeless
|
r27315 | #require test-repo | ||
timeless
|
r27101 | |||
Set vars: | ||||
timeless
|
r29219 | $ . "$TESTDIR/helpers-testrepo.sh" | ||
timeless
|
r27101 | $ CONTRIBDIR="$TESTDIR/../contrib" | ||
timeless
|
r27309 | Prepare repo: | ||
timeless
|
r27101 | |||
timeless
|
r27309 | $ hg init | ||
timeless
|
r27101 | |||
$ echo this is file a > a | ||||
$ hg add a | ||||
$ hg commit -m first | ||||
$ echo adding to file a >> a | ||||
$ hg commit -m second | ||||
$ echo adding more to file a >> a | ||||
$ hg commit -m third | ||||
$ hg up -r 0 | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
$ echo merge-this >> a | ||||
$ hg commit -m merge-able | ||||
created new head | ||||
$ hg up -r 2 | ||||
1 files updated, 0 files merged, 0 files removed, 0 files unresolved | ||||
perfstatus | ||||
timeless
|
r27309 | $ cat >> $HGRCPATH << EOF | ||
timeless
|
r27101 | > [extensions] | ||
r42181 | > perf=$CONTRIBDIR/perf.py | |||
timeless
|
r27315 | > [perf] | ||
> presleep=0 | ||||
> stub=on | ||||
> parentscount=1 | ||||
timeless
|
r27101 | > EOF | ||
r42181 | $ hg help -e perf | |||
perf extension - helper extension to measure performance | ||||
timeless
|
r27101 | |||
r42182 | Configurations | |||
============== | ||||
"perf" | ||||
------ | ||||
"all-timing" | ||||
Augie Fackler
|
r42188 | When set, additional statistics will be reported for each benchmark: best, | ||
r42182 | worst, median average. If not set only the best timing is reported | |||
(default: off). | ||||
"presleep" | ||||
Augie Fackler
|
r42188 | number of second to wait before any group of runs (default: 1) | ||
r42182 | ||||
r42551 | "pre-run" | |||
number of run to perform before starting measurement. | ||||
r42552 | "profile-benchmark" | |||
Enable profiling for the benchmarked section. (The first iteration is | ||||
benchmarked) | ||||
r42186 | "run-limits" | |||
Augie Fackler
|
r42188 | Control the number of runs each benchmark will perform. The option value | ||
r42186 | should be a list of '<time>-<numberofrun>' pairs. After each run the | |||
Augie Fackler
|
r42188 | conditions are considered in order with the following logic: | ||
r42186 | ||||
Augie Fackler
|
r42188 | If benchmark has been running for <time> seconds, and we have performed | ||
r42186 | <numberofrun> iterations, stop the benchmark, | |||
The default value is: '3.0-100, 10.0-3' | ||||
r42182 | "stub" | |||
Augie Fackler
|
r42188 | When set, benchmarks will only be run once, useful for testing (default: | ||
r42182 | off) | |||
timeless
|
r27101 | list of commands: | ||
r47117 | perf::addremove | |||
r47063 | (no help text available) | |||
r47117 | perf::ancestors | |||
timeless
|
r27101 | (no help text available) | ||
r47117 | perf::ancestorset | |||
timeless
|
r27101 | (no help text available) | ||
r47117 | perf::annotate | |||
timeless
|
r27101 | (no help text available) | ||
r47117 | perf::bdiff benchmark a bdiff between revisions | |||
perf::bookmarks | ||||
r32733 | benchmark parsing bookmarks from disk to memory | |||
r47117 | perf::branchmap | |||
timeless
|
r27101 | benchmark the update of a branchmap | ||
r47117 | perf::branchmapload | |||
Martijn Pieters
|
r39150 | benchmark reading the branchmap | ||
r47117 | perf::branchmapupdate | |||
Boris Feld
|
r40804 | benchmark branchmap update from for <base> revs to <target> | ||
revs | ||||
r47117 | perf::bundleread | |||
Gregory Szorc
|
r35108 | Benchmark reading of bundle files. | ||
r47117 | perf::cca (no help text available) | |||
perf::changegroupchangelog | ||||
Gregory Szorc
|
r30018 | Benchmark producing a changelog group for a changegroup. | ||
r47117 | perf::changeset | |||
r47063 | (no help text available) | |||
r47117 | perf::ctxfiles | |||
timeless
|
r27101 | (no help text available) | ||
r47117 | perf::diffwd Profile diff of working directory changes | |||
perf::dirfoldmap | ||||
r43397 | benchmap a 'dirstate._map.dirfoldmap.get()' request | |||
r47117 | perf::dirs (no help text available) | |||
perf::dirstate | ||||
r47063 | benchmap the time of various distate operations | |||
r47117 | perf::dirstatedirs | |||
r43393 | benchmap a 'dirstate.hasdir' call from an empty 'dirs' cache | |||
r47117 | perf::dirstatefoldmap | |||
r43395 | benchmap a 'dirstate._map.filefoldmap.get()' request | |||
r47117 | perf::dirstatewrite | |||
r43399 | benchmap the time it take to write a dirstate on disk | |||
r47117 | perf::discovery | |||
Georges Racinet
|
r40977 | benchmark discovery between local repo and the peer at given | ||
path | ||||
r47117 | perf::fncacheencode | |||
timeless
|
r27101 | (no help text available) | ||
r47117 | perf::fncacheload | |||
timeless
|
r27101 | (no help text available) | ||
r47117 | perf::fncachewrite | |||
timeless
|
r27101 | (no help text available) | ||
r47117 | perf::heads benchmark the computation of a changelog heads | |||
perf::helper-mergecopies | ||||
r42577 | find statistics about potential parameters for | |||
'perfmergecopies' | ||||
r47117 | perf::helper-pathcopies | |||
Boris Feld
|
r40727 | find statistic about potential parameters for the | ||
'perftracecopies' | ||||
r47117 | perf::ignore benchmark operation related to computing ignore | |||
perf::index benchmark index creation time followed by a lookup | ||||
perf::linelogedits | ||||
Jun Wu
|
r39005 | (no help text available) | ||
r47117 | perf::loadmarkers | |||
timeless
|
r27101 | benchmark the time to parse the on-disk markers for a repo | ||
r47117 | perf::log (no help text available) | |||
perf::lookup (no help text available) | ||||
perf::lrucachedict | ||||
Gregory Szorc
|
r27286 | (no help text available) | ||
r47117 | perf::manifest | |||
r47063 | benchmark the time to read a manifest from disk and return a | |||
Boris Feld
|
r38715 | usable | ||
r47117 | perf::mergecalculate | |||
timeless
|
r27101 | (no help text available) | ||
r47117 | perf::mergecopies | |||
r42576 | measure runtime of 'copies.mergecopies' | |||
r47117 | perf::moonwalk | |||
r47063 | benchmark walking the changelog backwards | |||
r47117 | perf::nodelookup | |||
timeless
|
r27101 | (no help text available) | ||
r47117 | perf::nodemap | |||
r47063 | benchmark the time necessary to look up revision from a cold | |||
Boris Feld
|
r41610 | nodemap | ||
r47117 | perf::parents | |||
r47063 | benchmark the time necessary to fetch one changeset's parents. | |||
r47117 | perf::pathcopies | |||
Boris Feld
|
r40770 | benchmark the copy tracing logic | ||
r47117 | perf::phases benchmark phasesets computation | |||
perf::phasesremote | ||||
Boris Feld
|
r39180 | benchmark time needed to analyse phases of the remote server | ||
r47117 | perf::progress | |||
r47063 | printing of progress bars | |||
r47117 | perf::rawfiles | |||
r47063 | (no help text available) | |||
r47117 | perf::revlogchunks | |||
Gregory Szorc
|
r30451 | Benchmark operations on revlog chunks. | ||
r47117 | perf::revlogindex | |||
Gregory Szorc
|
r32532 | Benchmark operations against a revlog index. | ||
r47117 | perf::revlogrevision | |||
Gregory Szorc
|
r27470 | Benchmark obtaining a revlog revision. | ||
r47117 | perf::revlogrevisions | |||
Gregory Szorc
|
r32531 | Benchmark reading a series of revisions from a revlog. | ||
r47117 | perf::revlogwrite | |||
Boris Feld
|
r40583 | Benchmark writing a series of revisions to a revlog. | ||
r47117 | perf::revrange | |||
r47063 | (no help text available) | |||
r47117 | perf::revset benchmark the execution time of a revset | |||
perf::startup | ||||
r47063 | (no help text available) | |||
r47117 | perf::status benchmark the performance of a single status call | |||
perf::tags (no help text available) | ||||
perf::templating | ||||
Boris Feld
|
r38277 | test the rendering time of a given template | ||
r47117 | perf::unidiff | |||
r47063 | benchmark a unified diff between revisions | |||
r47117 | perf::volatilesets | |||
timeless
|
r27101 | benchmark the computation of various volatile set | ||
r47117 | perf::walk (no help text available) | |||
perf::write microbenchmark ui.write (and others) | ||||
timeless
|
r27101 | |||
r42181 | (use 'hg help -v perf' to show built-in aliases and global options) | |||
r47116 | ||||
$ hg help perfaddremove | ||||
r47117 | hg perf::addremove | |||
r47116 | ||||
aliases: perfaddremove | ||||
(no help text available) | ||||
options: | ||||
-T --template TEMPLATE display with template | ||||
(some details hidden, use --verbose to show complete help) | ||||
timeless
|
r27315 | $ hg perfaddremove | ||
$ hg perfancestors | ||||
$ hg perfancestorset 2 | ||||
$ hg perfannotate a | ||||
Gregory Szorc
|
r30307 | $ hg perfbdiff -c 1 | ||
Gregory Szorc
|
r30426 | $ hg perfbdiff --alldata 1 | ||
Augie Fackler
|
r35879 | $ hg perfunidiff -c 1 | ||
$ hg perfunidiff --alldata 1 | ||||
r32733 | $ hg perfbookmarks | |||
timeless
|
r27315 | $ hg perfbranchmap | ||
Boris Feld
|
r40756 | $ hg perfbranchmapload | ||
Boris Feld
|
r40804 | $ hg perfbranchmapupdate --base "not tip" --target "tip" | ||
benchmark of branchmap with 3 revisions with 1 new ones | ||||
timeless
|
r27315 | $ hg perfcca | ||
Gregory Szorc
|
r30018 | $ hg perfchangegroupchangelog | ||
Pulkit Goyal
|
r40749 | $ hg perfchangegroupchangelog --cgversion 01 | ||
timeless
|
r27315 | $ hg perfchangeset 2 | ||
$ hg perfctxfiles 2 | ||||
$ hg perfdiffwd | ||||
$ hg perfdirfoldmap | ||||
$ hg perfdirs | ||||
$ hg perfdirstate | ||||
r43468 | $ hg perfdirstate --contains | |||
r43466 | $ hg perfdirstate --iteration | |||
timeless
|
r27315 | $ hg perfdirstatedirs | ||
$ hg perfdirstatefoldmap | ||||
$ hg perfdirstatewrite | ||||
Gregory Szorc
|
r37434 | #if repofncache | ||
timeless
|
r27315 | $ hg perffncacheencode | ||
$ hg perffncacheload | ||||
Boris Feld
|
r38717 | $ hg debugrebuildfncache | ||
fncache already up to date | ||||
timeless
|
r27315 | $ hg perffncachewrite | ||
Boris Feld
|
r38717 | $ hg debugrebuildfncache | ||
fncache already up to date | ||||
Gregory Szorc
|
r37434 | #endif | ||
timeless
|
r27315 | $ hg perfheads | ||
Boris Feld
|
r40781 | $ hg perfignore | ||
timeless
|
r27315 | $ hg perfindex | ||
Jun Wu
|
r39005 | $ hg perflinelogedits -n 1 | ||
timeless
|
r27315 | $ hg perfloadmarkers | ||
$ hg perflog | ||||
$ hg perflookup 2 | ||||
$ hg perflrucache | ||||
$ hg perfmanifest 2 | ||||
Gregory Szorc
|
r39354 | $ hg perfmanifest -m 44fe2c8352bb3a478ffd7d8350bbc721920134d1 | ||
$ hg perfmanifest -m 44fe2c8352bb | ||||
abort: manifest revision must be integer or full node | ||||
[255] | ||||
timeless
|
r27315 | $ hg perfmergecalculate -r 3 | ||
$ hg perfmoonwalk | ||||
$ hg perfnodelookup 2 | ||||
$ hg perfpathcopies 1 2 | ||||
Gregory Szorc
|
r40961 | $ hg perfprogress --total 1000 | ||
timeless
|
r27315 | $ hg perfrawfiles 2 | ||
Gregory Szorc
|
r32532 | $ hg perfrevlogindex -c | ||
Gregory Szorc
|
r37356 | #if reporevlogstore | ||
Gregory Szorc
|
r32531 | $ hg perfrevlogrevisions .hg/store/data/a.i | ||
Gregory Szorc
|
r37356 | #endif | ||
Gregory Szorc
|
r27470 | $ hg perfrevlogrevision -m 0 | ||
Gregory Szorc
|
r30451 | $ hg perfrevlogchunks -c | ||
timeless
|
r27315 | $ hg perfrevrange | ||
$ hg perfrevset 'all()' | ||||
$ hg perfstartup | ||||
$ hg perfstatus | ||||
r43740 | $ hg perfstatus --dirstate | |||
timeless
|
r27315 | $ hg perftags | ||
$ hg perftemplating | ||||
$ hg perfvolatilesets | ||||
$ hg perfwalk | ||||
$ hg perfparents | ||||
Georges Racinet
|
r40977 | $ hg perfdiscovery -q . | ||
timeless
|
r27101 | |||
r42186 | Test run control | |||
---------------- | ||||
Simple single entry | ||||
$ hg perfparents --config perf.stub=no --config perf.run-limits='0.000000001-15' | ||||
! wall * comb * user * sys * (best of 15) (glob) | ||||
Multiple entries | ||||
$ hg perfparents --config perf.stub=no --config perf.run-limits='500000-1, 0.000000001-5' | ||||
! wall * comb * user * sys * (best of 5) (glob) | ||||
error case are ignored | ||||
$ hg perfparents --config perf.stub=no --config perf.run-limits='500, 0.000000001-5' | ||||
malformatted run limit entry, missing "-": 500 | ||||
! wall * comb * user * sys * (best of 5) (glob) | ||||
$ hg perfparents --config perf.stub=no --config perf.run-limits='aaa-12, 0.000000001-5' | ||||
Gregory Szorc
|
r42230 | malformatted run limit entry, could not convert string to float: aaa: aaa-12 (no-py3 !) | ||
malformatted run limit entry, could not convert string to float: 'aaa': aaa-12 (py3 !) | ||||
r42186 | ! wall * comb * user * sys * (best of 5) (glob) | |||
$ hg perfparents --config perf.stub=no --config perf.run-limits='12-aaaaaa, 0.000000001-5' | ||||
malformatted run limit entry, invalid literal for int() with base 10: 'aaaaaa': 12-aaaaaa | ||||
! wall * comb * user * sys * (best of 5) (glob) | ||||
Boris Feld
|
r38716 | test actual output | ||
------------------ | ||||
normal output: | ||||
$ hg perfheads --config perf.stub=no | ||||
! wall * comb * user * sys * (best of *) (glob) | ||||
detailed output: | ||||
$ hg perfheads --config perf.all-timing=yes --config perf.stub=no | ||||
! wall * comb * user * sys * (best of *) (glob) | ||||
! wall * comb * user * sys * (max of *) (glob) | ||||
! wall * comb * user * sys * (avg of *) (glob) | ||||
! wall * comb * user * sys * (median of *) (glob) | ||||
Boris Feld
|
r40176 | test json output | ||
---------------- | ||||
normal output: | ||||
$ hg perfheads --template json --config perf.stub=no | ||||
[ | ||||
{ | ||||
"comb": *, (glob) | ||||
"count": *, (glob) | ||||
"sys": *, (glob) | ||||
"user": *, (glob) | ||||
"wall": * (glob) | ||||
} | ||||
] | ||||
detailed output: | ||||
$ hg perfheads --template json --config perf.all-timing=yes --config perf.stub=no | ||||
[ | ||||
{ | ||||
"avg.comb": *, (glob) | ||||
"avg.count": *, (glob) | ||||
"avg.sys": *, (glob) | ||||
"avg.user": *, (glob) | ||||
"avg.wall": *, (glob) | ||||
"comb": *, (glob) | ||||
"count": *, (glob) | ||||
"max.comb": *, (glob) | ||||
"max.count": *, (glob) | ||||
"max.sys": *, (glob) | ||||
"max.user": *, (glob) | ||||
"max.wall": *, (glob) | ||||
"median.comb": *, (glob) | ||||
"median.count": *, (glob) | ||||
"median.sys": *, (glob) | ||||
"median.user": *, (glob) | ||||
"median.wall": *, (glob) | ||||
"sys": *, (glob) | ||||
"user": *, (glob) | ||||
"wall": * (glob) | ||||
} | ||||
] | ||||
r42551 | Test pre-run feature | |||
-------------------- | ||||
(perf discovery has some spurious output) | ||||
$ hg perfdiscovery . --config perf.stub=no --config perf.run-limits='0.000000001-1' --config perf.pre-run=0 | ||||
! wall * comb * user * sys * (best of 1) (glob) | ||||
searching for changes | ||||
$ hg perfdiscovery . --config perf.stub=no --config perf.run-limits='0.000000001-1' --config perf.pre-run=1 | ||||
! wall * comb * user * sys * (best of 1) (glob) | ||||
searching for changes | ||||
searching for changes | ||||
$ hg perfdiscovery . --config perf.stub=no --config perf.run-limits='0.000000001-1' --config perf.pre-run=3 | ||||
! wall * comb * user * sys * (best of 1) (glob) | ||||
searching for changes | ||||
searching for changes | ||||
searching for changes | ||||
searching for changes | ||||
r42552 | test profile-benchmark option | |||
------------------------------ | ||||
Function to check that statprof ran | ||||
$ statprofran () { | ||||
> egrep 'Sample count:|No samples recorded' > /dev/null | ||||
> } | ||||
$ hg perfdiscovery . --config perf.stub=no --config perf.run-limits='0.000000001-1' --config perf.profile-benchmark=yes 2>&1 | statprofran | ||||
FUJIWARA Katsunori
|
r29570 | Check perf.py for historical portability | ||
Boris Feld
|
r38716 | ---------------------------------------- | ||
FUJIWARA Katsunori
|
r29570 | |||
$ cd "$TESTDIR/.." | ||||
Yuya Nishihara
|
r33199 | $ (testrepohg files -r 1.2 glob:mercurial/*.c glob:mercurial/*.py; | ||
> testrepohg files -r tip glob:mercurial/*.c glob:mercurial/*.py) | | ||||
FUJIWARA Katsunori
|
r29571 | > "$TESTDIR"/check-perf-code.py contrib/perf.py | ||
Boris Feld
|
r35617 | contrib/perf.py:\d+: (re) | ||
Gregory Szorc
|
r35108 | > from mercurial import ( | ||
import newer module separately in try clause for early Mercurial | ||||
Boris Feld
|
r39180 | contrib/perf.py:\d+: (re) | ||
> from mercurial import ( | ||||
import newer module separately in try clause for early Mercurial | ||||
Boris Feld
|
r40583 | contrib/perf.py:\d+: (re) | ||
> origindexpath = orig.opener.join(orig.indexfile) | ||||
use getvfs()/getsvfs() for early Mercurial | ||||
contrib/perf.py:\d+: (re) | ||||
> origdatapath = orig.opener.join(orig.datafile) | ||||
use getvfs()/getsvfs() for early Mercurial | ||||
contrib/perf.py:\d+: (re) | ||||
> vfs = vfsmod.vfs(tmpdir) | ||||
use getvfs()/getsvfs() for early Mercurial | ||||
contrib/perf.py:\d+: (re) | ||||
> vfs.options = getattr(orig.opener, 'options', None) | ||||
use getvfs()/getsvfs() for early Mercurial | ||||
Gregory Szorc
|
r35108 | [1] | ||