pub mod analysis;
pub mod burntpix;
pub mod evm_build;
pub mod gas_cost_estimator;
pub mod snailtracer;
pub mod subcall;
pub mod transfer;
pub mod transfer_multi;
use clap::{Parser, ValueEnum};
#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, ValueEnum)]
pub enum BenchName {
Analysis,
Burntpix,
Snailtracer,
Subcall,
Transfer,
EvmBuild,
TransferMulti,
GasCostEstimator,
}
impl BenchName {
pub const ALL: &[BenchName] = &[
BenchName::Analysis,
BenchName::Burntpix,
BenchName::Snailtracer,
BenchName::Subcall,
BenchName::Transfer,
BenchName::TransferMulti,
BenchName::EvmBuild,
BenchName::GasCostEstimator,
];
pub fn as_str(self) -> &'static str {
match self {
BenchName::Analysis => "analysis",
BenchName::Burntpix => "burntpix",
BenchName::Snailtracer => "snailtracer",
BenchName::Subcall => "subcall",
BenchName::Transfer => "transfer",
BenchName::EvmBuild => "evm-build",
BenchName::TransferMulti => "transfer-multi",
BenchName::GasCostEstimator => "gas-cost-estimator",
}
}
}
#[derive(Parser, Debug)]
pub struct Cmd {
#[arg(value_enum)]
pub name: BenchName,
#[arg(short = 'w', long)]
pub warmup: Option<f64>,
#[arg(short = 'm', long)]
pub time: Option<f64>,
#[arg(short = 's', long)]
pub samples: Option<usize>,
}
impl Cmd {
pub fn run(&self) {
let mut criterion = criterion::Criterion::default()
.warm_up_time(std::time::Duration::from_secs_f64(
self.warmup.unwrap_or(0.5),
))
.measurement_time(std::time::Duration::from_secs_f64(self.time.unwrap_or(1.5)))
.sample_size(self.samples.unwrap_or(10));
match self.name {
BenchName::Analysis => {
analysis::run(&mut criterion);
}
BenchName::Burntpix => {
burntpix::run(&mut criterion);
}
BenchName::Snailtracer => {
snailtracer::run(&mut criterion);
}
BenchName::Subcall => {
subcall::run(&mut criterion);
}
BenchName::Transfer => {
transfer::run(&mut criterion);
}
BenchName::EvmBuild => {
evm_build::run(&mut criterion);
}
BenchName::TransferMulti => {
transfer_multi::run(&mut criterion);
}
BenchName::GasCostEstimator => {
gas_cost_estimator::run(&mut criterion);
}
}
}
}