#! /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 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 # Joel McCormack, DEC Western Research Lab # PATH="@x11perfcompdir@:/bin:/usr/bin:$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