1pub mod analysis;
2pub mod burntpix;
3pub mod evm_build;
4pub mod gas_cost_estimator;
5pub mod snailtracer;
6pub mod subcall;
7pub mod transfer;
8pub mod transfer_multi;
9
10use clap::{Parser, ValueEnum};
11
12#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, ValueEnum)]
13pub enum BenchName {
14 Analysis,
15 Burntpix,
16 Snailtracer,
17 Subcall,
18 Transfer,
19 EvmBuild,
20 TransferMulti,
21 GasCostEstimator,
22}
23
24impl BenchName {
25 pub const ALL: &[BenchName] = &[
26 BenchName::Analysis,
27 BenchName::Burntpix,
28 BenchName::Snailtracer,
29 BenchName::Subcall,
30 BenchName::Transfer,
31 BenchName::TransferMulti,
32 BenchName::EvmBuild,
33 BenchName::GasCostEstimator,
34 ];
35
36 pub fn as_str(self) -> &'static str {
37 match self {
38 BenchName::Analysis => "analysis",
39 BenchName::Burntpix => "burntpix",
40 BenchName::Snailtracer => "snailtracer",
41 BenchName::Subcall => "subcall",
42 BenchName::Transfer => "transfer",
43 BenchName::EvmBuild => "evm-build",
44 BenchName::TransferMulti => "transfer-multi",
45 BenchName::GasCostEstimator => "gas-cost-estimator",
46 }
47 }
48}
49
50#[derive(Parser, Debug)]
52pub struct Cmd {
53 #[arg(value_enum)]
54 pub name: BenchName,
55 #[arg(short = 'w', long)]
57 pub warmup: Option<f64>,
58 #[arg(short = 'm', long)]
60 pub time: Option<f64>,
61 #[arg(short = 's', long)]
63 pub samples: Option<usize>,
64}
65
66impl Cmd {
67 pub fn run(&self) {
69 let mut criterion = criterion::Criterion::default()
70 .warm_up_time(std::time::Duration::from_secs_f64(
71 self.warmup.unwrap_or(0.5),
72 ))
73 .measurement_time(std::time::Duration::from_secs_f64(self.time.unwrap_or(1.5)))
75 .sample_size(self.samples.unwrap_or(10));
76
77 match self.name {
78 BenchName::Analysis => {
79 analysis::run(&mut criterion);
80 }
81 BenchName::Burntpix => {
82 burntpix::run(&mut criterion);
83 }
84 BenchName::Snailtracer => {
85 snailtracer::run(&mut criterion);
86 }
87 BenchName::Subcall => {
88 subcall::run(&mut criterion);
89 }
90 BenchName::Transfer => {
91 transfer::run(&mut criterion);
92 }
93 BenchName::EvmBuild => {
94 evm_build::run(&mut criterion);
95 }
96 BenchName::TransferMulti => {
97 transfer_multi::run(&mut criterion);
98 }
99 BenchName::GasCostEstimator => {
100 gas_cost_estimator::run(&mut criterion);
101 }
102 }
103 }
104}