1ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos# Script to gather perf and perf/watt data for several workloads
2ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos#
3ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos# Setup:
4ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos#
5ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos# - device connected to monsoon with USB passthrough enabled
6ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos# - network enabled (baseline will be measured and subtracted
7ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos#   from results) (network needed for chrome, youtube tests)
8ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos# - the device is rebooted after each test (can be inhibited
9ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos#   with "-r 0")
10ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos#
11ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos# Default behavior is to run each of the known workloads for
12ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos# 30 minutes gathering both performance and power data.
13ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos#
14ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos# The default time can be overridden with the -t option. To
15ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos# change individual test times, a config file can be specifed
16ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos# via -f with times for individual tests. Example file contents:
17ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos#
18ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos#	idleTime=60
19ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos#	recentflingTime=60
20ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos#	chromeTime=60
21ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos#	youtubeTime=0
22ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos#	sysappsTime=60
23ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos#	suntempleTime=5
24ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos#
25ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos# Output goes to the current directory.
26ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos#
27ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos# Examples:
28ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos#
29ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos# - Run all tests for 15 minutes (default is 30): ./pwrtest.sh -t 15 -R MDA20
30ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos#
31ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos# - Use a config file for test times: ./pwrtest.sh -f ./myconfig -R MDA20
32ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos#
33ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos# - Use a init file to setup device tuneables after each restart (this is
34ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos#   a bash script which should include adb commands to set up device):
35ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos#     ./pwrtest.sh -F devtunables
36ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos#
37a87980f7eba9f0d6119fe0e2200087266c514973Todd Kjos
38ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd KjosdefaultTime=30
39ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosgarbageminutes=8
40ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
41ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosfunction Usage {
42ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	echo "Usage: $0 [OPTIONS]"
43ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	echo "-d device : device type (shamu, bullhead, ...)"
44ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	echo "-f configFile : config file to override individual test times"
45ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	echo "-g garbageMinutes : time to skip power measurement at beginning of test"
46ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	echo "                    default=$garbagetime minutes"
47ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	echo "-r restart : 0=no reboot between tests, 1=reboot (default)"
48ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	echo "-t defaultTimeMin : default time to run each test"
49ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	echo "                    default=$defaultTime minutes"
50ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	echo "-D cmddir : directory to find defs.sh"
51ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	echo "-F restartHookFile : file of commands to set device tunables after restart (optional)"
52ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	echo "-R release : release running on device (MDA20, 2054728, etc)"
53ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos}
54ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
55ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosrestart=1
56ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjoshz=5
57ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosshadowgrid2TimeMax=25
58ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
59ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd KjosCMDDIR=$(dirname $0 2>/dev/null)
60ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd KjosCMDDIR=${CMDDIR:=.}
61ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
62ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd KjosMONSOON=monsoon.par
63ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
64ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjoswhile [ $# -gt 0 ]
65ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosdo
66ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	case "$1" in
67ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	(-D) CMDDIR=$2; shift;;
68ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	(-r) restart=$2; shift;;
69ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	(-t) defaultTime=$2; shift;;
70ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	(-F) restartfile=$2; shift;;
71ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	(-g) garbageminutes=$2; shift;;
72ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	(-f)
73ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		configFile=$2;
74ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		echo "Reading configs from $configFile..."
75ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		. ./$configFile
76ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		shift;;
77ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	(-R) echo $2 > ./build; shift;;
78ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	(--) ;;
79ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	(--help)
80ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		Usage
81ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		exit 0;;
82ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	(*)
83ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		echo "Unknown option: $1"
84ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		Usage
85ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		exit 1;;
86ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	esac
87ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	shift
88ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosdone
89ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
90ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos. $CMDDIR/defs.sh --
91ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
92ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosdevdir="/data/local/tmp"
93ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjossuntempledir=${CMDDIR}/suntemple
94ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
95ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjoscase $DEVICE in
96ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos(shamu|hammerhead)
9793949cd41e9fe796060f9a77a30b2a6eb70d52f6sergeyv	HWUIMACRO=hwuimacro
98ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	onSwipe="700 1847 700 400 50"
99ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	;;
100ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos(*)
10193949cd41e9fe796060f9a77a30b2a6eb70d52f6sergeyv	HWUIMACRO=hwuimacro64
102ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	onSwipe="500 1200 500 550 150"
103ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	;;
104ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosesac
105ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
10693949cd41e9fe796060f9a77a30b2a6eb70d52f6sergeyvscripts="defs.sh systemapps.sh recentfling.sh youtube.sh chromefling.sh"
107ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
108ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosif ! $MONSOON >/dev/null 2>&1; then
109ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	echo $MONSOON must be in your PATH >&2
110ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	exit 1
111ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosfi
112ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
113ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosfunction usbpassthru {
114ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	if [ "$1" = off ]; then
115ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		state=off
116ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	else
117ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		state=on
118ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	fi
119ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	echo Setting usb pass-thru to $state
120ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	monsoon.par --usbpassthrough=$state
121ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos}
122ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
123ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosfunction pwrcollect {
124ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	collectmin=$1
125ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	collectmin=${collectmin:=60}
126ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	# samples = hz * 60 * minutes
127ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	((samples=5*60*collectmin))
128ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	monsoon.par --timestamp --samples $samples --hz 5
129ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos}
130ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
131ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosfunction copy_files {
132ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	adb shell mkdir -p $devdir
133ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	for file in $scripts
134ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	do
135ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		adb push $CMDDIR/$file $devdir
136ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	done
137ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos}
138ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
139ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosfunction install_suntemple {
140ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	echo Checking for suntemple installation...
141ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	#stdest=/storage/sdcard0/obb/com.BrueComputing.SunTemple
142ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	stdest=/storage/emulated/0/obb/com.BrueComputing.SunTemple
143ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	dircontents=$(adb ls $stdest 2>/dev/null)
144ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	if [ "$dircontents" = "" ]; then
145ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		echo Installing suntemple...
146ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		adb install $suntempledir/*.apk
147ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		adb shell mkdir -p $stdest
148ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		adb push $suntempledir/main*obb $stdest
149ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	else
150ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		echo dircontents=$dircontents
151ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		echo Suntemple already installed.
152ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	fi
153ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos}
154ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
155ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosfunction run_test {
156ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	testName=$1
157ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	collectMinutes=$2
158ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	collectOutput=${testName}-power-raw.out
159ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	powerOutput=${testName}-power.out
160ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	echo -----------------------------------------------------
161ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	echo TEST: $testName
162ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	echo enabled Cores $(adb shell "cat /sys/devices/system/cpu/online")
163ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	date
164ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	echo -----------------------------------------------------
165ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	usbpassthru off
166ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	pwrcollect $collectMinutes > $collectOutput 2>/dev/null
167ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	# take off the first 2min of samples
168ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	totalSamples=$(cat $collectOutput | wc -l)
169ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	# we throw away the first "garbageminutes" of the data
170ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	# since it is volatile
171ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	((garbage=hz*60*garbageminutes))
172ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	((remaining=totalSamples-garbage))
173ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	if [ $remaining -gt 0 ]; then
174ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		tail -$remaining $collectOutput > $powerOutput
175ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	else
176ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		cp $collectOutput $powerOutput
177ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	fi
178ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	echo power data for $testName copied to $collectOutput
179ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	usbpassthru on
180ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	sleep 10
181ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	adb devices
182ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	sleep 10
183ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos}
184ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
185ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosfunction start_job {
186ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	cmdline="$1"
187ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	echo Running $cmdline
188ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	(adb shell "cd $devdir && nohup $cmdline > test.out") &
189ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	sleep 5
190ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	kill %1 2>/dev/null
191ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos}
192ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
193ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosfunction cleanup_job {
194ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	testName=$1
195ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	processName=$2
196ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	processName=${processName:=" sh "}
197ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	set -- $(adb shell ps | tr "\r" " " | grep "$processName")
198ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	echo killing PID=$2...
199ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	adb shell kill $2
200ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	sleep 1
201ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	echo copying test output to $testName...
202ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	adb pull $devdir/test.out
203ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	mv test.out ${testName}.out
204ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	if [ $restart -gt 0 ]; then
205ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		restart_device
206ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	else
207ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		doKeyevent HOME
208ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	fi
209ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos}
210ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
211ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosfunction airplane_mode {
212ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	if [ "$1" = "on" ]; then
213ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		mode=true
214ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		setting=1
215ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	else
216ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		mode=false
217ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		setting=0
218ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	fi
219ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	adb shell settings put global airplane_mode_on $setting
220ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	adb shell am broadcast -a android.intent.action.AIRPLANE_MODE --ez state $mode
221ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	echo Set airplane mode to $mode
222ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos}
223ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
224ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosfunction restart_device {
225ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	adb reboot
226ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	echo Wait 60s for device to restart...
227ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	sleep 60
228ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	while ! adb root
229ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	do
230ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		echo Waiting for device to come up...
231ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		sleep 10
232ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	done
233ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	echo Wait 30s to complete boot activities...
234ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	sleep 30
235ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	echo Restart complete.
236a87980f7eba9f0d6119fe0e2200087266c514973Todd Kjos	doTap 897 1075
237a87980f7eba9f0d6119fe0e2200087266c514973Todd Kjos	sleep 2
238ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	doSwipe $onSwipe
239ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	restartfile=${restartfile:="./restarthook"}
240ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	if [ -f $restartfile ]; then
241ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		# hook to change tunables after a restart
242ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		. $restartfile
243ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	fi
244ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos}
245ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
246ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosusbpassthru on
247ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosadb devices 2>/dev/null
248ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
249ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosairplane_mode off
250ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosif [ $restart -gt 0 ]; then
251ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	restart_device
252ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosfi
253ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
254ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosecho Copying $scripts to device $devdir...
255ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjoscopy_files
25693949cd41e9fe796060f9a77a30b2a6eb70d52f6sergeyvadb shell ln -s /data/benchmarktest/hwuimacro/$HWUIMACRO $devdir/$HWUIMACRO
257ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjostests=""
258ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
259ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos# measure background power
260ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd KjosidleTime=${idleTime:=$defaultTime}
261ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosif [ $idleTime -gt 0 ]; then
262ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	echo Test 1 : measure idle power for $idleTime minutes
263ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	run_test idle $idleTime
264ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	airplane_mode on
265ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	echo Restarting for power baseline in airplane mode...
266ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	restart_device
267ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	run_test idle-airplane $idleTime
268ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	airplane_mode off
269ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	# the screen blanks after 30 minutes. The first 2 minutes of the test
270ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	# have already been filtered off. For our power baseline, keep the first
271ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	# 20 minutes of the results
272ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	((twentyminutes=hz*20*60))
273ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	powerOutput="idle-power.out"
274ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	displayPowerOutput="idle-display-power.out"
275ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	airplanePowerOutput="idle-airplane-power.out"
276ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	airplaneDisplayPowerOutput="idle-airplane-display-power.out"
277ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	totalSamples=$(cat $powerOutput | wc -l)
278ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	if [ $twentyminutes -lt $totalSamples ]; then
279ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		head -$twentyminutes $powerOutput > $displayPowerOutput
280ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		head -$twentyminutes $airplanePowerOutput > $airplaneDisplayPowerOutput
281ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	else
282ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		cp $powerOutput $displayPowerOutput
283ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos		cp $airplanePowerOutput $airplaneDisplayPowerOutput
284ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	fi
285ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	tests="$tests idle"
286ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosfi
287ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
288ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd KjosrecentflingTime=${recentflingTime:=$defaultTime}
289ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosif [ $recentflingTime -gt 0 ]; then
290ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	echo $(date) Test 2 : recents fling for $recentflingTime minutes
291ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	airplane_mode on
292ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	adb shell "cd $devdir && ./systemapps.sh -A -T -i 1"
293ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	start_job "./recentfling.sh -N -i 1000 -d $DEVICE"
294ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	run_test recentfling $recentflingTime
295ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	cleanup_job recentfling
296ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	airplane_mode off
297ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	date
298ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	tests="$tests recentfling"
299ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosfi
300ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
301ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd KjossuntempleTime=${suntempleTime:=$defaultTime}
302ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosif [ $suntempleTime -gt 0 ]; then
303ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	echo $(date) Test 2 : run Sun Temple $suntempleTime minutes
304ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	airplane_mode on
305ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	install_suntemple
306ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	adb shell "am start $suntempleActivity"
307ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	run_test suntemple $suntempleTime
308ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	adb pull /sdcard/SunTemple/SunTemple/Saved/Logs/SunTemple.log
309ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	cleanup_job suntemple BrueComp
310ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	airplane_mode off
311ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	mv SunTemple.log suntemple.out
312ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	# grab the suntemple log
313ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	date
314ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	tests="$tests suntemple"
315ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosfi
316ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
317ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd KjoschromeTime=${chromeTime:=$defaultTime}
318ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosif [ $chromeTime -gt 0 ]; then
319ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	echo $(date) Test 3 : chrome fling for $chromeTime minutes
320ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	start_job "./chromefling.sh -i 1000 -d $DEVICE"
321ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	run_test chrome $chromeTime
322ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	cleanup_job chrome
323ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	date
324ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	tests="$tests chrome"
325ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosfi
326ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
327ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosshadowgrid2Time=${shadowgrid2Time:=$defaultTime}
328ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosif [ $shadowgrid2Time -gt $shadowgrid2TimeMax ]; then
329ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	# we cap shadowgrid2 time since the display goes
330ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	# off after 30 minutes
331ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	$shadowgrid2Time=$shadowgrid2TimeMax
332ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosfi
333ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosif [ $shadowgrid2Time -gt 0 ]; then
334ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	airplane_mode on
335ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	echo $(date) Test 4 : shadowgrid2 for $shadowgrid2Time minutes
33693949cd41e9fe796060f9a77a30b2a6eb70d52f6sergeyv	start_job "./$HWUIMACRO --onscreen shadowgrid2 100000"
337ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	run_test shadowgrid2 $shadowgrid2Time
33893949cd41e9fe796060f9a77a30b2a6eb70d52f6sergeyv	cleanup_job shadowgrid2 $HWUIMACRO
339ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	airplane_mode off
340ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	date
341ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	tests="$tests shadowgrid2"
342ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosfi
343ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
344ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd KjosyoutubeTime=${youtubeTime:=$defaultTime}
345ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosif [ $youtubeTime -gt 0 ]; then
346ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	echo $(date) Test 5 : youtube for $youtubeTime minutes
347ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	start_job "./youtube.sh -i 1000 -d $DEVICE"
348ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	run_test youtube $youtubeTime
349ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	cleanup_job youtube
350ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	date
351ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	tests="$tests youtube"
352ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosfi
353ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
354ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd KjossysappsTime=${sysappsTime:=$defaultTime}
355ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosif [ $sysappsTime -gt 0 ]; then
356ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	echo $(date) Test 6 : app switching for $sysappsTime minutes
357ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	start_job "./systemapps.sh -T -i 1000 -d $DEVICE"
358ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	run_test sysapps $sysappsTime
359ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	cleanup_job sysapps
360ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	date
361ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos	tests="$tests sysapps"
362ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosfi
363ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
364ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosecho Ran tests: $tests
365ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjosecho $tests > tests
366ffa6c3ac841d16d72ec11eda8b0fd3b6264bab08Todd Kjos
367