mirror of
https://github.com/Cuprate/cuprate.git
synced 2024-12-22 19:49:28 +00:00
caa08d5eaa
Some checks failed
Architecture mdBook / build (push) Has been cancelled
CI / fmt (push) Has been cancelled
CI / typo (push) Has been cancelled
CI / ci (macos-latest, stable, bash) (push) Has been cancelled
CI / ci (ubuntu-latest, stable, bash) (push) Has been cancelled
CI / ci (windows-latest, stable-x86_64-pc-windows-gnu, msys2 {0}) (push) Has been cancelled
Deny / audit (push) Has been cancelled
Doc / build (push) Has been cancelled
Doc / deploy (push) Has been cancelled
* add readme * readme, basic examples * name changes, bin impl * example, docs * book * add `cuprate-criterion-example` * docs, tracing * fix clippy * docs * lib readme * json-rpc benchmarks * add to crates.md * add `fixme` * fix `cargo b` failing this `cfg()` existing makes a regular workspace `cargo b` fail * fix cargo.toml
36 lines
1.1 KiB
Rust
36 lines
1.1 KiB
Rust
use tracing::{info, instrument, trace};
|
|
|
|
use cuprate_benchmark_lib::Benchmark;
|
|
|
|
use crate::timings::Timings;
|
|
|
|
/// Run a [`Benchmark`] and record its timing.
|
|
#[instrument(skip_all)]
|
|
pub(crate) fn run_benchmark<B: Benchmark>(timings: &mut Timings) {
|
|
// Get the benchmark name.
|
|
let name = B::name();
|
|
trace!("Running benchmark: {name}");
|
|
|
|
// Setup the benchmark input.
|
|
let input = B::SETUP();
|
|
|
|
// Sleep before running the benchmark.
|
|
trace!("Pre-benchmark, sleeping for: {:?}", B::POST_SLEEP_DURATION);
|
|
std::thread::sleep(B::PRE_SLEEP_DURATION);
|
|
|
|
// Run/time the benchmark.
|
|
let now = std::time::Instant::now();
|
|
B::MAIN(input);
|
|
let time = now.elapsed().as_secs_f32();
|
|
|
|
// Print the benchmark timings.
|
|
info!("{name:>34} ... {time}");
|
|
assert!(
|
|
timings.insert(name, time).is_none(),
|
|
"There were 2 benchmarks with the same name - this collides the final output: {name}",
|
|
);
|
|
|
|
// Sleep for a cooldown period after the benchmark run.
|
|
trace!("Post-benchmark, sleeping for: {:?}", B::POST_SLEEP_DURATION);
|
|
std::thread::sleep(B::POST_SLEEP_DURATION);
|
|
}
|