grid: skip the per-cell ISO-protection resolve when no protected style exists #409
Labels
No labels
priority/P0
priority/P1
priority/P2
release/v0.1.0
status/blocked
status/planned
type/bug
type/design
type/test-gap
type/tracker
No milestone
No project
No assignees
1 participant
Due date
No due date set.
Dependencies
No dependencies set
Reference
natsukium/felis#409
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Split from #401.
On kitten's csi payload (
EL 2per chunk),Grid::range_blank_inner(crates/felis-grid/src/editing.rs) resolves every blanked cell's style through the style table to testAttrFlags::ISO_PROTECTED, becauseEL/EDgo throughrange_blank_iso. The #401 diagnosis measured it at 11.3% self time of the csi parse-into-grid floor, and a probe that skipped the check cut the floor'sinstructions:uby a further 6%.Almost no stream ever sets SPA/EPA protection, so the per-cell resolve is paid for nothing. Proposed shape: a sticky grid flag, "a style carrying
ISO_PROTECTEDhas been interned", set where SPA puts it on the pen.range_blank_innerthen skips the per-cellresolvewhile the flag is clear. The flag can stay set for the grid's lifetime (clearing it would need a sweep that proves no cell still carries such a style), which keeps it exact on the side that matters: a protected cell is never blanked.Gates: esctest's
test_ED_respectsISOProtection/test_EL_respectsISOProtectionfamily, the existing ISO-protection unit tests, and the csi floor (measure_parse_into_grid_floorwith a kitten-shaped csi payload, pluscsi_dispatchcriterion).