https://gitlab.synchro.net/main/sbbs/-/commit/980c0f8d21669d2627dd41cd
Modified Files:
src/doors/termgfx/termgfx_termio.c
Log Message:
termgfx: say WHY a dirty pass gave up, not just that it did
termgfx_diff_coalesce() returns 0 for three unrelated reasons -- nothing changed, too much changed, or the change is too scattered to describe --
and the trace reported all of them as "nothing". Only the first is waste:
past TERMGFX_FALLBACK_PCT a repaint really is cheaper than patching most
of the screen, and a scattered change really is cheaper sent whole.
That distinction is not academic. Read as "nothing", the second case looks exactly like a bug worth chasing: letting Flight of the Amazon Queen play
its opening sequence, 720 frames repainted under that label, and the
obvious reading was that a quarter of the session was being thrown away. Measuring the tile diff over the same sequence offline says otherwise --
65% of its frame pairs change more than half the tiles, against a 45% threshold. It is a full-motion cutscene. Those repaints are correct, and
the only thing wrong was the label.
Name them separately: nothing / toobig / frag, alongside the existing
strand. The reason now comes from where the decision is made rather than
being inferred from a return value at the call site, so a caller can no
longer overwrite a specific answer with a vague one.
NOTE for the commit before this one, which cannot be amended: it justifies itself with "645 of 2347 frames -- 27% -- repainted with the diff
reporting nothing dirty at all". That number is this mislabelling and
should be read as frames the diff declined to patch for ANY reason,
mostly toobig. The change it describes is still right -- a palette move
that touches no displayed pixel should not repaint, and the test pins it directly -- but the opening sequence is not the evidence for it.
Co-Authored-By: Claude Opus 5 (1M context) <
noreply@anthropic.com>
--- SBBSecho 3.37-Linux
* Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)