Enhancements to workload scripts
- display frame latencies (90th/95th/99th) for recents and systemapps
- allow device type to be specified to capture
- workaround for am hang when starting chrome on volantis
- bullhead support for recentfling
New output of "recentfling.sh":
Fling recents...
Frames: 772 latency: 19/22/34 Janks: 131(16%)
New output of "systemapps.sh -T":
App Start(ms) Iter(ms) Jank Latency
gmail 1090 2168 69(72%) 65/75/88
hangouts 1757 2758 60(82%) 69/111/114
chrome 0 997 59(64%) 68/77/84
youtube 3533 4834 140(48%) 70/93/150
play 1868 3147 92(62%) 89/106/182
home 0 1125 210(15%) 62/84/129
TOTAL 8248 35052
Change-Id: If4fc94ab0188dae2afabfbf696be06b6ddf55ce1
diff --git a/tests/workloads/capture.sh b/tests/workloads/capture.sh
index 721fe8c..3b2f446 100755
--- a/tests/workloads/capture.sh
+++ b/tests/workloads/capture.sh
Binary files differ
diff --git a/tests/workloads/defs.sh b/tests/workloads/defs.sh
index ba820fd..dbed4dd 100755
--- a/tests/workloads/defs.sh
+++ b/tests/workloads/defs.sh
Binary files differ
diff --git a/tests/workloads/recentfling.sh b/tests/workloads/recentfling.sh
index 68fdb2f..092c8d9 100755
--- a/tests/workloads/recentfling.sh
+++ b/tests/workloads/recentfling.sh
@@ -44,6 +44,12 @@
upCount=6
UP="70 400 70 100 $flingtime"
DOWN="70 100 70 400 $flingtime";;
+(bullhead)
+ flingtime=200
+ downCount=5
+ upCount=5
+ UP="500 1200 500 550 $flingtime"
+ DOWN="500 550 500 1200 $flingtime";;
(volantis)
flingtime=400
downCount=5
@@ -66,20 +72,6 @@
done
fi
-cur=1
-
-set -- $(getJankyFrames)
-totalFrames=$1
-jankyFrames=$2
-frameSum=0
-jankSum=0
-
-if [ ${totalFrames:=0} -eq 0 ]; then
-#echo Error: could not read frame info with \"dumpsys graphicsstats\"
- echo Error: could not read frame info with \"dumpsys gfxinfo\"
- exit 1
-fi
-
function swipe {
count=0
while [ $count -lt $2 ]
@@ -89,14 +81,25 @@
done
}
+cur=1
+frameSum=0
+jankSum=0
+latency90Sum=0
+latency95Sum=0
+latency99Sum=0
+
echo Fling recents...
-doKeyevent APP_SWITCH
+doKeyevent HOME
+sleep 0.5
+resetJankyFrames
while [ $cur -le $iterations ]
do
if [ $capturesystrace -gt 0 ]; then
${ADB}atrace --async_start -z -c -b 16000 freq gfx view idle sched
fi
+ doKeyevent APP_SWITCH
+ sleep 0.5
swipe "$DOWN" $downCount
sleep 1
swipe "$UP" $upCount
@@ -108,25 +111,40 @@
if [ $capturesystrace -gt 0 ]; then
${ADB}atrace --async_dump -z -c -b 16000 freq gfx view idle sched > trace.${cur}.out
fi
+ doKeyevent HOME
+ sleep 0.5
set -- $(getJankyFrames)
- newTotalFrames=$1
- newJankyFrames=$2
- ((totalDiff=newTotalFrames-totalFrames))
+ totalDiff=$1
+ jankyDiff=$2
+ latency90=$3
+ latency95=$4
+ latency99=$5
+ if [ ${totalDiff:=0} -eq 0 ]; then
+ echo Error: could not read frame info with \"dumpsys gfxinfo\"
+ exit 1
+ fi
+
((frameSum=frameSum+totalDiff))
- ((jankyDiff=newJankyFrames-jankyFrames))
((jankSum=jankSum+jankyDiff))
+ ((latency90Sum=latency90Sum+latency90))
+ ((latency95Sum=latency95Sum+latency95))
+ ((latency99Sum=latency99Sum+latency99))
if [ "$totalDiff" -eq 0 ]; then
echo Error: no frames detected. Is the display off?
exit 1
fi
((jankPct=jankyDiff*100/totalDiff))
- totalFrames=$newTotalFrames
- jankyFrames=$newJankyFrames
+ resetJankyFrames
- echo Frames: $totalDiff Janks: $jankyDiff \(${jankPct}%\)
+ echo Frames: $totalDiff latency: $latency90/$latency95/$latency99 Janks: $jankyDiff\(${jankPct}%\)
((cur=cur+1))
done
doKeyevent HOME
((aveJankPct=jankSum*100/frameSum))
-echo AVE: Frames: $frameSum Janks: $jankSum \(${aveJankPct}%\)
+((aveJanks=jankSum/iterations))
+((aveFrames=frameSum/iterations))
+((aveLatency90=latency90Sum/iterations))
+((aveLatency95=latency95Sum/iterations))
+((aveLatency99=latency99Sum/iterations))
+echo AVE: Frames: $aveFrames latency: $aveLatency90/$aveLatency95/$aveLatency99 Janks: $aveJanks\(${aveJankPct}%\)
diff --git a/tests/workloads/systemapps.sh b/tests/workloads/systemapps.sh
index 184c4ee..bd97148 100755
--- a/tests/workloads/systemapps.sh
+++ b/tests/workloads/systemapps.sh
@@ -74,6 +74,9 @@
reclaim=$4
frames=$5
janks=$6
+ l90=$7
+ l95=$8
+ l99=$9
curMax=$(eval "echo \$${label}max")
curMax=${curMax:=0}
curMin=$(eval "echo \$${label}min")
@@ -88,6 +91,12 @@
curFrames=${curFrames:=0}
curJanks=$(eval "echo \$${label}janks")
curJanks=${curJanks:=0}
+ cur90=$(eval "echo \$${label}90")
+ cur90=${cur90:=0}
+ cur95=$(eval "echo \$${label}95")
+ cur95=${cur95:=0}
+ cur99=$(eval "echo \$${label}99")
+ cur99=${cur99:=0}
if [ $curMax -lt $t ]; then
eval "${label}max=$t"
fi
@@ -105,12 +114,19 @@
eval "${label}frames=$curFrames"
((curJanks=curJanks+${janks:=0}))
eval "${label}janks=$curJanks"
+ ((cur90=cur90+${l90:=0}))
+ eval "${label}90=$cur90"
+ ((cur95=cur95+${l95:=0}))
+ eval "${label}95=$cur95"
+ ((cur99=cur99+${l99:=0}))
+ eval "${label}99=$cur99"
}
function getStats {
label=$1
echo $(eval "echo \$${label}max") $(eval "echo \$${label}min") $(eval "echo \$${label}sum") \
$(eval "echo \$${label}restart") $(eval "echo \$${label}reclaim") \
- $(eval "echo \$${label}frames") $(eval "echo \$${label}janks")
+ $(eval "echo \$${label}frames") $(eval "echo \$${label}janks") \
+ $(eval "echo \$${label}90") $(eval "echo \$${label}95") $(eval "echo \$${label}99")
}
cur=1
@@ -126,7 +142,7 @@
fi
if [ $iterations -gt 1 -o $cur -eq 1 ]; then
if [ $totaltimetest -eq 0 ]; then
- printf "%-6s %7s(ms) %6s(ms) %s %s %s %s\n" App Time AmTime Restart DirReclaim JankyFrames
+ printf "%-6s %7s(ms) %6s(ms) %s %s %s %s\n" App Time AmTime Restart DirReclaim Jank Latency
fi
fi
@@ -136,53 +152,77 @@
vout Starting $app...
((appnum=appnum+1))
loopTimestamp=$(date +"%s %N")
- if [ $totaltimetest -gt 0 ]; then
- # no instramentation, just cycle through the apps
- if [ $appnum -eq 0 ]; then
- printf "%-8s %5s(ms) %3s(ms)\n" App Start Iter
- fi
- if [ $forcecoldstart -eq 0 ]; then
- t=$(startActivity $app)
- else
- t=$(forceStartActivity $app)
- fi
- loopEndTimestamp=$(date +"%s %N")
- diffTime=$(computeTimeDiff $loopTimestamp $loopEndTimestamp)
- # Note: "%d" doesn't work right if run on device
- printf "%-10s %5.0f %5.0f\n" $app $t $diffTime
- ((totaltime=totaltime+t))
- continue
- fi
- tmpTraceOut="$tmpTraceOutBase-$app.out"
- >$tmpTraceOut
- startInstramentation
+ resetJankyFrames
resetJankyFrames $(getPackageName $app)
- t=$(startActivity $app)
+ if [ $totaltimetest -eq 0 ]; then
+ tmpTraceOut="$tmpTraceOutBase-$app.out"
+ >$tmpTraceOut
+ startInstramentation
+ else
+ if [ $appnum -eq 0 ]; then
+ printf "%-8s %5s(ms) %3s(ms) %s %s\n" App Start Iter Jank Latency
+ fi
+ fi
+ if [ $forcecoldstart -eq 0 ]; then
+ t=$(startActivity $app)
+ else
+ t=$(forceStartActivity $app)
+ fi
+
+ loopEndTimestamp=$(date +"%s %N")
+ diffTime=$(computeTimeDiff $loopTimestamp $loopEndTimestamp)
# let app finish drawing before checking janks
sleep 3
set -- $(getJankyFrames $(getPackageName $app))
frames=$1
janks=$2
- ((jankPct=100*janks/frames))
- stopAndDumpInstramentation $tmpTraceOut
- actName=$(getActivityName $app)
- stime=$(getStartTime $actName $tmpTraceOut)
- relaunch=$?
- etime=$(getEndTime $actName $tmpTraceOut)
- ((tdiff=$etime-$stime))
- if [ $etime -eq 0 -o $stime -eq 0 ]; then
- handleError $app : could not compute start time stime=$stime etime=$etime
- # use AmTime so statistics make sense
- tdiff=$t
+ l90=$3
+ l95=$4
+ l99=$5
+ set -- $(getJankyFrames)
+ systemFrames=$1
+ systemJanks=$2
+ s90=$3
+ s95=$4
+ s99=$5
+ ((frames=frames+systemFrames))
+ ((janks=janks+systemJanks))
+ ((l90=l90+s90))
+ ((l95=l95+s95))
+ ((l99=l99+s99))
+ if [ $frames -eq 0 ]; then
+ janks=0
+ jankPct=0
+ else
+ ((jankPct=100*janks/frames))
fi
- checkForDirectReclaim $actName $tmpTraceOut
- directReclaim=$?
+ if [ $totaltimetest -gt 0 ]; then
+ # Note: using %f since %d doesn't work correctly
+ # when running on lollipop
+ printf "%-10s %5.0f %5.0f %4.0f(%2.0f%%) %2.0f/%2.0f/%2.0f\n" $app $t $diffTime $janks $jankPct $l90 $l95 $l99
+ ((totaltime=totaltime+t))
+ continue
+ else
+ stopAndDumpInstramentation $tmpTraceOut
+ actName=$(getActivityName $app)
+ stime=$(getStartTime $actName $tmpTraceOut)
+ relaunch=$?
+ etime=$(getEndTime $actName $tmpTraceOut)
+ ((tdiff=$etime-$stime))
+ if [ $etime -eq 0 -o $stime -eq 0 ]; then
+ handleError $app : could not compute start time stime=$stime etime=$etime
+ # use AmTime so statistics make sense
+ tdiff=$t
+ fi
+ checkForDirectReclaim $actName $tmpTraceOut
+ directReclaim=$?
- printf "%-12s %5d %5d %5d %5d %5d(%d%%)\n" "$app" "$tdiff" "$t" "$relaunch" "$directReclaim" "$janks" "$jankPct"
- computeStats "$app" "$tdiff" "$relaunch" "$directReclaim" "$frames" "$janks"
+ printf "%-12s %5d %5d %5d %5d %5d(%d%%) %d/%d/%d\n" "$app" "$tdiff" "$t" "$relaunch" "$directReclaim" "$janks" "$jankPct" $l90 $l95 $l99
+ computeStats "$app" "$tdiff" "$relaunch" "$directReclaim" "$frames" "$janks" $l90 $l95 $l99
- if [ $savetmpfiles -eq 0 ]; then
- rm -f $tmpTraceOut
+ if [ $savetmpfiles -eq 0 ]; then
+ rm -f $tmpTraceOut
+ fi
fi
done
((cur=cur+1))
@@ -198,7 +238,7 @@
echo =========================================
printf "Stats after $iterations iterations:\n"
echo =========================================
- printf "%-6s %7s(ms) %6s(ms) %6s(ms) %s %s %s %s\n" App Max Ave Min Restart DirReclaim JankyFrames
+ printf "%-6s %7s(ms) %6s(ms) %6s(ms) %s %s %s %s\n" App Max Ave Min Restart DirReclaim Jank Latency
for app in $appList
do
set -- $(getStats $app)
@@ -206,7 +246,13 @@
((ave=sum/iterations))
frames=$6
janks=$7
+ l90=$8
+ l95=$9
+ l99=${10}
+ ((ave90=l90/iterations))
+ ((ave95=l95/iterations))
+ ((ave99=l99/iterations))
((jankPct=100*janks/frames))
- printf "%-12s %5d %5d %5d %5d %5d %5d(%d%%)\n" $app $1 $ave $2 $4 $5 $janks $jankPct
+ printf "%-12s %5d %5d %5d %5d %5d %5d(%d%%) %d/%d/%d\n" $app $1 $ave $2 $4 $5 $janks $jankPct $ave90 $ave95 $ave99
done
fi