use crate::SubMsPerfHarness;
#[derive(Debug, Clone)]
pub struct SubMsBenchParams {
pub entries: usize,
pub warmup: usize,
pub seed: u64,
pub sample_cap: usize,
}
impl Default for SubMsBenchParams {
fn default() -> Self {
Self {
entries: 50_000,
warmup: 5_000,
seed: 0,
sample_cap: 500,
}
}
}
pub trait SubMsRecipe {
fn name(&self) -> &str;
fn run(&self, h: &mut SubMsPerfHarness, params: &SubMsBenchParams);
}
pub fn benchmark<R: SubMsRecipe + ?Sized>(
recipe: &R,
params: &SubMsBenchParams,
) -> SubMsPerfHarness {
let mut h = SubMsPerfHarness::new(recipe.name(), "rust");
h.input("entries", ¶ms.entries.to_string());
h.input("warmup", ¶ms.warmup.to_string());
h.input("seed", ¶ms.seed.to_string());
h.set_sample_cap(params.sample_cap);
recipe.run(&mut h, params);
h
}