summaryrefslogtreecommitdiff
path: root/x11perfcomp.in
blob: 498bbf0df26dc57bc95b45a6ec50a8b05e1269a8 (plain)
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#! /bin/sh
#
# Collects multiple outputs of x11perf.  Just feed it a list of files, each
# containing the output from an x11perf run, and this shell will extract the
# object/second information and show it in tabular form.  An 80-column line
# is big enough to compare 4 different servers.
#
# This script normally uses the results from $1 to extract the test label
# descriptions, so you can run x11perf on a subset of the test and then
# compare the results.  But note that x11perffill requires the labels file
# to be a superset of the x11perf results file.  If you run into an ugly
# situation in which none of the servers completes the desired tests
# (quite possible on non-DEC servers :), you can use -l <filename> as $1 and
# $2 to force x11perfcomp to use the labels stored in file $2.  (You can run
# x11perf with the -labels option to generate such a file.)
#
# Mark Moraes, University of Toronto <moraes@csri.toronto.edu>
# Joel McCormack, DEC Western Research Lab <joel@decwrl.dec.com>
#

PATH="@x11perfcompdir@:/bin:/usr/bin:$PATH"
export PATH

MKTEMP="@MKTEMP@"

set -e
if [ "x$MKTEMP" != "x" ] && [ -x "$MKTEMP" ] ; then
    tmp=`$MKTEMP -p /tmp -d rates.XXXXXX`
    if [ "x$tmp" = "x" ]; then exit 1 ; fi
else
    tmp=${TMPDIR-/tmp}/rates.$$
    mkdir $tmp || exit 1
fi
trap "rm -rf $tmp" 0 1 2 15
mkdir $tmp/rates
ratio=
allfiles=
# Include relative rates in output?  Report only relative rates?
case $1 in
-r|-a)
	ratio=1
	shift;
	;;
-ro)
	ratio=2
	shift;
	;;
esac
# Get either the provided label file, or construct one from all the
# files given.
case $1 in
-l)	cp $2 $tmp/labels
	shift; shift
	;;
*)	for file in "$@"; do
		awk '$2 == "reps" || $2 == "trep" { print $0; next; }' $file |
		sed 's/^.*: //' |
		sed 's/ /_/g' |
		awk 'NR > 1 	{ printf ("%s %s\n", prev, $0); } \
				{ prev = $0; }'
	done | tsort 2>/dev/null | sed 's/_/ /g' > $tmp/labels
	;;
esac
# Go through all files, and create a corresponding rate file for each
n=1
for i
do
# Get lines with average numbers, fill in any tests that may be missing
# then extract the rate field
	base=`basename $i`
	(echo "     $n  "
	 echo '--------'
	 awk '$2 == "reps" || $2 == "trep" { \
		line = $0; \
		next; \
	    } \
	    NF == 0 && line != "" { \
		print line; \
		line=""; \
		next; \
	    } \
	 ' $i > $tmp/$n.avg
	 fillblnk $tmp/$n.avg $tmp/labels |
	 sed 's/( *\([0-9]*\)/(\1/'   |
	 awk '$2 == "reps" || $2 == "trep" { \
						n = substr($6,2,length($6)-7); \
						printf "%8s\n", n; \
					   }'
	) > $tmp/rates/$n
	echo "$n: $i"
	allfiles="$allfiles$tmp/rates/$n "
	n=`expr $n + 1`
done
case x$ratio in
x)
	ratio=/bin/cat
	;;
x1)
	ratio="perfboth $n"
	;;
*)
	ratio="perfratio $n"
	;;
esac
echo ''
(echo Operation; echo '---------'; cat $tmp/labels) |
paste $allfiles - | sed 's/	/  /g' | $ratio
rm -rf $tmp