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 2699eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjostracecategories="gfx am memreclaim" 27684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjostotaltimetest=0 28684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosforcecoldstart=0 29643233ded9075628010c16feb8d2401ade3ae62cTodd KjoswaitTime=3.0 3099eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjosmemstats=0 31684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 3299eb5eaeb69a8ebb496daa55dc92df4caf268947Todd KjosappList="gmail maps chrome youtube play home" 33684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 34684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosfunction processLocalOption { 35684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos ret=0 36684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos case "$1" in 37684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos (-A) unset appList;; 38684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos (-F) forcecoldstart=1;; 39684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos (-L) appList=$2; shift; ret=1;; 40684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos (-T) totaltimetest=1;; 41643233ded9075628010c16feb8d2401ade3ae62cTodd Kjos (-W) waitTime=$2; shift; ret=1;; 4299eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjos (-M) memstats=1;; 43684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos (*) 44684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo "$0: unrecognized option: $1" 45684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo; echo "Usage: $0 [options]" 46684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo "-A : use all known applications" 47684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo "-F : force cold-start for all apps" 48684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo "-L applist : list of applications" 49684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo " default: $appList" 50684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo "-T : total time to start all apps" 51643233ded9075628010c16feb8d2401ade3ae62cTodd Kjos echo "-W : time to wait between apps" 52684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo "-g : generate activity strings" 53684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo "-i iterations" 54684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo "-n : keep trace files" 55684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo "-o output file" 56684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo "-s : stop on error" 57684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo "-t trace categories" 58684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos exit 1;; 59684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos esac 60684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos return $ret 61684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos} 62684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 63684f65f8602d1e1a79170984acc18421fb8f4c98Todd KjosCMDDIR=$(dirname $0 2>/dev/null) 64684f65f8602d1e1a79170984acc18421fb8f4c98Todd KjosCMDDIR=${CMDDIR:=.} 65684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos. $CMDDIR/defs.sh 66684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 67684f65f8602d1e1a79170984acc18421fb8f4c98Todd KjostmpTraceOutBase=./tmptrace 68684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 69684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosif [ $user != "root" -a $totaltimetest -eq 0 ]; then 70684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos handleError Must be root on device 71684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos exit 1 72684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosfi 73684f65f8602d1e1a79170984acc18421fb8f4c98Todd KjosdoKeyevent HOME 74684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 75684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosfunction computeStats { 76684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos label=$1 77684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos t=$2 78684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos restart=$3 79684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos reclaim=$4 80684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos frames=$5 81684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos janks=$6 82ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos l90=$7 83ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos l95=$8 84ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos l99=$9 85684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos curMax=$(eval "echo \$${label}max") 86684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos curMax=${curMax:=0} 87684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos curMin=$(eval "echo \$${label}min") 88684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos curMin=${curMin:=100000} 89684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos curSum=$(eval "echo \$${label}sum") 90684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos curSum=${curSum:=0} 91684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos curRestart=$(eval "echo \$${label}restart") 92684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos curRestart=${curRestart:=0} 93684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos curReclaim=$(eval "echo \$${label}reclaim") 94684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos curReclaim=${curReclaim:=0} 95684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos curFrames=$(eval "echo \$${label}frames") 96684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos curFrames=${curFrames:=0} 97684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos curJanks=$(eval "echo \$${label}janks") 98684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos curJanks=${curJanks:=0} 99ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos cur90=$(eval "echo \$${label}90") 100ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos cur90=${cur90:=0} 101ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos cur95=$(eval "echo \$${label}95") 102ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos cur95=${cur95:=0} 103ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos cur99=$(eval "echo \$${label}99") 104ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos cur99=${cur99:=0} 105684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos if [ $curMax -lt $t ]; then 106684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos eval "${label}max=$t" 107684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos fi 108684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos if [ $curMin -gt $t ]; then 109684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos eval "${label}min=$t" 110684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos fi 111684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos ((curSum=curSum+t)) 112684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos eval "${label}sum=$curSum" 113684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 114684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos ((curRestart=curRestart+${restart:=0})) 115684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos eval "${label}restart=$curRestart" 116684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos ((curReclaim=curReclaim+${reclaim:=0})) 117684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos eval "${label}reclaim=$curReclaim" 118684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos ((curFrames=curFrames+${frames:=0})) 119684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos eval "${label}frames=$curFrames" 120684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos ((curJanks=curJanks+${janks:=0})) 121684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos eval "${label}janks=$curJanks" 122ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos ((cur90=cur90+${l90:=0})) 123ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos eval "${label}90=$cur90" 124ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos ((cur95=cur95+${l95:=0})) 125ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos eval "${label}95=$cur95" 126ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos ((cur99=cur99+${l99:=0})) 127ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos eval "${label}99=$cur99" 128684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos} 129684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosfunction getStats { 130684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos label=$1 131684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo $(eval "echo \$${label}max") $(eval "echo \$${label}min") $(eval "echo \$${label}sum") \ 132684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos $(eval "echo \$${label}restart") $(eval "echo \$${label}reclaim") \ 133ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos $(eval "echo \$${label}frames") $(eval "echo \$${label}janks") \ 134ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos $(eval "echo \$${label}90") $(eval "echo \$${label}95") $(eval "echo \$${label}99") 135684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos} 136684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 137684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjoscur=1 138684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjostotaltime=0 139684f65f8602d1e1a79170984acc18421fb8f4c98Todd KjosstartTimestamp=$(date +"%s %N") 140684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 141684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjoswhile [ $cur -le $iterations ] 142684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosdo 143684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos if [ $iterations -gt 1 ]; then 144684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo ========================================= 145684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo Iteration $cur of $iterations 14699eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjos date 147684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo ========================================= 148684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos fi 149684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos if [ $iterations -gt 1 -o $cur -eq 1 ]; then 150684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos if [ $totaltimetest -eq 0 ]; then 151ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos printf "%-6s %7s(ms) %6s(ms) %s %s %s %s\n" App Time AmTime Restart DirReclaim Jank Latency 152684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos fi 153684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos fi 154684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 155684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos appnum=-1 156684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos for app in $appList 157684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos do 158684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos vout Starting $app... 159684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos ((appnum=appnum+1)) 160684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos loopTimestamp=$(date +"%s %N") 161ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos resetJankyFrames 162ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos resetJankyFrames $(getPackageName $app) 163ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos if [ $totaltimetest -eq 0 ]; then 164ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos tmpTraceOut="$tmpTraceOutBase-$app.out" 165ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos >$tmpTraceOut 166ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos startInstramentation "$app-$cur" 167ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos else 16899eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjos if [ "$memstats" -gt 0 ]; then 169ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos startInstramentation "$app-$cur" 0 17099eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjos fi 171684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos if [ $appnum -eq 0 ]; then 172ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos printf "%-8s %5s(ms) %3s(ms) %s %s\n" App Start Iter Jank Latency 173684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos fi 174684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos fi 175ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos if [ $forcecoldstart -eq 0 ]; then 176ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos t=$(startActivity $app) 177ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos else 178ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos t=$(forceStartActivity $app) 179ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos fi 180ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos 181684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos # let app finish drawing before checking janks 182643233ded9075628010c16feb8d2401ade3ae62cTodd Kjos sleep $waitTime 183684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos set -- $(getJankyFrames $(getPackageName $app)) 184684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos frames=$1 185684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos janks=$2 186ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos l90=$3 187ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos l95=$4 188ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos l99=$5 189ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos set -- $(getJankyFrames) 190ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos systemFrames=$1 191ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos systemJanks=$2 192ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos s90=$3 193ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos s95=$4 194ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos s99=$5 195ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos ((frames=frames+systemFrames)) 196ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos ((janks=janks+systemJanks)) 197ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos ((l90=l90+s90)) 198ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos ((l95=l95+s95)) 199ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos ((l99=l99+s99)) 200643233ded9075628010c16feb8d2401ade3ae62cTodd Kjos 201643233ded9075628010c16feb8d2401ade3ae62cTodd Kjos loopEndTimestamp=$(date +"%s %N") 202643233ded9075628010c16feb8d2401ade3ae62cTodd Kjos diffTime=$(computeTimeDiff $loopTimestamp $loopEndTimestamp) 203643233ded9075628010c16feb8d2401ade3ae62cTodd Kjos 204ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos if [ $frames -eq 0 ]; then 205ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos janks=0 206ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos jankPct=0 207ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos else 208ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos ((jankPct=100*janks/frames)) 209684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos fi 210ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos if [ $totaltimetest -gt 0 ]; then 211ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos # Note: using %f since %d doesn't work correctly 212ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos # when running on lollipop 213ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd 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 214ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos ((totaltime=totaltime+t)) 215ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos continue 216ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos else 217ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos stopAndDumpInstramentation $tmpTraceOut 218ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos actName=$(getActivityName $app) 219d0fefb8421a9cb57ac27d0d4fcf3abe938fcf2d1Todd Kjos pkgName=$(getPackageName $app) 220ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos stime=$(getStartTime $actName $tmpTraceOut) 221ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos relaunch=$? 222d0fefb8421a9cb57ac27d0d4fcf3abe938fcf2d1Todd Kjos etime=$(getEndTime $pkgName $tmpTraceOut) 223ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos ((tdiff=$etime-$stime)) 224ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos if [ $etime -eq 0 -o $stime -eq 0 ]; then 225ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos handleError $app : could not compute start time stime=$stime etime=$etime 226ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos # use AmTime so statistics make sense 227ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos tdiff=$t 228ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos fi 229ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos checkForDirectReclaim $actName $tmpTraceOut 230ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos directReclaim=$? 231684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 232ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos printf "%-12s %5d %5d %5d %5d %5d(%d%%) %d/%d/%d\n" "$app" "$tdiff" "$t" "$relaunch" "$directReclaim" "$janks" "$jankPct" $l90 $l95 $l99 233ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos computeStats "$app" "$tdiff" "$relaunch" "$directReclaim" "$frames" "$janks" $l90 $l95 $l99 234684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 235ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos if [ $savetmpfiles -eq 0 ]; then 236ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos rm -f $tmpTraceOut 237ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos fi 238684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos fi 239684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos done 240684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos ((cur=cur+1)) 241684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosdone 242684f65f8602d1e1a79170984acc18421fb8f4c98Todd KjosendTimestamp=$(date +"%s %N") 243684f65f8602d1e1a79170984acc18421fb8f4c98Todd KjosdiffTime=$(computeTimeDiff $startTimestamp $endTimestamp) 244684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosif [ $totaltimetest -gt 0 ]; then 245684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos printf "%-10s %5.0f %5.0f\n" TOTAL $totaltime $diffTime 246684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosfi 247684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 24899eb5eaeb69a8ebb496daa55dc92df4caf268947Todd KjosoverallSum=0 24999eb5eaeb69a8ebb496daa55dc92df4caf268947Todd KjosappCount=0 250684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosif [ $iterations -gt 1 -a $totaltimetest -eq 0 ]; then 251684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo 252684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo ========================================= 253684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos printf "Stats after $iterations iterations:\n" 254684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo ========================================= 255ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos printf "%-6s %7s(ms) %6s(ms) %6s(ms) %s %s %s %s\n" App Max Ave Min Restart DirReclaim Jank Latency 256684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos for app in $appList 257684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos do 258684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos set -- $(getStats $app) 259684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos sum=$3 260684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos ((ave=sum/iterations)) 261684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos frames=$6 262684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos janks=$7 263ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos l90=$8 264ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos l95=$9 265ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos l99=${10} 266ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos ((ave90=l90/iterations)) 267ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos ((ave95=l95/iterations)) 268ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos ((ave99=l99/iterations)) 26999eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjos if [ $frames -gt 0 ]; then 27099eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjos ((jankPct=100*janks/frames)) 27199eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjos fi 272ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd 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 27399eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjos ((overallSum=overallSum+ave)) 27499eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjos ((appCount=appCount+1)) 275684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos done 27699eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjos if [ $appCount -gt 0 ]; then 27799eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjos printf "Average Start Time: %.2f\n", $(echo $overallSum $appCount | awk '{ printf "%.2f\n", $1/$2 }') 27899eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjos fi 279684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosfi 280