Index: tools-webrtc/android/profiling/utilities.sh |
diff --git a/tools-webrtc/android/profiling/utilities.sh b/tools-webrtc/android/profiling/utilities.sh |
new file mode 100755 |
index 0000000000000000000000000000000000000000..46a97b8142ba0e92959db16a649e7aaff4343afc |
--- /dev/null |
+++ b/tools-webrtc/android/profiling/utilities.sh |
@@ -0,0 +1,154 @@ |
+#!/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" |
+} |