71 lines
2.1 KiB
Bash
Executable file
71 lines
2.1 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
# Headless UBER perf capture for DOS (DOSBox, 386SX-16 timing).
|
|
#
|
|
# Mounts build/dos/bin as C: in a headless DOSBox (Xvfb), runs UBER.EXE
|
|
# (which writes JOEYLOG.TXT to its CWD == C: == the host bin dir), polls
|
|
# that log for UBER's "press any key to exit" completion marker, then
|
|
# kills DOSBox. tools/uber-perf-table reads build/dos/bin/JOEYLOG.TXT.
|
|
#
|
|
# Uses the same dosbox-386sx16.conf as run-dos.sh so the cycle budget
|
|
# matches the PERF.md reference machine.
|
|
#
|
|
# scripts/bench-dos.sh # default 90s timeout
|
|
# TIMEOUT=120 scripts/bench-dos.sh # override
|
|
|
|
set -euo pipefail
|
|
|
|
repo=$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)
|
|
bin_dir=$repo/build/dos/bin
|
|
conf=$repo/scripts/dosbox-386sx16.conf
|
|
log=$bin_dir/JOEYLOG.TXT
|
|
timeout_s=${TIMEOUT:-90}
|
|
|
|
if [[ ! -f $bin_dir/UBER.EXE ]]; then
|
|
echo "UBER.EXE not built. Run 'make dos' first." >&2
|
|
exit 1
|
|
fi
|
|
|
|
rm -f "$log" "$bin_dir/joeylog.txt"
|
|
|
|
display=:$((90 + RANDOM % 9))
|
|
Xvfb "$display" -screen 0 800x600x24 -nolisten tcp >/dev/null 2>&1 &
|
|
xvfb_pid=$!
|
|
sleep 0.4
|
|
cleanup() {
|
|
kill "$dosbox_pid" 2>/dev/null || true
|
|
kill "$xvfb_pid" 2>/dev/null || true
|
|
wait 2>/dev/null || true
|
|
}
|
|
trap cleanup EXIT
|
|
|
|
echo "bench-dos: running UBER headless (timeout ${timeout_s}s)..." >&2
|
|
DISPLAY=$display dosbox \
|
|
-conf "$conf" \
|
|
-c "C:" \
|
|
-c "UBER.EXE" \
|
|
"$bin_dir" >/tmp/bench-dos-dosbox.log 2>&1 &
|
|
dosbox_pid=$!
|
|
|
|
waited=0
|
|
while (( waited < timeout_s )); do
|
|
if [[ -f $log ]] && grep -q "press any key to exit" "$log" 2>/dev/null; then
|
|
break
|
|
fi
|
|
sleep 1
|
|
(( waited++ )) || true
|
|
done
|
|
|
|
if [[ ! -f $log ]]; then
|
|
echo "bench-dos: FAIL -- no JOEYLOG.TXT produced" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# uber-perf-table reads build/dos/bin/JOEYLOG.TXT directly (uppercase).
|
|
ops=$(grep -c "ops/sec" "$log" || true)
|
|
done_marker=$(grep -c "press any key to exit" "$log" || true)
|
|
if (( done_marker == 0 )); then
|
|
echo "bench-dos: WARNING -- timed out before completion marker (partial capture)" >&2
|
|
fi
|
|
echo "bench-dos: captured $ops op lines (complete=$done_marker) in ${waited}s" >&2
|
|
echo " -> $log" >&2
|
|
grep "UBER:" "$log" | sed 's/ | hash=.*//' || true
|