Mercurial > hg
changeset 20848:11a9393609c8
revsetbenchmark: simplify and convert the script to python
The script is now in python. That translation is very raw, more improvement to
comes:
The "current code" and "base" entry have been dropped. This is trivial to get
same result using a tagged revision or "." in the list of benchmarked revision.
author | Pierre-Yves David <pierre-yves.david@fb.com> |
---|---|
date | Wed, 26 Mar 2014 18:03:30 -0700 |
parents | c3f455337c6a |
children | 5abc2562106a |
files | contrib/revsetbenchmarks.py contrib/revsetbenchmarks.sh |
diffstat | 2 files changed, 58 insertions(+), 89 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contrib/revsetbenchmarks.py Wed Mar 26 18:03:30 2014 -0700 @@ -0,0 +1,58 @@ +#!/usr/bin/env python + +# Measure the performance of a list of revsets against multiple revisions +# defined by parameter. Checkout one by one and run perfrevset with every +# revset in the list to benchmark its performance. +# +# - First argument is a revset of mercurial own repo to runs against. +# - Second argument is the file from which the revset array will be taken +# If second argument is omitted read it from standard input +# +# You should run this from the root of your mercurial repository. +# +# This script also does one run of the current version of mercurial installed +# to compare performance. + +import sys +from subprocess import check_call, check_output + +HG="hg update --quiet --check" +PERF="./hg --config extensions.perf=contrib/perf.py perfrevset" + +target_rev = sys.argv[1] + +revsetsfile = sys.stdin +if len(sys.argv) > 2: + revsetsfile = open(sys.argv[2]) + +revsets = [l.strip() for l in revsetsfile] + +print "Revsets to benchmark" +print "----------------------------" + +for idx, rset in enumerate(revsets): + print "%i) %s" % (idx, rset) + +print "----------------------------" +print + +revs = check_output("hg log --template='{rev}\n' --rev " + target_rev, + shell=True); + +revs = [r for r in revs.split() if r] + +# Benchmark revisions +for r in revs: + print "----------------------------" + sys.stdout.write("Revision: ") + sys.stdout.flush() + check_call('hg log -r %s --template "{desc|firstline}\n"' % r, shell=True) + + print "----------------------------" + check_call(HG + ' ' + r, shell=True) + for idx, rset in enumerate(revsets): + sys.stdout.write("%i) " % idx) + sys.stdout.flush() + check_call(PERF + ' "%s"' % rset, shell=True) + print "----------------------------" +
--- a/contrib/revsetbenchmarks.sh Wed Mar 26 16:38:08 2014 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,89 +0,0 @@ -#!/usr/bin/env bash - -# Measure the performance of a list of revsets against multiple revisions -# defined by parameter. Checkout one by one and run perfrevset with every -# revset in the list to benchmark its performance. -# -# - First argument is a revset of mercurial own repo to runs against. -# - Second argument is the file from which the revset array will be taken -# If second argument is omitted read it from standard input -# -# You should run this from the root of your mercurial repository. -# -# This script also does one run of the current version of mercurial installed -# to compare performance. - -HG="hg update" -PERF="./hg --config extensions.perf=contrib/perf.py perfrevset" -BASE_PERF="hg --config extensions.perf=contrib/perf.py perfrevset" - -TARGETS=$1 -shift -# read from a file or from standard output -if [ $# -ne 0 ]; then - readarray REVSETS < $1 -else - readarray REVSETS -fi - -hg update --quiet - -echo "Starting time benchmarking" -echo - -echo "Revsets to benchmark" -echo "----------------------------" - -for (( j = 0; j < ${#REVSETS[@]}; j++ )); -do - echo "${j}) ${REVSETS[$j]}" -done - -echo "----------------------------" -echo - -# Benchmark baseline -echo "Benchmarking baseline" - -for (( j = 0; j < ${#REVSETS[@]}; j++ )); - do - echo -n "${j}) " - $BASE_PERF "${REVSETS[$j]}" -done - -echo -echo - -# Benchmark revisions -for i in $(hg log --template='{rev}\n' --rev $TARGETS); -do - echo "----------------------------" - echo -n "Revision: " - hg log -r $i --template "{desc|firstline}\n" - - echo "----------------------------" - $HG $i - for (( j = 0; j < ${#REVSETS[@]}; j++ )); - do - echo -n "${j}) " - $PERF "${REVSETS[$j]}" - done - echo "----------------------------" -done - -$HG - -# Benchmark current code -echo "Benchmarking current code" - -for (( j = 0; j < ${#REVSETS[@]}; j++ )); - do - echo -n "${j}) " - $PERF "${REVSETS[$j]}" -done - - -echo -echo "Time benchmarking finished" - -