cairo/perf/cairo-perf-diff

100 lines
2.3 KiB
Text
Raw Normal View History

#!/bin/sh
set -e
usage() {
argv0=$(basename $0)
echo "Usage:" >&2
echo "For comparing files created my cairo-perf:" >&2
echo "" >&2
echo " $argv0 old.perf new.perf" >&2
echo "" >&2
echo "For comparing (cached) performance of revisions:" >&2
echo "" >&2
echo " $argv0 <revision>" >&2
echo " $argv0 <rev1> <rev2>" >&2
echo "" >&2
echo "If given a single revision, compares its results to that of its" >&2
echo "(first-parent) predecessor. Otherwise compares the two given revisions." >&2
echo "The revisions can be any revision accepted by git. For example:" >&2
echo "" >&2
echo " $argv0 HEAD # Show impact of latest commit" >&2
echo " $argv0 1.2.0 1.2.4 # Compare performance of 1.2.0 to 1.2.4" >&2
echo "" >&2
echo "The performance results are cached in .perf next to the .git directory." >&2
exit 1
}
if [ $# -eq 1 ]; then
old="$1^"
new="$1"
elif [ $# -eq 2 ]; then
old="$1"
new="$2"
else
usage
fi
git_setup() {
SUBDIRECTORY_OK='Yes'
. git-sh-setup
CAIRO_DIR=$(dirname $GIT_DIR)
if [ "$CAIRO_DIR" = "." ]; then
CAIRO_DIR=$(pwd)
fi
CAIRO_PERF_DIR=$CAIRO_DIR/.perf
}
rev2sha() {
rev=$1
git rev-parse --verify $rev || ( echo "Cannot resolve $rev to a revision" && exit 1 )
}
rev2perf() {
rev=$1
sha=$(rev2sha $rev)
echo "$CAIRO_PERF_DIR/$sha.perf"
}
# Usage: run_cairo_perf_if_not_cached <rev>
run_cairo_perf_if_not_cached() {
rev=$1
owd=$(pwd)
sha=$(rev2sha $rev)
perf=$(rev2perf $rev)
if [ -e $perf ]; then
return 0
fi
if [ ! -d $CAIRO_PERF_DIR ]; then
echo "Creating new perf cache in $CAIRO_PERF_DIR"
mkdir $CAIRO_PERF_DIR
fi
cd $CAIRO_PERF_DIR
if [ ! -d build ]; then
git clone -s $CAIRO_DIR build
(cd build; git checkout -b tmp-cairo-perf-diff $sha; CFLAGS="-O2" ./autogen.sh)
fi
cd build
git checkout tmp-cairo-perf-diff
git reset --hard $sha
make CFLAGS="-O2" || (rm config.cache && make CFLAGS="-O2")
(make perf || echo "*** Performance test crashed") > $perf
cd $owd
}
if [ ! -e $old ]; then
git_setup
run_cairo_perf_if_not_cached $old
old=$(rev2perf $old)
fi
if [ ! -e $new ]; then
git_setup
run_cairo_perf_if_not_cached $new
new=$(rev2perf $new)
fi
cairo-perf-diff-files $old $new