Source code

Revision control

Copy as Markdown

Other Tools

#!/bin/bash
# Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS. All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.
# Utility functions to be used by perf_setup.sh.
# Contains helper methods and functions that wraps usage of adb.
function error() {
echo "[ERROR] "$@"" >&2
}
function warning() {
echo "[WARNING] "$@"" >&1
}
function ok() {
echo "[OK] "$@"" >&1
}
function abs_path {
(cd $1; pwd)
}
function is_set() {
local var="$1"
[[ -n "${var}" ]]
}
function is_file() {
local file="$1"
[[ -f "${file}" ]]
}
function is_not_file() {
local file="$1"
[[ ! -f "${file}" ]]
}
function is_dir() {
local dir="$1"
[[ -d "${dir}" ]]
}
function is_not_dir() {
local dir="$1"
[[ ! -d "${dir}" ]]
}
# Adds (prepends) the PATH environment variable while avoid duplicates.
function path_add() {
case ":${PATH:=$1}:" in
*:$1:*) ;;
*) PATH="$1:$PATH" ;;
esac
}
# Removes a path from the PATH environment variable using search-and-replace
# parameter expansion.
function path_remove {
local path="$1"
# Substitute first occurrence of ":path" in PATH with an empty string.
# Deletes instances in the middle or at the end.
PATH=${PATH/":$path"/}
# Substitute first occurrence of "path:" in PATH with an empty string.
# Delete instances at the beginning.
PATH=${PATH/"$path:"/}
}
# Returns the process ID (PID) of the process that corresponds to the
# application name given as input parameter.
function find_app_pid() {
local app_name="$1"
adb shell ps | grep "${app_name}" | awk '{print $2}'
}
function app_is_installed() {
local app_name="$1"
local installed_app_name=$(adb shell pm list packages \
| grep "${app_name}" | awk -F':' '{print $2}')
is_set "${installed_app_name}" \
&& [[ "${installed_app_name}" = "${app_name}" ]]
}
function app_is_running() {
local app_name="$1"
local app_pid=$(find_app_pid "${app_name}")
is_set "${app_pid}"
}
function app_start() {
local app_name="$1"
adb shell am start \
-n "${app_name}/.ConnectActivity" \
-a android.intent.action.MAIN
}
function app_stop() {
local app_name="$1"
adb shell am force-stop "${app_name}"
}
function app_uninstall() {
local app_name="$1"
adb uninstall "${app_name}"
}
function dev_arch() {
adb shell uname -m
}
function dev_ls() {
local dir="$1"
adb shell ls "${dir}"
}
# Returns true if exactly on device is connected.
function one_device_connected() {
[[ $(adb devices | wc -l) = 3 ]]
}
# Returns true if device is rooted.
function image_is_root() {
[[ $(adb shell getprop ro.build.type) = "userdebug" ]]
}
# Returns true if device is not rooted.
function image_is_not_root() {
[[ $(adb shell getprop ro.build.type) = "user" ]]
}
# Returns true if adb is not already running as root.
# Should only be called on rooted devices.
function adb_has_no_root_permissions() {
[[ $(adb shell getprop service.adb.root) = 0 ]]
}
# Android devices may disable profiling by default. We must enable it.
function enable_profiling() {
adb shell setprop security.perf_harden 0
}
# To make the report of symbols on device successful, we need to execute
# `echo 0 >/proc/sys/kernel/kptr_restrict`.
# Only needed if we run report commands on the same machine as we run
# record commands.
function enable_report_symbols() {
adb shell "echo 0 > /proc/sys/kernel/kptr_restrict"
}