1d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan#!/bin/sh
2d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan
3d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasanparseoptions() {
4d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    verbose=false
5d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    user_experience=false
6d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    little_cores_off=false
7d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    iterations=0
8d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    pagecached=false
9d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan
10d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    while [ $# -gt 1 ]
11d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    do
12d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	case $1 in
13d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	    -a)
14d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan		;;
15d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	    -b)
16d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan		little_cores_off=true
17d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan		;;
18d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	    -c)
19d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan		pagecached=true
20d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan		;;
21d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	    -h)
22d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan		usage
23d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan		;;
24d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	    -u)
25d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan		user_experience=true
26d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan		;;
27d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	    -v)
28d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan		verbose=true
29d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan		;;
30d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	    *)
31d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan		usage
32d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan		;;
33d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	    esac
34d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	shift
35d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    done
36d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan
37d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    iterations=$1
38d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    if [ $iterations -lt 100 ]; then
39d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	usage
40d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    fi
41d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan}
42d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan
43d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasangetstats () {
44d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    infile=$1
45d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    app=$2
46d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    echo "Data for $app :"
47d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan
48fa5fbd7358636f4fb8a1242949d34c6393e8446fMohan Srinivasan    # Activity Manager reports ThisTime and TotalTime. TotalTime seems to be
49fa5fbd7358636f4fb8a1242949d34c6393e8446fMohan Srinivasan    # a more measure of the launch from the users perspective. So using TotalTime
50fa5fbd7358636f4fb8a1242949d34c6393e8446fMohan Srinivasan    # as our metric for launch latency
51d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan
52d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    # From Activity Manager
53fa5fbd7358636f4fb8a1242949d34c6393e8446fMohan Srinivasan    echo "Launch Time (TotalTime) :"
54fa5fbd7358636f4fb8a1242949d34c6393e8446fMohan Srinivasan    fgrep TotalTime $infile | awk '{print $2}' | computestats
55d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan
56d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    # Data from simpleperf
57d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    echo "cpu-cycles :"
58d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    fgrep cpu-cycles $infile | awk '{print $1}' | sed s/,//g | computestats
59d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan
60d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    # CPU util% Data from /proc/stat
61d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    echo "cpu-util% :"
62d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    fgrep 'Total CPU util' $infile | awk '{print $5}' | computestatsf
63d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    echo "user-cpu-util% :"
64d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    fgrep 'User CPU util' $infile | awk '{print $5}' | computestatsf
65d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    echo "sys-cpu-util% (incl hardirq/softirq) :"
66d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    fgrep 'Sys CPU util' $infile | awk '{print $5}' | computestatsf
67d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan
68d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    if [ $verbose == true ]; then
69d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	echo "instructions : "
70d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	fgrep instructions $infile | awk '{print $1}' | sed s/,//g | computestats
71d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan
72d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	echo "cycles per instruction : "
73d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	fgrep instructions $infile | awk '{print $4}' | sed s/,//g | computestatsf
74d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan
75d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	echo "branch-misses : "
76d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	fgrep branch-misses $infile | awk '{print $1}' | sed s/,//g | computestats
77d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan
78d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	echo "context-switches : "
79d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	fgrep context-switches $infile | awk '{print $1}' | sed s/,//g | computestats
80d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan
81d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	echo "page-faults : "
82d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	fgrep page-faults $infile | awk '{print $1}' | sed s/,//g | computestats
83d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    fi
84d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan
85d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    if [ $system_bdev_set == true ]; then
86d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	# (Storage) Data from /proc we've collected
87d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	echo "KB read for $system_block_device blkdev :"
88d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	fgrep KB $infile | grep system | awk '{print $5}' | computestats
89d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan
90d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	echo "iowait% :"
91d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	fgrep IOwait $infile | awk '{print $3}' | computestatsf
92d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan
93d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	echo "Device util% for $system_block_device blkdev :"
94d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	fgrep 'Device util' $infile | awk '{print $4}' | computestatsf
95d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    fi
96d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan}
97d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan
98d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasancpufreq_volantis() {
99d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    echo "Setting Governor to performance"
100d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    if [ $little_cores_off == true ]; then
101d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan        echo "Cannot turn off Little cores on $model"
102d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan        exit 1
103d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    fi
104d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    i=0
105d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    num_cores=2
106d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    while [ $i -lt  $num_cores ]
107d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    do
108d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan        adb shell "echo performance  > /sys/devices/system/cpu/cpu$i/cpufreq/scaling_g\
109d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasanovernor"
110d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan        adb shell "echo 2499000 > /sys/devices/system/cpu/cpu$i/cpufreq/scaling_max_fr\
111d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasaneq"
112d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan        i=`expr $i + 1`
113d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    done
114d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    # Lock the GPU frequencies
115d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    echo -n 852000000 > /d/clock/override.gbus/rate
116d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    echo -n 1 > /d/clock/override.gbus/state
117d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan}
118d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan
119d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasancpufreq_fugu() {
120d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    echo "Setting Governor to performance"
121d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    if [ $little_cores_off == true ]; then
122d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	echo "Cannot turn off Little cores on $model"
123d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	exit 1
124d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    fi
125d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    i=0
126d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    num_cores=4
127d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    while [ $i -lt  $num_cores ]
128d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    do
129d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	adb shell "echo performance  > /sys/devices/system/cpu/cpu$i/cpufreq/scaling_governor"
130d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	adb shell "echo 1833000 > /sys/devices/system/cpu/cpu$i/cpufreq/scaling_max_freq"
131d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	i=`expr $i + 1`
132d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    done
133d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan}
134d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan
135d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasancpufreq_marlin_sailfish () {
136d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    echo "Setting Governor to performance"
137d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    # GPU Governor and Frequency
138d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    adb shell 'echo performance > /sys/class/kgsl/kgsl-3d0/devfreq/governor'
139d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    adb shell 'echo 624000000 > /sys/class/kgsl/kgsl-3d0/devfreq/max_freq'
140d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    if [ $little_cores_off == true ]; then
141d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	# Disable Little Cores, force app to run on big cores
142d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	echo "Disabling Little Cores"
143d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	adb shell 'echo 0 > /sys/devices/system/cpu/cpu0/online'
144d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	adb shell 'echo 0 > /sys/devices/system/cpu/cpu1/online'
145d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    else
146d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	echo "Enabling All Cores"
147d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	adb shell 'echo 1 > /sys/devices/system/cpu/cpu0/online'
148d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	adb shell 'echo 1 > /sys/devices/system/cpu/cpu1/online'
149d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	adb shell 'echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor'
150d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	adb shell 'echo 1996800 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq'
151d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	# cpu1 needed ?
152d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	adb shell 'echo performance > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor'
153d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	adb shell 'echo 1996800 > /sys/devices/system/cpu/cpu1/cpufreq/scaling_max_freq'
154d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    fi
155d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    # Set Governor to performance, up scaling_max_frequency to highest
156d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    adb shell 'echo performance  > /sys/devices/system/cpu/cpu2/cpufreq/scaling_governor'
157d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    # Only necessary to set max_freq on cpu2, cpu3 is in same cluster and will
158d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    # automatically get the same settings
159d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    adb shell 'echo 2150400 > /sys/devices/system/cpu/cpu2/cpufreq/scaling_max_freq'
160d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan}
161d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan
162d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasancpufreq_angler () {
163d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    echo "Setting Governor and Frequency"
164d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    # GPU Governor and Frequency
165d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    adb shell "echo performance > /sys/class/kgsl/kgsl-3d0/devfreq/governor"
166d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    adb shell "echo 0 > /sys/class/kgsl/kgsl-3d0/bus_split"
167d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    adb shell "echo 1 > /sys/class/kgsl/kgsl-3d0/force_clk_on"
168d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    adb shell "echo 10000 > /sys/class/kgsl/kgsl-3d0/idle_timer"
169d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    if [ $little_cores_off == true ]; then
170d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	# Disable Little Cores, force app to run on big cores
171d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	echo "Disabling Little Cores"
172d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	i=0
173d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	num_cores=4
174d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	while [ $i -lt $num_cores ]
175d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	do
176d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	    adb shell "echo 0 > /sys/devices/system/cpu/cpu$i/online"
177d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	    i=`expr $i + 1`
178d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	done
179d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    else
180d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	echo "Enabling All Cores"
181d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	# Enable Little cores here, set governor to performance
182d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	# Lock frequency of little cores
183d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	i=0
184d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	num_cores=4
185d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	while [ $i -lt $num_cores ]
186d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	do
187d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	    adb shell "echo 1 > /sys/devices/system/cpu/cpu$i/online"
188d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	    adb shell "echo performance > /sys/devices/system/cpu/cpu$i/cpufreq/scaling_governor"
189d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	    # Lock frequency of little cores
190d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	    adb shell "echo 1555200 > /sys/devices/system/cpu/cpu$i/cpufreq/scaling_max_freq"
191d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	    i=`expr $i + 1`
192d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	done
193d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    fi
194d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    i=4
195d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    num_cores=8
196d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    while [ $i -lt $num_cores ]
197d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    do
198d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	adb shell "echo performance > /sys/devices/system/cpu/cpu$i/cpufreq/scaling_governor"
199d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	# Lock frequency of big cores
200d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	adb shell "echo 1958400 > /sys/devices/system/cpu/cpu$i/cpufreq/scaling_max_freq"
201d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	i=`expr $i + 1`
202d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    done
203d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan}
204d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan
205d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan#
206d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan# This strange bit of logic is needed to get the underlying block devices for /system
207d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan# for Marlin/Sailfish
208d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan#
209d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasanget_marlin_sailfish_devnames () {
210d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    # This bit of code required to get the block dev for /system and /vendor
211d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    # Suffix can be _a or _b, depending on what the active /system partition is
212d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan#    suffix=`adb shell getprop ro.boot.slot_suffix`
213d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    # Get the blockdevice using the suffix we got above
214d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan#    system_block_device=`adb shell ls -l /dev/block/platform/soc/*ufs*/by-name/system$suffix | awk '{ print $10 }' `
215d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    # Vendor is more straightforward, but we don't use it right now
216d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan#    vendor_block_device=`adb shell df /vendor | grep -v Filesystem | awk '{print $1}' `
217d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    # finally extract the last component of the absolute device pathname we got above
218d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan#    system_block_device=`echo $system_block_device | awk 'BEGIN { FS ="/" } ; { print $4 }' `
219d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan#    vendor_block_device=`echo $vendor_block_device | awk 'BEGIN { FS ="/" } ; { print $4 }' `
220d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    system_bdev_set=true
221d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan#   For now, hardcode sda for Marlin/Sailfish block device
222d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan#   XXX - We'll get stats for entire device
223d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    system_block_device=sda
224d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    echo Block Device $system_block_device
225d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan}
226d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan
227d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasanget_angler_devnames () {
228d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    # Get the underlying bdev from the "by-name" mapping
229d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    system_block_device=`adb shell 'find /dev/block/platform -name by-name | xargs ls -l' | grep system | awk '{ print $10 }' `
230d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    # extract the last component of the absolute device pathname we got above
231d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    system_block_device=`echo $system_block_device | awk 'BEGIN { FS ="/" } ; { print $4 }' `
232d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    # vendor is unused right now, but get the bdev anyway in case we decide to use it
233d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    # Get the underlying bdev from the "by-name" mapping
234d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    vendor_block_device=`adb shell 'find /dev/block/platform -name by-name | xargs ls -l' | grep vendor | awk '{ print $10 }' `
235d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    # extract the last component of the absolute device pathname we got above
236d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan   vendor_block_device=`echo $vendor_block_device | awk 'BEGIN { FS ="/" } ; { print $4 }' `
237d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan   system_bdev_set=true
238d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan}
239d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan
240d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasanget_fugu_devnames () {
241d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    system_block_device=`adb shell ls -l /dev/block/by-name/system | awk '{ print $10 }' `
242d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    system_block_device=`echo $system_block_device | awk 'BEGIN { FS ="/" } ; { print $4 }' `
243d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    system_bdev_set=true
244d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan}
245d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan
246d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasanget_volantis_devnames () {
247d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    # Hardcoding all of the mmcblk0 device for now
248d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    system_block_device=mmcblk0
249d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    system_bdev_set=true
250d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan}
251d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan
252d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasansystem_stats_before() {
253d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    if [ $system_bdev_set == true ]; then
254d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	# Get BEFORE read stats for /system
255d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	adb shell 'cat /proc/diskstats' | grep -w $system_block_device > /tmp/$model-system
256d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	BEFORE_RD_IOS_SYSTEM=`awk '{ print $4 }' /tmp/$model-system`
257d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	BEFORE_RD_SECTORS_SYSTEM=`awk '{ print $6 }' /tmp/$model-system`
258d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	# iowait% computation
259d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	adb shell 'cat /proc/stat' | grep -w cpu > /tmp/procstat
260d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	user_ticks_before=`awk '{ print ($2 + $3) }' /tmp/procstat`
261d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	sys_ticks_before=`awk '{ print ($4 + $7 + $8) }' /tmp/procstat`
262d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	cpubusy_ticks_before=`awk '{ print ($2 + $3 + $4 + $7 + $8) }' /tmp/procstat`
263d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	iowait_ticks_before=`awk '{ print $6 }' /tmp/procstat`
264d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	total_ticks_before=`awk '{ print ($2 + $3 + $4 + $5 + $7 + $8) }' /tmp/procstat`
265d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	# Device util% computation
266d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	# Note hz=100, so multiplying uptime (in seconds) by 100, gives us
267d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	# the uptime in hz.
268d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	adb shell 'cat /proc/uptime' > /tmp/uptime
269d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	uptime_before_hz=`awk '{ print ($1 * 100) }' /tmp/uptime`
270d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	# Note that the device (busy) ticks is in ms. Since hz=100, dividing
271d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	# device (busy) ticks by 10, gives us this in the correct ticks units
272d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	device_util_before_hz=`awk '{ print ($13 / 10) }' /tmp/$model-system`
273d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    fi
274d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan}
275d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan
276d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasansystem_stats_after() {
277d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    if [ $system_bdev_set == true ]; then
278d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	# Get AFTER read stats for /system
279d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	adb shell 'cat /proc/diskstats' | grep -w $system_block_device > /tmp/$model-system
280d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	AFTER_RD_IOS_SYSTEM=`awk '{ print $4 }' /tmp/$model-system`
281d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	AFTER_RD_SECTORS_SYSTEM=`awk '{ print $6 }' /tmp/$model-system`
282d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	# iowait% computation
283d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	adb shell 'cat /proc/stat' | grep -w cpu > /tmp/procstat
284d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	user_ticks_after=`awk '{ print ($2 + $3) }' /tmp/procstat`
285d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	sys_ticks_after=`awk '{ print ($4 + $7 + $8) }' /tmp/procstat`
286d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	cpubusy_ticks_after=`awk '{ print ($2 + $3 + $4 + $7 + $8) }' /tmp/procstat`
287d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	iowait_ticks_after=`awk '{ print $6 }' /tmp/procstat`
288d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	total_ticks_after=`awk '{ print ($2 + $3 + $4 + $5 + $7 + $8) }' /tmp/procstat`
289d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	# Device util% computation
290d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	# Note hz=100, so multiplying uptime (in seconds) by 100, gives us
291d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	# the uptime in hz.
292d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	adb shell 'cat /proc/uptime' > /tmp/uptime
293d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	uptime_after_hz=`awk '{ print ($1 * 100) }' /tmp/uptime`
294d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	# Note that the device (busy) ticks is in ms. Since hz=100, dividing
295d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	# device (busy) ticks by 10, gives us this in the correct ticks units
296d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	device_util_after_hz=`awk '{ print ($13 / 10) }' /tmp/$model-system`
297d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    fi
298d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan}
299d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan
300d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasansystem_stats_delta() {
301d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    if [ $system_bdev_set == true ]; then
302d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	# Sectors to KB
303d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	READ_KB_SYSTEM=`expr $AFTER_RD_SECTORS_SYSTEM - $BEFORE_RD_SECTORS_SYSTEM`
304d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	READ_KB_SYSTEM=`expr $READ_KB_SYSTEM / 2`
305d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	echo Read IOs /system = `expr $AFTER_RD_IOS_SYSTEM - $BEFORE_RD_IOS_SYSTEM`
306d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	echo Read KB /system = $READ_KB_SYSTEM
307d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	echo $iowait_ticks_before $iowait_ticks_after $total_ticks_before $total_ticks_after | awk '{ printf "IOwait = %.2f\n", (($2 - $1) * 100.0) / ($4 - $3) }'
308d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	echo $device_util_before_hz $device_util_after_hz $uptime_before_hz $uptime_after_hz | awk '{ printf "Device util% = %.2f\n", (($2 - $1) * 100.0) / ($4 - $3) }'
309d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	echo $user_ticks_after $user_ticks_before $total_ticks_after $total_ticks_before | awk '{ printf "User CPU util% = %.2f\n", (($1 - $2) * 100.0) / ($3 - $4) }'
310d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	echo $sys_ticks_after $sys_ticks_before $total_ticks_after $total_ticks_before | awk '{ printf "Sys CPU util% = %.2f\n", (($1 - $2) * 100.0) / ($3 - $4) }'
311d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	echo $cpubusy_ticks_after $cpubusy_ticks_before $total_ticks_after $total_ticks_before | awk '{ printf "Total CPU util% = %.2f\n", (($1 - $2) * 100.0) / ($3 - $4) }'
312d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    fi
313d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan}
314d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan
315d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasanlaunch_app() {
316d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    package=$1
317d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    activity=$2
318d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    adb shell "am force-stop $package"
319d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    sleep 1
320d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan
321d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    i=0
322d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    while [ $i -lt $iterations ]
323d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    do
324d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	if [ $pagecached == false ]; then
325d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	    adb shell 'echo 3 > /proc/sys/vm/drop_caches'
326d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	fi
327d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	# The -W argument to am start forces am start to wait till the launch completes.
328d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	# The -S argument forces it to kill any existing app that is running first
329d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	# eg. adb shell 'am start -W -S -n com.android.chrome/com.google.android.apps.chrome.Main'
330d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	system_stats_before
331d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	adb shell "simpleperf stat -a am start -W -n $package/$activity"
332d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	system_stats_after
333d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	system_stats_delta
334d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	sleep 1
335d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	adb shell "am force-stop $package"
336d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	sleep 1
337d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	i=`expr $i + 1`
338d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    done
339d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan}
340d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan
341d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasanlaunch_fugu_apps() {
342d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    launch_app com.google.android.youtube.tv com.google.android.apps.youtube.tv.activity.TvGuideActivity > youtube-$model
343d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    getstats youtube-$model YouTube
344d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    launch_app com.google.android.play.games com.google.android.gms.games.pano.activity.PanoGamesOnboardHostActivity > games-$model
345d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    getstats games-$model Games
346d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    launch_app com.google.android.music com.android.music.activitymanagement.TopLevelActivity > music-$model
347d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    getstats music-$model Music
348d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan}
349d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan
350d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasanlaunch_phone_apps() {
351d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    launch_app com.android.chrome com.google.android.apps.chrome.Main > chrome-$model
352d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    getstats chrome-$model Chrome
353d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    launch_app com.google.android.GoogleCamera com.android.camera.CameraActivity > camera-$model
354d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    getstats camera-$model Camera
355d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    launch_app com.google.android.apps.maps com.google.android.maps.MapsActivity > maps-$model
356d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    getstats maps-$model Maps
357fa5fbd7358636f4fb8a1242949d34c6393e8446fMohan Srinivasan    launch_app com.google.android.youtube com.google.android.apps.youtube.app.WatchWhileActivity > youtube-$model
358fa5fbd7358636f4fb8a1242949d34c6393e8446fMohan Srinivasan    getstats youtube-$model YouTube
359d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan}
360d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan
361d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasanusage() {
362d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    echo 'Usage: app-launcher [-c|-v] -a|-b|-u num-iterations'
363d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    echo 'where num-iterations >= 100'
364d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    echo '-v (optional) for verbose stats dump'
365d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    echo '-a|-b|-u required:'
366d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    echo '        -a:all cores'
367d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    echo '        -b:only big cores'
368d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    echo '        -c:pagecached. Do not drop pagecache before each launch (not default)'
369d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    echo '        -h:Dump this help menu'
370d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    echo '        -u:user experience, no change to cpu/gpu frequencies or governors'
371d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    echo '        -a/-b locks CPU/GPU freqs to max, performance governor, thermal/perfd off'
372d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    echo '        -u runs with default device configs, as users would see it'
373d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    exit 1
374d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan}
375d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan
376d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan#
377d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan# The main() part of the script follows :
378d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan#
379d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan
380d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasanif [ $# -lt 2 ]; then
381d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    usage
382d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasanfi
383d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan
384d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasanwhich computestats > /dev/null
385d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasanif [ $? != 0 ]; then
386d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    echo "ERROR: Please add computestats utiliy to your PATH"
387d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    exit 1
388d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasanfi
389d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan
390d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasanwhich computestatsf > /dev/null
391d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasanif [ $? != 0 ]; then
392d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    echo "Error: Please add computestatsf utility to your PATH"
393d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    exit 1
394d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasanfi
395d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan
396d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasanparseoptions $@
397d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan
398d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasanadb root && sleep 2
399d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan
400d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasanif [ $user_experience == false ]; then
401d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    # Important to stop the thermal-engine to prevent throttling while test is running
402d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    # and stop perfd
403d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    adb shell 'stop thermal-engine'
404d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    adb shell 'stop perfd'
405d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasanelse
406d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    echo "User Experience: Default Configs. No changes to cpufreq settings"
407d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasanfi
408d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan
409d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasanmodel=`adb shell getprop ro.product.name`
410d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan# Releases are inconsistent with various trailing characters, remove them all
411d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasanmodel=`echo $model | sed 's/[ \t\r\n]*$//' `
412d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan
413d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasanecho Found $model Device
414d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan
415d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasansystem_bdev_set=false
416d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasancase $model in
417d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    marlin | sailfish)
418d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan        if [ $user_experience == false ]; then
419d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan            cpufreq_marlin_sailfish
420d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan        fi
421d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan	get_marlin_sailfish_devnames
422d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan        ;;
423d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    angler)
424d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan        if [ $user_experience == false ]; then
425d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan            cpufreq_angler
426d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan        fi
427d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan        get_angler_devnames
428d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan        ;;
429d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    fugu)
430d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan        if [ $user_experience == false ]; then
431d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan            cpufreq_fugu
432d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan        fi
433d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan        get_fugu_devnames
434d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan        ;;
435d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    volantis | volantisg)
436d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan        if [ $user_experience == false ]; then
437d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan            cpufreq_volantis
438d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan        fi
439d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan        get_volantis_devnames
440d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan        ;;
441d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    *)
442d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan        echo Unknown Device $model
443d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan        exit 1
444d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan        ;;
445d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasanesac
446d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan
447d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan
448d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan#
449d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan# launch each app in turn
450d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan#
451d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasanif [ $model == "fugu" ]; then
452d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    launch_fugu_apps
453d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasanelse # Phone Apps
454d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasan    launch_phone_apps
455d5f50d8949b883b619e2acbf2b32bfab1d444189Mohan Srinivasanfi
456