xref: /aosp_15_r20/external/perfetto/tools/tmux (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
1*6dbdd20aSAndroid Build Coastguard Worker#!/bin/bash
2*6dbdd20aSAndroid Build Coastguard Worker# Copyright (C) 2018 The Android Open Source Project
3*6dbdd20aSAndroid Build Coastguard Worker#
4*6dbdd20aSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
5*6dbdd20aSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
6*6dbdd20aSAndroid Build Coastguard Worker# You may obtain a copy of the License at
7*6dbdd20aSAndroid Build Coastguard Worker#
8*6dbdd20aSAndroid Build Coastguard Worker#      http://www.apache.org/licenses/LICENSE-2.0
9*6dbdd20aSAndroid Build Coastguard Worker#
10*6dbdd20aSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
11*6dbdd20aSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
12*6dbdd20aSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*6dbdd20aSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
14*6dbdd20aSAndroid Build Coastguard Worker# limitations under the License.
15*6dbdd20aSAndroid Build Coastguard Workerset -e
16*6dbdd20aSAndroid Build Coastguard WorkerSCRIPT_DIR="$(realpath "$(dirname "${BASH_SOURCE[0]}")")"
17*6dbdd20aSAndroid Build Coastguard Worker
18*6dbdd20aSAndroid Build Coastguard Workerif [ "$TMPDIR" == "" ]; then
19*6dbdd20aSAndroid Build Coastguard Worker  TMPDIR=/tmp
20*6dbdd20aSAndroid Build Coastguard Workerfi
21*6dbdd20aSAndroid Build Coastguard Worker
22*6dbdd20aSAndroid Build Coastguard Workerfunction get_gn_value() {
23*6dbdd20aSAndroid Build Coastguard Worker  local out=$1
24*6dbdd20aSAndroid Build Coastguard Worker  local key=$2
25*6dbdd20aSAndroid Build Coastguard Worker  "$SCRIPT_DIR/gn" args "$out" --list=$key --short | awk '{print $3}' \
26*6dbdd20aSAndroid Build Coastguard Worker    | tr -d '"'
27*6dbdd20aSAndroid Build Coastguard Worker}
28*6dbdd20aSAndroid Build Coastguard Worker
29*6dbdd20aSAndroid Build Coastguard Workerfunction is_monolithic() {
30*6dbdd20aSAndroid Build Coastguard Worker  local out=$1
31*6dbdd20aSAndroid Build Coastguard Worker  value=$(get_gn_value "$out" "monolithic_binaries")
32*6dbdd20aSAndroid Build Coastguard Worker  test "$value" == "true"
33*6dbdd20aSAndroid Build Coastguard Worker}
34*6dbdd20aSAndroid Build Coastguard Worker
35*6dbdd20aSAndroid Build Coastguard Workerfunction is_android() {
36*6dbdd20aSAndroid Build Coastguard Worker  local out=$1
37*6dbdd20aSAndroid Build Coastguard Worker  value=$(get_gn_value "$out" "target_os")
38*6dbdd20aSAndroid Build Coastguard Worker  test "$value" == "android"
39*6dbdd20aSAndroid Build Coastguard Worker}
40*6dbdd20aSAndroid Build Coastguard Worker
41*6dbdd20aSAndroid Build Coastguard Workerfunction is_ssh_target() {
42*6dbdd20aSAndroid Build Coastguard Worker  [[ -n "$SSH_TARGET" ]]
43*6dbdd20aSAndroid Build Coastguard Worker}
44*6dbdd20aSAndroid Build Coastguard Worker
45*6dbdd20aSAndroid Build Coastguard Workerfunction is_mac() {
46*6dbdd20aSAndroid Build Coastguard Worker  # shellcheck disable=2251
47*6dbdd20aSAndroid Build Coastguard Worker  ! test -d /proc
48*6dbdd20aSAndroid Build Coastguard Worker  return $?
49*6dbdd20aSAndroid Build Coastguard Worker}
50*6dbdd20aSAndroid Build Coastguard Worker
51*6dbdd20aSAndroid Build Coastguard Workerfunction tmux_ensure_bash() {
52*6dbdd20aSAndroid Build Coastguard Worker  if [[ $SHELL == *"fish" ]]; then
53*6dbdd20aSAndroid Build Coastguard Worker    tmux send-keys "bash" Enter
54*6dbdd20aSAndroid Build Coastguard Worker  fi
55*6dbdd20aSAndroid Build Coastguard Worker}
56*6dbdd20aSAndroid Build Coastguard Worker
57*6dbdd20aSAndroid Build Coastguard Workerfunction reset_tracing() {
58*6dbdd20aSAndroid Build Coastguard Worker  if is_android "$OUT"; then
59*6dbdd20aSAndroid Build Coastguard Worker    adb shell 'test -d /sys/kernel/tracing && echo 0 > /sys/kernel/tracing/tracing_on'
60*6dbdd20aSAndroid Build Coastguard Worker  elif ! is_mac; then
61*6dbdd20aSAndroid Build Coastguard Worker    # shellcheck disable=SC2016
62*6dbdd20aSAndroid Build Coastguard Worker    local script='
63*6dbdd20aSAndroid Build Coastguard Worker    if [ ! -w /sys/kernel/tracing ]; then
64*6dbdd20aSAndroid Build Coastguard Worker      echo "tracefs not accessible, try sudo chown -R $USER /sys/kernel/tracing"
65*6dbdd20aSAndroid Build Coastguard Worker      sudo chown -R "$USER" /sys/kernel/tracing
66*6dbdd20aSAndroid Build Coastguard Worker    fi
67*6dbdd20aSAndroid Build Coastguard Worker
68*6dbdd20aSAndroid Build Coastguard Worker    echo 0 > /sys/kernel/tracing/tracing_on
69*6dbdd20aSAndroid Build Coastguard Worker    '
70*6dbdd20aSAndroid Build Coastguard Worker
71*6dbdd20aSAndroid Build Coastguard Worker    if is_ssh_target; then
72*6dbdd20aSAndroid Build Coastguard Worker      # shellcheck disable=SC2029
73*6dbdd20aSAndroid Build Coastguard Worker      ssh -t "$SSH_TARGET" "sh -c '$script'"
74*6dbdd20aSAndroid Build Coastguard Worker    else
75*6dbdd20aSAndroid Build Coastguard Worker      sh -c "$script"
76*6dbdd20aSAndroid Build Coastguard Worker    fi
77*6dbdd20aSAndroid Build Coastguard Worker  fi
78*6dbdd20aSAndroid Build Coastguard Worker}
79*6dbdd20aSAndroid Build Coastguard Worker
80*6dbdd20aSAndroid Build Coastguard Workerfunction adb_supports_push_sync() {
81*6dbdd20aSAndroid Build Coastguard Worker  adb --help 2>&1 | grep 'push.*\[--sync\]' >/dev/null 2>&1
82*6dbdd20aSAndroid Build Coastguard Worker}
83*6dbdd20aSAndroid Build Coastguard Worker
84*6dbdd20aSAndroid Build Coastguard Workerfunction push() {
85*6dbdd20aSAndroid Build Coastguard Worker  if is_android "$OUT"; then
86*6dbdd20aSAndroid Build Coastguard Worker    local maybe_sync=''
87*6dbdd20aSAndroid Build Coastguard Worker    if adb_supports_push_sync; then
88*6dbdd20aSAndroid Build Coastguard Worker      maybe_sync='--sync'
89*6dbdd20aSAndroid Build Coastguard Worker    fi
90*6dbdd20aSAndroid Build Coastguard Worker    echo adb push $maybe_sync "$1" "$DIR"
91*6dbdd20aSAndroid Build Coastguard Worker    adb push $maybe_sync "$1" "$DIR"
92*6dbdd20aSAndroid Build Coastguard Worker  elif is_ssh_target; then
93*6dbdd20aSAndroid Build Coastguard Worker    echo scp "$1" "$SSH_TARGET:$DIR"
94*6dbdd20aSAndroid Build Coastguard Worker    scp "$1" "$SSH_TARGET:$DIR"
95*6dbdd20aSAndroid Build Coastguard Worker  else
96*6dbdd20aSAndroid Build Coastguard Worker    echo cp "$1" "$DIR"
97*6dbdd20aSAndroid Build Coastguard Worker    cp "$1" "$DIR"
98*6dbdd20aSAndroid Build Coastguard Worker  fi
99*6dbdd20aSAndroid Build Coastguard Worker}
100*6dbdd20aSAndroid Build Coastguard Worker
101*6dbdd20aSAndroid Build Coastguard Workerfunction pull() {
102*6dbdd20aSAndroid Build Coastguard Worker  if is_android "$OUT"; then
103*6dbdd20aSAndroid Build Coastguard Worker    echo adb pull "$DIR/$1" "$2"
104*6dbdd20aSAndroid Build Coastguard Worker    adb pull "$DIR/$1" "$2"
105*6dbdd20aSAndroid Build Coastguard Worker  elif is_ssh_target; then
106*6dbdd20aSAndroid Build Coastguard Worker    echo scp "$SSH_TARGET:$DIR/$1" "$2"
107*6dbdd20aSAndroid Build Coastguard Worker    scp "$SSH_TARGET:$DIR/$1" "$2"
108*6dbdd20aSAndroid Build Coastguard Worker  else
109*6dbdd20aSAndroid Build Coastguard Worker    echo mv "$DIR/$1" "$2"
110*6dbdd20aSAndroid Build Coastguard Worker    mv "$DIR/$1" "$2"
111*6dbdd20aSAndroid Build Coastguard Worker  fi
112*6dbdd20aSAndroid Build Coastguard Worker}
113*6dbdd20aSAndroid Build Coastguard Worker
114*6dbdd20aSAndroid Build Coastguard WorkerBACKGROUND=0
115*6dbdd20aSAndroid Build Coastguard WorkerSKIP_CONVERTERS=0
116*6dbdd20aSAndroid Build Coastguard WorkerTMUX_LAYOUT="even-vertical"
117*6dbdd20aSAndroid Build Coastguard WorkerCPU_MASK=""
118*6dbdd20aSAndroid Build Coastguard Worker
119*6dbdd20aSAndroid Build Coastguard Workerwhile getopts "bl:nt:c:C:z:s:" o; do
120*6dbdd20aSAndroid Build Coastguard Worker  case "$o" in
121*6dbdd20aSAndroid Build Coastguard Worker    b) BACKGROUND=1 ;;
122*6dbdd20aSAndroid Build Coastguard Worker    l) TMUX_LAYOUT=${OPTARG} ;;
123*6dbdd20aSAndroid Build Coastguard Worker    n) SKIP_CONVERTERS=1 ;;
124*6dbdd20aSAndroid Build Coastguard Worker    t) SSH_TARGET=${OPTARG} ;;
125*6dbdd20aSAndroid Build Coastguard Worker    c) CONFIG=${OPTARG} ;;
126*6dbdd20aSAndroid Build Coastguard Worker    C) OUT=${OPTARG} ;;
127*6dbdd20aSAndroid Build Coastguard Worker    z) CPU_MASK=${OPTARG} ;;
128*6dbdd20aSAndroid Build Coastguard Worker    s) SCRIPT=${OPTARG} ;;
129*6dbdd20aSAndroid Build Coastguard Worker    *)
130*6dbdd20aSAndroid Build Coastguard Worker      echo >&2 "Invalid option $o"
131*6dbdd20aSAndroid Build Coastguard Worker      exit
132*6dbdd20aSAndroid Build Coastguard Worker      ;;
133*6dbdd20aSAndroid Build Coastguard Worker  esac
134*6dbdd20aSAndroid Build Coastguard Workerdone
135*6dbdd20aSAndroid Build Coastguard Worker
136*6dbdd20aSAndroid Build Coastguard Worker# Allow out to be passed as argument
137*6dbdd20aSAndroid Build Coastguard Workershift $((OPTIND - 1))
138*6dbdd20aSAndroid Build Coastguard WorkerOUT="${OUT:-$1}"
139*6dbdd20aSAndroid Build Coastguard Worker
140*6dbdd20aSAndroid Build Coastguard Worker# Provide useful usage information
141*6dbdd20aSAndroid Build Coastguard Workerif [ -z "$OUT" ]; then
142*6dbdd20aSAndroid Build Coastguard Worker  echo "Usage: $0 [OPTION]... [OUTPUT]"
143*6dbdd20aSAndroid Build Coastguard Worker  echo ""
144*6dbdd20aSAndroid Build Coastguard Worker  echo "Options:"
145*6dbdd20aSAndroid Build Coastguard Worker  echo "  -b          run in the background"
146*6dbdd20aSAndroid Build Coastguard Worker  echo "  -l LAYOUT   tmux pane layout"
147*6dbdd20aSAndroid Build Coastguard Worker  echo "  -n          skip post-trace convertors"
148*6dbdd20aSAndroid Build Coastguard Worker  echo "  -t TARGET   SSH device target"
149*6dbdd20aSAndroid Build Coastguard Worker  echo "  -c CONFIG   trace configuration file"
150*6dbdd20aSAndroid Build Coastguard Worker  echo "  -C OUTPUT   output directory"
151*6dbdd20aSAndroid Build Coastguard Worker  echo "  -z MASK     constrain binaries to given cpu mask (taskset syntax)"
152*6dbdd20aSAndroid Build Coastguard Worker  echo "  -s SCRIPT   a script to put into a tmux pane"
153*6dbdd20aSAndroid Build Coastguard Worker  echo ""
154*6dbdd20aSAndroid Build Coastguard Worker  echo "Environment variables:"
155*6dbdd20aSAndroid Build Coastguard Worker  echo "  SSH_TARGET  SSH device target"
156*6dbdd20aSAndroid Build Coastguard Worker  echo "  CONFIG      trace configuration file"
157*6dbdd20aSAndroid Build Coastguard Worker  echo "  OUT         output directory"
158*6dbdd20aSAndroid Build Coastguard Worker  exit 1
159*6dbdd20aSAndroid Build Coastguard Workerfi
160*6dbdd20aSAndroid Build Coastguard Worker
161*6dbdd20aSAndroid Build Coastguard Worker# Warn about invalid output directories
162*6dbdd20aSAndroid Build Coastguard Workerif [ ! -f "$OUT/args.gn" ]; then
163*6dbdd20aSAndroid Build Coastguard Worker  echo >&2 "OUT=$OUT doesn't look like an output directory."
164*6dbdd20aSAndroid Build Coastguard Worker  echo >&2 "Please specify a directory by doing:"
165*6dbdd20aSAndroid Build Coastguard Worker  echo >&2 "  export OUT=out/xxx $0"
166*6dbdd20aSAndroid Build Coastguard Worker  exit 1
167*6dbdd20aSAndroid Build Coastguard Workerfi
168*6dbdd20aSAndroid Build Coastguard Worker
169*6dbdd20aSAndroid Build Coastguard Worker# Check SSH target is valid
170*6dbdd20aSAndroid Build Coastguard Workerif is_ssh_target && ! ssh -q "$SSH_TARGET" exit; then
171*6dbdd20aSAndroid Build Coastguard Worker  echo >&2 "SSH_TARGET=$SSH_TARGET doesn't look like a valid SSH target."
172*6dbdd20aSAndroid Build Coastguard Worker  echo >&2 "Please specify a SSH cross-compilation target by doing:"
173*6dbdd20aSAndroid Build Coastguard Worker  echo >&2 "  export SSH_TARGET=<user>@<host> $0"
174*6dbdd20aSAndroid Build Coastguard Worker  exit 1
175*6dbdd20aSAndroid Build Coastguard Workerfi
176*6dbdd20aSAndroid Build Coastguard Worker
177*6dbdd20aSAndroid Build Coastguard Workerif ! builtin type -P tmux &>/dev/null; then
178*6dbdd20aSAndroid Build Coastguard Worker  echo >&2 "tmux not found"
179*6dbdd20aSAndroid Build Coastguard Worker  exit 1
180*6dbdd20aSAndroid Build Coastguard Workerfi
181*6dbdd20aSAndroid Build Coastguard Worker
182*6dbdd20aSAndroid Build Coastguard Worker# You can set the config to one of the files under test/configs e.g.
183*6dbdd20aSAndroid Build Coastguard Worker# CONFIG=ftrace.cfg or to :test. Defaults to :test.
184*6dbdd20aSAndroid Build Coastguard WorkerCONFIG="${CONFIG:-:test}"
185*6dbdd20aSAndroid Build Coastguard Worker
186*6dbdd20aSAndroid Build Coastguard Workerif is_android "$OUT"; then
187*6dbdd20aSAndroid Build Coastguard Worker  DIR=/data/local/tmp
188*6dbdd20aSAndroid Build Coastguard Workerelif is_ssh_target; then
189*6dbdd20aSAndroid Build Coastguard Worker  DIR=$(ssh "$SSH_TARGET" mktemp -d $TMPDIR/perfetto.XXXXXX)
190*6dbdd20aSAndroid Build Coastguard Workerelif is_mac; then
191*6dbdd20aSAndroid Build Coastguard Worker  DIR=$(mktemp -d $TMPDIR/perfetto.XXXXXX)
192*6dbdd20aSAndroid Build Coastguard Workerelse
193*6dbdd20aSAndroid Build Coastguard Worker  DIR=$(mktemp -p $TMPDIR -d perfetto.XXXXXX)
194*6dbdd20aSAndroid Build Coastguard Workerfi
195*6dbdd20aSAndroid Build Coastguard Worker
196*6dbdd20aSAndroid Build Coastguard Workerif is_android "$OUT"; then
197*6dbdd20aSAndroid Build Coastguard Worker  TRACECONV="gcc_like_host/traceconv"
198*6dbdd20aSAndroid Build Coastguard Workerelse
199*6dbdd20aSAndroid Build Coastguard Worker  TRACECONV="traceconv"
200*6dbdd20aSAndroid Build Coastguard Workerfi
201*6dbdd20aSAndroid Build Coastguard Worker
202*6dbdd20aSAndroid Build Coastguard Worker
203*6dbdd20aSAndroid Build Coastguard Worker# (re)build the binaries
204*6dbdd20aSAndroid Build Coastguard WorkerBUILD_TARGETS=(traced traced_probes perfetto test/configs)
205*6dbdd20aSAndroid Build Coastguard Workerif [[ SKIP_CONVERTERS -eq 0 ]]; then
206*6dbdd20aSAndroid Build Coastguard Worker  BUILD_TARGETS+=($TRACECONV)
207*6dbdd20aSAndroid Build Coastguard Workerfi
208*6dbdd20aSAndroid Build Coastguard Worker
209*6dbdd20aSAndroid Build Coastguard Worker"$SCRIPT_DIR/ninja" -C "$OUT" ${BUILD_TARGETS[*]}
210*6dbdd20aSAndroid Build Coastguard Worker
211*6dbdd20aSAndroid Build Coastguard Workerpush "$OUT/traced"
212*6dbdd20aSAndroid Build Coastguard Workerpush "$OUT/traced_probes"
213*6dbdd20aSAndroid Build Coastguard Workerpush "$OUT/perfetto"
214*6dbdd20aSAndroid Build Coastguard Workerreset_tracing
215*6dbdd20aSAndroid Build Coastguard Worker
216*6dbdd20aSAndroid Build Coastguard Workerif is_android "$OUT"; then
217*6dbdd20aSAndroid Build Coastguard Worker  PREFIX="PERFETTO_CONSUMER_SOCK_NAME=@perfetto_test_consumer PERFETTO_PRODUCER_SOCK_NAME=@perfetto_test_producer"
218*6dbdd20aSAndroid Build Coastguard Workerelse
219*6dbdd20aSAndroid Build Coastguard Worker  PREFIX=""
220*6dbdd20aSAndroid Build Coastguard Workerfi
221*6dbdd20aSAndroid Build Coastguard Worker
222*6dbdd20aSAndroid Build Coastguard Workerif ! is_monolithic "$OUT"; then
223*6dbdd20aSAndroid Build Coastguard Worker  PREFIX="$PREFIX LD_LIBRARY_PATH=$DIR"
224*6dbdd20aSAndroid Build Coastguard Worker  push "$OUT/libperfetto.so"
225*6dbdd20aSAndroid Build Coastguard Workerfi
226*6dbdd20aSAndroid Build Coastguard Worker
227*6dbdd20aSAndroid Build Coastguard WorkerCONFIG_DEVICE_PATH="$CONFIG"
228*6dbdd20aSAndroid Build Coastguard WorkerCMD_OPTS=""
229*6dbdd20aSAndroid Build Coastguard Worker# Shorthand for using serialized test configs.
230*6dbdd20aSAndroid Build Coastguard Workerif [[ "$CONFIG" == *.protobuf ]]; then
231*6dbdd20aSAndroid Build Coastguard Worker  CONFIG_DEVICE_PATH="$CONFIG"
232*6dbdd20aSAndroid Build Coastguard Worker  CONFIG_PATH=$OUT/$CONFIG
233*6dbdd20aSAndroid Build Coastguard Worker  if [[ ! -f $CONFIG_PATH ]]; then
234*6dbdd20aSAndroid Build Coastguard Worker    echo >&2 "Config \"$CONFIG_PATH\" not known."
235*6dbdd20aSAndroid Build Coastguard Worker    exit 1
236*6dbdd20aSAndroid Build Coastguard Worker  fi
237*6dbdd20aSAndroid Build Coastguard Worker  push "$CONFIG_PATH"
238*6dbdd20aSAndroid Build Coastguard Workerelif [[ "$CONFIG" != ":test" ]]; then
239*6dbdd20aSAndroid Build Coastguard Worker  CONFIG_DEVICE_PATH="$(basename "$CONFIG")"
240*6dbdd20aSAndroid Build Coastguard Worker  CONFIG_PATH=$CONFIG
241*6dbdd20aSAndroid Build Coastguard Worker  # If path isn't valid, assume it's a name of a test config.
242*6dbdd20aSAndroid Build Coastguard Worker  if [[ ! -f $CONFIG_PATH ]]; then
243*6dbdd20aSAndroid Build Coastguard Worker    CONFIG_PATH=test/configs/$CONFIG
244*6dbdd20aSAndroid Build Coastguard Worker    if [[ ! -f $CONFIG_PATH ]]; then
245*6dbdd20aSAndroid Build Coastguard Worker      echo >&2 "Config \"$CONFIG\" not known."
246*6dbdd20aSAndroid Build Coastguard Worker      exit 1
247*6dbdd20aSAndroid Build Coastguard Worker    fi
248*6dbdd20aSAndroid Build Coastguard Worker  fi
249*6dbdd20aSAndroid Build Coastguard Worker  CMD_OPTS="--txt $CMD_OPTS"
250*6dbdd20aSAndroid Build Coastguard Worker  push "$CONFIG_PATH"
251*6dbdd20aSAndroid Build Coastguard Workerfi
252*6dbdd20aSAndroid Build Coastguard Worker
253*6dbdd20aSAndroid Build Coastguard Workerif [[ -f "$SCRIPT" ]]; then
254*6dbdd20aSAndroid Build Coastguard Worker  push "$SCRIPT"
255*6dbdd20aSAndroid Build Coastguard Workerfi
256*6dbdd20aSAndroid Build Coastguard Worker
257*6dbdd20aSAndroid Build Coastguard WorkerPOSTFIX=""
258*6dbdd20aSAndroid Build Coastguard Worker
259*6dbdd20aSAndroid Build Coastguard Workerif [[ -n "$CPU_MASK" ]]; then
260*6dbdd20aSAndroid Build Coastguard Worker  PREFIX="$PREFIX taskset $CPU_MASK"
261*6dbdd20aSAndroid Build Coastguard Workerfi
262*6dbdd20aSAndroid Build Coastguard Worker
263*6dbdd20aSAndroid Build Coastguard Workerif [[ BACKGROUND -eq 1 ]]; then
264*6dbdd20aSAndroid Build Coastguard Worker  PREFIX="$PREFIX nohup"
265*6dbdd20aSAndroid Build Coastguard Worker  POSTFIX=" &> /dev/null &"
266*6dbdd20aSAndroid Build Coastguard Workerfi
267*6dbdd20aSAndroid Build Coastguard Worker
268*6dbdd20aSAndroid Build Coastguard Workerif tmux has-session -t demo; then
269*6dbdd20aSAndroid Build Coastguard Worker  tmux kill-session -t demo
270*6dbdd20aSAndroid Build Coastguard Workerfi
271*6dbdd20aSAndroid Build Coastguard Workertmux -2 new-session -d -s demo
272*6dbdd20aSAndroid Build Coastguard Worker
273*6dbdd20aSAndroid Build Coastguard Workerif [ ! -z "$ANDROID_ADB_SERVER_PORT" ]; then
274*6dbdd20aSAndroid Build Coastguard Worker  tmux set-environment -t demo ANDROID_ADB_SERVER_PORT $ANDROID_ADB_SERVER_PORT
275*6dbdd20aSAndroid Build Coastguard Workerfi
276*6dbdd20aSAndroid Build Coastguard Worker
277*6dbdd20aSAndroid Build Coastguard Workerif tmux -V | awk '{split($2, ver, "."); if (ver[1] < 2) exit 1 ; else if (ver[1] == 2 && ver[2] < 1) exit 1 }'; then
278*6dbdd20aSAndroid Build Coastguard Worker  tmux set-option -g mouse on
279*6dbdd20aSAndroid Build Coastguard Workerelse
280*6dbdd20aSAndroid Build Coastguard Worker  tmux set-option -g mode-mouse on
281*6dbdd20aSAndroid Build Coastguard Worker  tmux set-option -g mouse-resize-pane on
282*6dbdd20aSAndroid Build Coastguard Worker  tmux set-option -g mouse-select-pane on
283*6dbdd20aSAndroid Build Coastguard Worker  tmux set-option -g mouse-select-window on
284*6dbdd20aSAndroid Build Coastguard Workerfi
285*6dbdd20aSAndroid Build Coastguard Worker
286*6dbdd20aSAndroid Build Coastguard Workertmux split-window -v
287*6dbdd20aSAndroid Build Coastguard Workertmux split-window -v
288*6dbdd20aSAndroid Build Coastguard Worker
289*6dbdd20aSAndroid Build Coastguard Workerif [[ -n "$SCRIPT" ]]; then
290*6dbdd20aSAndroid Build Coastguard Worker  tmux split-window -v
291*6dbdd20aSAndroid Build Coastguard Workerfi
292*6dbdd20aSAndroid Build Coastguard Worker
293*6dbdd20aSAndroid Build Coastguard Workertmux select-layout "${TMUX_LAYOUT}"
294*6dbdd20aSAndroid Build Coastguard Worker
295*6dbdd20aSAndroid Build Coastguard Workertmux select-pane -t 0
296*6dbdd20aSAndroid Build Coastguard Workertmux send-keys "clear" C-m
297*6dbdd20aSAndroid Build Coastguard Workerif is_android "$OUT"; then
298*6dbdd20aSAndroid Build Coastguard Worker  tmux send-keys "adb shell" C-m
299*6dbdd20aSAndroid Build Coastguard Workerfi
300*6dbdd20aSAndroid Build Coastguard Worker
301*6dbdd20aSAndroid Build Coastguard Workertmux select-pane -t 1
302*6dbdd20aSAndroid Build Coastguard Workertmux send-keys "clear" C-m
303*6dbdd20aSAndroid Build Coastguard Workerif is_android "$OUT"; then
304*6dbdd20aSAndroid Build Coastguard Worker  tmux send-keys "adb shell" C-m
305*6dbdd20aSAndroid Build Coastguard Workerfi
306*6dbdd20aSAndroid Build Coastguard Worker
307*6dbdd20aSAndroid Build Coastguard Workertmux select-pane -t 2
308*6dbdd20aSAndroid Build Coastguard Workertmux send-keys "clear" C-m
309*6dbdd20aSAndroid Build Coastguard Workerif is_android "$OUT"; then
310*6dbdd20aSAndroid Build Coastguard Worker  tmux send-keys "adb shell" C-m
311*6dbdd20aSAndroid Build Coastguard Workerfi
312*6dbdd20aSAndroid Build Coastguard Worker
313*6dbdd20aSAndroid Build Coastguard Workerif [[ -n "$SCRIPT" ]]; then
314*6dbdd20aSAndroid Build Coastguard Worker  tmux select-pane -t 3
315*6dbdd20aSAndroid Build Coastguard Worker  tmux send-keys "clear" C-m
316*6dbdd20aSAndroid Build Coastguard Worker  if is_android "$OUT"; then
317*6dbdd20aSAndroid Build Coastguard Worker    tmux send-keys "adb shell" C-m
318*6dbdd20aSAndroid Build Coastguard Worker  fi
319*6dbdd20aSAndroid Build Coastguard Workerfi
320*6dbdd20aSAndroid Build Coastguard Worker
321*6dbdd20aSAndroid Build Coastguard Workersleep 2
322*6dbdd20aSAndroid Build Coastguard Worker
323*6dbdd20aSAndroid Build Coastguard Workertmux select-pane -t 1
324*6dbdd20aSAndroid Build Coastguard Workerif is_ssh_target; then
325*6dbdd20aSAndroid Build Coastguard Worker  tmux send-keys "ssh $SSH_TARGET" Enter
326*6dbdd20aSAndroid Build Coastguard Workerfi
327*6dbdd20aSAndroid Build Coastguard Workertmux_ensure_bash
328*6dbdd20aSAndroid Build Coastguard Workertmux send-keys "PS1='[traced]$ '" Enter
329*6dbdd20aSAndroid Build Coastguard Workertmux send-keys "cd $DIR" Enter
330*6dbdd20aSAndroid Build Coastguard Workertmux send-keys "clear" C-m
331*6dbdd20aSAndroid Build Coastguard Workertmux send-keys "$PREFIX ./traced $POSTFIX" Enter
332*6dbdd20aSAndroid Build Coastguard Worker
333*6dbdd20aSAndroid Build Coastguard Workertmux select-pane -t 0
334*6dbdd20aSAndroid Build Coastguard Workerif is_ssh_target; then
335*6dbdd20aSAndroid Build Coastguard Worker  tmux send-keys "ssh $SSH_TARGET" Enter
336*6dbdd20aSAndroid Build Coastguard Workerfi
337*6dbdd20aSAndroid Build Coastguard Workertmux_ensure_bash
338*6dbdd20aSAndroid Build Coastguard Workertmux send-keys "PS1='[traced_probes]$ '" Enter
339*6dbdd20aSAndroid Build Coastguard Workertmux send-keys "cd $DIR" Enter
340*6dbdd20aSAndroid Build Coastguard Workertmux send-keys "clear" C-m
341*6dbdd20aSAndroid Build Coastguard Workertmux send-keys "$PREFIX ./traced_probes $POSTFIX" Enter
342*6dbdd20aSAndroid Build Coastguard Worker
343*6dbdd20aSAndroid Build Coastguard Workertmux select-pane -t 2
344*6dbdd20aSAndroid Build Coastguard Workerif is_ssh_target; then
345*6dbdd20aSAndroid Build Coastguard Worker  tmux send-keys "ssh $SSH_TARGET" Enter
346*6dbdd20aSAndroid Build Coastguard Workerfi
347*6dbdd20aSAndroid Build Coastguard Workertmux_ensure_bash
348*6dbdd20aSAndroid Build Coastguard Workertmux send-keys "PS1='[consumer]$ '" Enter
349*6dbdd20aSAndroid Build Coastguard Workertmux send-keys "cd $DIR" Enter
350*6dbdd20aSAndroid Build Coastguard Workertmux send-keys "clear" C-m
351*6dbdd20aSAndroid Build Coastguard Workertmux send-keys "$PREFIX ./perfetto $CMD_OPTS -c $CONFIG_DEVICE_PATH -o trace $POSTFIX"
352*6dbdd20aSAndroid Build Coastguard Worker
353*6dbdd20aSAndroid Build Coastguard Workerif [[ -n "$SCRIPT" ]]; then
354*6dbdd20aSAndroid Build Coastguard Worker  tmux select-pane -t 3
355*6dbdd20aSAndroid Build Coastguard Worker  if is_ssh_target; then
356*6dbdd20aSAndroid Build Coastguard Worker    tmux send-keys "ssh $SSH_TARGET" Enter
357*6dbdd20aSAndroid Build Coastguard Worker  fi
358*6dbdd20aSAndroid Build Coastguard Worker  tmux_ensure_bash
359*6dbdd20aSAndroid Build Coastguard Worker  tmux send-keys "PS1='[script]$ '" Enter
360*6dbdd20aSAndroid Build Coastguard Worker  tmux send-keys "cd $DIR" Enter
361*6dbdd20aSAndroid Build Coastguard Worker  tmux send-keys "clear" C-m
362*6dbdd20aSAndroid Build Coastguard Worker  if [[ -f "$SCRIPT" ]]; then
363*6dbdd20aSAndroid Build Coastguard Worker    tmux send-keys "./$(basename "$SCRIPT")"
364*6dbdd20aSAndroid Build Coastguard Worker  else
365*6dbdd20aSAndroid Build Coastguard Worker    tmux send-keys "$SCRIPT"
366*6dbdd20aSAndroid Build Coastguard Worker  fi
367*6dbdd20aSAndroid Build Coastguard Workerfi
368*6dbdd20aSAndroid Build Coastguard Worker
369*6dbdd20aSAndroid Build Coastguard Worker# Select consumer pane.
370*6dbdd20aSAndroid Build Coastguard Workertmux select-pane -t 2
371*6dbdd20aSAndroid Build Coastguard Worker
372*6dbdd20aSAndroid Build Coastguard Workertmux -2 attach-session -t demo
373*6dbdd20aSAndroid Build Coastguard Workerif [[ BACKGROUND -eq 1 ]]; then
374*6dbdd20aSAndroid Build Coastguard Worker  exit 0
375*6dbdd20aSAndroid Build Coastguard Workerfi
376*6dbdd20aSAndroid Build Coastguard Worker
377*6dbdd20aSAndroid Build Coastguard Workerreset_tracing
378*6dbdd20aSAndroid Build Coastguard Worker
379*6dbdd20aSAndroid Build Coastguard WorkerTRACE=$TMPDIR/trace
380*6dbdd20aSAndroid Build Coastguard Workerecho -e "\n\x1b[32mPulling trace into $TRACE.perfetto-trace\x1b[0m"
381*6dbdd20aSAndroid Build Coastguard Workerpull trace "$TRACE.perfetto-trace"
382*6dbdd20aSAndroid Build Coastguard Worker
383*6dbdd20aSAndroid Build Coastguard Workerif [[ SKIP_CONVERTERS -eq 0 ]]; then
384*6dbdd20aSAndroid Build Coastguard Worker  echo -e "\n\x1b[32mPulling trace into $TRACE.pbtext\x1b[0m"
385*6dbdd20aSAndroid Build Coastguard Worker  "$OUT/$TRACECONV" text <"$TRACE.perfetto-trace" >"$TRACE.pbtext"
386*6dbdd20aSAndroid Build Coastguard Workerfi
387