Skip to content

Commit 757cc2d

Browse files
committed
tools: lib_display: add Wayland proto + screenshot delta helpers
- Add WAYLAND_DEBUG protocol evidence validation helper - Add best-effort screenshot capture + delta comparison helpers - Keep POSIX/ShellCheck clean and CI-friendly behavior Signed-off-by: Srikanth Muppandam <smuppand@qti.qualcomm.com>
1 parent 10f66a3 commit 757cc2d

1 file changed

Lines changed: 178 additions & 0 deletions

File tree

Runner/utils/lib_display.sh

Lines changed: 178 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1451,3 +1451,181 @@ display_is_cpu_renderer() {
14511451

14521452
return 1
14531453
}
1454+
1455+
###############################################################################
1456+
# Wayland protocol validation (client-side)
1457+
###############################################################################
1458+
# Validate that the client actually created a surface and committed buffers.
1459+
# Expects WAYLAND_DEBUG output in the provided logfile.
1460+
#
1461+
# Usage:
1462+
# display_wayland_proto_validate "/path/to/run.log"
1463+
# Returns:
1464+
# 0 = looks good (surface + commit seen)
1465+
# 1 = missing required evidence
1466+
display_wayland_proto_validate() {
1467+
logf="${1:-}"
1468+
[ -n "$logf" ] && [ -f "$logf" ] || return 1
1469+
1470+
# Accept both wl_compositor@X and wl_compositor#X formats
1471+
# Accept commit() with or without parentheses in logs
1472+
if grep -Eq 'wl_compositor[@#][0-9]+\.create_surface' "$logf" &&
1473+
grep -Eq 'wl_surface[@#][0-9]+\.commit' "$logf"; then
1474+
return 0
1475+
fi
1476+
1477+
return 1
1478+
}
1479+
1480+
###############################################################################
1481+
# Screenshot capture + delta validation
1482+
###############################################################################
1483+
# Uses weston-screenshooter when available.
1484+
# If the compositor rejects capture (unauthorized / protocol failure),
1485+
# treat it as "not available" so tests do not FAIL due to policy.
1486+
#
1487+
# Returns convention:
1488+
# 0 = success
1489+
# 1 = tool exists but capture failed
1490+
# 2 = tool not available or not permitted (unauthorized / protocol failure)
1491+
1492+
display_screenshot_tool() {
1493+
if command -v weston-screenshooter >/dev/null 2>&1; then
1494+
echo "weston-screenshooter"
1495+
return 0
1496+
fi
1497+
return 1
1498+
}
1499+
1500+
display_take_screenshot() {
1501+
out="${1:-}"
1502+
[ -n "$out" ] || return 1
1503+
1504+
tool="$(display_screenshot_tool 2>/dev/null || true)"
1505+
[ -n "$tool" ] || return 2
1506+
1507+
tmp_log="$(mktemp /tmp/weston_shot_XXXXXX.log 2>/dev/null || true)"
1508+
[ -n "$tmp_log" ] || tmp_log="/tmp/weston_shot.log"
1509+
1510+
rc=0
1511+
case "$tool" in
1512+
weston-screenshooter)
1513+
# capture stdout+stderr to inspect authorization failures
1514+
weston-screenshooter "$out" >"$tmp_log" 2>&1 || rc=$?
1515+
;;
1516+
*)
1517+
rm -f "$tmp_log" 2>/dev/null || true
1518+
return 2
1519+
;;
1520+
esac
1521+
1522+
# If compositor rejects capture, treat as "not permitted" (skip)
1523+
if grep -qiE 'unauthorized|protocol failure' "$tmp_log" 2>/dev/null; then
1524+
rm -f "$tmp_log" 2>/dev/null || true
1525+
rm -f "$out" 2>/dev/null || true
1526+
return 2
1527+
fi
1528+
1529+
rm -f "$tmp_log" 2>/dev/null || true
1530+
1531+
[ "$rc" -eq 0 ] || return 1
1532+
[ -s "$out" ] || return 1
1533+
return 0
1534+
}
1535+
1536+
display_hash_file() {
1537+
f="${1:-}"
1538+
[ -n "$f" ] && [ -f "$f" ] || return 1
1539+
1540+
if command -v sha256sum >/dev/null 2>&1; then
1541+
sha256sum "$f" | awk '{print $1}'
1542+
return 0
1543+
fi
1544+
if command -v md5sum >/dev/null 2>&1; then
1545+
md5sum "$f" | awk '{print $1}'
1546+
return 0
1547+
fi
1548+
return 1
1549+
}
1550+
1551+
# Begin screenshot-delta session (captures "before" shot).
1552+
# Usage:
1553+
# display_screenshot_delta_begin "testname" "/path/to/outdir"
1554+
# Side effects:
1555+
# sets DISPLAY_SHOT_BEFORE and DISPLAY_SHOT_DIR
1556+
# Returns:
1557+
# 0 ok
1558+
# 2 tool missing or not permitted
1559+
# 1 capture failed
1560+
display_screenshot_delta_begin() {
1561+
tn="${1:-weston-test}"
1562+
od="${2:-.}"
1563+
1564+
ts="$(date +%Y%m%d_%H%M%S 2>/dev/null || date +%s)"
1565+
DISPLAY_SHOT_DIR="$od"
1566+
DISPLAY_SHOT_BEFORE="${od}/${tn}_before_${ts}.png"
1567+
1568+
rc=0
1569+
display_take_screenshot "$DISPLAY_SHOT_BEFORE" || rc=$?
1570+
1571+
if [ "$rc" -eq 0 ]; then
1572+
log_info "Screenshot before captured: $DISPLAY_SHOT_BEFORE"
1573+
return 0
1574+
fi
1575+
1576+
if [ "$rc" -eq 2 ]; then
1577+
log_warn "Screenshot tool not available or not permitted skipping screenshot delta validation"
1578+
DISPLAY_SHOT_BEFORE=""
1579+
return 2
1580+
fi
1581+
1582+
log_warn "Failed to capture screenshot before skipping screenshot delta validation"
1583+
DISPLAY_SHOT_BEFORE=""
1584+
return 1
1585+
}
1586+
1587+
# End screenshot-delta session (captures "after" and compares hash).
1588+
# Usage:
1589+
# display_screenshot_delta_end "testname"
1590+
# Returns:
1591+
# 0 changed (PASS)
1592+
# 1 identical (FAIL)
1593+
# 2 not available or skipped
1594+
display_screenshot_delta_end() {
1595+
tn="${1:-weston-test}"
1596+
[ -n "${DISPLAY_SHOT_BEFORE:-}" ] || return 2
1597+
1598+
od="${DISPLAY_SHOT_DIR:-.}"
1599+
ts="$(date +%Y%m%d_%H%M%S 2>/dev/null || date +%s)"
1600+
after="${od}/${tn}_after_${ts}.png"
1601+
1602+
rc=0
1603+
display_take_screenshot "$after" || rc=$?
1604+
1605+
if [ "$rc" -eq 2 ]; then
1606+
log_warn "Screenshot tool not available or not permitted skipping screenshot delta validation"
1607+
return 2
1608+
fi
1609+
if [ "$rc" -ne 0 ]; then
1610+
log_warn "Failed to capture screenshot after skipping screenshot delta validation"
1611+
return 2
1612+
fi
1613+
1614+
log_info "Screenshot after captured: $after"
1615+
1616+
h1="$(display_hash_file "$DISPLAY_SHOT_BEFORE" 2>/dev/null || true)"
1617+
h2="$(display_hash_file "$after" 2>/dev/null || true)"
1618+
1619+
if [ -z "$h1" ] || [ -z "$h2" ]; then
1620+
log_warn "Could not hash screenshots skipping screenshot delta validation"
1621+
return 2
1622+
fi
1623+
1624+
if [ "$h1" = "$h2" ]; then
1625+
log_warn "Screenshot delta check identical no visible change detected"
1626+
return 1
1627+
fi
1628+
1629+
log_info "Screenshot delta check changed visual validation OK"
1630+
return 0
1631+
}

0 commit comments

Comments
 (0)