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