Maximize frame throughput across all effects - #3
Conversation
|
Two more measured wins landed:
|
|
Two effect-specific wins landed:
|
|
de78539 removes SequenceEaser deep clones by returning borrowed added/removed deltas. Dense 200x50 marginal frame time: Wipe -2.2%, Highlight -14.9%, Sweep -7.6%. Focused parity 30/30; full tests pass. |
|
6b98670 removes Overflow gradient deep-copying and switches the pending-row queue from O(n) front removals to VecDeque. End-to-end gains are +0.6% to +1.4% across RGB/xterm/no-color and 64x20/200x50; parity 12/12 and full tests pass. |
|
8efa1f3 enables panic=abort for release builds: paired all-35 throughput +1.38%, binary size 3.28 MB -> 2.55 MB (-22%). Release tests, 354 effect parity cases, and 41 TTY parity cases pass. |
|
539723a stores RGB spellings/channels inline so Color is Copy: Color shrinks 56 -> 22 bytes and ColorPair 112 -> 44 bytes. Across 35 non-clock effects: +11.6% geometric-mean FPS, +12.0% median; dense 200x50 Beams +18.6%, Waves +18.2%, Smoke +16.8%. Candidate/base streams were identical for 354/354 effects and 41/41 TTY cases; release tests and CLI pass. Note: this intentionally changes the public rgb_color field from String to RgbString. |
This PR completes the FPS autoresearch pass with eleven separately measured optimization commits.
Combined result
Pinned-core, alternating-order benchmark against
master(ca54938), using 11 samples per effect on the established 100x30 corpus:A dense 200x50 comparison across Beams, Waves, Colorshift, Highlight, Expand, and Middleout improved aggregate FPS by 32.49%. All six complete streams remained byte-identical.
Accepted wins
Validation
cargo test --release: 23 tests passed across unit and integration suitesgit diff --check: cleanCompatibility note
The compact RGB representation changes the public Rust field types from heap-backed strings to
RgbStringand prevents externalColorstruct literals. The project is binary-focused; command behavior and rendered output remain byte-identical.