diff --git a/bencher/src/lib.rs b/bencher/src/lib.rs index 8d410c4..ac687f5 100644 --- a/bencher/src/lib.rs +++ b/bencher/src/lib.rs @@ -13,7 +13,6 @@ pub type Bench<'a> = (&'a str, &'a Instruction, &'a [(Pubkey, AccountSharedData) pub struct MolluskComputeUnitBencher<'a> { benches: Vec>, - iterations: u64, mollusk: Mollusk, must_pass: bool, out_dir: PathBuf, @@ -25,7 +24,6 @@ impl<'a> MolluskComputeUnitBencher<'a> { out_dir.push("benches"); Self { benches: Vec::new(), - iterations: 25, // Default to 25 iterations. mollusk, must_pass: false, out_dir, @@ -37,11 +35,6 @@ impl<'a> MolluskComputeUnitBencher<'a> { self } - pub fn iterations(mut self, iterations: u64) -> Self { - self.iterations = iterations; - self - } - pub fn must_pass(mut self, must_pass: bool) -> Self { self.must_pass = must_pass; self @@ -56,28 +49,19 @@ impl<'a> MolluskComputeUnitBencher<'a> { let bench_results = std::mem::take(&mut self.benches) .into_iter() .map(|(name, instruction, accounts)| { - let mut results = vec![]; - - for _ in 0..self.iterations { - let result = self.mollusk.process_instruction(instruction, accounts); - - match result.program_result { - ProgramResult::Success => (), - _ => { - if self.must_pass { - panic!( - "Program execution failed, but `must_pass` was set. Error: \ - {:?}", - result.program_result - ); - } + let result = self.mollusk.process_instruction(instruction, accounts); + match result.program_result { + ProgramResult::Success => (), + _ => { + if self.must_pass { + panic!( + "Program execution failed, but `must_pass` was set. Error: {:?}", + result.program_result + ); } } - - results.push(result); } - - MolluskComputeUnitBenchResult::new(name, results) + MolluskComputeUnitBenchResult::new(name, result) }) .collect::>(); write_results(&self.out_dir, bench_results); diff --git a/bencher/src/result.rs b/bencher/src/result.rs index 85e11a1..d40e5be 100644 --- a/bencher/src/result.rs +++ b/bencher/src/result.rs @@ -7,21 +7,13 @@ use { pub(crate) struct MolluskComputeUnitBenchResult<'a> { name: &'a str, - mean: u64, + cus_consumed: u64, } impl<'a> MolluskComputeUnitBenchResult<'a> { - pub fn new(name: &'a str, results: Vec) -> Self { - let mut runs = results - .iter() - .map(|result| result.compute_units_consumed) - .collect::>(); - runs.sort(); - - let len = runs.len(); - let mean = runs.iter().sum::() / len as u64; - - Self { name, mean } + pub fn new(name: &'a str, result: InstructionResult) -> Self { + let cus_consumed = result.compute_units_consumed; + Self { name, cus_consumed } } } @@ -52,7 +44,7 @@ pub(crate) fn write_results(out_dir: &Path, results: Vec { - let delta = result.mean as i64 - prev.mean as i64; + let delta = result.cus_consumed as i64 - prev.cus_consumed as i64; if delta == 0 { "--".to_string() } else { @@ -71,7 +63,7 @@ pub(crate) fn write_results(out_dir: &Path, results: Vec String { format!( r#"#### Compute Units: {} -| Name | Mean | Delta | +| Name | CUs | Delta | |------|------|-------| "#, now @@ -104,9 +96,9 @@ fn parse_last_md_table(content: &str) -> Vec { let mut parts = line.split('|').skip(1).map(str::trim); let name = parts.next().unwrap(); - let mean = parts.next().unwrap().parse().unwrap(); + let cus_consumed = parts.next().unwrap().parse().unwrap(); - results.push(MolluskComputeUnitBenchResult { name, mean }); + results.push(MolluskComputeUnitBenchResult { name, cus_consumed }); } results diff --git a/bencher/tests/markdown.rs b/bencher/tests/markdown.rs index 74f60fa..c5765d0 100644 --- a/bencher/tests/markdown.rs +++ b/bencher/tests/markdown.rs @@ -24,7 +24,6 @@ fn test_markdown() { .bench(("bench4", &instruction, &accounts)) .bench(("bench5", &instruction, &accounts)) .bench(("bench6", &instruction, &accounts)) - .iterations(100) .must_pass(true) .out_dir("../target/benches") .execute();