51 lines
2.2 KiB
Bash
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
|