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