-
Notifications
You must be signed in to change notification settings - Fork 3.8k
/
Copy pathbench
executable file
·60 lines (47 loc) · 1.23 KB
/
bench
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/bin/bash
set -euo pipefail
if ! which benchstat > /dev/null; then
cat 1>&2 <<EOF
Requires golang.org/x/perf/cmd/benchstat
Run:
go install golang.org/x/perf/cmd/benchstat@latest
EOF
exit 1
fi
cd "$(git rev-parse --show-toplevel)"
if [[ $# < 1 || $# > 2 ]]; then
cat 1>&2 <<EOF
Usage: BENCHES=regexp PKG=./pkg/yourpkg $0 oldbranch [newbranch]
EOF
exit 1
fi
OLDNAME=$1
OLD=$(git rev-parse "$1")
ORIGREF=$(git symbolic-ref -q HEAD)
ORIG=${ORIGREF##refs/heads/}
if [[ $# < 2 ]]; then
NEWNAME="HEAD"
NEW=$ORIG
else
NEWNAME=$2
NEW=$(git rev-parse "$2")
fi
echo "Comparing $NEWNAME (new) with $OLDNAME (old)"
echo ""
dest=$(mktemp -d)
echo "Writing to ${dest}"
shas=($OLD $NEW)
names=($OLDNAME $NEWNAME)
benchtime=${T:-}
if [[ benchtime ]]; then
benchtime="--bench-time=$benchtime"
fi
for (( i=0; i<${#shas[@]}; i+=1 )); do
name=${names[i]}
sha=${shas[i]}
echo "Switching to $name"
git checkout -q "$sha"
(set -x; ./dev bench ${PKG} --timeout=${BENCHTIMEOUT:-5m} --filter=${BENCHES} --count=${N:-10} $benchtime --bench-mem -v --stream-output --ignore-cache --test-args='-test.cpu 8' | tee "${dest}/bench.${name}" 2> "${dest}/log.txt")
done
benchstat "${dest}/bench.$OLDNAME" "${dest}/bench.$NEWNAME"
git checkout "$ORIG"