Skip to content

perf(invariant): reuse shrink replay sequence buffer#15320

Merged
DaniPopes merged 2 commits into
masterfrom
auto-opt/20260623-reuse-shrink-sequence
Jul 7, 2026
Merged

perf(invariant): reuse shrink replay sequence buffer#15320
DaniPopes merged 2 commits into
masterfrom
auto-opt/20260623-reuse-shrink-sequence

Conversation

@decofe

@decofe decofe commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

Reuse a single index buffer across invariant shrink-loop iterations instead of allocating a fresh Vec<usize> per candidate via shrinker.current().collect().

The shrink loops (shrink_sequence, shrink_sequence_value, shrink_handler_sequence) run up to shrink_run_limit (default 5000) iterations, so this removes thousands of short-lived allocations per shrink by reusing one buffer (clear() + extend(), which retains capacity).

Read-only sequence params (check_sequence, check_sequence_value, replay_handler_failure_sequence, handler_sequence_still_triggers_bug) are changed from Vec<usize> to &[usize]. All consumers only borrowed the sequence (the innermost replay_sequence already takes &[usize]), so behavior is unchanged.

@decofe decofe self-assigned this Jun 23, 2026
…euse-shrink-sequence

# Conflicts:
#	crates/evm/evm/src/executors/invariant/shrink.rs
@DaniPopes DaniPopes marked this pull request as ready for review July 7, 2026 13:43
@DaniPopes DaniPopes enabled auto-merge (squash) July 7, 2026 13:44
@DaniPopes DaniPopes merged commit 8eed55c into master Jul 7, 2026
19 checks passed
@DaniPopes DaniPopes deleted the auto-opt/20260623-reuse-shrink-sequence branch July 7, 2026 13:51
@github-project-automation github-project-automation Bot moved this to Done in Foundry Jul 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

3 participants