AtlatestRepositorysigil-wm
1
#!/usr/bin/env bash2
set -euo pipefail3
cd "$(dirname "$0")/.."4
if [[ ${1:-} != --inside ]]; then5
exec guix time-machine -C channels.scm -- shell -m manifest.scm -- bash scripts/test-surface-frames --inside6
fi7
make -j2 all build/damage-client build/surface-frames build/frame-fault.so8
out=$PWD/build/receipts/surface-frames9
mkdir -p "$out"10
runtime=$(mktemp -d /tmp/sigil-surface-frames.XXXXXXXX)11
chmod 700 "$runtime"12
trap 'rm -rf "$runtime"' EXIT13
export XDG_RUNTIME_DIR=$runtime WLR_BACKENDS=headless WLR_RENDERER=pixman WLR_HEADLESS_OUTPUTS=114
unset WAYLAND_DISPLAY DISPLAY15
result=016
for clip in 0 1; do17
for failure in clean busy; do18
unset SIGIL_WM_FRAME_FAILURE19
if [[ $failure == busy ]]; then export SIGIL_WM_FRAME_FAILURE=$runtime/fail; fi20
rc=021
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=129
}30
exit failed31
}32
' "$out/$clip-$failure.log" || rc=233
if [[ $failure == busy ]]; then34
test "$(grep -c '^FRAME_COMMIT_EBUSY ' "$out/$clip-$failure.log")" == 1 || rc=235
fi36
if ((rc)); then result=$rc; fi37
done38
done39
exit "$result"