2006-10-25 17:15:22 -07:00
|
|
|
#!/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)
|
2006-11-03 12:40:09 -08:00
|
|
|
if [ "$CAIRO_DIR" = "." ]; then
|
|
|
|
|
CAIRO_DIR=$(pwd)
|
|
|
|
|
fi
|
2006-10-25 17:15:22 -07:00
|
|
|
CAIRO_PERF_DIR=$CAIRO_DIR/.perf
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
rev2sha() {
|
|
|
|
|
rev=$1
|
2006-10-27 00:51:24 -07:00
|
|
|
git rev-parse --verify $rev || ( echo "Cannot resolve $rev to a revision" && exit 1 )
|
2006-10-25 17:15:22 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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
|
2006-10-27 00:51:24 -07:00
|
|
|
git clone -s $CAIRO_DIR build
|
|
|
|
|
(cd build; git checkout -b tmp-cairo-perf-diff $sha; CFLAGS="-O2" ./autogen.sh)
|
2006-10-25 17:15:22 -07:00
|
|
|
fi
|
|
|
|
|
cd build
|
|
|
|
|
|
2006-10-27 00:51:24 -07:00
|
|
|
git checkout tmp-cairo-perf-diff
|
|
|
|
|
git reset --hard $sha
|
2006-10-25 17:15:22 -07:00
|
|
|
make CFLAGS="-O2" || (rm config.cache && make CFLAGS="-O2")
|
2006-10-27 00:51:24 -07:00
|
|
|
(make perf || echo "*** Performance test crashed") > $perf
|
2006-10-25 17:15:22 -07:00
|
|
|
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
|