xref: /aosp_15_r20/external/virglrenderer/perf-testing/run-trace-in-container.sh (revision bbecb9d118dfdb95f99bd754f8fa9be01f189df3)
1*bbecb9d1SAndroid Build Coastguard Worker#!/bin/bash
2*bbecb9d1SAndroid Build Coastguard Worker# Copyright 2019 The Chromium OS Authors. All rights reserved.
3*bbecb9d1SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be
4*bbecb9d1SAndroid Build Coastguard Worker# found in the LICENSE file.
5*bbecb9d1SAndroid Build Coastguard Worker
6*bbecb9d1SAndroid Build Coastguard Worker# This script is to be run on the KVM host, outside the container
7*bbecb9d1SAndroid Build Coastguard Worker
8*bbecb9d1SAndroid Build Coastguard Worker
9*bbecb9d1SAndroid Build Coastguard Worker#set -ex
10*bbecb9d1SAndroid Build Coastguard Worker
11*bbecb9d1SAndroid Build Coastguard Worker# grab the pwd before changing it to this script's directory
12*bbecb9d1SAndroid Build Coastguard Workerpwd="${PWD}"
13*bbecb9d1SAndroid Build Coastguard Workerroot_dir="$(pwd)"
14*bbecb9d1SAndroid Build Coastguard Worker
15*bbecb9d1SAndroid Build Coastguard Workercd "${0%/*}"
16*bbecb9d1SAndroid Build Coastguard Worker
17*bbecb9d1SAndroid Build Coastguard Workermesa_src=""
18*bbecb9d1SAndroid Build Coastguard Workervirgl_src=""
19*bbecb9d1SAndroid Build Coastguard Workertraces_db=""
20*bbecb9d1SAndroid Build Coastguard Workerkernel_src=""
21*bbecb9d1SAndroid Build Coastguard Workerbenchmark_loops=0
22*bbecb9d1SAndroid Build Coastguard Workerperfetto_loops=10
23*bbecb9d1SAndroid Build Coastguard Workerwait_after_frame=
24*bbecb9d1SAndroid Build Coastguard Worker
25*bbecb9d1SAndroid Build Coastguard Workerprint_help() {
26*bbecb9d1SAndroid Build Coastguard Worker  echo "Run GL trace with perfetto"
27*bbecb9d1SAndroid Build Coastguard Worker  echo "Usage mesa_wrapper.sh [options]"
28*bbecb9d1SAndroid Build Coastguard Worker  echo ""
29*bbecb9d1SAndroid Build Coastguard Worker  echo "  --root, -r       Path to a root directory that contains the sources for mesa, virglrenderer, and the trace-db"
30*bbecb9d1SAndroid Build Coastguard Worker  echo "  --mesa, -m       Path to Mesa source code (overrides path generated from root)"
31*bbecb9d1SAndroid Build Coastguard Worker  echo "  --virgl, -v      Path to virglrenderer source code (overrides path generated from root)"
32*bbecb9d1SAndroid Build Coastguard Worker  echo "  --kernel, -k     Path to Linux kernel source code"
33*bbecb9d1SAndroid Build Coastguard Worker  echo "  --traces-db, -d  Path to the directory containing the traces (overrides path generated from root)"
34*bbecb9d1SAndroid Build Coastguard Worker  echo "  --trace, -t      Trace to be run (path relative to traces-db) (required)"
35*bbecb9d1SAndroid Build Coastguard Worker  echo "  --benchmark, -b  Number of times the last frame should be run for benchmarking (default 0=disabled)"
36*bbecb9d1SAndroid Build Coastguard Worker  echo "  --perfetto, -p   Number of times the last frame should be loop for perfetto (default 10; 0=run trace normally)"
37*bbecb9d1SAndroid Build Coastguard Worker  echo "  --snapshot, -s   Make per-frame snapshots"
38*bbecb9d1SAndroid Build Coastguard Worker  echo "  --debug          Enable extra logging"
39*bbecb9d1SAndroid Build Coastguard Worker  echo ""
40*bbecb9d1SAndroid Build Coastguard Worker  echo "  --help, -h       Print this help"
41*bbecb9d1SAndroid Build Coastguard Worker}
42*bbecb9d1SAndroid Build Coastguard Worker
43*bbecb9d1SAndroid Build Coastguard Workercommand=""
44*bbecb9d1SAndroid Build Coastguard Worker
45*bbecb9d1SAndroid Build Coastguard Workerwhile [ -n "$1" ] ; do
46*bbecb9d1SAndroid Build Coastguard Worker    case "$1" in
47*bbecb9d1SAndroid Build Coastguard Worker
48*bbecb9d1SAndroid Build Coastguard Worker        --root|-r)
49*bbecb9d1SAndroid Build Coastguard Worker            root_dir="$2"
50*bbecb9d1SAndroid Build Coastguard Worker            shift
51*bbecb9d1SAndroid Build Coastguard Worker            ;;
52*bbecb9d1SAndroid Build Coastguard Worker
53*bbecb9d1SAndroid Build Coastguard Worker        --mesa|-m)
54*bbecb9d1SAndroid Build Coastguard Worker            mesa_src="$2"
55*bbecb9d1SAndroid Build Coastguard Worker            shift
56*bbecb9d1SAndroid Build Coastguard Worker            ;;
57*bbecb9d1SAndroid Build Coastguard Worker
58*bbecb9d1SAndroid Build Coastguard Worker        --virgl|-v)
59*bbecb9d1SAndroid Build Coastguard Worker            virgl_src="$2"
60*bbecb9d1SAndroid Build Coastguard Worker            shift
61*bbecb9d1SAndroid Build Coastguard Worker            ;;
62*bbecb9d1SAndroid Build Coastguard Worker
63*bbecb9d1SAndroid Build Coastguard Worker        --traces-db|-d)
64*bbecb9d1SAndroid Build Coastguard Worker            traces_db="$2"
65*bbecb9d1SAndroid Build Coastguard Worker            shift
66*bbecb9d1SAndroid Build Coastguard Worker            ;;
67*bbecb9d1SAndroid Build Coastguard Worker
68*bbecb9d1SAndroid Build Coastguard Worker        --kernel|-k)
69*bbecb9d1SAndroid Build Coastguard Worker            kernel_src="$2"
70*bbecb9d1SAndroid Build Coastguard Worker            shift
71*bbecb9d1SAndroid Build Coastguard Worker            ;;
72*bbecb9d1SAndroid Build Coastguard Worker
73*bbecb9d1SAndroid Build Coastguard Worker        --help|-h)
74*bbecb9d1SAndroid Build Coastguard Worker            print_help
75*bbecb9d1SAndroid Build Coastguard Worker            exit
76*bbecb9d1SAndroid Build Coastguard Worker            ;;
77*bbecb9d1SAndroid Build Coastguard Worker
78*bbecb9d1SAndroid Build Coastguard Worker        --trace|-t)
79*bbecb9d1SAndroid Build Coastguard Worker            trace="$2"
80*bbecb9d1SAndroid Build Coastguard Worker            shift
81*bbecb9d1SAndroid Build Coastguard Worker            ;;
82*bbecb9d1SAndroid Build Coastguard Worker
83*bbecb9d1SAndroid Build Coastguard Worker        --benchmark|-b)
84*bbecb9d1SAndroid Build Coastguard Worker            command="$command -b $2"
85*bbecb9d1SAndroid Build Coastguard Worker            shift
86*bbecb9d1SAndroid Build Coastguard Worker            ;;
87*bbecb9d1SAndroid Build Coastguard Worker
88*bbecb9d1SAndroid Build Coastguard Worker        --perfetto|-p)
89*bbecb9d1SAndroid Build Coastguard Worker            command="$command -p $2"
90*bbecb9d1SAndroid Build Coastguard Worker            shift
91*bbecb9d1SAndroid Build Coastguard Worker            ;;
92*bbecb9d1SAndroid Build Coastguard Worker
93*bbecb9d1SAndroid Build Coastguard Worker  	--wait-after-frame|-w)
94*bbecb9d1SAndroid Build Coastguard Worker            command="$command -w"
95*bbecb9d1SAndroid Build Coastguard Worker	    ;;
96*bbecb9d1SAndroid Build Coastguard Worker
97*bbecb9d1SAndroid Build Coastguard Worker        --snapshot|-s)
98*bbecb9d1SAndroid Build Coastguard Worker           command="$command -s"
99*bbecb9d1SAndroid Build Coastguard Worker           ;;
100*bbecb9d1SAndroid Build Coastguard Worker
101*bbecb9d1SAndroid Build Coastguard Worker        --debug)
102*bbecb9d1SAndroid Build Coastguard Worker           command="$command --debug"
103*bbecb9d1SAndroid Build Coastguard Worker           ;;
104*bbecb9d1SAndroid Build Coastguard Worker        *)
105*bbecb9d1SAndroid Build Coastguard Worker            echo "Unknown option '$1' given, run with option --help to see supported options"
106*bbecb9d1SAndroid Build Coastguard Worker            exit
107*bbecb9d1SAndroid Build Coastguard Worker            ;;
108*bbecb9d1SAndroid Build Coastguard Worker    esac
109*bbecb9d1SAndroid Build Coastguard Worker    shift
110*bbecb9d1SAndroid Build Coastguard Workerdone
111*bbecb9d1SAndroid Build Coastguard Worker
112*bbecb9d1SAndroid Build Coastguard Workerif [ "x$mesa_src" = "x" ] ; then
113*bbecb9d1SAndroid Build Coastguard Worker    mesa_src="$root_dir/mesa"
114*bbecb9d1SAndroid Build Coastguard Workerfi
115*bbecb9d1SAndroid Build Coastguard Worker
116*bbecb9d1SAndroid Build Coastguard Workerif [ "x$virgl_src" = "x" ] ; then
117*bbecb9d1SAndroid Build Coastguard Worker    virgl_src="$root_dir/virglrenderer"
118*bbecb9d1SAndroid Build Coastguard Workerfi
119*bbecb9d1SAndroid Build Coastguard Worker
120*bbecb9d1SAndroid Build Coastguard Workerif [ "x$traces_db" = "x" ] ; then
121*bbecb9d1SAndroid Build Coastguard Worker    traces_db="$root_dir/traces-db"
122*bbecb9d1SAndroid Build Coastguard Workerfi
123*bbecb9d1SAndroid Build Coastguard Worker
124*bbecb9d1SAndroid Build Coastguard Workercan_run=1
125*bbecb9d1SAndroid Build Coastguard Worker
126*bbecb9d1SAndroid Build Coastguard Workerif [ "x$trace" = "x" ]; then
127*bbecb9d1SAndroid Build Coastguard Worker   echo "No trace given"  >&2;
128*bbecb9d1SAndroid Build Coastguard Worker   can_run=0
129*bbecb9d1SAndroid Build Coastguard Workerfi
130*bbecb9d1SAndroid Build Coastguard Worker
131*bbecb9d1SAndroid Build Coastguard Workerif [ "x$mesa_src" = "x" ]; then
132*bbecb9d1SAndroid Build Coastguard Worker  echo "no mesa src dir given"  >&2;
133*bbecb9d1SAndroid Build Coastguard Worker  can_run=0
134*bbecb9d1SAndroid Build Coastguard Workerfi
135*bbecb9d1SAndroid Build Coastguard Worker
136*bbecb9d1SAndroid Build Coastguard Workerif [ ! -d "$mesa_src/src/mesa" ]; then
137*bbecb9d1SAndroid Build Coastguard Worker  echo "mesa src dir '$mesa_src' is not a mesa source tree"  >&2;
138*bbecb9d1SAndroid Build Coastguard Worker  can_run=0
139*bbecb9d1SAndroid Build Coastguard Workerfi
140*bbecb9d1SAndroid Build Coastguard Worker
141*bbecb9d1SAndroid Build Coastguard Workerif [ "x$virgl_src" = "x" ]; then
142*bbecb9d1SAndroid Build Coastguard Worker  echo "no virglrenderer src dir given"  >&2;
143*bbecb9d1SAndroid Build Coastguard Worker  can_run=0
144*bbecb9d1SAndroid Build Coastguard Workerfi
145*bbecb9d1SAndroid Build Coastguard Worker
146*bbecb9d1SAndroid Build Coastguard Workerif [ ! -d "$virgl_src/vtest" ]; then
147*bbecb9d1SAndroid Build Coastguard Worker  echo "virglrenderer src dir '$virgl_src' is not a virglrenderer source tree"  >&2;
148*bbecb9d1SAndroid Build Coastguard Worker  can_run=0
149*bbecb9d1SAndroid Build Coastguard Workerfi
150*bbecb9d1SAndroid Build Coastguard Worker
151*bbecb9d1SAndroid Build Coastguard Workerif [ "x$traces_db" = "x" ]; then
152*bbecb9d1SAndroid Build Coastguard Worker  echo "no traces_db dir given"  >&2;
153*bbecb9d1SAndroid Build Coastguard Worker  can_run=0
154*bbecb9d1SAndroid Build Coastguard Workerfi
155*bbecb9d1SAndroid Build Coastguard Worker
156*bbecb9d1SAndroid Build Coastguard Workerif [ ! -f "$traces_db/$trace" ]; then
157*bbecb9d1SAndroid Build Coastguard Worker   echo "Given trace file '$trace' doesn't exist in traces db dir '$traces_db'"  >&2;
158*bbecb9d1SAndroid Build Coastguard Worker   # check whether the trace has been given with a path relative to the root dir
159*bbecb9d1SAndroid Build Coastguard Worker   # that can be removed
160*bbecb9d1SAndroid Build Coastguard Worker   trace=${trace#*/}
161*bbecb9d1SAndroid Build Coastguard Worker   echo "Trying $traces_db/$trace"  >&2;
162*bbecb9d1SAndroid Build Coastguard Worker   if [ ! -f "$traces_db/$trace" ]; then
163*bbecb9d1SAndroid Build Coastguard Worker      echo "Given trace file '$trace' not found "  >&2;
164*bbecb9d1SAndroid Build Coastguard Worker      can_run=0
165*bbecb9d1SAndroid Build Coastguard Worker   fi
166*bbecb9d1SAndroid Build Coastguard Workerfi
167*bbecb9d1SAndroid Build Coastguard Worker
168*bbecb9d1SAndroid Build Coastguard Workerif [ "x$can_run" = "x0" ]; then
169*bbecb9d1SAndroid Build Coastguard Worker  echo "Missing or command line options with errors were given"  >&2;
170*bbecb9d1SAndroid Build Coastguard Worker  exit 1
171*bbecb9d1SAndroid Build Coastguard Workerfi
172*bbecb9d1SAndroid Build Coastguard Worker
173*bbecb9d1SAndroid Build Coastguard Workerre='^[0-9]+$'
174*bbecb9d1SAndroid Build Coastguard Workerif ! [[ 1$benchmark_loops =~ $re ]] ; then
175*bbecb9d1SAndroid Build Coastguard Worker   echo "error: benchmark_loops '" $benchmark_loops "'is not a number" >&2;
176*bbecb9d1SAndroid Build Coastguard Worker   exit 1
177*bbecb9d1SAndroid Build Coastguard Workerfi
178*bbecb9d1SAndroid Build Coastguard Worker
179*bbecb9d1SAndroid Build Coastguard Workerif ! [[ 1$perfetto_loops =~ $re ]] ; then
180*bbecb9d1SAndroid Build Coastguard Worker   echo "error: perfetto_loops '" $perfetto_loops "' is not a number" >&2;
181*bbecb9d1SAndroid Build Coastguard Worker   exit 1
182*bbecb9d1SAndroid Build Coastguard Workerfi
183*bbecb9d1SAndroid Build Coastguard Worker
184*bbecb9d1SAndroid Build Coastguard Workerecho "command=$command"
185*bbecb9d1SAndroid Build Coastguard Worker
186*bbecb9d1SAndroid Build Coastguard Workerdocker run -it --rm \
187*bbecb9d1SAndroid Build Coastguard Worker    --privileged \
188*bbecb9d1SAndroid Build Coastguard Worker    --ipc=host \
189*bbecb9d1SAndroid Build Coastguard Worker    -v /dev/log:/dev/log \
190*bbecb9d1SAndroid Build Coastguard Worker    -v /dev/vhost-net:/dev/vhost-net \
191*bbecb9d1SAndroid Build Coastguard Worker    -v /sys/kernel/debug:/sys/kernel/debug \
192*bbecb9d1SAndroid Build Coastguard Worker    -v "$mesa_src":/mesa \
193*bbecb9d1SAndroid Build Coastguard Worker    -v "$virgl_src":/virglrenderer \
194*bbecb9d1SAndroid Build Coastguard Worker    -v "$traces_db":/traces-db \
195*bbecb9d1SAndroid Build Coastguard Worker    -v "$kernel_src":/kernel \
196*bbecb9d1SAndroid Build Coastguard Worker    --volume "$pwd":/wd \
197*bbecb9d1SAndroid Build Coastguard Worker    --workdir /wd \
198*bbecb9d1SAndroid Build Coastguard Worker    mesa \
199*bbecb9d1SAndroid Build Coastguard Worker    -t "$trace" \
200*bbecb9d1SAndroid Build Coastguard Worker    $command
201