1684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos# Script to start a set of apps in order and then in each iteration 2684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos# switch the focus to each one. For each iteration, the time to start 3684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos# the app is reported as measured using atrace events and via am ThisTime. 4684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos# The output also reports if applications are restarted (eg, killed by 5684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos# LMK since previous iteration) or if there were any direct reclaim 6684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos# events. 7684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos# 8684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos# Variation: the "-T" option skips all of the atrace instramentation and 9684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos# attempts to start the apps as quickly as possible. 10684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos# 11684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos# Example 1: start all default apps. 2 iterations 12684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos# 13684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos# ./systemapps.sh -i 2 14684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos# 15684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos# Example 2: just start chrome, feedly, and the home screen in a loop 16684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos# 17684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos# ./systemapps.sh -L "chrome feedly home" -i 5 18684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos# 19684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos# Example 3: just start the default apps as quickly as possible 20684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos# 21684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos# ./systemapps.sh -T 22684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos# 23684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos# Other options are described below. 24684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos# 25684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjositerations=1 26684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjostracecategories="gfx view am input memreclaim" 27684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjostotaltimetest=0 28684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosforcecoldstart=0 29643233ded9075628010c16feb8d2401ade3ae62cTodd KjoswaitTime=3.0 30684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 31684f65f8602d1e1a79170984acc18421fb8f4c98Todd KjosappList="gmail hangouts chrome youtube play home" 32684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 33684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosfunction processLocalOption { 34684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos ret=0 35684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos case "$1" in 36684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos (-A) unset appList;; 37684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos (-F) forcecoldstart=1;; 38684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos (-L) appList=$2; shift; ret=1;; 39684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos (-T) totaltimetest=1;; 40643233ded9075628010c16feb8d2401ade3ae62cTodd Kjos (-W) waitTime=$2; shift; ret=1;; 41684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos (*) 42684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo "$0: unrecognized option: $1" 43684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo; echo "Usage: $0 [options]" 44684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo "-A : use all known applications" 45684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo "-F : force cold-start for all apps" 46684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo "-L applist : list of applications" 47684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo " default: $appList" 48684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo "-T : total time to start all apps" 49643233ded9075628010c16feb8d2401ade3ae62cTodd Kjos echo "-W : time to wait between apps" 50684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo "-g : generate activity strings" 51684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo "-i iterations" 52684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo "-n : keep trace files" 53684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo "-o output file" 54684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo "-s : stop on error" 55684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo "-t trace categories" 56684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos exit 1;; 57684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos esac 58684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos return $ret 59684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos} 60684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 61684f65f8602d1e1a79170984acc18421fb8f4c98Todd KjosCMDDIR=$(dirname $0 2>/dev/null) 62684f65f8602d1e1a79170984acc18421fb8f4c98Todd KjosCMDDIR=${CMDDIR:=.} 63684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos. $CMDDIR/defs.sh 64684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 65684f65f8602d1e1a79170984acc18421fb8f4c98Todd KjostmpTraceOutBase=./tmptrace 66684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 67684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosif [ $user != "root" -a $totaltimetest -eq 0 ]; then 68684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos handleError Must be root on device 69684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos exit 1 70684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosfi 71684f65f8602d1e1a79170984acc18421fb8f4c98Todd KjosdoKeyevent HOME 72684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 73684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosfunction computeStats { 74684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos label=$1 75684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos t=$2 76684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos restart=$3 77684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos reclaim=$4 78684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos frames=$5 79684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos janks=$6 80ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos l90=$7 81ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos l95=$8 82ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos l99=$9 83684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos curMax=$(eval "echo \$${label}max") 84684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos curMax=${curMax:=0} 85684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos curMin=$(eval "echo \$${label}min") 86684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos curMin=${curMin:=100000} 87684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos curSum=$(eval "echo \$${label}sum") 88684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos curSum=${curSum:=0} 89684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos curRestart=$(eval "echo \$${label}restart") 90684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos curRestart=${curRestart:=0} 91684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos curReclaim=$(eval "echo \$${label}reclaim") 92684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos curReclaim=${curReclaim:=0} 93684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos curFrames=$(eval "echo \$${label}frames") 94684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos curFrames=${curFrames:=0} 95684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos curJanks=$(eval "echo \$${label}janks") 96684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos curJanks=${curJanks:=0} 97ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos cur90=$(eval "echo \$${label}90") 98ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos cur90=${cur90:=0} 99ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos cur95=$(eval "echo \$${label}95") 100ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos cur95=${cur95:=0} 101ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos cur99=$(eval "echo \$${label}99") 102ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos cur99=${cur99:=0} 103684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos if [ $curMax -lt $t ]; then 104684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos eval "${label}max=$t" 105684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos fi 106684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos if [ $curMin -gt $t ]; then 107684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos eval "${label}min=$t" 108684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos fi 109684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos ((curSum=curSum+t)) 110684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos eval "${label}sum=$curSum" 111684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 112684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos ((curRestart=curRestart+${restart:=0})) 113684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos eval "${label}restart=$curRestart" 114684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos ((curReclaim=curReclaim+${reclaim:=0})) 115684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos eval "${label}reclaim=$curReclaim" 116684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos ((curFrames=curFrames+${frames:=0})) 117684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos eval "${label}frames=$curFrames" 118684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos ((curJanks=curJanks+${janks:=0})) 119684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos eval "${label}janks=$curJanks" 120ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos ((cur90=cur90+${l90:=0})) 121ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos eval "${label}90=$cur90" 122ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos ((cur95=cur95+${l95:=0})) 123ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos eval "${label}95=$cur95" 124ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos ((cur99=cur99+${l99:=0})) 125ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos eval "${label}99=$cur99" 126684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos} 127684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosfunction getStats { 128684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos label=$1 129684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo $(eval "echo \$${label}max") $(eval "echo \$${label}min") $(eval "echo \$${label}sum") \ 130684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos $(eval "echo \$${label}restart") $(eval "echo \$${label}reclaim") \ 131ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos $(eval "echo \$${label}frames") $(eval "echo \$${label}janks") \ 132ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos $(eval "echo \$${label}90") $(eval "echo \$${label}95") $(eval "echo \$${label}99") 133684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos} 134684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 135684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjoscur=1 136684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjostotaltime=0 137684f65f8602d1e1a79170984acc18421fb8f4c98Todd KjosstartTimestamp=$(date +"%s %N") 138684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 139684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjoswhile [ $cur -le $iterations ] 140684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosdo 141684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos if [ $iterations -gt 1 ]; then 142684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo ========================================= 143684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo Iteration $cur of $iterations 144684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo ========================================= 145684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos fi 146684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos if [ $iterations -gt 1 -o $cur -eq 1 ]; then 147684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos if [ $totaltimetest -eq 0 ]; then 148ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos printf "%-6s %7s(ms) %6s(ms) %s %s %s %s\n" App Time AmTime Restart DirReclaim Jank Latency 149684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos fi 150684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos fi 151684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 152684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos appnum=-1 153684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos for app in $appList 154684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos do 155684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos vout Starting $app... 156684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos ((appnum=appnum+1)) 157684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos loopTimestamp=$(date +"%s %N") 158ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos resetJankyFrames 159ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos resetJankyFrames $(getPackageName $app) 160ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos if [ $totaltimetest -eq 0 ]; then 161ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos tmpTraceOut="$tmpTraceOutBase-$app.out" 162ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos >$tmpTraceOut 163ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos startInstramentation 164ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos else 165684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos if [ $appnum -eq 0 ]; then 166ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos printf "%-8s %5s(ms) %3s(ms) %s %s\n" App Start Iter Jank Latency 167684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos fi 168684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos fi 169ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos if [ $forcecoldstart -eq 0 ]; then 170ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos t=$(startActivity $app) 171ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos else 172ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos t=$(forceStartActivity $app) 173ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos fi 174ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos 175684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos # let app finish drawing before checking janks 176643233ded9075628010c16feb8d2401ade3ae62cTodd Kjos sleep $waitTime 177684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos set -- $(getJankyFrames $(getPackageName $app)) 178684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos frames=$1 179684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos janks=$2 180ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos l90=$3 181ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos l95=$4 182ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos l99=$5 183ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos set -- $(getJankyFrames) 184ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos systemFrames=$1 185ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos systemJanks=$2 186ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos s90=$3 187ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos s95=$4 188ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos s99=$5 189ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos ((frames=frames+systemFrames)) 190ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos ((janks=janks+systemJanks)) 191ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos ((l90=l90+s90)) 192ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos ((l95=l95+s95)) 193ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos ((l99=l99+s99)) 194643233ded9075628010c16feb8d2401ade3ae62cTodd Kjos 195643233ded9075628010c16feb8d2401ade3ae62cTodd Kjos loopEndTimestamp=$(date +"%s %N") 196643233ded9075628010c16feb8d2401ade3ae62cTodd Kjos diffTime=$(computeTimeDiff $loopTimestamp $loopEndTimestamp) 197643233ded9075628010c16feb8d2401ade3ae62cTodd Kjos 198ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos if [ $frames -eq 0 ]; then 199ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos janks=0 200ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos jankPct=0 201ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos else 202ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos ((jankPct=100*janks/frames)) 203684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos fi 204ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos if [ $totaltimetest -gt 0 ]; then 205ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos # Note: using %f since %d doesn't work correctly 206ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos # when running on lollipop 207ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos 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 208ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos ((totaltime=totaltime+t)) 209ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos continue 210ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos else 211ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos stopAndDumpInstramentation $tmpTraceOut 212ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos actName=$(getActivityName $app) 213d0fefb8421a9cb57ac27d0d4fcf3abe938fcf2d1Todd Kjos pkgName=$(getPackageName $app) 214ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos stime=$(getStartTime $actName $tmpTraceOut) 215ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos relaunch=$? 216d0fefb8421a9cb57ac27d0d4fcf3abe938fcf2d1Todd Kjos etime=$(getEndTime $pkgName $tmpTraceOut) 217ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos ((tdiff=$etime-$stime)) 218ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos if [ $etime -eq 0 -o $stime -eq 0 ]; then 219ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos handleError $app : could not compute start time stime=$stime etime=$etime 220ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos # use AmTime so statistics make sense 221ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos tdiff=$t 222ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos fi 223ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos checkForDirectReclaim $actName $tmpTraceOut 224ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos directReclaim=$? 225684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 226ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos printf "%-12s %5d %5d %5d %5d %5d(%d%%) %d/%d/%d\n" "$app" "$tdiff" "$t" "$relaunch" "$directReclaim" "$janks" "$jankPct" $l90 $l95 $l99 227ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos computeStats "$app" "$tdiff" "$relaunch" "$directReclaim" "$frames" "$janks" $l90 $l95 $l99 228684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 229ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos if [ $savetmpfiles -eq 0 ]; then 230ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos rm -f $tmpTraceOut 231ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos fi 232684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos fi 233684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos done 234684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos ((cur=cur+1)) 235684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosdone 236684f65f8602d1e1a79170984acc18421fb8f4c98Todd KjosendTimestamp=$(date +"%s %N") 237684f65f8602d1e1a79170984acc18421fb8f4c98Todd KjosdiffTime=$(computeTimeDiff $startTimestamp $endTimestamp) 238684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosif [ $totaltimetest -gt 0 ]; then 239684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos printf "%-10s %5.0f %5.0f\n" TOTAL $totaltime $diffTime 240684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosfi 241684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 242684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosif [ $iterations -gt 1 -a $totaltimetest -eq 0 ]; then 243684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo 244684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo ========================================= 245684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos printf "Stats after $iterations iterations:\n" 246684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo ========================================= 247ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos printf "%-6s %7s(ms) %6s(ms) %6s(ms) %s %s %s %s\n" App Max Ave Min Restart DirReclaim Jank Latency 248684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos for app in $appList 249684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos do 250684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos set -- $(getStats $app) 251684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos sum=$3 252684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos ((ave=sum/iterations)) 253684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos frames=$6 254684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos janks=$7 255ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos l90=$8 256ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos l95=$9 257ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos l99=${10} 258ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos ((ave90=l90/iterations)) 259ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos ((ave95=l95/iterations)) 260ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos ((ave99=l99/iterations)) 261684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos ((jankPct=100*janks/frames)) 262ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos printf "%-12s %5d %5d %5d %5d %5d %5d(%d%%) %d/%d/%d\n" $app $1 $ave $2 $4 $5 $janks $jankPct $ave90 $ave95 $ave99 263684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos done 264684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosfi 265