xref: /aosp_15_r20/external/webrtc/tools_webrtc/android/profiling/utilities.sh (revision d9f758449e529ab9291ac668be2861e7a55c2422)
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