Add steps setting to benchmarking CLI (#5033)

* Add steps setting to CLI, use max value to hit worst case.

* Bump impl_version.

* Apply review suggestion.
This commit is contained in:
Marcio Diaz
2020-02-25 15:51:25 +01:00
committed by GitHub
parent 36770979bb
commit d024364503
4 changed files with 20 additions and 13 deletions
+12 -6
View File
@@ -140,7 +140,7 @@ macro_rules! impl_benchmark {
$( $name:ident ),*
) => {
impl<T: Trait> $crate::Benchmarking<$crate::BenchmarkResults> for Module<T> {
fn run_benchmark(extrinsic: Vec<u8>, steps: u32, repeat: u32) -> Result<Vec<$crate::BenchmarkResults>, &'static str> {
fn run_benchmark(extrinsic: Vec<u8>, steps: Vec<u32>, repeat: u32) -> Result<Vec<$crate::BenchmarkResults>, &'static str> {
// Map the input to the selected benchmark.
let extrinsic = sp_std::str::from_utf8(extrinsic.as_slice())
.map_err(|_| "Could not find extrinsic")?;
@@ -153,15 +153,21 @@ macro_rules! impl_benchmark {
$crate::benchmarking::commit_db();
$crate::benchmarking::wipe_db();
// first one is set_identity.
let components = <SelectedBenchmark as $crate::BenchmarkingSetup<T, crate::Call<T>, RawOrigin<T::AccountId>>>::components(&selected_benchmark);
// results go here
let mut results: Vec<$crate::BenchmarkResults> = Vec::new();
// Default number of steps for a component.
let mut prev_steps = &10;
// Select the component we will be benchmarking. Each component will be benchmarked.
for (name, low, high) in components.iter() {
for (idx, (name, low, high)) in components.iter().enumerate() {
// Get the number of steps for this component.
let steps = steps.get(idx).unwrap_or(&prev_steps);
prev_steps = steps;
// Create up to `STEPS` steps for that component between high and low.
let step_size = ((high - low) / steps).max(1);
let num_of_steps = (high - low) / step_size;
let num_of_steps = (high - low) / step_size + 1;
for s in 0..num_of_steps {
// This is the value we will be testing for component `name`
let component_value = low + step_size * s;
@@ -169,7 +175,7 @@ macro_rules! impl_benchmark {
// Select the mid value for all the other components.
let c: Vec<($crate::BenchmarkParameter, u32)> = components.iter()
.map(|(n, l, h)|
(*n, if n == name { component_value } else { (h - l) / 2 + l })
(*n, if n == name { component_value } else { *h })
).collect();
// Run the benchmark `repeat` times.