1ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos# print summary of output generated by pwrtest.sh
2ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos#
3ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos# default results directories are <device>-<date>[-experiment]. By default
4ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos# match any device and the year 201*.
5ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos#
6ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos# Examples:
7ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos#
8ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos# - show output for all bullhead tests in july 2015:
9ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos#    ./pwrsummary.sh -r "bh-201507*"
10ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos#
11ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos# - generate CSV file for import into spreadsheet:
12ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos#    ./pwrsummary.sh -o csv
13ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos#
14ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
15ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd KjosCMDDIR=$(dirname $0 2>/dev/null)
16ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd KjosCMDDIR=${CMDDIR:=.}
17ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjoscd $CMDDIR
18ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd KjosCMDDIR=$(pwd)
19ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjoscd -
20ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd KjosPOWERAVE="python $CMDDIR/powerave.py"
21ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
22ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd KjosdefaultPattern="*-201*"
23ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd KjosdefaultVoltage=4.3
24ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd KjosdefaultFrequency=5
25ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
26ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosfunction Usage {
27ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	echo "$0 [-o format] [-v voltage] [-h freq] [-f resultsDirectories]"
28ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos}
29ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
30ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjoswhile [ $# -gt 0 ]
31ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosdo
32ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	case "$1" in
33ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	(-o) format=$2; shift;;
34ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	(-v) voltage=$2; shift;;
35ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	(-h) hz=$2; shift;;
36ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	(-r) testResults="$2"; shift;;
37ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	(--help) Usage; exit 0;;
38ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	(--) shift; break;;
39ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	(*)
40ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		echo Unknown option: $1
41ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		Usage
42ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		exit 1;;
43ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	esac
44ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	shift
45ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosdone
46ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
47ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd KjostestResults=${testResults:=$defaultPattern}
48ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosvoltage=${voltage:=$defaultVoltage}
49ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjoshz=${hz:=$defaultFrequency}
50ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
51ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosfunction printHeader {
52ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	workload=$1
53ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	units="unknown"
54ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	case $workload in
55ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	(suntemple|shadowgrid2)
56ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		units="FPS";;
57ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	(recentfling|youtube|chrome)
58ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		units="FPS from app point of view: 1/(90th percentile render time)";;
59ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	(sysapps)
60ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		units="App start/switch per second";;
61ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	esac
62ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
63ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	echo "Performance unit for $workload is: $units"
64ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	if [ "$format" = csv ]; then
65ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		printf "%s,%s,%s,%s,%s,%s,%s,%s,%s\n" " " build min ave max net-mA@${voltage}v base-mW net-mW perf/W
66ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	else
67ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		printf "%-30s %-8s %12.12s %12.12s %12.12s %12.12s %12.12s %12.12s %12.12s\n" " " build min ave max net-mA@${voltage}v base-mW net-mW perf/W
68ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	fi
69ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos}
70ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
71ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosfunction average {
72ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	awk 'BEGIN { count=0; sum=0; max=-1000000000; min=1000000000; }
73ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	{
74ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		cur = $1;
75ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		sum = sum + cur; 
76ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		if (cur > max) max = cur;
77ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		if (cur < min) min = cur;
78ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		count++;
79ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	}
80ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
81ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	END {
82ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		if (count > 0) {
83ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos			ave = sum / count;
84ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos			printf "%.2f %.2f %.2f\n", min, ave, max; 
85ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		}
86ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	}'
87ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos}
88ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
89ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosfunction hwuiOutputParser {
90ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	# Stats since: 60659316905953ns
91ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	# Total frames rendered: 150
92ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	# Janky frames: 89 (59.33%)
93ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	# 90th percentile: 23ms
94ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	# 95th percentile: 27ms
95ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	# 99th percentile: 32ms
96ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	# Number Missed Vsync: 0
97ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	# Number High input latency: 0
98ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	# Number Slow UI thread: 0
99ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	# Number Slow bitmap uploads: 12
100ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	# Number Slow draw: 89
101ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	# use with "stdbuf -o0 " to disable pipe buffering
102ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	# stdbuf -o0 adb shell /data/hwuitest shadowgrid2 400 | stdbuf -o0 ./hwuitestfilter.sh  | tee t.csv
103ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	sed -e 's/ns//' -e 's/[\(\)%]/ /g' | awk '
104ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	BEGIN { startTime=0; lastTime=0; }
105ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	/^Stats since:/ {
106ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		curTime = $3;
107ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		if (startTime == 0) {
108ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos			startTime = curTime;
109ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		}
110ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		if (lastTime) {
111ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos			interval = curTime - lastTime;
112ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos			fps = totalFrames*1000000000 / interval;
113ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos			diffTime = curTime - startTime;
114ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos			printf "%.2f, %.2f, ",diffTime/1000000, fps;
115ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		}
116ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	}
117ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	/^Total frames/ { totalFrames=$4; }
118ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	/^Janky frames:/ {
119ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		if (lastTime) {
120ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos			printf "%.2f\n",$4; lastTime=curTime;
121ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		}
122ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		lastTime = curTime;
123ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	}'
124ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos}
125ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
126ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosfunction sysappOutputParser {
127ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	awk '
128ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	BEGIN { fmt=0; count=0; sum=0; }
129ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	/^App/ {
130ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		if (count != 0) {
131ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos			if (fmt > 2) printf "Ave: %0.2fms\n", sum/count;
132ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos			else printf " %0.2f\n", sum/count;
133ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos			count = 0;
134ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos			sum = 0;
135ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		}
136ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	}
137ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	/^[a-z]/ { val=$2; if (val != 0) { count++; sum+=val; } }
138ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	/^Iteration/ { if (fmt > 2) printf "%s : ", $0; else if (fmt) printf "%d ", $2; }
139ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	'
140ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos}
141ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
142ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosfunction calcPerfData {
143ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	testdir=$1
144ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	workload=$2
145ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	baselineCurrent=$3
146ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	baselinePower=$4
147ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
148ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	file=${workload}.out
149ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	powerfile=${workload}-power.out
150ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	build="$(cat build 2>/dev/null)"
151ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	build=${build:="Unknown"}
152ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
153ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	lines=$(wc -l $file 2>/dev/null | cut -f1 -d\ )
154ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
155ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	if [ ${lines:=0} -eq -0 ]; then
156ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		# No performance data captured
157ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		if [ "$format" = csv ]; then
158ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos			printf "%s,%s,%s\n" $testdir "$build" "no data"
159ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		else
160ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos			printf "%-30s %-8s %12.12s\n" $testdir "$build" "no data"
161ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		fi
162ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		return 1
163ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	fi
164ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
165ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	set -- $($POWERAVE $hz $voltage $powerfile)
166ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	current=$(echo $1 $baselineCurrent | awk '{ printf "%.2f", $1-$2; }')
167ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	power=$(echo $2 $baselinePower | awk '{ printf "%.2f", $1-$2; }')
168ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
169ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	case $workload in
170ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	(idle)
171ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		set -- 0 0 0
172ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		;;
173ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	(suntemple)
174ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		# units are fps
175ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		set -- $(grep "FPS average" $file  | sed 's/^.*seconds for a //' | awk '{ print $1; }' | average)
176ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		;;
177ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	(recentfling|youtube|chrome)
178ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		# units are ms, so need to convert to app/ms
179ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		set -- $(grep ^Frames:  $file | tr "/" " " | awk '{ print $4; }' | average | awk '{ printf "%.3f %.3f %.3f\n", 1000/$3, 1000/$2, 1000/$1;}'  )
180ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		;;
181ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	(sysapps)
182ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		# units are ms, so need to convert to app/ms
183ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		set -- $(cat $file | sysappOutputParser | average | awk '{ printf "%.3f %.3f %.3f\n", 1000/$3, 1000/$2, 1000/$1;}'  )
184ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		;;
185ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	(shadowgrid2)
186ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		# units are fps
187ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		set -- $(cat $file | hwuiOutputParser | tr ',' ' ' | awk '{print $2;}' | average)
188ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		;;
189ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	esac
190ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
191ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	minperf=$1
192ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	aveperf=$2
193ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	maxperf=$3
194ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	perfPerWatt=$(echo $aveperf $power | awk '{ if ($2) { val=$1*1000/$2; printf "%.3f\n", val; } else print "unknown"; }')
195ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	if [ "$format" = csv ]; then
196ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		printf "%s,%s,%f,%f,%f,%f,%f,%f," $testdir "$build" $minperf $aveperf $maxperf $current $baselinePower $power
197ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		printf "%s\n" $perfPerWatt
198ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	else
199ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		printf "%-30s %-8s %12.2f %12.2f %12.2f %12.2f %12.2f %12.2f " $testdir "$build" $minperf $aveperf $maxperf $current $baselinePower $power
200ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		printf "%12s\n" $perfPerWatt
201ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	fi
202ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos}
203ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
204ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosfunction calcBaselinePower {
205ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	workload=$1
206ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	defaultPowerFile="idle-display-power.out"
207ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	powerFile=$defaultPowerFile
208ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	case $workload in
209ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	(shadowgrid2|suntemple|recentfling)
210ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		powerFile="idle-airplane-display-power.out"
211ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		if [ ! -f  $powerFile ]; then
212ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos			powerFile=$defaultPowerFile
213ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		fi;;
214ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	esac
215ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	if [ -f  $powerFile ]; then
216ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		$POWERAVE 5 4.3 $powerFile
217ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	fi
218ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos}
219ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
220ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosfor t in $(cat tests)
221ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosdo
222ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	echo .======================= $t ================================
223ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	printHeader $t
224ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	for i in $testResults
225ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	do
226ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		cd $i
227ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		baseline="$(calcBaselinePower $t)"
228ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		if [ "$baseline" != "" ]; then
229ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	       		calcPerfData $i $t $baseline
230ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		else
231ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos			echo "$i : no baseline current"
232ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		fi
233ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		cd - > /dev/null
234ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	done
235ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosdone
236