##// END OF EJS Templates
perf: make `hg perfwrite` more flexible...
perf: make `hg perfwrite` more flexible The more flexible command was used recently while finding a solution for a buffering bug (eventually fixed in f9734b2d59cc (the changeset description uses a different benchmark)). In comparison to the previous version, the new version is much more flexible. While using it, the focus was on testing small writes. For this reason, by default it calls ui.write() 100 times with a single byte plus one newline byte, for 100 lines. To get the previous behavior, run `hg perfwrite --nlines=100000 --nitems=1 --item='Testing write performance' --batch-line`.

File last commit:

r45530:c2df0bca default
r45530:c2df0bca default
Show More
test-contrib-perf.t
399 lines | 12.4 KiB | text/troff | Tads3Lexer
/ tests / test-contrib-perf.t
timeless
tests: drop require slow in test-contrib-perf...
r27315 #require test-repo
timeless
test-contrib-perf: add smoke tests for perf.py
r27101
Set vars:
timeless
tests: silence test-repo obsolete warning...
r29219 $ . "$TESTDIR/helpers-testrepo.sh"
timeless
test-contrib-perf: add smoke tests for perf.py
r27101 $ CONTRIBDIR="$TESTDIR/../contrib"
timeless
tests: use a single repo for test-contrib-perf
r27309 Prepare repo:
timeless
test-contrib-perf: add smoke tests for perf.py
r27101
timeless
tests: use a single repo for test-contrib-perf
r27309 $ hg init
timeless
test-contrib-perf: add smoke tests for perf.py
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
tests: use a single repo for test-contrib-perf
r27309 $ cat >> $HGRCPATH << EOF
timeless
test-contrib-perf: add smoke tests for perf.py
r27101 > [extensions]
tests: use "perf" as a the extension name in test-contrib-perf.t...
r42181 > perf=$CONTRIBDIR/perf.py
timeless
tests: drop require slow in test-contrib-perf...
r27315 > [perf]
> presleep=0
> stub=on
> parentscount=1
timeless
test-contrib-perf: add smoke tests for perf.py
r27101 > EOF
tests: use "perf" as a the extension name in test-contrib-perf.t...
r42181 $ hg help -e perf
perf extension - helper extension to measure performance
timeless
test-contrib-perf: add smoke tests for perf.py
r27101
perf: document config options...
r42182 Configurations
==============
"perf"
------
"all-timing"
Augie Fackler
perf: copyedit a few documentation strings...
r42188 When set, additional statistics will be reported for each benchmark: best,
perf: document config options...
r42182 worst, median average. If not set only the best timing is reported
(default: off).
"presleep"
Augie Fackler
perf: copyedit a few documentation strings...
r42188 number of second to wait before any group of runs (default: 1)
perf: document config options...
r42182
perf: add a `pre-run` option...
r42551 "pre-run"
number of run to perform before starting measurement.
perf: add an option to profile the benchmark section...
r42552 "profile-benchmark"
Enable profiling for the benchmarked section. (The first iteration is
benchmarked)
perf: introduce a `perf.run-limits` options...
r42186 "run-limits"
Augie Fackler
perf: copyedit a few documentation strings...
r42188 Control the number of runs each benchmark will perform. The option value
perf: introduce a `perf.run-limits` options...
r42186 should be a list of '<time>-<numberofrun>' pairs. After each run the
Augie Fackler
perf: copyedit a few documentation strings...
r42188 conditions are considered in order with the following logic:
perf: introduce a `perf.run-limits` options...
r42186
Augie Fackler
perf: copyedit a few documentation strings...
r42188 If benchmark has been running for <time> seconds, and we have performed
perf: introduce a `perf.run-limits` options...
r42186 <numberofrun> iterations, stop the benchmark,
The default value is: '3.0-100, 10.0-3'
perf: document config options...
r42182 "stub"
Augie Fackler
perf: copyedit a few documentation strings...
r42188 When set, benchmarks will only be run once, useful for testing (default:
perf: document config options...
r42182 off)
timeless
test-contrib-perf: add smoke tests for perf.py
r27101 list of commands:
perfaddremove
(no help text available)
perfancestors
(no help text available)
perfancestorset
(no help text available)
perfannotate (no help text available)
Gregory Szorc
perf: support bdiffing multiple revisions in a single revlog...
r30336 perfbdiff benchmark a bdiff between revisions
perf: add a perfbookmarks command...
r32733 perfbookmarks
benchmark parsing bookmarks from disk to memory
timeless
test-contrib-perf: add smoke tests for perf.py
r27101 perfbranchmap
benchmark the update of a branchmap
Martijn Pieters
perf: time loading branchmap caches...
r39150 perfbranchmapload
benchmark reading the branchmap
Boris Feld
perf: add a `perfbranchmapupdate` command...
r40804 perfbranchmapupdate
benchmark branchmap update from for <base> revs to <target>
revs
Gregory Szorc
perf: add command to benchmark bundle reading...
r35108 perfbundleread
Benchmark reading of bundle files.
timeless
test-contrib-perf: add smoke tests for perf.py
r27101 perfcca (no help text available)
Gregory Szorc
perf: add perfchangegroupchangelog command...
r30018 perfchangegroupchangelog
Benchmark producing a changelog group for a changegroup.
timeless
test-contrib-perf: add smoke tests for perf.py
r27101 perfchangeset
(no help text available)
perfctxfiles (no help text available)
perfdiffwd Profile diff of working directory changes
perfdirfoldmap
perf: document `perfdirfoldmap`
r43397 benchmap a 'dirstate._map.dirfoldmap.get()' request
timeless
test-contrib-perf: add smoke tests for perf.py
r27101 perfdirs (no help text available)
perf: introduce a `--iteration` to `perfdirstate`...
r43466 perfdirstate benchmap the time of various distate operations
timeless
test-contrib-perf: add smoke tests for perf.py
r27101 perfdirstatedirs
perf: document `perfdirstatedirs`
r43393 benchmap a 'dirstate.hasdir' call from an empty 'dirs' cache
timeless
test-contrib-perf: add smoke tests for perf.py
r27101 perfdirstatefoldmap
perf: document `perfdirstatefoldmap`
r43395 benchmap a 'dirstate._map.filefoldmap.get()' request
timeless
test-contrib-perf: add smoke tests for perf.py
r27101 perfdirstatewrite
perf: document `perfdirstatewrite`
r43399 benchmap the time it take to write a dirstate on disk
Georges Racinet
perfdiscovery: benching findcommonheads()...
r40977 perfdiscovery
benchmark discovery between local repo and the peer at given
path
timeless
test-contrib-perf: add smoke tests for perf.py
r27101 perffncacheencode
(no help text available)
perffncacheload
(no help text available)
perffncachewrite
(no help text available)
Boris Feld
perf: document perfheads
r41479 perfheads benchmark the computation of a changelog heads
perf: add a `perfhelper-mergecopies` command...
r42577 perfhelper-mergecopies
find statistics about potential parameters for
'perfmergecopies'
Boris Feld
perf: rename `perfhelper-tracecopies` to `perfhelper-pathcopies`...
r40771 perfhelper-pathcopies
Boris Feld
perf: add a new `perfhelper-tracecopies` command...
r40727 find statistic about potential parameters for the
'perftracecopies'
Boris Feld
perf: add a perfignore command...
r40781 perfignore benchmark operation related to computing ignore
Boris Feld
perf: add some documentation to perfindex...
r41482 perfindex benchmark index creation time followed by a lookup
Jun Wu
perf: add a command to benchmark linelog edits...
r39005 perflinelogedits
(no help text available)
timeless
test-contrib-perf: add smoke tests for perf.py
r27101 perfloadmarkers
benchmark the time to parse the on-disk markers for a repo
perflog (no help text available)
perflookup (no help text available)
Gregory Szorc
perf: add perflrucachedict command...
r27286 perflrucachedict
(no help text available)
Boris Feld
perf: document the perfmanifest command
r38715 perfmanifest benchmark the time to read a manifest from disk and return a
usable
timeless
test-contrib-perf: add smoke tests for perf.py
r27101 perfmergecalculate
(no help text available)
perf: add a new `perfmergecopies` command...
r42576 perfmergecopies
measure runtime of 'copies.mergecopies'
timeless
test-contrib-perf: add smoke tests for perf.py
r27101 perfmoonwalk benchmark walking the changelog backwards
perfnodelookup
(no help text available)
Boris Feld
perf: add a perfnodemap command...
r41610 perfnodemap benchmark the time necessary to look up revision from a cold
nodemap
perf: document perfparents
r42183 perfparents benchmark the time necessary to fetch one changeset's parents.
timeless
test-contrib-perf: add smoke tests for perf.py
r27101 perfpathcopies
Boris Feld
perf: add a docstring to `perfpathcopies`...
r40770 benchmark the copy tracing logic
perfphases: add 'perfphases' command...
r32467 perfphases benchmark phasesets computation
Boris Feld
perf: add a perfphasesremote command...
r39180 perfphasesremote
benchmark time needed to analyse phases of the remote server
Gregory Szorc
perf: add perfprogress command...
r40961 perfprogress printing of progress bars
timeless
test-contrib-perf: add smoke tests for perf.py
r27101 perfrawfiles (no help text available)
Gregory Szorc
perf: add command for measuring revlog chunk operations...
r30451 perfrevlogchunks
Benchmark operations on revlog chunks.
Gregory Szorc
perf: benchmark command for revlog indexes...
r32532 perfrevlogindex
Benchmark operations against a revlog index.
Gregory Szorc
perf: add perfrevlogrevision...
r27470 perfrevlogrevision
Benchmark obtaining a revlog revision.
Gregory Szorc
perf: rename perfrevlog to perfrevlogrevisions...
r32531 perfrevlogrevisions
Benchmark reading a series of revisions from a revlog.
Boris Feld
perf: introduce a perfrevlogwrite command...
r40583 perfrevlogwrite
Benchmark writing a series of revisions to a revlog.
timeless
test-contrib-perf: add smoke tests for perf.py
r27101 perfrevrange (no help text available)
perfrevset benchmark the execution time of a revset
perfstartup (no help text available)
perf: document `perfstatus`
r43390 perfstatus benchmark the performance of a single status call
timeless
test-contrib-perf: add smoke tests for perf.py
r27101 perftags (no help text available)
perftemplating
Boris Feld
perftemplating: allow to specify the template to test...
r38277 test the rendering time of a given template
Augie Fackler
perf: add a perfunidiff command for benchmarking unified diff speed...
r35879 perfunidiff benchmark a unified diff between revisions
timeless
test-contrib-perf: add smoke tests for perf.py
r27101 perfvolatilesets
benchmark the computation of various volatile set
perfwalk (no help text available)
Manuel Jacob
perf: make `hg perfwrite` more flexible...
r45530 perfwrite microbenchmark ui.write (and others)
timeless
test-contrib-perf: add smoke tests for perf.py
r27101
tests: use "perf" as a the extension name in test-contrib-perf.t...
r42181 (use 'hg help -v perf' to show built-in aliases and global options)
timeless
tests: drop require slow in test-contrib-perf...
r27315 $ hg perfaddremove
$ hg perfancestors
$ hg perfancestorset 2
$ hg perfannotate a
Gregory Szorc
perf: add perfbdiff...
r30307 $ hg perfbdiff -c 1
Gregory Szorc
perf: unbust perfbdiff --alldata...
r30426 $ hg perfbdiff --alldata 1
Augie Fackler
perf: add a perfunidiff command for benchmarking unified diff speed...
r35879 $ hg perfunidiff -c 1
$ hg perfunidiff --alldata 1
perf: add a perfbookmarks command...
r32733 $ hg perfbookmarks
timeless
tests: drop require slow in test-contrib-perf...
r27315 $ hg perfbranchmap
Boris Feld
perf: fallback to subset if ondisk cache is missing in perfbranchmapload...
r40756 $ hg perfbranchmapload
Boris Feld
perf: add a `perfbranchmapupdate` command...
r40804 $ hg perfbranchmapupdate --base "not tip" --target "tip"
benchmark of branchmap with 3 revisions with 1 new ones
timeless
tests: drop require slow in test-contrib-perf...
r27315 $ hg perfcca
Gregory Szorc
perf: add perfchangegroupchangelog command...
r30018 $ hg perfchangegroupchangelog
Pulkit Goyal
perf: rename version flag of perfchangegroupchangelog to cgversion...
r40749 $ hg perfchangegroupchangelog --cgversion 01
timeless
tests: drop require slow in test-contrib-perf...
r27315 $ hg perfchangeset 2
$ hg perfctxfiles 2
$ hg perfdiffwd
$ hg perfdirfoldmap
$ hg perfdirs
$ hg perfdirstate
perf: introduce a `--contains` flag to the `perfdirstate` command...
r43468 $ hg perfdirstate --contains
perf: introduce a `--iteration` to `perfdirstate`...
r43466 $ hg perfdirstate --iteration
timeless
tests: drop require slow in test-contrib-perf...
r27315 $ hg perfdirstatedirs
$ hg perfdirstatefoldmap
$ hg perfdirstatewrite
Gregory Szorc
tests: conditionalize tests for various repo features...
r37434 #if repofncache
timeless
tests: drop require slow in test-contrib-perf...
r27315 $ hg perffncacheencode
$ hg perffncacheload
Boris Feld
perffncachewrite: load fncache after lock is acquired...
r38717 $ hg debugrebuildfncache
fncache already up to date
timeless
tests: drop require slow in test-contrib-perf...
r27315 $ hg perffncachewrite
Boris Feld
perffncachewrite: load fncache after lock is acquired...
r38717 $ hg debugrebuildfncache
fncache already up to date
Gregory Szorc
tests: conditionalize tests for various repo features...
r37434 #endif
timeless
tests: drop require slow in test-contrib-perf...
r27315 $ hg perfheads
Boris Feld
perf: add a perfignore command...
r40781 $ hg perfignore
timeless
tests: drop require slow in test-contrib-perf...
r27315 $ hg perfindex
Jun Wu
perf: add a command to benchmark linelog edits...
r39005 $ hg perflinelogedits -n 1
timeless
tests: drop require slow in test-contrib-perf...
r27315 $ hg perfloadmarkers
$ hg perflog
$ hg perflookup 2
$ hg perflrucache
$ hg perfmanifest 2
Gregory Szorc
perf: use storage API for resolving manifest node...
r39354 $ hg perfmanifest -m 44fe2c8352bb3a478ffd7d8350bbc721920134d1
$ hg perfmanifest -m 44fe2c8352bb
abort: manifest revision must be integer or full node
[255]
timeless
tests: drop require slow in test-contrib-perf...
r27315 $ hg perfmergecalculate -r 3
$ hg perfmoonwalk
$ hg perfnodelookup 2
$ hg perfpathcopies 1 2
Gregory Szorc
perf: add perfprogress command...
r40961 $ hg perfprogress --total 1000
timeless
tests: drop require slow in test-contrib-perf...
r27315 $ hg perfrawfiles 2
Gregory Szorc
perf: benchmark command for revlog indexes...
r32532 $ hg perfrevlogindex -c
Gregory Szorc
tests: conditionalize tests based on presence of revlogs for files...
r37356 #if reporevlogstore
Gregory Szorc
perf: rename perfrevlog to perfrevlogrevisions...
r32531 $ hg perfrevlogrevisions .hg/store/data/a.i
Gregory Szorc
tests: conditionalize tests based on presence of revlogs for files...
r37356 #endif
Gregory Szorc
perf: add perfrevlogrevision...
r27470 $ hg perfrevlogrevision -m 0
Gregory Szorc
perf: add command for measuring revlog chunk operations...
r30451 $ hg perfrevlogchunks -c
timeless
tests: drop require slow in test-contrib-perf...
r27315 $ hg perfrevrange
$ hg perfrevset 'all()'
$ hg perfstartup
$ hg perfstatus
perf: add a way to benchmark `dirstate.status`...
r43740 $ hg perfstatus --dirstate
timeless
tests: drop require slow in test-contrib-perf...
r27315 $ hg perftags
$ hg perftemplating
$ hg perfvolatilesets
$ hg perfwalk
$ hg perfparents
Georges Racinet
perfdiscovery: benching findcommonheads()...
r40977 $ hg perfdiscovery -q .
timeless
test-contrib-perf: add smoke tests for perf.py
r27101
perf: introduce a `perf.run-limits` options...
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
perf: make perf.run-limits code work with Python 3...
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 !)
perf: introduce a `perf.run-limits` options...
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
perf: add a 'perf.all-timing' option to display more than best time...
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
perf: fix -T json...
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)
}
]
perf: add a `pre-run` option...
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
perf: add an option to profile the benchmark section...
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
tests: introduce check-perf-code.py to add extra checks on perf.py...
r29570 Check perf.py for historical portability
Boris Feld
perf: add a 'perf.all-timing' option to display more than best time...
r38716 ----------------------------------------
FUJIWARA Katsunori
tests: introduce check-perf-code.py to add extra checks on perf.py...
r29570
$ cd "$TESTDIR/.."
Yuya Nishihara
tests: alias syshg and syshgenv so they can be switched conditionally
r33199 $ (testrepohg files -r 1.2 glob:mercurial/*.c glob:mercurial/*.py;
> testrepohg files -r tip glob:mercurial/*.c glob:mercurial/*.py) |
FUJIWARA Katsunori
tests: check importing modules in perf.py for historical portability...
r29571 > "$TESTDIR"/check-perf-code.py contrib/perf.py
Boris Feld
perf: add threading capability to perfbdiff...
r35617 contrib/perf.py:\d+: (re)
Gregory Szorc
perf: add command to benchmark bundle reading...
r35108 > from mercurial import (
import newer module separately in try clause for early Mercurial
Boris Feld
perf: add a perfphasesremote command...
r39180 contrib/perf.py:\d+: (re)
> from mercurial import (
import newer module separately in try clause for early Mercurial
Boris Feld
perf: introduce a perfrevlogwrite command...
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
perf: add command to benchmark bundle reading...
r35108 [1]