| #!/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" |
| } |