grid: let TableGc force a sweep, and sweep the row-cache test through it #432

Merged
natsukium merged 1 commit from render/sweep-through-tablegc into main 2026-09-25 11:08:53 +09:00
Owner

main's tests stopped compiling (E0624, gc_styles is private): #423 made ScreenBuffer::gc_styles crate-private so every sweep goes through the sealed TableGc/Sweepable path, while #424's row-cache property test still called it directly. Each PR was green against the main it was tested on; they were merged back to back.

  • TableGc::sweep sweeps both registries now, through the same sealed Sweepable owners and with the same threshold bookkeeping as maybe_sweep (the style threshold still floors at STYLE_INIT).
  • The row-cache test's GcStyles op sweeps through it.
  • New grid test: a forced sweep compacts below the threshold and the pen survives it.

Checks: cargo nextest run -p felis-grid table_gc (15/15), -p felis-render-wgpu row_cache (3/3), workspace clippy --all-targets --all-features -D warnings clean.

Review: pi (luna) on origin/main...HEAD: PASS, no findings.

main's tests stopped compiling (E0624, `gc_styles` is private): #423 made `ScreenBuffer::gc_styles` crate-private so every sweep goes through the sealed `TableGc`/`Sweepable` path, while #424's row-cache property test still called it directly. Each PR was green against the main it was tested on; they were merged back to back. - `TableGc::sweep` sweeps both registries now, through the same sealed `Sweepable` owners and with the same threshold bookkeeping as `maybe_sweep` (the style threshold still floors at `STYLE_INIT`). - The row-cache test's `GcStyles` op sweeps through it. - New grid test: a forced sweep compacts below the threshold and the pen survives it. Checks: `cargo nextest run -p felis-grid table_gc` (15/15), `-p felis-render-wgpu row_cache` (3/3), workspace clippy `--all-targets --all-features -D warnings` clean. Review: pi (luna) on `origin/main...HEAD`: PASS, no findings.
grid: let TableGc force a sweep, and sweep the row-cache test through it
Some checks failed
darwin / build felis (aarch64-darwin) (pull_request) Successful in 53s
darwin / publish felis (aarch64-darwin) (pull_request) Has been skipped
windows / detect relevant changes (pull_request) Successful in 13s
bench / Criterion full-suite snapshot (pull_request) Has been skipped
fuzz / cargo fuzz nightly long-run (pull_request) Has been skipped
darwin / detect relevant changes (pull_request) Successful in 13s
darwin / darwin docs-only no-op (pull_request) Has been skipped
windows / windows docs-only no-op (pull_request) Has been skipped
pr / nix flake check (pull_request) Has been cancelled
bench / Criterion regression gate (pull_request) Has been cancelled
pr / cargo build / clippy / test / deny (pull_request) Has been cancelled
pr / wire schema is compatible with the base (pull_request) Has been cancelled
pr / frontend smoke (x86_64-linux) (pull_request) Has been cancelled
pr / publish felis (x86_64-linux) (pull_request) Has been cancelled
fuzz / cargo fuzz smoke (per target) (pull_request) Has been cancelled
windows / cargo clippy (Windows cross) (pull_request) Has been cancelled
windows / cargo nextest (Windows) (pull_request) Has been cancelled
windows / frontend smoke (Windows) (pull_request) Has been cancelled
windows / package felis (x86_64-pc-windows-msvc) (pull_request) Has been cancelled
042dda6fe3
main stopped compiling its tests: #423 made `ScreenBuffer::gc_styles`
crate-private so every sweep goes through `TableGc`, which re-establishes
the handles an owner holds outside its cells, while #424's row-cache
property test still called it directly to exercise a style compaction.
Each PR was green against the main it was tested on.

`TableGc::maybe_sweep` only sweeps past its threshold, which a test
cannot reach cheaply, so `TableGc::sweep` sweeps now and keeps the
threshold bookkeeping. It takes the same sealed `Sweepable` owners, so
the invariant #423 introduced still holds.

Assisted-by: Claude Code
natsukium deleted branch render/sweep-through-tablegc 2026-09-25 11:08:53 +09:00
Commenting is not possible because the repository is archived.
No description provided.