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