1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156
|
#
# Script to start a set of apps, switch to recents and fling it back and forth.
# For each iteration, Total frames and janky frames are reported.
#
# Options are described below.
#
# Works for volantis, shamu, and hammerhead. Can be pushed and executed on
# the device.
#
iterations=10
startapps=1
capturesystrace=0
function processLocalOption {
ret=0
case "$1" in
(-N) startapps=0;;
(-A) unset appList;;
(-L) appList=$2; shift; ret=1;;
(-T) capturesystrace=1;;
(-B) echo $$ > /dev/cpuset/background/tasks;;
(*)
echo "$0: unrecognized option: $1"
echo; echo "Usage: $0 [options]"
echo "-A : use all known applications"
echo "-B : run in background cpuset"
echo "-L applist : list of applications"
echo " default: $appList"
echo "-N : no app startups, just fling"
echo "-g : generate activity strings"
echo "-i iterations"
echo "-T : capture systrace on each iteration"
exit 1;;
esac
return $ret
}
CMDDIR=$(dirname $0 2>/dev/null)
CMDDIR=${CMDDIR:=.}
. $CMDDIR/defs.sh
case $DEVICE in
(shamu|hammerhead)
flingtime=300
downCount=2
upCount=6
UP="70 400 70 100 $flingtime"
DOWN="70 100 70 400 $flingtime";;
(angler|ariel|mtp8996)
flingtime=150
downCount=4
upCount=3
UP="500 1200 500 550 $flingtime"
DOWN="500 550 500 1200 $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
upCount=6
UP="70 400 70 70 $flingtime"
DOWN="70 70 70 400 $flingtime";;
(*)
echo "Error: No display information available for $DEVICE"
exit 1;;
esac
doKeyevent HOME
if [ $startapps -gt 0 ]; then
# start a bunch of apps
for app in $appList
do
echo Starting $app ...
t=$(startActivity $app)
done
fi
function swipe {
count=0
while [ $count -lt $2 ]
do
doSwipe $1
((count=count+1))
done
}
cur=1
frameSum=0
jankSum=0
latency90Sum=0
latency95Sum=0
latency99Sum=0
echo Fling recents...
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
sleep 1
swipe "$DOWN" $downCount
sleep 1
swipe "$UP" $upCount
sleep 1
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)
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\"
fi
((frameSum=frameSum+totalDiff))
((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?
fi
((jankPct=jankyDiff*100/totalDiff))
resetJankyFrames
echo Frames: $totalDiff latency: $latency90/$latency95/$latency99 Janks: $jankyDiff\(${jankPct}%\)
((cur=cur+1))
done
doKeyevent HOME
((aveJankPct=jankSum*100/frameSum))
((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}%\)
|