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