6aef03df8d
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
64 lines
2.3 KiB
Bash
Executable File
64 lines
2.3 KiB
Bash
Executable File
#!/bin/bash
|
|
# C1 + C2 + C6 instrumentation: per-codec decode with strace (ioctl) + lsof (fds) + dmesg before/after.
|
|
# Decodes 30 frames into a tmp file to verify HW engagement; doesn't measure FPS.
|
|
set -u
|
|
OUT=$HOME/measurements/p3
|
|
mkdir -p $OUT
|
|
codecs=("h264:rkvdec:h264.mp4" "vp8:hantro:vp8.webm" "mpeg2:hantro:mpeg2.ts")
|
|
|
|
# C6 pre: dmesg snapshot
|
|
sudo dmesg --time-format=ctime > $OUT/dmesg.pre.txt
|
|
|
|
for spec in "${codecs[@]}"; do
|
|
codec=${spec%%:*}; route=$(echo $spec | cut -d: -f2); ext=${spec##*:}
|
|
cf=$HOME/measurements/encoded/bbb_60s_720p.${ext}
|
|
log=$OUT/engage_${codec}
|
|
rm -f $log.{strace,lsof,stderr,nv12} 2>/dev/null
|
|
|
|
echo "=== $codec ($route) ===" | tee $log.summary
|
|
|
|
# Launch in background, track PID; lsof+strace alongside
|
|
LIBVA_DRIVER_NAME=v4l2_request strace -ff -o $log.strace -e trace=ioctl,openat \
|
|
ffmpeg -hide_banner -loglevel error \
|
|
-hwaccel vaapi -hwaccel_output_format vaapi \
|
|
-i "$cf" -vf "hwdownload,format=nv12" -frames:v 30 \
|
|
-f rawvideo -pix_fmt nv12 -y $log.nv12 \
|
|
> $log.stderr 2>&1 &
|
|
pid=$!
|
|
|
|
# Wait briefly then lsof
|
|
sleep 0.6
|
|
if kill -0 $pid 2>/dev/null; then
|
|
lsof -p $pid 2>/dev/null | grep -E "/dev/(video|media|dri)" > $log.lsof
|
|
fi
|
|
wait $pid; rc=$?
|
|
|
|
# Aggregate
|
|
size=$(stat -c%s $log.nv12 2>/dev/null || echo 0)
|
|
expected=$((30 * 1280 * 720 * 3 / 2)) # 30 frames yuv420p 720p
|
|
size_ok=$([ "$size" = "$expected" ] && echo "ok" || echo "MISMATCH (expected=$expected)")
|
|
|
|
vidioc=$(grep -h "VIDIOC_S_EXT_CTRLS\|VIDIOC_QUERYCAP\|VIDIOC_QBUF\|VIDIOC_DQBUF" $log.strace.* 2>/dev/null | wc -l)
|
|
media_q=$(grep -h "MEDIA_REQUEST_IOC_QUEUE\|MEDIA_REQUEST_IOC_REINIT" $log.strace.* 2>/dev/null | wc -l)
|
|
fd_count=$(wc -l < $log.lsof 2>/dev/null || echo 0)
|
|
|
|
{
|
|
echo " rc=$rc size=$size size_ok=$size_ok"
|
|
echo " ioctl V4L2 (S_EXT_CTRLS+Q/DQBUF+QUERYCAP)=$vidioc"
|
|
echo " ioctl MEDIA_REQUEST_*=$media_q"
|
|
echo " open V4L2/media/DRI fds=$fd_count"
|
|
if [ -s $log.lsof ]; then
|
|
echo " fds:"
|
|
awk '{print " " $9}' $log.lsof | sort -u
|
|
fi
|
|
} | tee -a $log.summary
|
|
done
|
|
|
|
# C6 post
|
|
sudo dmesg --time-format=ctime > $OUT/dmesg.post.txt
|
|
echo
|
|
echo "=== dmesg diff (new lines since pre) ==="
|
|
diff $OUT/dmesg.pre.txt $OUT/dmesg.post.txt | head -20
|
|
|
|
echo "=== done $(date -Iseconds) ==="
|