mirror of
https://github.com/salsa-rs/salsa.git
synced 2025-01-22 04:44:29 +00:00
Merge pull request #643 from Veykril/veykril/push-xkzvyxqwxurm
Fix compare benchmarks not benching the right things
This commit is contained in:
commit
6c0dd82119
1 changed files with 68 additions and 35 deletions
|
@ -1,4 +1,8 @@
|
|||
use codspeed_criterion_compat::{criterion_group, criterion_main, BenchmarkId, Criterion};
|
||||
use std::mem::transmute;
|
||||
|
||||
use codspeed_criterion_compat::{
|
||||
criterion_group, criterion_main, BatchSize, BenchmarkId, Criterion,
|
||||
};
|
||||
use salsa::Setter;
|
||||
|
||||
#[salsa::input]
|
||||
|
@ -26,25 +30,30 @@ fn mutating_inputs(c: &mut Criterion) {
|
|||
codspeed_criterion_compat::measurement::WallTime,
|
||||
> = c.benchmark_group("Mutating Inputs");
|
||||
|
||||
let mut db = salsa::DatabaseImpl::default();
|
||||
|
||||
for n in &[10, 20, 30] {
|
||||
let base_string = "hello, world!".to_owned();
|
||||
let base_len = base_string.len();
|
||||
|
||||
let string = base_string.clone().repeat(*n);
|
||||
let new_len = string.len();
|
||||
|
||||
group.bench_function(BenchmarkId::new("mutating", n), |b| {
|
||||
b.iter(|| {
|
||||
let input = Input::new(&db, base_string.clone());
|
||||
let actual_len = length(&db, input);
|
||||
assert_eq!(base_len, actual_len);
|
||||
b.iter_batched_ref(
|
||||
|| {
|
||||
let db = salsa::DatabaseImpl::default();
|
||||
let base_string = "hello, world!".to_owned();
|
||||
let base_len = base_string.len();
|
||||
|
||||
input.set_text(&mut db).to(string.clone());
|
||||
let actual_len = length(&db, input);
|
||||
assert_eq!(new_len, actual_len);
|
||||
})
|
||||
let string = base_string.clone().repeat(*n);
|
||||
let new_len = string.len();
|
||||
|
||||
let input = Input::new(&db, base_string.clone());
|
||||
let actual_len = length(&db, input);
|
||||
assert_eq!(base_len, actual_len);
|
||||
|
||||
(db, input, string, new_len)
|
||||
},
|
||||
|&mut (ref mut db, input, ref string, new_len)| {
|
||||
input.set_text(db).to(string.clone());
|
||||
let actual_len = length(db, input);
|
||||
assert_eq!(new_len, actual_len);
|
||||
},
|
||||
BatchSize::SmallInput,
|
||||
)
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -56,34 +65,58 @@ fn inputs(c: &mut Criterion) {
|
|||
codspeed_criterion_compat::measurement::WallTime,
|
||||
> = c.benchmark_group("Mutating Inputs");
|
||||
|
||||
let db = salsa::DatabaseImpl::default();
|
||||
|
||||
group.bench_function(BenchmarkId::new("new", "InternedInput"), |b| {
|
||||
b.iter(|| {
|
||||
let input: InternedInput = InternedInput::new(&db, "hello, world!".to_owned());
|
||||
interned_length(&db, input);
|
||||
})
|
||||
b.iter_batched_ref(
|
||||
salsa::DatabaseImpl::default,
|
||||
|db| {
|
||||
let input: InternedInput = InternedInput::new(db, "hello, world!".to_owned());
|
||||
interned_length(db, input);
|
||||
},
|
||||
BatchSize::SmallInput,
|
||||
)
|
||||
});
|
||||
|
||||
group.bench_function(BenchmarkId::new("amortized", "InternedInput"), |b| {
|
||||
let input = InternedInput::new(&db, "hello, world!".to_owned());
|
||||
let _ = interned_length(&db, input);
|
||||
|
||||
b.iter(|| interned_length(&db, input));
|
||||
b.iter_batched_ref(
|
||||
|| {
|
||||
let db = salsa::DatabaseImpl::default();
|
||||
// we can't pass this along otherwise, and the lifetime is generally informational
|
||||
let input: InternedInput<'static> =
|
||||
unsafe { transmute(InternedInput::new(&db, "hello, world!".to_owned())) };
|
||||
let _ = interned_length(&db, input);
|
||||
(db, input)
|
||||
},
|
||||
|&mut (ref db, input)| {
|
||||
interned_length(db, input);
|
||||
},
|
||||
BatchSize::SmallInput,
|
||||
)
|
||||
});
|
||||
|
||||
group.bench_function(BenchmarkId::new("new", "Input"), |b| {
|
||||
b.iter(|| {
|
||||
let input = Input::new(&db, "hello, world!".to_owned());
|
||||
length(&db, input);
|
||||
})
|
||||
b.iter_batched_ref(
|
||||
salsa::DatabaseImpl::default,
|
||||
|db| {
|
||||
let input = Input::new(db, "hello, world!".to_owned());
|
||||
length(db, input);
|
||||
},
|
||||
BatchSize::SmallInput,
|
||||
)
|
||||
});
|
||||
|
||||
group.bench_function(BenchmarkId::new("amortized", "Input"), |b| {
|
||||
let input = Input::new(&db, "hello, world!".to_owned());
|
||||
let _ = length(&db, input);
|
||||
|
||||
b.iter(|| length(&db, input));
|
||||
b.iter_batched_ref(
|
||||
|| {
|
||||
let db = salsa::DatabaseImpl::default();
|
||||
let input = Input::new(&db, "hello, world!".to_owned());
|
||||
let _ = length(&db, input);
|
||||
(db, input)
|
||||
},
|
||||
|&mut (ref db, input)| {
|
||||
length(db, input);
|
||||
},
|
||||
BatchSize::SmallInput,
|
||||
)
|
||||
});
|
||||
|
||||
group.finish();
|
||||
|
|
Loading…
Reference in a new issue