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