Exact-pixel and production-perf comparison of6c79d35c(+ only the A2 normal files, so no terrain mask is needed) againstc51b07efwith no pack: connected as +Acdream, visible window, one isolated config clone per variant, pinned clocks. Open field: the only differences are idle pose, mana digits and a passing flyer. Holtburg: same-binary-twice defines the dynamic mask (9.8%); in the static 90% both self-diffs have ZERO pixels with |d|>=8 while base+normals vs HEAD-off has 841/729 - all streaks inside the animated lifestone. Buildings, ground, trees, sky and UI are clean. Perf (uncapped Release, no automation observer, ACDREAM_FRAME_PROF=1): Holtburg CPU p50 4.7 -> 4.1 ms, Arwic 6.0 -> 5.2 ms, GPU unchanged, alloc/frame 574 KB -> 21 KB. No regression; F5b's '27.8 ms retail CPU' was the observer. Three false alarms recorded so nobody repeats them: the isolated gate settings lack fieldOfView (90 vs the real 86.33 -> a 0.952 zoom); the real %APPDATA% settings still selected acdream.atmospheric/low (pack ON); a minimized GLFW window is throttled and never settles. Tools: tools/vm0/capture-visible.ps1 (pre-campaign gate + -Exe/-Live/ -ConfigDir/-CharacterName/-PreCaptureCommand), tools/vm0/perf-run.sh, and -BuildingDetailTextures on run-offline-pixel-gate.ps1. Baseline patches under docs/research/evidence/vm0/. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
21 lines
1.7 KiB
Bash
21 lines
1.7 KiB
Bash
#!/usr/bin/env bash
|
|
# Campaign VM slice VM0 production perf probe: connected, uncapped Release, NO automation
|
|
# artifact dir (so no render-scene observer), reads the client's own [frame-prof] lines.
|
|
# usage: perf-run.sh <name> <exe> <configdir> <outdir> [slash-command]
|
|
set -u
|
|
name=$1; exe=$2; cfg=$3; out=$4; cmd=${5:-}
|
|
mkdir -p "$out/$name"; log="$out/$name/client.log"; probe="$out/$name/probe.txt"
|
|
sc="$out/$name/session.json"
|
|
cat > "$sc" <<JSON
|
|
{"version":1,"sessions":[{"id":"vm0-perf","endpoint":{"host":"$ACDREAM_TEST_HOST","port":$ACDREAM_TEST_PORT},"account":"$ACDREAM_TEST_USER","character":{"name":"+Acdream"},"credential":{"provider":"Environment","reference":"ACDREAM_TEST_PASS"}}]}
|
|
JSON
|
|
{ echo "wait world-ready 90000"; echo "wait world-visible 30000"; [ -n "$cmd" ] && { echo "command $cmd"; echo "wait materialized 1 60000"; }; echo "sleep 75000"; } > "$probe"
|
|
ACDREAM_DAT_DIR="$USERPROFILE/Documents/Asheron's Call" ACDREAM_CONFIG_DIR="$cfg" ACDREAM_DATA_DIR="$out/$name/data" ACDREAM_CACHE_DIR="$out/$name/cache" \
|
|
ACDREAM_NO_AUDIO=1 ACDREAM_DAY_GROUP=0 ACDREAM_WORLD_TIME=0.5 ACDREAM_SKY_PHASE_SECONDS=0 ACDREAM_MSAA_SAMPLES=0 ACDREAM_UNCAPPED_RENDER=1 ACDREAM_FRAME_PROF=1 \
|
|
ACDREAM_UI_PROBE_SCRIPT="$probe" "$exe" --session-config "$sc" > "$log" 2>&1 &
|
|
pid=$!
|
|
# wait for the probe to finish (75 s after arrival), then graceful close
|
|
for i in $(seq 1 200); do grep -q "UI probe script complete" "$log" 2>/dev/null && break; sleep 1; done
|
|
pwsh -NoProfile -Command '$p=Get-Process -Name AcDream.App -ErrorAction SilentlyContinue; if($p){$p.CloseMainWindow()|Out-Null; if(-not $p.WaitForExit(10000)){$p|Stop-Process -Force}}' >/dev/null
|
|
wait $pid 2>/dev/null
|
|
echo "== $name"; tr -d '\r' < "$log" | grep "frame-prof" | tail -8 | sed 's/^.*\[frame-prof\]/ /' | cut -c1-150
|