1*288bf522SAndroid Build Coastguard Worker# 2*288bf522SAndroid Build Coastguard Worker# Script to play a john oliver youtube video N times. 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 Workeriterations=10 8*288bf522SAndroid Build Coastguard Workerapp=youtube 9*288bf522SAndroid Build Coastguard WorkersearchText="last week tonight with john oliver: online harassment" 10*288bf522SAndroid Build Coastguard WorkervidMinutes=15 11*288bf522SAndroid Build Coastguard Worker 12*288bf522SAndroid Build Coastguard Workerfunction processLocalOption { 13*288bf522SAndroid Build Coastguard Worker ret=0 14*288bf522SAndroid Build Coastguard Worker case "$1" in 15*288bf522SAndroid Build Coastguard Worker (-S) searchText="$2"; shift;; 16*288bf522SAndroid Build Coastguard Worker (-t) vidMinutes="$2"; shift;; 17*288bf522SAndroid Build Coastguard Worker (*) 18*288bf522SAndroid Build Coastguard Worker echo "$0: unrecognized option: $1" 19*288bf522SAndroid Build Coastguard Worker echo; echo "Usage: $0 [options]" 20*288bf522SAndroid Build Coastguard Worker echo "-i iterations" 21*288bf522SAndroid Build Coastguard Worker echo "-S youtube search text" 22*288bf522SAndroid Build Coastguard Worker echo "-d device" 23*288bf522SAndroid Build Coastguard Worker echo "-t vidMinutes" 24*288bf522SAndroid Build Coastguard Worker exit 1;; 25*288bf522SAndroid Build Coastguard Worker esac 26*288bf522SAndroid Build Coastguard Worker return $ret 27*288bf522SAndroid Build Coastguard Worker} 28*288bf522SAndroid Build Coastguard Worker 29*288bf522SAndroid Build Coastguard WorkerCMDDIR=$(dirname $0 2>/dev/null) 30*288bf522SAndroid Build Coastguard WorkerCMDDIR=${CMDDIR:=.} 31*288bf522SAndroid Build Coastguard Worker. $CMDDIR/defs.sh 32*288bf522SAndroid Build Coastguard Worker 33*288bf522SAndroid Build Coastguard Workercase $DEVICE in 34*288bf522SAndroid Build Coastguard Worker(angler) 35*288bf522SAndroid Build Coastguard Worker searchButton="860 177" 36*288bf522SAndroid Build Coastguard Worker selectFirstVideo="225 400" 37*288bf522SAndroid Build Coastguard Worker enableControls="1000 610" 38*288bf522SAndroid Build Coastguard Worker fullScreen="1011 632" 39*288bf522SAndroid Build Coastguard Worker ;; 40*288bf522SAndroid Build Coastguard Worker(shamu) 41*288bf522SAndroid Build Coastguard Worker searchButton="1200 160" 42*288bf522SAndroid Build Coastguard Worker selectFirstVideo="480 653" 43*288bf522SAndroid Build Coastguard Worker enableControls="1377 812" 44*288bf522SAndroid Build Coastguard Worker fullScreen="1377 812" 45*288bf522SAndroid Build Coastguard Worker ;; 46*288bf522SAndroid Build Coastguard Worker(bullhead|hammerhead) 47*288bf522SAndroid Build Coastguard Worker searchButton="860 177" 48*288bf522SAndroid Build Coastguard Worker selectFirstVideo="225 400" 49*288bf522SAndroid Build Coastguard Worker enableControls="1000 610" 50*288bf522SAndroid Build Coastguard Worker fullScreen="1011 632" 51*288bf522SAndroid Build Coastguard Worker ;; 52*288bf522SAndroid Build Coastguard Worker(volantis) 53*288bf522SAndroid Build Coastguard Worker searchButton="1356 93" 54*288bf522SAndroid Build Coastguard Worker selectFirstVideo="378 264" 55*288bf522SAndroid Build Coastguard Worker enableControls="1464 812" 56*288bf522SAndroid Build Coastguard Worker fullScreen="1480 835" 57*288bf522SAndroid Build Coastguard Worker ;; 58*288bf522SAndroid Build Coastguard Worker(ariel) 59*288bf522SAndroid Build Coastguard Worker searchButton="1440 70" 60*288bf522SAndroid Build Coastguard Worker selectFirstVideo="228 224" 61*288bf522SAndroid Build Coastguard Worker enableControls="1528 880" 62*288bf522SAndroid Build Coastguard Worker fullScreen="1528 880" 63*288bf522SAndroid Build Coastguard Worker ;; 64*288bf522SAndroid Build Coastguard Worker 65*288bf522SAndroid Build Coastguard Worker(*) 66*288bf522SAndroid Build Coastguard Worker echo "Error: No display information available for $DEVICE" 67*288bf522SAndroid Build Coastguard Worker exit 1;; 68*288bf522SAndroid Build Coastguard Workeresac 69*288bf522SAndroid Build Coastguard Worker 70*288bf522SAndroid Build Coastguard Workerfunction swipe { 71*288bf522SAndroid Build Coastguard Worker count=0 72*288bf522SAndroid Build Coastguard Worker while [ $count -lt $2 ] 73*288bf522SAndroid Build Coastguard Worker do 74*288bf522SAndroid Build Coastguard Worker echo doSwipe... 75*288bf522SAndroid Build Coastguard Worker doSwipe $1 76*288bf522SAndroid Build Coastguard Worker ((count=count+1)) 77*288bf522SAndroid Build Coastguard Worker done 78*288bf522SAndroid Build Coastguard Worker sleep 1 79*288bf522SAndroid Build Coastguard Worker} 80*288bf522SAndroid Build Coastguard Worker 81*288bf522SAndroid Build Coastguard Workercur=1 82*288bf522SAndroid Build Coastguard WorkerframeSum=0 83*288bf522SAndroid Build Coastguard WorkerjankSum=0 84*288bf522SAndroid Build Coastguard Workerlatency90Sum=0 85*288bf522SAndroid Build Coastguard Workerlatency95Sum=0 86*288bf522SAndroid Build Coastguard Workerlatency99Sum=0 87*288bf522SAndroid Build Coastguard Worker 88*288bf522SAndroid Build Coastguard WorkerdoKeyevent HOME 89*288bf522SAndroid Build Coastguard Workersleep 0.5 90*288bf522SAndroid Build Coastguard WorkerresetJankyFrames $(getPackageName $app) 91*288bf522SAndroid Build Coastguard Worker 92*288bf522SAndroid Build Coastguard Workerwhile [ $cur -le $iterations ] 93*288bf522SAndroid Build Coastguard Workerdo 94*288bf522SAndroid Build Coastguard Worker t=$(startActivity $app) 95*288bf522SAndroid Build Coastguard Worker sleep 4.0 96*288bf522SAndroid Build Coastguard Worker doTap $searchButton 97*288bf522SAndroid Build Coastguard Worker sleep 1.0 98*288bf522SAndroid Build Coastguard Worker doText "$searchText" 99*288bf522SAndroid Build Coastguard Worker sleep 1.0 100*288bf522SAndroid Build Coastguard Worker doKeyevent ENTER 101*288bf522SAndroid Build Coastguard Worker sleep 5.0 102*288bf522SAndroid Build Coastguard Worker doTap $selectFirstVideo 103*288bf522SAndroid Build Coastguard Worker sleep 10.0 104*288bf522SAndroid Build Coastguard Worker doTap $fullScreen 105*288bf522SAndroid Build Coastguard Worker sleep 0.5 106*288bf522SAndroid Build Coastguard Worker doTap $fullScreen 107*288bf522SAndroid Build Coastguard Worker # 15 minutes 108*288bf522SAndroid Build Coastguard Worker ((vidTime=60*vidMinutes)) 109*288bf522SAndroid Build Coastguard Worker sleep $vidTime 110*288bf522SAndroid Build Coastguard Worker doKeyevent BACK 111*288bf522SAndroid Build Coastguard Worker sleep 0.5 112*288bf522SAndroid Build Coastguard Worker doKeyevent BACK 113*288bf522SAndroid Build Coastguard Worker sleep 0.5 114*288bf522SAndroid Build Coastguard Worker doKeyevent BACK 115*288bf522SAndroid Build Coastguard Worker sleep 0.5 116*288bf522SAndroid Build Coastguard Worker 117*288bf522SAndroid Build Coastguard Worker set -- $(getJankyFrames $(getPackageName $app)) 118*288bf522SAndroid Build Coastguard Worker totalDiff=$1 119*288bf522SAndroid Build Coastguard Worker jankyDiff=$2 120*288bf522SAndroid Build Coastguard Worker latency90=$3 121*288bf522SAndroid Build Coastguard Worker latency95=$4 122*288bf522SAndroid Build Coastguard Worker latency99=$5 123*288bf522SAndroid Build Coastguard Worker if [ ${totalDiff:=0} -eq 0 ]; then 124*288bf522SAndroid Build Coastguard Worker echo Error: could not read frame info with \"dumpsys gfxinfo\" 125*288bf522SAndroid Build Coastguard Worker fi 126*288bf522SAndroid Build Coastguard Worker 127*288bf522SAndroid Build Coastguard Worker ((frameSum=frameSum+totalDiff)) 128*288bf522SAndroid Build Coastguard Worker ((jankSum=jankSum+jankyDiff)) 129*288bf522SAndroid Build Coastguard Worker ((latency90Sum=latency90Sum+latency90)) 130*288bf522SAndroid Build Coastguard Worker ((latency95Sum=latency95Sum+latency95)) 131*288bf522SAndroid Build Coastguard Worker ((latency99Sum=latency99Sum+latency99)) 132*288bf522SAndroid Build Coastguard Worker if [ "$totalDiff" -eq 0 ]; then 133*288bf522SAndroid Build Coastguard Worker echo Error: no frames detected. Is the display off? 134*288bf522SAndroid Build Coastguard Worker fi 135*288bf522SAndroid Build Coastguard Worker ((jankPct=jankyDiff*100/totalDiff)) 136*288bf522SAndroid Build Coastguard Worker resetJankyFrames $(getPackageName $app) 137*288bf522SAndroid Build Coastguard Worker 138*288bf522SAndroid Build Coastguard Worker 139*288bf522SAndroid Build Coastguard Worker echo Frames: $totalDiff latency: $latency90/$latency95/$latency99 Janks: $jankyDiff\(${jankPct}%\) 140*288bf522SAndroid Build Coastguard Worker ((cur=cur+1)) 141*288bf522SAndroid Build Coastguard Workerdone 142*288bf522SAndroid Build Coastguard WorkerdoKeyevent HOME 143*288bf522SAndroid Build Coastguard Worker((aveJankPct=jankSum*100/frameSum)) 144*288bf522SAndroid Build Coastguard Worker((aveJanks=jankSum/iterations)) 145*288bf522SAndroid Build Coastguard Worker((aveFrames=frameSum/iterations)) 146*288bf522SAndroid Build Coastguard Worker((aveLatency90=latency90Sum/iterations)) 147*288bf522SAndroid Build Coastguard Worker((aveLatency95=latency95Sum/iterations)) 148*288bf522SAndroid Build Coastguard Worker((aveLatency99=latency99Sum/iterations)) 149*288bf522SAndroid Build Coastguard Workerecho AVE: Frames: $aveFrames latency: $aveLatency90/$aveLatency95/$aveLatency99 Janks: $aveJanks\(${aveJankPct}%\) 150