xref: /aosp_15_r20/test/dittosuite/abench.sh (revision 6fa2df46f119dce7527f5beb2814eca0e6f886ac)
1*6fa2df46SAndroid Build Coastguard Worker#!/bin/bash
2*6fa2df46SAndroid Build Coastguard Worker#
3*6fa2df46SAndroid Build Coastguard Worker# Copyright (C) 2024 The Android Open Source Project
4*6fa2df46SAndroid Build Coastguard Worker#
5*6fa2df46SAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
6*6fa2df46SAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
7*6fa2df46SAndroid Build Coastguard Worker# You may obtain a copy of the License at
8*6fa2df46SAndroid Build Coastguard Worker#
9*6fa2df46SAndroid Build Coastguard Worker#     http://www.apache.org/licenses/LICENSE-2.0
10*6fa2df46SAndroid Build Coastguard Worker#
11*6fa2df46SAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
12*6fa2df46SAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
13*6fa2df46SAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*6fa2df46SAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
15*6fa2df46SAndroid Build Coastguard Worker# limitations under the License.
16*6fa2df46SAndroid Build Coastguard Worker
17*6fa2df46SAndroid Build Coastguard Workerset -e
18*6fa2df46SAndroid Build Coastguard Worker
19*6fa2df46SAndroid Build Coastguard Workerunset TRACE_FILE
20*6fa2df46SAndroid Build Coastguard Workerunset QUERY_FILE
21*6fa2df46SAndroid Build Coastguard Workerunset WORKLOAD
22*6fa2df46SAndroid Build Coastguard Workerunset SET_ROOT
23*6fa2df46SAndroid Build Coastguard Workerunset PERFETTO_CONFIG_FILE
24*6fa2df46SAndroid Build Coastguard Workerunset PERFETTO_PID
25*6fa2df46SAndroid Build Coastguard Workerunset SERIAL
26*6fa2df46SAndroid Build Coastguard Worker
27*6fa2df46SAndroid Build Coastguard Worker
28*6fa2df46SAndroid Build Coastguard Workerfunction help {
29*6fa2df46SAndroid Build Coastguard Worker  echo "Usage: $0 [OPTION]..."
30*6fa2df46SAndroid Build Coastguard Worker  echo "Options: "
31*6fa2df46SAndroid Build Coastguard Worker  echo "  -h, --help          Print this message"
32*6fa2df46SAndroid Build Coastguard Worker  echo "  -r, --root          Switch the target device to root"
33*6fa2df46SAndroid Build Coastguard Worker  echo "  -c, --config PERFETTO_CONFIG Path to file containing the Perfetto"
34*6fa2df46SAndroid Build Coastguard Worker  echo "                      configuration"
35*6fa2df46SAndroid Build Coastguard Worker  echo "  -q, --query QUERY   Path to file containing the SQL query to run on"
36*6fa2df46SAndroid Build Coastguard Worker  echo "                      the Perfetto trace with trace_processor"
37*6fa2df46SAndroid Build Coastguard Worker  echo "  -t, --trace TRACE   Path to which the Perfetto trace will be written to"
38*6fa2df46SAndroid Build Coastguard Worker  echo "  -w, --workload WORKLOAD Benchmark to run Dittobench with"
39*6fa2df46SAndroid Build Coastguard Worker  echo "  -s, --serial SERIAL Serial address for ADB"
40*6fa2df46SAndroid Build Coastguard Worker}
41*6fa2df46SAndroid Build Coastguard Worker
42*6fa2df46SAndroid Build Coastguard Worker
43*6fa2df46SAndroid Build Coastguard Workerwhile [ "$#" -gt "0" ]; do
44*6fa2df46SAndroid Build Coastguard Worker  case $1 in
45*6fa2df46SAndroid Build Coastguard Worker    -w|--workload)
46*6fa2df46SAndroid Build Coastguard Worker      WORKLOAD="$2"
47*6fa2df46SAndroid Build Coastguard Worker      shift
48*6fa2df46SAndroid Build Coastguard Worker      shift
49*6fa2df46SAndroid Build Coastguard Worker      ;;
50*6fa2df46SAndroid Build Coastguard Worker    -q|--query)
51*6fa2df46SAndroid Build Coastguard Worker      QUERY_FILE="$2"
52*6fa2df46SAndroid Build Coastguard Worker      shift
53*6fa2df46SAndroid Build Coastguard Worker      shift
54*6fa2df46SAndroid Build Coastguard Worker      ;;
55*6fa2df46SAndroid Build Coastguard Worker    -t|--trace)
56*6fa2df46SAndroid Build Coastguard Worker      TRACE_FILE="$2"
57*6fa2df46SAndroid Build Coastguard Worker      shift
58*6fa2df46SAndroid Build Coastguard Worker      shift
59*6fa2df46SAndroid Build Coastguard Worker      ;;
60*6fa2df46SAndroid Build Coastguard Worker    -c|--config)
61*6fa2df46SAndroid Build Coastguard Worker      PERFETTO_CONFIG_FILE="$2"
62*6fa2df46SAndroid Build Coastguard Worker      shift
63*6fa2df46SAndroid Build Coastguard Worker      shift
64*6fa2df46SAndroid Build Coastguard Worker      ;;
65*6fa2df46SAndroid Build Coastguard Worker    -s|--serial)
66*6fa2df46SAndroid Build Coastguard Worker      SERIAL="-s $2"
67*6fa2df46SAndroid Build Coastguard Worker      shift
68*6fa2df46SAndroid Build Coastguard Worker      shift
69*6fa2df46SAndroid Build Coastguard Worker      ;;
70*6fa2df46SAndroid Build Coastguard Worker    -r|--root)
71*6fa2df46SAndroid Build Coastguard Worker      SET_ROOT=1
72*6fa2df46SAndroid Build Coastguard Worker      shift
73*6fa2df46SAndroid Build Coastguard Worker      ;;
74*6fa2df46SAndroid Build Coastguard Worker    -h|--help)
75*6fa2df46SAndroid Build Coastguard Worker      help
76*6fa2df46SAndroid Build Coastguard Worker      exit 0
77*6fa2df46SAndroid Build Coastguard Worker      shift
78*6fa2df46SAndroid Build Coastguard Worker      ;;
79*6fa2df46SAndroid Build Coastguard Worker    -*|--*)
80*6fa2df46SAndroid Build Coastguard Worker      echo "Unknown option $1"
81*6fa2df46SAndroid Build Coastguard Worker      help
82*6fa2df46SAndroid Build Coastguard Worker      exit 1
83*6fa2df46SAndroid Build Coastguard Worker      ;;
84*6fa2df46SAndroid Build Coastguard Worker  esac
85*6fa2df46SAndroid Build Coastguard Workerdone
86*6fa2df46SAndroid Build Coastguard Worker
87*6fa2df46SAndroid Build Coastguard Worker
88*6fa2df46SAndroid Build Coastguard Workerif [ -z "${ANDROID_HOST_OUT}" ] ; then
89*6fa2df46SAndroid Build Coastguard Worker  echo "This script requires an Android environment. It needs to be run from an"
90*6fa2df46SAndroid Build Coastguard Worker  echo "Android repository after the initialization scripts:"
91*6fa2df46SAndroid Build Coastguard Worker  echo "$ source build/envsetup.sh"
92*6fa2df46SAndroid Build Coastguard Worker  echo "$ lunch aosp_cf_x86_64_phone-trunk_staging-userdebug"
93*6fa2df46SAndroid Build Coastguard Worker  exit 1
94*6fa2df46SAndroid Build Coastguard Workerfi
95*6fa2df46SAndroid Build Coastguard Worker
96*6fa2df46SAndroid Build Coastguard Worker
97*6fa2df46SAndroid Build Coastguard Worker# If the user specified a WORKLOAD, make sure that Dittobench is built, better
98*6fa2df46SAndroid Build Coastguard Worker# before enabling tracing.
99*6fa2df46SAndroid Build Coastguard Workerif [ ! -z "${WORKLOAD}" ] ; then
100*6fa2df46SAndroid Build Coastguard Worker  if [ ! -z "${SET_ROOT}" ] ; then
101*6fa2df46SAndroid Build Coastguard Worker    adb ${SERIAL} shell whoami | grep root || adb ${SERIAL} root
102*6fa2df46SAndroid Build Coastguard Worker    sleep 2
103*6fa2df46SAndroid Build Coastguard Worker  fi
104*6fa2df46SAndroid Build Coastguard Worker
105*6fa2df46SAndroid Build Coastguard Worker  m dittobench
106*6fa2df46SAndroid Build Coastguard Worker  adb ${SERIAL} push ${ANDROID_PRODUCT_OUT}/system/bin/dittobench /data/local/tmp/
107*6fa2df46SAndroid Build Coastguard Workerfi
108*6fa2df46SAndroid Build Coastguard Worker
109*6fa2df46SAndroid Build Coastguard Worker
110*6fa2df46SAndroid Build Coastguard Workerif [ ! -z "${PERFETTO_CONFIG_FILE}" ] ; then
111*6fa2df46SAndroid Build Coastguard Worker  if [ -z "${TRACE_FILE}" ] ; then
112*6fa2df46SAndroid Build Coastguard Worker    TRACE_FILE=$(mktemp)
113*6fa2df46SAndroid Build Coastguard Worker    echo "Using temporary trace file path: \"${TRACE_FILE}\""
114*6fa2df46SAndroid Build Coastguard Worker  fi
115*6fa2df46SAndroid Build Coastguard Worker  ${ANDROID_BUILD_TOP}/external/perfetto/tools/record_android_trace ${SERIAL} --no-open \
116*6fa2df46SAndroid Build Coastguard Worker    -c ${PERFETTO_CONFIG_FILE} \
117*6fa2df46SAndroid Build Coastguard Worker    -o ${TRACE_FILE} &
118*6fa2df46SAndroid Build Coastguard Worker  PERFETTO_PID=$!
119*6fa2df46SAndroid Build Coastguard Worker
120*6fa2df46SAndroid Build Coastguard Worker  echo "Perfetto started (${PERFETTO_PID}), cooling down..."
121*6fa2df46SAndroid Build Coastguard Worker  sleep 5
122*6fa2df46SAndroid Build Coastguard Workerfi
123*6fa2df46SAndroid Build Coastguard Worker
124*6fa2df46SAndroid Build Coastguard Worker
125*6fa2df46SAndroid Build Coastguard Workerif [ ! -z "${WORKLOAD}" ] ; then
126*6fa2df46SAndroid Build Coastguard Worker  adb ${SERIAL} shell /data/local/tmp/dittobench -w ${WORKLOAD} -f csv | column -t -s ","
127*6fa2df46SAndroid Build Coastguard Worker  echo "Cooldown..."
128*6fa2df46SAndroid Build Coastguard Worker  sleep 5
129*6fa2df46SAndroid Build Coastguard Workerfi
130*6fa2df46SAndroid Build Coastguard Worker
131*6fa2df46SAndroid Build Coastguard Worker
132*6fa2df46SAndroid Build Coastguard Worker# If there is an instance of record_android_trace, kill it gracefully, so that
133*6fa2df46SAndroid Build Coastguard Worker# the trace file is correctly pulled from the device.
134*6fa2df46SAndroid Build Coastguard Workerif [ ! -z "${PERFETTO_PID}" ] ; then
135*6fa2df46SAndroid Build Coastguard Worker  kill -s 15 $PERFETTO_PID # SIGTERM
136*6fa2df46SAndroid Build Coastguard Worker  wait $PERFETTO_PID
137*6fa2df46SAndroid Build Coastguard Workerfi
138*6fa2df46SAndroid Build Coastguard Worker
139*6fa2df46SAndroid Build Coastguard Worker
140*6fa2df46SAndroid Build Coastguard Workerif [ ! -z "${QUERY_FILE}" ] ; then
141*6fa2df46SAndroid Build Coastguard Worker  if [ -z "${TRACE_FILE}" ] ; then
142*6fa2df46SAndroid Build Coastguard Worker    echo "A TRACE file needs to be specified to run a query, unless Perfetto is"
143*6fa2df46SAndroid Build Coastguard Worker    echo "run as a result of setting the PERFETTO_CONFIG parameter"
144*6fa2df46SAndroid Build Coastguard Worker    exit 1
145*6fa2df46SAndroid Build Coastguard Worker  fi
146*6fa2df46SAndroid Build Coastguard Worker  [ ! which trace_processor_shell ] && m trace_processor_shell
147*6fa2df46SAndroid Build Coastguard Worker  trace_processor_shell -q ${QUERY_FILE} ${TRACE_FILE} | column -t -s ','
148*6fa2df46SAndroid Build Coastguard Workerfi
149*6fa2df46SAndroid Build Coastguard Worker
150