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