Files
BT411/scratchpad/night14/segperf4.sh
T

51 lines
2.2 KiB
Bash

#!/usr/bin/env bash
# #149 repro attempt 2: Oracle's composition -- GLASS PANELS on the observed
# node + 4 mechs streaming in at GO. Question: does the 857 stall window
# (sustained rstat avg>50ms from mission load) appear at all? If yes, A/B next.
set -x
. /c/git/bt411/scratchpad/night6/bench_common.sh
cd /c/git/bt411/content || exit 1
taskkill //F //IM btl4.exe > /dev/null 2>&1
sleep 2
rm -f sp4_a.log sp4_b.log sp4_c.log sp4_d.log sp4_relay.log
bt_expert_egg MP.EGG SP4.EGG
sed -i "s/^map=.*/map=grass/; s/^time=.*/time=day/; s/^vehicle=.*/vehicle=madcat/" SP4.EGG
launch () {
( export BT_GOTO=enemy BT_GOTO_STOP=150 BT_AUTOFIRE=1 BT_AF_PERIOD=4 BT_MP_LOG=1
[ "$1" = "sp4_a.log" ] && export BT_PERF_LOG=1 BT_GLASS_PANELS=1 BT_PLATFORM=glass
bt_launch "$1" SP4.EGG "$2" -net "$3" )
sleep 2
}
launch sp4_d.log 0xC0 1801
launch sp4_c.log 0x30 1701
launch sp4_b.log 0x0C 1601
launch sp4_a.log 0x03 1501
sleep 5
python ../tools/btconsole.py SP4.EGG 127.0.0.1:1501 127.0.0.1:1601 127.0.0.1:1701 127.0.0.1:1801 > sp4_relay.log 2>&1 &
RELAY=$!
sleep 280
kill $RELAY 2>/dev/null
sleep 3
bt_kill_ours; sleep 2; taskkill //F //IM btl4.exe > /dev/null 2>&1; sleep 3
echo "============ RESULT ============"
python - <<'PY'
import re, io, statistics
v=[]; seg=[]
for ln in io.open(r"C:\git\bt411\content\sp4_a.log", encoding="latin-1", errors="replace"):
m=re.search(r"\[rstat\] frames=\d+ avg=([\d.]+)ms maxDraw=([\d.]+)", ln)
if m: v.append((float(m.group(1)), float(m.group(2))))
m=re.search(r"\[segperf\] calls=(\d+) dirty=(\d+) ms=([\d.]+)", ln)
if m: seg.append((int(m.group(1)), int(m.group(2)), float(m.group(3))))
if v:
avgs=[a for a,_ in v]; draws=[d for _,d in v]
stall=[i for i,(a,_) in enumerate(v) if a>50]
print("rstat blocks=%d med=%.2fms >50ms blocks=%d %s maxDraw med=%.1f worst=%.1f"
% (len(v), statistics.median(avgs), len(stall),
("(idx %s..%s)"%(stall[0],stall[-1]) if stall else ""),
statistics.median(draws), max(draws)))
if seg:
ms=[x[2] for x in seg]
print("segperf: dirty-med=%d ms-med=%.2f ms-worst=%.2f"
% (sorted(x[1] for x in seg)[len(seg)//2], sorted(ms)[len(ms)//2], max(ms)))
PY