performance day two: the resting interface stops rebuilding itself

- the resting player's blinking status glow was rebuilding the whole interface's batches every frame — a run whose bytes didn't move is no longer rewritten, worth 1.17 ms at Stormwind
- doodad skeletons collapse into the pose buffer and parked rigs skip the model pass; doodad and prop hulls weld into batched trimeshes
- the Update schedule runs on the single-threaded executor by default, measured faster than the multithreaded one for this frame
- a parked camera stops claiming to move every frame

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Sam
2026-08-16 17:52:00 +07:00
co-authored by Claude Fable 5
parent 21e3fc4f06
commit a626e29c39
26 changed files with 1293 additions and 229 deletions
@@ -787,6 +787,28 @@ pub(super) fn drive_script(
let n_quads = out.len();
let changed = quads.quads != out;
if changed {
// `WOW_UI_DIFF=1` — the base-lane half of the rebuild-trigger probe (`ui_pass`' twin):
// names the first Lua-UI quad that differs from last frame's extraction.
if std::env::var_os("WOW_UI_DIFF").is_some() {
match quads.quads.iter().zip(&out).position(|(a, b)| a != b) {
Some(i) => {
let (b, a) = (&quads.quads[i], &out[i]);
eprintln!(
"[ui-diff-base] quad {i}/{n_quads}: tex={:?} rect {:?} -> {:?} uv_changed={} color_changed={}",
a.texture.as_ref().and_then(|t| t.path()),
b.rect,
a.rect,
a.uv != b.uv,
a.color != b.color,
);
}
None => eprintln!(
"[ui-diff-base] quad COUNT changed: {} -> {}",
quads.quads.len(),
out.len()
),
}
}
quads.quads = out;
quads.dirty = true;
}