1684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos# functions and definitions for workload automation scripts 2684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos# 3684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos# See recentfling.sh, systemapps.sh, and other scripts that use 4684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos# these definitions. 5684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos# 6684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 7684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosdflttracecategories="gfx input view am rs power sched freq idle load memreclaim" 8684f65f8602d1e1a79170984acc18421fb8f4c98Todd KjosdfltAppList="gmail hangouts chrome youtube camera photos play maps calendar earth calculator sheets docs home" 9684f65f8602d1e1a79170984acc18421fb8f4c98Todd KjosgenerateActivities=0 10684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 11684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos# default activities. Can dynamically generate with -g. 12684f65f8602d1e1a79170984acc18421fb8f4c98Todd KjosgmailActivity='com.google.android.gm/com.google.android.gm.ConversationListActivityGmail' 1333e78d360ed3cfc1267fc893942082e5d27d0aa9Todd KjosclockActivity='com.google.android.deskclock/com.android.deskclock.DeskClock' 14684f65f8602d1e1a79170984acc18421fb8f4c98Todd KjoshangoutsActivity='com.google.android.talk/com.google.android.talk.SigningInActivity' 15d0fefb8421a9cb57ac27d0d4fcf3abe938fcf2d1Todd KjoschromeActivity='com.android.chrome/_not_used' 1633e78d360ed3cfc1267fc893942082e5d27d0aa9Todd KjoscontactsActivity='com.google.android.contacts/com.android.contacts.activities.PeopleActivity' 17684f65f8602d1e1a79170984acc18421fb8f4c98Todd KjosyoutubeActivity='com.google.android.youtube/com.google.android.apps.youtube.app.WatchWhileActivity' 18684f65f8602d1e1a79170984acc18421fb8f4c98Todd KjoscameraActivity='com.google.android.GoogleCamera/com.android.camera.CameraActivity' 19684f65f8602d1e1a79170984acc18421fb8f4c98Todd KjosplayActivity='com.android.vending/com.google.android.finsky.activities.MainActivity' 20684f65f8602d1e1a79170984acc18421fb8f4c98Todd KjosfeedlyActivity='com.devhd.feedly/com.devhd.feedly.Main' 2199eb5eaeb69a8ebb496daa55dc92df4caf268947Todd KjosphotosActivity='com.google.android.apps.photos/com.google.android.apps.photos.home.HomeActivity' 22684f65f8602d1e1a79170984acc18421fb8f4c98Todd KjosmapsActivity='com.google.android.apps.maps/com.google.android.maps.MapsActivity' 23684f65f8602d1e1a79170984acc18421fb8f4c98Todd KjoscalendarActivity='com.google.android.calendar/com.android.calendar.AllInOneActivity' 24684f65f8602d1e1a79170984acc18421fb8f4c98Todd KjosearthActivity='com.google.earth/com.google.earth.EarthActivity' 2599eb5eaeb69a8ebb496daa55dc92df4caf268947Todd KjoscalculatorActivity='com.google.android.calculator/com.android.calculator2.Calculator' 2633e78d360ed3cfc1267fc893942082e5d27d0aa9Todd KjoscalculatorLActivity='com.android.calculator2/com.android.calculator2.Calculator' 27684f65f8602d1e1a79170984acc18421fb8f4c98Todd KjossheetsActivity='com.google.android.apps.docs.editors.sheets/com.google.android.apps.docs.app.NewMainProxyActivity' 28684f65f8602d1e1a79170984acc18421fb8f4c98Todd KjosdocsActivity='com.google.android.apps.docs.editors.docs/com.google.android.apps.docs.app.NewMainProxyActivity' 29684f65f8602d1e1a79170984acc18421fb8f4c98Todd KjosoperaActivity='com.opera.mini.native/com.opera.mini.android.Browser' 30684f65f8602d1e1a79170984acc18421fb8f4c98Todd KjosfirefoxActivity='org.mozilla.firefox/org.mozilla.firefox.App' 3199eb5eaeb69a8ebb496daa55dc92df4caf268947Todd KjossuntempleActivity='com.BrueComputing.SunTemple/com.epicgames.ue4.GameActivity' 32684f65f8602d1e1a79170984acc18421fb8f4c98Todd KjoshomeActivity='com.google.android.googlequicksearchbox/com.google.android.launcher.GEL' 33684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 34684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosfunction showUsage { 35684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo "$0: unrecognized option: $1" 36684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo; echo "Usage: $0 [options]" 37684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo "-e : stop on error" 38684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo "-i iterations" 39684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo "-n : keep trace files" 40684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo "-o output file" 41684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo "-s device : adb device" 42684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo "-t trace categories" 43684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo "-g : generate activity strings" 44684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos} 45684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 46684f65f8602d1e1a79170984acc18421fb8f4c98Todd KjosDEVICE=unknown 47684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 48684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos# handle args 49684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjoswhile [ $# -gt 0 ] 50684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosdo 51684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos case "$1" in 52684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos (-d) DEVICE=$2; shift;; 53684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos (-e) stoponerror=1;; 54684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos (-n) savetmpfiles=1;; 55684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos (-t) tracecategories=$2; shift;; 56684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos (-i) iterations=$2; shift;; 57684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos (-o) output=$2; shift;; 58684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos (-v) verbose=1;; 59684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos (-nz) compress=0;; 60684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos (-s) deviceName=$2; shift;; 61684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos (-g) generateActivities=1;; 62684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos (--) ;; 63684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos (*) 64684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos chk1=$(functions 2>/dev/null) 65684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos chk2=$(typeset -F 2>/dev/null) 66684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 67684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos if echo $chk1 $chk2 | grep -q processLocalOption; then 68684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos if ! processLocalOption "$1" "$2"; then 69684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos shift 70684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos fi 71684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos else 72684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos showUsage $1 73684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos exit 1 74684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos fi;; 75684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos esac 76684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos shift 77684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosdone 78684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 79684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos# check if running on a device 80684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosif ls /etc/* 2>/dev/null | grep -q android.hardware; then 81684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos ADB="" 82684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos compress=0 83684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos isOnDevice=1 84684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjoselse 85684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos # do a throw-away adb in case the server is out-of-date 86684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos adb devices -l 2>&1 >/dev/null 87684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 88684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos if [ -z "$deviceName" ]; then 89684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos devInfo=$(adb devices -l | grep -v ^List | head -1) 90684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos else 91684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos devInfo=$(adb devices -l | grep $deviceName) 92684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos fi 93684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos set -- $devInfo 94684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos if [ -z $1 ]; then 95684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo Error: could not find device $deviceName 96684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos exit 1 97684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos fi 98684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos deviceName=$1 99684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos ADB="adb -s $deviceName shell " 10033e78d360ed3cfc1267fc893942082e5d27d0aa9Todd Kjos if [ "$DEVICE" = "" -o "$DEVICE" = unknown ]; then 10133e78d360ed3cfc1267fc893942082e5d27d0aa9Todd Kjos DEVICE=$(echo $4 | sed 's/product://') 10233e78d360ed3cfc1267fc893942082e5d27d0aa9Todd Kjos fi 103684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos isOnDevice=0 104684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosfi 105684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 10699eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjosif [ $isOnDevice -gt 0 ]; then 10799eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjos case "$DEVICE" in 10899eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjos (bullhead|angler) 10999eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjos if ! echo $$ > /dev/cpuset/background/tasks; then 11099eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjos echo Could not put PID $$ in background 11199eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjos fi 11299eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjos ;; 11399eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjos (*) 11499eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjos ;; 11599eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjos esac 11699eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjosfi 11799eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjos 118684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos# default values if not set by options or calling script 119684f65f8602d1e1a79170984acc18421fb8f4c98Todd KjosappList=${appList:=$dfltAppList} 120684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjossavetmpfiles=${savetmpfiles:=0} 121684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosstoponerror=${stoponerror:=0} 122684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosverbose=${verbose:=0} 123684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjoscompress=${compress:=1} 124684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjositerations=${iterations:=5} 125684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjostracecategories=${tracecategories:=$dflttracecategories} 126684f65f8602d1e1a79170984acc18421fb8f4c98Todd KjosADB=${ADB:=""} 127684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosoutput=${output:="./out"} 128684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 129684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos# clear the output file 13099eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjosif [ -f $output ]; then 13199eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjos > $output 13299eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjosfi 133684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 134684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos# ADB commands 135684f65f8602d1e1a79170984acc18421fb8f4c98Todd KjosAM_FORCE_START="${ADB}am start -W -S" 136684f65f8602d1e1a79170984acc18421fb8f4c98Todd KjosAM_START="${ADB}am start -W" 137684f65f8602d1e1a79170984acc18421fb8f4c98Todd KjosAM_START_NOWAIT="${ADB}am start" 138684f65f8602d1e1a79170984acc18421fb8f4c98Todd KjosAM_STOP="${ADB}am force-stop" 139684f65f8602d1e1a79170984acc18421fb8f4c98Todd KjosAM_LIST="${ADB}am stack list" 140684f65f8602d1e1a79170984acc18421fb8f4c98Todd KjosWHO="${ADB}whoami" 141684f65f8602d1e1a79170984acc18421fb8f4c98Todd KjosINPUT="${ADB}input" 142684f65f8602d1e1a79170984acc18421fb8f4c98Todd KjosPS="${ADB}ps" 143684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 144684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosfunction vout { 145684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos # debug output enabled by -v 146684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos if [ $verbose -gt 0 ]; then 147684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo DEBUG: $* >&2 148684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo DEBUG: $* >&2 >> $output 149684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos fi 150684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos} 151684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 152684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosfunction findtimestamp { 153684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos # extract timestamp from atrace log entry 154684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos while [ "$2" != "" -a "$2" != "tracing_mark_write" ] 155684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos do 156684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos shift 157684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos done 158684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo $1 159684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos} 160684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 161684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosfunction computeTimeDiff { 162684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos # Compute time diff given: startSeconds startNs endSeconds endNS 163684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 164684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos # strip leading zeros 165684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos startS=$(expr 0 + $1) 166684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos endS=$(expr 0 + $3) 167684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos if [ "$2" = N ]; then 168684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos startNs=0 169684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos endNs=0 170684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos else 171684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos startNs=$(expr 0 + $2) 172684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos endNs=$(expr 0 + $4) 173684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos fi 174684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 175684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos ((startMs=startS*1000 + startNs/1000000)) 176684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos ((endMs=endS*1000 + endNs/1000000)) 177684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos ((diff=endMs-startMs)) 178684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo $diff 179684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos} 180684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 181684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosfunction log2msec { 182684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos in=$1 183684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos in=${in:=0.0} 184684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos set -- $(echo $in | tr . " ") 18599eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjos 186684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos # shell addition via (( )) doesn't like leading zeroes in msecs 187684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos # field so remove leading zeroes 188684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos msecfield=$(expr 0 + $2) 189684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 190684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos ((msec=$1*1000000+msecfield)) 191684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos ((msec=msec/1000)) 192684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo $msec 193684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos} 194684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 195684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosfunction getStartTime { 196684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos # extract event indicating beginning of start sequence 197684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos # a) look for a "launching" event indicating start from scratch 198684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos # b) look for another activity getting a pause event 199684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos _app=$1 200684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos traceout=$2 201684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos ret=0 202684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos s=$(grep "Binder.*tracing_mark_write.*launching" $traceout 2>/dev/null | head -1| tr [\(\)\[\] 203684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos:] " ") 204684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos if [ -z "$s" ]; then 205684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos s=$(grep activityPause $traceout | head -1 2>/dev/null| tr [\(\)\[\] 206684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos:] " ") 207684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos else 208684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos vout $_app was restarted! 209684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos ret=1 210684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos fi 211684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos vout STARTLOG: $s 212684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos log2msec $(findtimestamp $s) 213684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos return $ret 214684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos} 215684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 216684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosfunction getEndTime { 217684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos # extract event indicating end of start sequence. We use the 218684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos # first surfaceflinger event associated with the target activity 219684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos _app=$1 220684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos traceout=$2 221684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos f=$(grep "surfaceflinger.*tracing_mark_write.*$_app" $traceout 2>/dev/null | 222684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos grep -v Starting | head -1 | tr [\(\)\[\] 223684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos:] " ") 224684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos if [ -z "$f" ]; then 225684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos # Hmm. sf symbols may not be there... get the pid 226684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos pid=$(${ADB}pidof /system/bin/surfaceflinger | tr "[ 227684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos]" "[ ]") 228684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos f=$(grep " <...>-$pid.*tracing_mark_write.*$_app" $traceout 2>/dev/null | 229684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos grep -v Starting | head -1 | tr [\(\)\[\] 230684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos:] " ") 231684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos fi 232ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos vout ENDLOG: $f 23399eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjos log2msec $(findtimestamp $f) 234ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos} 235684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 236684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosfunction resetJankyFrames { 237684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos _gfxapp=$1 238ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos _gfxapp=${_gfxapp:="com.android.systemui"} 239ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos ${ADB}dumpsys gfxinfo $_gfxapp reset 2>&1 >/dev/null 240ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos} 241ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos 242ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjosfunction getJankyFrames { 243ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos _gfxapp=$1 244ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos _gfxapp=${_gfxapp:="com.android.systemui"} 245ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos 246ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos # Note: no awk or sed on devices so have to do this 247ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos # purely with bash 248ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos total=0 249ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos janky=0 250ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos latency=0 251ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos ${ADB}dumpsys gfxinfo $_gfxapp | tr "\r" " " | egrep "9[059]th| frames" | while read line 252ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos do 253ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos if echo $line | grep -q "Total frames"; then 254ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos set -- $line 255ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos total=$4 256ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos elif echo $line | grep -q "Janky frames"; then 257ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos set -- $line 258ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos janky=$3 259ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos elif echo $line | grep -q "90th"; then 260ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos set -- $(echo $line | tr m " ") 261ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos l90=$3 262ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos elif echo $line | grep -q "95th"; then 263ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos set -- $(echo $line | tr m " ") 264ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos l95=$3 265ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos elif echo $line | grep -q "99th"; then 266ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos set -- $(echo $line | tr m " ") 267684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos l99=$3 268684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo $total $janky $l90 $l95 $l99 269684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos break 270684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos fi 271684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos done 272684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos} 273684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 274684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosfunction checkForDirectReclaim { 275684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos # look for any reclaim events in atrace output 276684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos _app=$1 277684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos traceout=$2 278684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos if grep -qi reclaim $traceout; then 279684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos return 1 28099eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjos fi 28199eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjos return 0 28299eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjos} 28399eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjos 284684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosfunction startInstramentation { 285684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos _iter=$1 286684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos _iter=${_iter:=0} 28799eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjos enableAtrace=$2 288684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos enableAtrace=${enableAtrace:=1} 289684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos # Called at beginning of loop. Turn on instramentation like atrace 290684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos vout start instramentation $(date) 29199eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjos echo =============================== >> $output 29299eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjos echo Before iteration $_iter >> $output 29399eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjos echo =============================== >> $output 29499eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjos ${ADB}cat /proc/meminfo 2>&1 >> $output 295684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos ${ADB}dumpsys meminfo 2>&1 >> $output 296684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos if [ "$DEVICE" = volantis ]; then 297684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos ${ADB}cat /d/nvmap/iovmm/procrank 2>&1 >> $output 298684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos fi 299684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos if [ "$user" = root -a $enableAtrace -gt 0 ]; then 300684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos vout ${ADB}atrace -b 32768 --async_start $tracecategories 301684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos ${ADB}atrace -b 32768 --async_start $tracecategories >> $output 30299eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjos echo >> $output 30399eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjos fi 30499eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjos} 305684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 306684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosfunction stopInstramentation { 307684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos enableAtrace=$1 308684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos enableAtrace=${enableAtrace:=1} 309684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos if [ "$user" = root -a $enableAtrace -gt 0 ]; then 310684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos vout ${ADB}atrace --async_stop 311684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos ${ADB}atrace --async_stop > /dev/null 312684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos fi 313684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos} 314684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 315684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosfunction stopAndDumpInstramentation { 316684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos vout stop instramentation $(date) 317684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo =============================== >> $output 318684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo After iteration >> $output 319684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo =============================== >> $output 320684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos ${ADB}cat /proc/meminfo 2>&1 >> $output 321684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos ${ADB}dumpsys meminfo 2>&1 >> $output 322684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos if [ "$user" = root ]; then 323684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos traceout=$1 324684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos traceout=${traceout:=$output} 325684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo =============================== >> $traceout 326684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo TRACE >> $traceout 327684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo =============================== >> $traceout 328684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos if [ $compress -gt 0 ]; then 329684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos tmpTrace=./tmptrace.$$ 330684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos UNCOMPRESS=$CMDDIR/atrace-uncompress.py 331684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos > $tmpTrace 33299eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjos zarg="-z" 333684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos ${ADB}atrace -z -b 32768 --async_dump >> $tmpTrace 33499eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjos python $UNCOMPRESS $tmpTrace >> $traceout 335684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos rm -f $tmpTrace 336684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos else 337684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos ${ADB}atrace -b 32768 --async_dump > $traceout 338684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos fi 339684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos vout ${ADB}atrace $zarg -b 32768 --async_dump 340684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos vout ${ADB}atrace --async_stop 341684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos ${ADB}atrace --async_stop > /dev/null 342684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos fi 343684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos} 344684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 345684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosfunction getActivityName { 346684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos cmd="actName=\$${1}Activity" 347684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos eval $cmd 348684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo $actName 349684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos} 350684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 351684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosfunction getPackageName { 352684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos set -- $(getActivityName $1 | tr "[/]" "[ ]") 353684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo $1 354684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos} 355684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 356684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosfunction startActivityFromPackage { 357684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos if [ "$1" = home ]; then 358684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos doKeyevent HOME 359684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo 0 360684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos return 0 361684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos fi 362684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos vout $AM_START_NOWAIT -p "$(getPackageName $1)" -c android.intent.category.LAUNCHER -a android.intent.action.MAIN 363684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos $AM_START_NOWAIT -p "$(getPackageName $1)" -c android.intent.category.LAUNCHER -a android.intent.action.MAIN 2>&1 364684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo 0 365684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos} 366684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 3674d31f7f204b2441cb7cc742910d94c2f1054d660Todd Kjosfunction startActivity { 36833e78d360ed3cfc1267fc893942082e5d27d0aa9Todd Kjos if [ "$1" = home ]; then 369ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos doKeyevent HOME 370ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos echo 0 371ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos return 0 372ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos elif [ "$1" = chrome ]; then 373ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos if [ "$DEVICE" = volantis -o "$DEVICE" = ariel ]; then 374ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos vout $AM_START_NOWAIT -p "$(getPackageName $1)" http://www.theverge.com 375ae1f93cc3cef9c8c790330dd09f2ff87bf38eabcTodd Kjos $AM_START_NOWAIT -p "$(getPackageName $1)" http://www.theverge.com > /dev/null 376684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos set -- 0 0 377684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos else 378684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos vout $AM_START -p "$(getPackageName $1)" http://www.theverge.com 379684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos set -- $($AM_START -p "$(getPackageName $1)" http://www.theverge.com | grep ThisTime) 380684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos fi 381684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos else 382684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos vout $AM_START "$(getActivityName $1)" 383684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos set -- $($AM_START "$(getActivityName $1)" | grep ThisTime) 3844d31f7f204b2441cb7cc742910d94c2f1054d660Todd Kjos fi 3854d31f7f204b2441cb7cc742910d94c2f1054d660Todd Kjos echo $2 | tr "[\r]" "[\n]" 3864d31f7f204b2441cb7cc742910d94c2f1054d660Todd Kjos} 387684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 388684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosfunction forceStartActivity { 389684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos if [ "$1" = chrome ]; then 390684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos vout $AM_START -p "$(getPackageName $1)" http://www.theverge.com 391684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos set -- $($AM_FORCE_START -p "$(getPackageName $1)" http://www.theverge.com | grep ThisTime) 392684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos else 393684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos vout $AM_FORCE_START "$(getActivityName $1)" 394684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos set -- $($AM_FORCE_START "$(getActivityName $1)" | grep ThisTime) 395684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos fi 396684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo $2 | tr "[\r]" "[\n]" 397684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos} 398684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 399684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosfunction checkActivity { 400684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos # requires root 401684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos actName="$(getActivityName $1)" 402684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos $AM_LIST | grep $actName 403684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos} 404684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 405684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos#function stopActivity { 406684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos# vout $AM_STOP $(getActivityName $1) 40799eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjos# $AM_STOP $(getActivityName $1) 40899eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjos#} 40999eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjos 41099eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjosfunction doSwipe { 41199eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjos vout ${ADB}input swipe $* 41299eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjos ${ADB}nice input swipe $* 41399eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjos} 41499eb5eaeb69a8ebb496daa55dc92df4caf268947Todd Kjos 415684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosfunction doText { 416684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo $* > ./tmpOutput 417684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos vout ${ADB}input text \"$*\" 418684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos ${ADB}input text "$(cat ./tmpOutput)" 419684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos rm -f ./tmpOutput 420684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos} 421684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 422684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosfunction doTap { 423684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos vout ${ADB}input tap $* 424684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos ${ADB}input tap $* 425684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos} 426684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 427684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosfunction doKeyevent { 428684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos vout $INPUT keyevent $* 429684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos $INPUT keyevent $* 430684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos} 431684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 432684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosfunction checkIsRunning { 433684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos p=$1 434684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos shift 435684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos if ! $PS | grep $p | grep -qv grep; then 436684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos handleError $*: $p is not running 437684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos exit 1 438684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos fi 439684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos} 440684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 441684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosfunction checkStartTime { 442684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos vout checkStartTime $1 v $2 443684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos if [ -z "$2" ]; then 444684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo false 445684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos return 2 446684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos fi 447684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos if [ "$1" -gt "$2" ]; then 448684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo false 449684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos return 1 450684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos fi 451684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo true 452684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos return 0 453684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos} 454684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 455684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosfunction handleError { 456684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo Error: $* 457684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos stopAndDumpInstramentation 458684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos if [ $stoponerror -gt 0 ]; then 459684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos exit 1 460684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos fi 461684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos} 462684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 463684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosuser=root 464684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosif ${ADB}ls /data 2>/dev/null | grep -q "Permission denied"; then 465684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos user=shell 466684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosfi 467684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosvout User is $user 468684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos 469684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjosif [ $generateActivities -gt 0 ]; then 470684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos if [ $isOnDevice -gt 0 ]; then 471684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo Error: cannot generate activity list when run on device 472684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos exit 1 473684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos fi 474684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos echo Generating activities... 475684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos for app in $appList 476684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos do 477684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos startActivityFromPackage $app 2>&1 > /dev/null 478684f65f8602d1e1a79170984acc18421fb8f4c98Todd Kjos act=$(${ADB}am stack list | grep $(getPackageName $app) | sed -e 's/ 479//' | head -1 | awk '{ print $2; }') 480 eval "${app}Activity=$act" 481 echo "ACTIVITY: $app --> $(getActivityName $app)" 482 done 483fi 484 485