140 lines
3.6 KiB
Bash
Executable File
140 lines
3.6 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Copyright 2013 The Chromium Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
#
|
|
# Start / stop profiling in chrome.
|
|
|
|
# The profiling data is saved to directory /sdcard/Download. The files
|
|
# are named beginning chrome-profile-results-
|
|
#
|
|
# Assumes you have sourced the android build environment script
|
|
# (e.g. 'adb' is on your path).
|
|
set -e
|
|
|
|
usage() {
|
|
echo "adb_profile_chrome [--start [-o file] [-c C]|--stop|-d|-t N] [-v N]"
|
|
echo "See http://dev.chromium.org/developers/how-tos/trace-event-profiling-tool for detailed instructions on profiling."
|
|
echo ""
|
|
echo " --start Start profiling."
|
|
echo " --output|-o file Save profile output to file. "
|
|
echo " (Default is /sdcard/Download/chrome-profile-results-*)"
|
|
echo " --categories|-c C Select categories to trace with comma-delimited wildcards."
|
|
echo " e.g. '*', 'cat1*,-cat1a'. Default is '*'."
|
|
echo " --stop Stop profiling."
|
|
echo " --download|-d Download latest trace."
|
|
echo " --time|-t N Profile for N seconds and download the resulting trace."
|
|
echo " --version|v N Select among installed browsers."
|
|
echo " One of stable (default), beta, dev, build"
|
|
echo ""
|
|
echo "Profiling data is saved to the device."
|
|
exit 0
|
|
}
|
|
|
|
send_intent() {
|
|
local PACKAGE=$1
|
|
local INTENT=$2
|
|
shift
|
|
shift
|
|
adb shell am broadcast -a $PACKAGE.$INTENT $*
|
|
}
|
|
|
|
download_latest_trace() {
|
|
TRACE_FILE=$(adb logcat -d | \
|
|
grep "Logging performance trace to file: " | \
|
|
tail -1 | \
|
|
perl -pi -e "s/.*\/storage\/emulated\/.+\/([^\r]+).*/\/sdcard\/Download\/\\1/g")
|
|
if [ -z "$TRACE_FILE" ]; then
|
|
echo "Unable to determine trace file name"
|
|
exit 1
|
|
fi
|
|
|
|
adb pull $TRACE_FILE 2> /dev/null
|
|
LOCAL_TRACE_FILE=$(basename $TRACE_FILE)
|
|
if [ ! -f "$LOCAL_TRACE_FILE" ]; then
|
|
echo "Unable to download trace file"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
do_timed_capture() {
|
|
local PACKAGE=$1
|
|
local INTERVAL=$2
|
|
shift
|
|
shift
|
|
echo -n "Capturing trace..."
|
|
send_intent ${PACKAGE} "GPU_PROFILER_START" $* > /dev/null
|
|
sleep ${INTERVAL}
|
|
send_intent ${PACKAGE} "GPU_PROFILER_STOP" > /dev/null
|
|
echo "done"
|
|
|
|
echo -n "Downloading trace..."
|
|
sleep $[${INTERVAL} / 4 + 1]
|
|
download_latest_trace
|
|
echo "done"
|
|
|
|
echo "Trace written to ${PWD}/${LOCAL_TRACE_FILE}"
|
|
}
|
|
|
|
PACKAGE=${DEFAULT_PACKAGE:-com.android.chrome}
|
|
|
|
while test -n "$1"; do
|
|
case "$1" in
|
|
-v|--version)
|
|
if [[ -z "$2" ]] ; then
|
|
usage
|
|
fi
|
|
shift
|
|
case "$1" in
|
|
stable) PACKAGE="com.android.chrome" ;;
|
|
beta) PACKAGE="com.chrome.beta" ;;
|
|
dev) PACKAGE="com.google.android.apps.chrome_dev" ;;
|
|
build) PACKAGE="com.google.android.apps.chrome" ;;
|
|
*) usage ;;
|
|
esac
|
|
;;
|
|
--start) FUNCTION="GPU_PROFILER_START" ;;
|
|
--stop) FUNCTION="GPU_PROFILER_STOP" ;;
|
|
-o|--output)
|
|
if [ -z "$2" ] ; then
|
|
usage
|
|
fi
|
|
OUTPUT="-e file '$2'"
|
|
shift
|
|
;;
|
|
-c|--categories)
|
|
if [ -z "$2" ]; then
|
|
usage
|
|
fi
|
|
CATEGORIES="-e categories '$2'"
|
|
shift
|
|
;;
|
|
-t|--time)
|
|
shift
|
|
if [ -z "$1" ] ; then
|
|
usage
|
|
fi
|
|
INTERVAL="$1"
|
|
;;
|
|
-d|--download)
|
|
shift
|
|
download_latest_trace
|
|
echo "Trace written to ${PWD}/${LOCAL_TRACE_FILE}"
|
|
;;
|
|
*) usage ;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
if [ -z "${INTERVAL}" ] ; then
|
|
if [ -z "${FUNCTION}" ] ; then
|
|
usage
|
|
else
|
|
send_intent ${PACKAGE} ${FUNCTION} ${OUTPUT} ${CATEGORIES}
|
|
fi
|
|
else
|
|
do_timed_capture ${PACKAGE} ${INTERVAL} ${CATEGORIES}
|
|
fi
|
|
exit 0
|