henrika | 7a1798d | 2017-02-24 04:53:50 -0800 | [diff] [blame] | 1 | #!/bin/bash |
| 2 | |
| 3 | # Copyright (c) 2017 The WebRTC project authors. All Rights Reserved. |
| 4 | # |
| 5 | # Use of this source code is governed by a BSD-style license |
| 6 | # that can be found in the LICENSE file in the root of the source |
| 7 | # tree. An additional intellectual property rights grant can be found |
| 8 | # in the file PATENTS. All contributing project authors may |
| 9 | # be found in the AUTHORS file in the root of the source tree. |
| 10 | |
| 11 | # Utility functions to be used by perf_setup.sh. |
| 12 | # Contains helper methods and functions that wraps usage of adb. |
| 13 | |
| 14 | function error() { |
| 15 | echo "[ERROR] "$@"" >&2 |
| 16 | } |
| 17 | |
| 18 | function warning() { |
| 19 | echo "[WARNING] "$@"" >&1 |
| 20 | } |
| 21 | |
| 22 | function ok() { |
| 23 | echo "[OK] "$@"" >&1 |
| 24 | } |
| 25 | |
| 26 | function abs_path { |
| 27 | (cd $1; pwd) |
| 28 | } |
| 29 | |
| 30 | function is_set() { |
| 31 | local var="$1" |
| 32 | [[ -n "${var}" ]] |
| 33 | } |
| 34 | |
| 35 | function is_file() { |
| 36 | local file="$1" |
| 37 | [[ -f "${file}" ]] |
| 38 | } |
| 39 | |
| 40 | function is_not_file() { |
| 41 | local file="$1" |
| 42 | [[ ! -f "${file}" ]] |
| 43 | } |
| 44 | |
| 45 | function is_dir() { |
| 46 | local dir="$1" |
| 47 | [[ -d "${dir}" ]] |
| 48 | } |
| 49 | |
| 50 | function is_not_dir() { |
| 51 | local dir="$1" |
| 52 | [[ ! -d "${dir}" ]] |
| 53 | } |
| 54 | |
| 55 | # Adds (prepends) the PATH environment variable while avoid duplicates. |
| 56 | function path_add() { |
| 57 | case ":${PATH:=$1}:" in |
| 58 | *:$1:*) ;; |
| 59 | *) PATH="$1:$PATH" ;; |
| 60 | esac |
| 61 | } |
| 62 | |
| 63 | # Removes a path from the PATH environment variable using search-and-replace |
| 64 | # parameter expansion. |
| 65 | function path_remove { |
| 66 | local path="$1" |
| 67 | # Substitute first occurrence of ":path" in PATH with an empty string. |
| 68 | # Deletes instances in the middle or at the end. |
| 69 | PATH=${PATH/":$path"/} |
| 70 | # Substitute first occurrence of "path:" in PATH with an empty string. |
| 71 | # Delete instances at the beginning. |
| 72 | PATH=${PATH/"$path:"/} |
| 73 | } |
| 74 | |
| 75 | # Returns the process ID (PID) of the process that corresponds to the |
| 76 | # application name given as input parameter. |
| 77 | function find_app_pid() { |
| 78 | local app_name="$1" |
| 79 | adb shell ps | grep "${app_name}" | awk '{print $2}' |
| 80 | } |
| 81 | |
| 82 | function app_is_installed() { |
| 83 | local app_name="$1" |
| 84 | local installed_app_name=$(adb shell pm list packages \ |
| 85 | | grep "${app_name}" | awk -F':' '{print $2}') |
| 86 | is_set "${installed_app_name}" \ |
| 87 | && [[ "${installed_app_name}" = "${app_name}" ]] |
| 88 | } |
| 89 | |
| 90 | function app_is_running() { |
| 91 | local app_name="$1" |
| 92 | local app_pid=$(find_app_pid "${app_name}") |
| 93 | is_set "${app_pid}" |
| 94 | } |
| 95 | |
| 96 | function app_start() { |
| 97 | local app_name="$1" |
| 98 | adb shell am start \ |
| 99 | -n "${app_name}/.ConnectActivity" \ |
| 100 | -a android.intent.action.MAIN |
| 101 | } |
| 102 | |
| 103 | function app_stop() { |
| 104 | local app_name="$1" |
| 105 | adb shell am force-stop "${app_name}" |
| 106 | } |
| 107 | |
| 108 | function app_uninstall() { |
| 109 | local app_name="$1" |
| 110 | adb uninstall "${app_name}" |
| 111 | } |
| 112 | |
| 113 | function dev_arch() { |
| 114 | adb shell uname -m |
| 115 | } |
| 116 | |
| 117 | function dev_ls() { |
| 118 | local dir="$1" |
| 119 | adb shell ls "${dir}" |
| 120 | } |
| 121 | |
| 122 | # Returns true if exactly on device is connected. |
| 123 | function one_device_connected() { |
| 124 | [[ $(adb devices | wc -l) = 3 ]] |
| 125 | } |
| 126 | |
| 127 | # Returns true if device is rooted. |
| 128 | function image_is_root() { |
| 129 | [[ $(adb shell getprop ro.build.type) = "userdebug" ]] |
| 130 | } |
| 131 | |
| 132 | # Returns true if device is not rooted. |
| 133 | function image_is_not_root() { |
| 134 | [[ $(adb shell getprop ro.build.type) = "user" ]] |
| 135 | } |
| 136 | |
| 137 | # Returns true if adb is not already running as root. |
| 138 | # Should only be called on rooted devices. |
| 139 | function adb_has_no_root_permissions() { |
| 140 | [[ $(adb shell getprop service.adb.root) = 0 ]] |
| 141 | } |
| 142 | |
| 143 | # Android devices may disable profiling by default. We must enable it. |
| 144 | function enable_profiling() { |
| 145 | adb shell setprop security.perf_harden 0 |
| 146 | } |
| 147 | |
| 148 | # To make the report of symbols on device successful, we need to execute |
| 149 | # `echo 0 >/proc/sys/kernel/kptr_restrict`. |
| 150 | # Only needed if we run report commands on the same machine as we run |
| 151 | # record commands. |
| 152 | function enable_report_symbols() { |
| 153 | adb shell "echo 0 > /proc/sys/kernel/kptr_restrict" |
| 154 | } |