delta: change detection pays for change encoding (hash of rendered bytes)
open by a73x
The delta tracker hashes the RENDERED bytes of each row, not the cells:
const bytes = try eng.dumpVtRow(alloc, @intCast(y));
const hash = Wyhash.hash(0, bytes);
That is deliberate and load-bearing — the hash cannot disagree with the
payload it would send, so a hash miss can never produce a wrong delta.
The cost is that change DETECTION pays for change ENCODING even when
nothing changed. On a full-width repaint that is the single largest line
in the profile (57.5%, 2026-08-21).
Hashing cells directly would cut it, but it trades away the
hash-matches-payload guarantee, and the guarantee is why the current shape
was chosen. Only worth opening if the other two are not enough — the
cheap fixes should be measured first.