blob: 58e43202a44f272a4d1984382e0e3678e10fdb36 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
#!/bin/bash
#
# android_perf: utility for running perf on an android device
#
# The basic usage sequence is to run...
# 1) perf record [gm/tests/bench] # runs profiler on specified app
# 2) perf report # prints profiler results
# 3) perf clean # cleans the temporary directory used to store results
#
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
source $SCRIPT_DIR/android_setup.sh
source $SCRIPT_DIR/utils/setup_adb.sh
if [ $(uname) == "Linux" ]; then
PERFHOST=$SCRIPT_DIR/linux/perfhost
elif [ $(uname) == "Darwin" ]; then
PERFHOST=$SCRIPT_DIR/mac/perfhost
else
echo "Could not automatically determine OS!"
exit 1;
fi
# grab and remove the perf command from the input args
PERF_CMD=${APP_ARGS[0]}
unset APP_ARGS[0]
configuration="Debug"
for arg in ${APP_ARGS[@]}
do
if [[ "${arg}" == "--release" ]];
then
configuration="Release"
else
echo "${arg}"
runVars=("${runVars[@]}" "${arg}")
fi
shift
done
# We need the debug symbols from these files
PERF_TMP_DIR=$(pwd)/android_perf_tmp
TMP_SYS_BIN=$PERF_TMP_DIR/system/bin
TMP_SYS_LIB=$PERF_TMP_DIR/system/lib
TMP_APP_LOC=$PERF_TMP_DIR/data/local/tmp
perf_setup() {
mkdir -p $TMP_SYS_BIN
mkdir -p $TMP_SYS_LIB
mkdir -p $TMP_APP_LOC
echo "Copying symbol files"
adb_pull_if_needed /system/lib/libc.so $TMP_SYS_LIB
adb_pull_if_needed /system/lib/libstlport.so $TMP_SYS_LIB
adb_pull_if_needed /system/lib/libcutils.so $TMP_SYS_LIB
adb_pull_if_needed /system/lib/libGLESv2.so $TMP_SYS_LIB
adb_pull_if_needed /system/lib/libandroid.so $TMP_SYS_LIB
adb_pull_if_needed /system/lib/libm.so $TMP_SYS_LIB
adb_pull_if_needed /system/lib/libz.so $TMP_SYS_LIB
if [ ! -f "${SKIA_OUT}/${configuration}/lib.target/lib${runVars[0]}.so" ];
then
echo "Unable to find the ${runVars[0]} library"
exit 1
fi
echo "Pushing app..."
adb_push_if_needed "${SKIA_OUT}/${configuration}/skia_launcher" /data/local/tmp
adb_push_if_needed "${SKIA_OUT}/${configuration}/lib.target/libskia_android.so" /data/local/tmp
adb_push_if_needed "${SKIA_OUT}/${configuration}/lib.target/lib${runVars[0]}.so" /data/local/tmp
cp "${SKIA_OUT}/${configuration}/skia_launcher" $TMP_APP_LOC
cp "${SKIA_OUT}/${configuration}/lib.target/libskia_android.so" $TMP_APP_LOC
cp "${SKIA_OUT}/${configuration}/lib.target/lib${runVars[0]}.so" $TMP_APP_LOC
}
perf_record() {
echo "Killing any running Skia processes."
$ADB shell ps | grep skia_launcher | awk '{print $2}' | xargs $ADB shell kill
echo "Starting application"
$ADB shell /data/local/tmp/skia_launcher ${runVars[@]} &
# WE REALLY REALLY WANT TO BE ABLE TO PASS THE SKIA_LAUNCHER APP DIRECTLY TO
# PERF, BUT AT THIS POINT THE DATA FILE WE GET WHEN GOING THAT ROUTE IS UNABLE
# TO BE READ BY THE REPORTING TOOL
echo "Starting profiler"
APP_PID=$($ADB shell ps | grep skia_launcher | awk '{print $2}')
$ADB shell perf record -p ${APP_PID} sleep 70
$ADB pull /data/perf.data $PERF_TMP_DIR/perf.data
exit 0;
}
perf_report() {
adb_pull_if_needed /data/perf.data $PERF_TMP_DIR/perf.data
$PERFHOST report -i $PERF_TMP_DIR/perf.data --symfs=$PERF_TMP_DIR ${runVars[@]}
}
# Clean up
perf_clean() {
rm -rf $PERF_TMP_DIR
}
case $PERF_CMD in
setup)
perf_setup ${runVars[@]}
;;
record)
perf_setup ${runVars[@]}
perf_record ${runVars[@]}
;;
report)
perf_report
;;
clean)
perf_clean
;;
*)
echo -n "ERROR: unknown perf command ($PERF_CMD), valid values: "
echo "setup, record, report, clean"
exit 1;
;;
esac
exit 0;
|