AtlatestRepositorysigil-wm

sigil-wm / tree / scriptstest-surface-frames

1#!/usr/bin/env bash
2set -euo pipefail
3cd "$(dirname "$0")/.."
4if [[ ${1:-} != --inside ]]; then
5 exec guix time-machine -C channels.scm -- shell -m manifest.scm -- bash scripts/test-surface-frames --inside
6fi
7make -j2 all build/damage-client build/surface-frames build/frame-fault.so
8out=$PWD/build/receipts/surface-frames
9mkdir -p "$out"
10runtime=$(mktemp -d /tmp/sigil-surface-frames.XXXXXXXX)
11chmod 700 "$runtime"
12trap 'rm -rf "$runtime"' EXIT
13export XDG_RUNTIME_DIR=$runtime WLR_BACKENDS=headless WLR_RENDERER=pixman WLR_HEADLESS_OUTPUTS=1
14unset WAYLAND_DISPLAY DISPLAY
15result=0
16for clip in 0 1; do
17 for failure in clean busy; do
18 unset SIGIL_WM_FRAME_FAILURE
19 if [[ $failure == busy ]]; then export SIGIL_WM_FRAME_FAILURE=$runtime/fail; fi
20 rc=0
21 LD_PRELOAD=$PWD/build/frame-fault.so timeout 20 build/surface-frames "$out/$clip-$failure.samples" "$clip" > "$out/$clip-$failure.log" 2>&1 || rc=$?
22 cat "$out/$clip-$failure.log"
23 awk '
24 /^FRAME_PRESENT / && /presented=1/ { split($3, item, "="); presented[item[2]]=1 }
25 /^DAMAGE_PRESENT_PHASE=/ { split($2, item, "="); phases[item[2]]=1 }
26 END {
27 for (sequence in phases) if (!presented[sequence]) {
28 print "DAMAGE_UNPRESENTED_SEQUENCE=" sequence; failed=1
29 }
30 exit failed
31 }
32 ' "$out/$clip-$failure.log" || rc=2
33 if [[ $failure == busy ]]; then
34 test "$(grep -c '^FRAME_COMMIT_EBUSY ' "$out/$clip-$failure.log")" == 1 || rc=2
35 fi
36 if ((rc)); then result=$rc; fi
37 done
38done
39exit "$result"