1 # print summary of output generated by pwrtest.sh
3 # default results directories are <device>-<date>[-experiment]. By default
4 # match any device and the year 201*.
8 # - show output for all bullhead tests in july 2015:
9 # ./pwrsummary.sh -r "bh-201507*"
11 # - generate CSV file for import into spreadsheet:
12 # ./pwrsummary.sh -o csv
15 CMDDIR=$(dirname $0 2>/dev/null)
20 POWERAVE="python $CMDDIR/powerave.py"
22 defaultPattern="*-201*"
27 echo "$0 [-o format] [-v voltage] [-h freq] [-f resultsDirectories]"
33 (-o) format=$2; shift;;
34 (-v) voltage=$2; shift;;
36 (-r) testResults="$2"; shift;;
37 (--help) Usage; exit 0;;
40 echo Unknown option: $1
47 testResults=${testResults:=$defaultPattern}
48 voltage=${voltage:=$defaultVoltage}
49 hz=${hz:=$defaultFrequency}
51 function printHeader {
55 (suntemple|shadowgrid2)
57 (recentfling|youtube|chrome)
58 units="FPS from app point of view: 1/(90th percentile render time)";;
60 units="App start/switch per second";;
63 echo "Performance unit for $workload is: $units"
64 if [ "$format" = csv ]; then
65 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
67 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
72 awk 'BEGIN { count=0; sum=0; max=-1000000000; min=1000000000; }
76 if (cur > max) max = cur;
77 if (cur < min) min = cur;
84 printf "%.2f %.2f %.2f\n", min, ave, max;
89 function hwuiOutputParser {
90 # Stats since: 60659316905953ns
91 # Total frames rendered: 150
92 # Janky frames: 89 (59.33%)
93 # 90th percentile: 23ms
94 # 95th percentile: 27ms
95 # 99th percentile: 32ms
96 # Number Missed Vsync: 0
97 # Number High input latency: 0
98 # Number Slow UI thread: 0
99 # Number Slow bitmap uploads: 12
100 # Number Slow draw: 89
101 # use with "stdbuf -o0 " to disable pipe buffering
102 # stdbuf -o0 adb shell /data/hwuitest shadowgrid2 400 | stdbuf -o0 ./hwuitestfilter.sh | tee t.csv
103 sed -e 's/ns//' -e 's/[\(\)%]/ /g' | awk '
104 BEGIN { startTime=0; lastTime=0; }
107 if (startTime == 0) {
111 interval = curTime - lastTime;
112 fps = totalFrames*1000000000 / interval;
113 diffTime = curTime - startTime;
114 printf "%.2f, %.2f, ",diffTime/1000000, fps;
117 /^Total frames/ { totalFrames=$4; }
120 printf "%.2f\n",$4; lastTime=curTime;
126 function sysappOutputParser {
128 BEGIN { fmt=0; count=0; sum=0; }
131 if (fmt > 2) printf "Ave: %0.2fms\n", sum/count;
132 else printf " %0.2f\n", sum/count;
137 /^[a-z]/ { val=$2; if (val != 0) { count++; sum+=val; } }
138 /^Iteration/ { if (fmt > 2) printf "%s : ", $0; else if (fmt) printf "%d ", $2; }
142 function calcPerfData {
149 powerfile=${workload}-power.out
150 build="$(cat build 2>/dev/null)"
151 build=${build:="Unknown"}
153 lines=$(wc -l $file 2>/dev/null | cut -f1 -d\ )
155 if [ ${lines:=0} -eq -0 ]; then
156 # No performance data captured
157 if [ "$format" = csv ]; then
158 printf "%s,%s,%s\n" $testdir "$build" "no data"
160 printf "%-30s %-8s %12.12s\n" $testdir "$build" "no data"
165 set -- $($POWERAVE $hz $voltage $powerfile)
166 current=$(echo $1 $baselineCurrent | awk '{ printf "%.2f", $1-$2; }')
167 power=$(echo $2 $baselinePower | awk '{ printf "%.2f", $1-$2; }')
175 set -- $(grep "FPS average" $file | sed 's/^.*seconds for a //' | awk '{ print $1; }' | average)
177 (recentfling|youtube|chrome)
178 # units are ms, so need to convert to app/ms
179 set -- $(grep ^Frames: $file | tr "/" " " | awk '{ print $4; }' | average | awk '{ printf "%.3f %.3f %.3f\n", 1000/$3, 1000/$2, 1000/$1;}' )
182 # units are ms, so need to convert to app/ms
183 set -- $(cat $file | sysappOutputParser | average | awk '{ printf "%.3f %.3f %.3f\n", 1000/$3, 1000/$2, 1000/$1;}' )
187 set -- $(cat $file | hwuiOutputParser | tr ',' ' ' | awk '{print $2;}' | average)
194 perfPerWatt=$(echo $aveperf $power | awk '{ if ($2) { val=$1*1000/$2; printf "%.3f\n", val; } else print "unknown"; }')
195 if [ "$format" = csv ]; then
196 printf "%s,%s,%f,%f,%f,%f,%f,%f," $testdir "$build" $minperf $aveperf $maxperf $current $baselinePower $power
197 printf "%s\n" $perfPerWatt
199 printf "%-30s %-8s %12.2f %12.2f %12.2f %12.2f %12.2f %12.2f " $testdir "$build" $minperf $aveperf $maxperf $current $baselinePower $power
200 printf "%12s\n" $perfPerWatt
204 function calcBaselinePower {
206 defaultPowerFile="idle-display-power.out"
207 powerFile=$defaultPowerFile
209 (shadowgrid2|suntemple|recentfling)
210 powerFile="idle-airplane-display-power.out"
211 if [ ! -f $powerFile ]; then
212 powerFile=$defaultPowerFile
215 if [ -f $powerFile ]; then
216 $POWERAVE 5 4.3 $powerFile
220 for t in $(cat tests)
222 echo .======================= $t ================================
224 for i in $testResults
227 baseline="$(calcBaselinePower $t)"
228 if [ "$baseline" != "" ]; then
229 calcPerfData $i $t $baseline
231 echo "$i : no baseline current"