diff options
Diffstat (limited to 'x11perfcomp.in')
-rw-r--r-- | x11perfcomp.in | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/x11perfcomp.in b/x11perfcomp.in new file mode 100644 index 0000000..50af117 --- /dev/null +++ b/x11perfcomp.in @@ -0,0 +1,103 @@ +#! /bin/sh +# +# $XFree86$ +# +# 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@:.:$PATH +export PATH + +set -e +tmp=${TMPDIR-/tmp}/rates.$$ +trap "rm -rf $tmp" 0 1 2 15 +mkdir $tmp || exit 1 +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 |