From d842f23b0364d93f48db33d154a79514f133100b Mon Sep 17 00:00:00 2001 From: DaniPopes <57450786+DaniPopes@users.noreply.github.com> Date: Mon, 26 May 2025 19:20:41 +0200 Subject: [PATCH 1/2] chore: remove unnecessary black_box in criterion The original code only uses black_box when dropping, not inside of the measurement. --- crates/criterion_compat/src/compat/bencher.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/crates/criterion_compat/src/compat/bencher.rs b/crates/criterion_compat/src/compat/bencher.rs index 6eaaab0d..c50af643 100644 --- a/crates/criterion_compat/src/compat/bencher.rs +++ b/crates/criterion_compat/src/compat/bencher.rs @@ -67,11 +67,11 @@ impl<'a> Bencher<'a> { for i in 0..codspeed::codspeed::WARMUP_RUNS + 1 { let input = black_box(setup()); let output = if i < codspeed::codspeed::WARMUP_RUNS { - black_box(routine(input)) + routine(input) } else { let input = black_box(setup()); codspeed.start_benchmark(self.uri.as_str()); - let output = black_box(routine(input)); + let output = routine(input); codspeed.end_benchmark(); output }; @@ -219,10 +219,10 @@ impl<'a, 'b, A: AsyncExecutor> AsyncBencher<'a, 'b, A> { for i in 0..codspeed::codspeed::WARMUP_RUNS + 1 { let input = black_box(setup()); let output = if i < codspeed::codspeed::WARMUP_RUNS { - black_box(routine(input).await) + routine(input).await } else { codspeed.start_benchmark(b.uri.as_str()); - let output = black_box(routine(input).await); + let output = routine(input).await; codspeed.end_benchmark(); output }; From b71c93b79928d5c01c7d3f317c19b3d3454955b0 Mon Sep 17 00:00:00 2001 From: Arthur Pastel Date: Fri, 27 Jun 2025 16:27:04 +0200 Subject: [PATCH 2/2] chore: remove unnecessary black_box in divan and bencher compat layers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Apply the same optimization from PR 98 to both divan and bencher compat layers: - Remove black_box around routine calls during measurement - Only apply black_box to outputs after measurement ends - Reduces stack usage and eliminates unnecessary memory operations - Improves benchmark performance by avoiding artificial overhead 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- crates/bencher_compat/src/compat.rs | 3 ++- crates/divan_compat/src/compat/bench/mod.rs | 6 ++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/crates/bencher_compat/src/compat.rs b/crates/bencher_compat/src/compat.rs index 76a76033..35147788 100644 --- a/crates/bencher_compat/src/compat.rs +++ b/crates/bencher_compat/src/compat.rs @@ -38,8 +38,9 @@ impl Bencher { black_box(inner()); } self.codspeed.start_benchmark(uri.as_str()); - black_box(inner()); + let output = inner(); self.codspeed.end_benchmark(); + black_box(output); } } diff --git a/crates/divan_compat/src/compat/bench/mod.rs b/crates/divan_compat/src/compat/bench/mod.rs index 48910ed1..5ffd3fd3 100644 --- a/crates/divan_compat/src/compat/bench/mod.rs +++ b/crates/divan_compat/src/compat/bench/mod.rs @@ -97,8 +97,9 @@ where let mut gen_input = self.config.gen_input.borrow_mut(); let input = gen_input(); codspeed.start_benchmark(self.uri.as_str()); - divan::black_box(benched(input)); + let output = benched(input); codspeed.end_benchmark(); + divan::black_box(output); } pub fn bench_local_refs(self, mut benched: B) @@ -110,7 +111,8 @@ where let mut input = gen_input(); codspeed.start_benchmark(self.uri.as_str()); - divan::black_box(benched(&mut input)); + let output = benched(&mut input); codspeed.end_benchmark(); + divan::black_box(output); } }