xref: /aosp_15_r20/external/virglrenderer/perf-testing/Docker/run_traces.sh (revision bbecb9d118dfdb95f99bd754f8fa9be01f189df3)
1*bbecb9d1SAndroid Build Coastguard Worker# This script is to be run on the KVM guest
2*bbecb9d1SAndroid Build Coastguard Worker
3*bbecb9d1SAndroid Build Coastguard Workerset -ex
4*bbecb9d1SAndroid Build Coastguard Worker
5*bbecb9d1SAndroid Build Coastguard Workermkdir /waffle
6*bbecb9d1SAndroid Build Coastguard Workermount -t virtiofs waffle-tag /waffle
7*bbecb9d1SAndroid Build Coastguard Worker
8*bbecb9d1SAndroid Build Coastguard Workermkdir /apitrace
9*bbecb9d1SAndroid Build Coastguard Workermount -t virtiofs apitrace-tag /apitrace
10*bbecb9d1SAndroid Build Coastguard Worker
11*bbecb9d1SAndroid Build Coastguard Workermkdir /traces-db
12*bbecb9d1SAndroid Build Coastguard Workermount -t virtiofs traces-db-tag /traces-db
13*bbecb9d1SAndroid Build Coastguard Worker
14*bbecb9d1SAndroid Build Coastguard Workermkdir /perfetto
15*bbecb9d1SAndroid Build Coastguard Workermount -t virtiofs perfetto-tag /perfetto
16*bbecb9d1SAndroid Build Coastguard Worker
17*bbecb9d1SAndroid Build Coastguard Workerecho 3 > /proc/sys/kernel/printk
18*bbecb9d1SAndroid Build Coastguard Worker
19*bbecb9d1SAndroid Build Coastguard Workerexport PATH="/apitrace/build:$PATH"
20*bbecb9d1SAndroid Build Coastguard Workerexport PATH="/waffle/build/bin:$PATH"
21*bbecb9d1SAndroid Build Coastguard Workerexport LD_LIBRARY_PATH="/waffle/build/lib:$LD_LIBRARY_PATH"
22*bbecb9d1SAndroid Build Coastguard Workerexport LD_LIBRARY_PATH="/usr/local/lib:$LD_LIBRARY_PATH"
23*bbecb9d1SAndroid Build Coastguard Workerexport EGL_PLATFORM="surfaceless"
24*bbecb9d1SAndroid Build Coastguard Workerexport WAFFLE_PLATFORM="surfaceless_egl"
25*bbecb9d1SAndroid Build Coastguard Workerexport MESA_GL_VERSION_OVERRIDE="4.5"
26*bbecb9d1SAndroid Build Coastguard Workerexport DISPLAY=
27*bbecb9d1SAndroid Build Coastguard Worker
28*bbecb9d1SAndroid Build Coastguard Worker# Comment out any other sources, so it only syncs to the host via PTP
29*bbecb9d1SAndroid Build Coastguard Workersed -i '/pool/s/^/#/' /etc/chrony/chrony.conf
30*bbecb9d1SAndroid Build Coastguard Workerecho refclock PHC /dev/ptp0 poll 1 dpoll -2 offset 0 >> /etc/chrony/chrony.conf
31*bbecb9d1SAndroid Build Coastguard Workerecho cmdport 0 >> /etc/chrony/chrony.conf
32*bbecb9d1SAndroid Build Coastguard Workerecho bindcmdaddress / >> /etc/chrony/chrony.conf
33*bbecb9d1SAndroid Build Coastguard Worker
34*bbecb9d1SAndroid Build Coastguard Workermkdir -p /run/chrony
35*bbecb9d1SAndroid Build Coastguard Workertime chronyd -q   # Initial synchronization, will take some time
36*bbecb9d1SAndroid Build Coastguard Workerchronyd      # Keep clocks in sync
37*bbecb9d1SAndroid Build Coastguard Worker
38*bbecb9d1SAndroid Build Coastguard Worker# Get trace cached
39*bbecb9d1SAndroid Build Coastguard Workertrace_no_ext=$(cat /traces-db/current_trace)
40*bbecb9d1SAndroid Build Coastguard Workerif [ "x$trace_no_ext" = "x" ]; then
41*bbecb9d1SAndroid Build Coastguard Worker    echo "No trace given, bailing out"
42*bbecb9d1SAndroid Build Coastguard Worker    exit 1
43*bbecb9d1SAndroid Build Coastguard Workerfi
44*bbecb9d1SAndroid Build Coastguard Worker
45*bbecb9d1SAndroid Build Coastguard Workercommand=$(cat /traces-db/command)
46*bbecb9d1SAndroid Build Coastguard Workerecho command=$command
47*bbecb9d1SAndroid Build Coastguard Worker
48*bbecb9d1SAndroid Build Coastguard WorkerWAIT=
49*bbecb9d1SAndroid Build Coastguard WorkerRECORD=
50*bbecb9d1SAndroid Build Coastguard Workerbenchmark_loops=0
51*bbecb9d1SAndroid Build Coastguard Workerperfetto_loops=10
52*bbecb9d1SAndroid Build Coastguard Worker
53*bbecb9d1SAndroid Build Coastguard Workerfor c in $command; do
54*bbecb9d1SAndroid Build Coastguard Worker
55*bbecb9d1SAndroid Build Coastguard Worker  val=(${c//=/ })
56*bbecb9d1SAndroid Build Coastguard Worker   case "${val[0]}" in
57*bbecb9d1SAndroid Build Coastguard Worker   benchmark)
58*bbecb9d1SAndroid Build Coastguard Worker     benchmark_loops=${val[1]}
59*bbecb9d1SAndroid Build Coastguard Worker     ;;
60*bbecb9d1SAndroid Build Coastguard Worker
61*bbecb9d1SAndroid Build Coastguard Worker   perfetto)
62*bbecb9d1SAndroid Build Coastguard Worker     perfetto_loops=${val[1]}
63*bbecb9d1SAndroid Build Coastguard Worker     ;;
64*bbecb9d1SAndroid Build Coastguard Worker
65*bbecb9d1SAndroid Build Coastguard Worker   wait-after-frame)
66*bbecb9d1SAndroid Build Coastguard Worker     WAIT="--wait-after-frame"
67*bbecb9d1SAndroid Build Coastguard Worker     ;;
68*bbecb9d1SAndroid Build Coastguard Worker
69*bbecb9d1SAndroid Build Coastguard Worker   record-frame)
70*bbecb9d1SAndroid Build Coastguard Worker     RECORD="--snapshot"
71*bbecb9d1SAndroid Build Coastguard Worker     ;;
72*bbecb9d1SAndroid Build Coastguard Worker
73*bbecb9d1SAndroid Build Coastguard Worker   esac
74*bbecb9d1SAndroid Build Coastguard Workerdone
75*bbecb9d1SAndroid Build Coastguard Worker
76*bbecb9d1SAndroid Build Coastguard Workerif [ -e /traces-db/wait_after_frame ]; then
77*bbecb9d1SAndroid Build Coastguard Worker   WAIT=-wait-after-frame
78*bbecb9d1SAndroid Build Coastguard Workerfi
79*bbecb9d1SAndroid Build Coastguard Worker
80*bbecb9d1SAndroid Build Coastguard Workertrace="/traces-db/${trace_no_ext}.trace"
81*bbecb9d1SAndroid Build Coastguard Workerdatadir="/traces-db/${trace_no_ext}-out"
82*bbecb9d1SAndroid Build Coastguard Workertrace_base=$(basename ${trace_no_ext})
83*bbecb9d1SAndroid Build Coastguard Workerguest_perf="$datadir/${trace_base}-guest.perfetto"
84*bbecb9d1SAndroid Build Coastguard Worker
85*bbecb9d1SAndroid Build Coastguard Workercat "$trace" > /dev/null
86*bbecb9d1SAndroid Build Coastguard Worker
87*bbecb9d1SAndroid Build Coastguard Worker# To keep Perfetto happy
88*bbecb9d1SAndroid Build Coastguard Workerecho 0 > /sys/kernel/debug/tracing/tracing_on
89*bbecb9d1SAndroid Build Coastguard Workerecho nop > /sys/kernel/debug/tracing/current_tracer
90*bbecb9d1SAndroid Build Coastguard Worker
91*bbecb9d1SAndroid Build Coastguard Workerecho "Guest:"
92*bbecb9d1SAndroid Build Coastguard Workerwflinfo --platform surfaceless_egl --api gles2 -v
93*bbecb9d1SAndroid Build Coastguard Worker
94*bbecb9d1SAndroid Build Coastguard Workerif [ "x$perfetto_loops" != "x" -a "x$perfetto_loops" != "x0" ]; then
95*bbecb9d1SAndroid Build Coastguard Worker    /perfetto/out/dist/traced &
96*bbecb9d1SAndroid Build Coastguard Worker    /perfetto/out/dist/traced_probes &
97*bbecb9d1SAndroid Build Coastguard Worker    sleep 1
98*bbecb9d1SAndroid Build Coastguard Worker
99*bbecb9d1SAndroid Build Coastguard Worker    /perfetto/out/dist/perfetto --txt -c /usr/local/perfetto-guest.cfg -o "$guest_perf" --detach=mykey
100*bbecb9d1SAndroid Build Coastguard Worker    sleep 1
101*bbecb9d1SAndroid Build Coastguard Worker
102*bbecb9d1SAndroid Build Coastguard Worker    # The first virtio-gpu event has to be captured in the guest, so we correlate correctly to the host event
103*bbecb9d1SAndroid Build Coastguard Worker
104*bbecb9d1SAndroid Build Coastguard Worker    echo "Replaying for Perfetto:"
105*bbecb9d1SAndroid Build Coastguard Worker    eglretrace --benchmark --singlethread --loop=$perfetto_loops $WAIT --headless "$trace"
106*bbecb9d1SAndroid Build Coastguard Worker    sleep 1
107*bbecb9d1SAndroid Build Coastguard Worker
108*bbecb9d1SAndroid Build Coastguard Worker    /perfetto/out/dist/perfetto --attach=mykey --stop
109*bbecb9d1SAndroid Build Coastguard Worker    chmod a+rw "$guest_perf"
110*bbecb9d1SAndroid Build Coastguard Workerfi
111*bbecb9d1SAndroid Build Coastguard Worker
112*bbecb9d1SAndroid Build Coastguard Workerif [ "x$benchmark_loops" != "x0" ]; then
113*bbecb9d1SAndroid Build Coastguard Worker   echo "Measuring rendering times:"
114*bbecb9d1SAndroid Build Coastguard Worker   eglretrace --benchmark --loop=$benchmark_loops --headless "$trace"
115*bbecb9d1SAndroid Build Coastguard Workerfi
116*bbecb9d1SAndroid Build Coastguard Worker
117*bbecb9d1SAndroid Build Coastguard Workerif [ "x$RECORD" != "x" ]; then
118*bbecb9d1SAndroid Build Coastguard Worker   eglretrace --snapshot frame --snapshot-prefix=${datadir}/ --headless "$trace"
119*bbecb9d1SAndroid Build Coastguard Workerfi
120