From 45d55b7ea557d5ddb785e01a49ed2e131afbd690 Mon Sep 17 00:00:00 2001 From: Shaun Wang <spxwang@gmail.com> Date: Fri, 30 Apr 2021 11:43:41 +1200 Subject: [PATCH] Remove common parameters from benchmarking. (#469) --- benchmarking/src/lib.rs | 131 ++------------------------------------ benchmarking/src/tests.rs | 11 +--- 2 files changed, 10 insertions(+), 132 deletions(-) diff --git a/benchmarking/src/lib.rs b/benchmarking/src/lib.rs index 4777a2a..0e52fa8 100644 --- a/benchmarking/src/lib.rs +++ b/benchmarking/src/lib.rs @@ -54,11 +54,6 @@ pub use sp_runtime::traits::Zero; /// for arbitrary expresions to be evaluated in a benchmark (including for /// example, `on_initialize`). /// -/// The macro allows for common parameters whose ranges and instancing -/// expressions may be drawn upon (or not) by each arm. Syntax is available to -/// allow for only the range to be drawn upon if desired, allowing an -/// alternative instancing expression to be given. -/// /// Note that the ranges are *inclusive* on both sides. This is in contrast to /// ranges in Rust which are left-inclusive right-exclusive. /// @@ -68,9 +63,6 @@ pub use sp_runtime::traits::Zero; /// between the two pre- and post- code blocks, but do not leak from the /// interior of any instancing expressions. /// -/// Any common parameters that are unused in an arm do not have their instancing -/// expressions evaluated. -/// /// Example: /// ```ignore /// use path_to_node_runtime::MyRuntime; @@ -87,21 +79,20 @@ pub use sp_runtime::traits::Zero; /// // size `l`, which we allow to be initialized as usual. /// foo { /// let caller = account::<AccountId>(b"caller", 0, benchmarks_seed); -/// let l = ...; +/// let l in 1 .. MAX_LENGTH => initialize_l(l); /// }: _(Origin::Signed(caller), vec![0u8; l]) /// /// // second dispatchable: bar; this is a root dispatchable and accepts a `u8` vector of size -/// // `l`. We don't want it pre-initialized like before so we override using the `=> ()` notation. +/// // `l`. /// // In this case, we explicitly name the call using `bar` instead of `_`. /// bar { -/// let l = _ .. _ => (); +/// let l in 1 .. MAX_LENGTH => initialize_l(l); /// }: bar(Origin::Root, vec![0u8; l]) /// /// // third dispatchable: baz; this is a user dispatchable. It isn't dependent on length like the /// // other two but has its own complexity `c` that needs setting up. It uses `caller` (in the /// // pre-instancing block) within the code block. This is only allowed in the param instancers -/// // of arms. Instancers of common params cannot optimistically draw upon hypothetical variables -/// // that the arm's pre-instancing code block might have declared. +/// // of arms. /// baz1 { /// let caller = account::<AccountId>(b"caller", 0, benchmarks_seed); /// let c = 0 .. 10 => setup_c(&caller, c); @@ -168,18 +159,12 @@ pub use sp_runtime::traits::Zero; macro_rules! runtime_benchmarks { ( { $runtime:ident, $pallet:ident } - _ { - $( - let $common:ident in $common_from:tt .. $common_to:expr => $common_instancer:expr; - )* - } $( $rest:tt )* ) => { $crate::benchmarks_iter!( { } $runtime $pallet - { $( { $common , $common_from , $common_to , $common_instancer } )* } ( ) ( ) $( $rest )* @@ -192,18 +177,12 @@ macro_rules! runtime_benchmarks { macro_rules! runtime_benchmarks_instance { ( { $runtime:ident, $pallet:ident, $instance:ident } - _ { - $( - let $common:ident in $common_from:tt .. $common_to:expr => $common_instancer:expr; - )* - } $( $rest:tt )* ) => { $crate::benchmarks_iter!( { $instance } $runtime $pallet - { $( { $common , $common_from , $common_to , $common_instancer } )* } ( ) ( ) $( $rest )* @@ -219,7 +198,6 @@ macro_rules! benchmarks_iter { { $( $instance:ident )? } $runtime:ident $pallet:ident - { $( $common:tt )* } ( $( $names:tt )* ) ( $( $names_extra:tt )* ) #[extra] @@ -230,7 +208,6 @@ macro_rules! benchmarks_iter { { $( $instance)? } $runtime $pallet - { $( $common )* } ( $( $names )* ) ( $( $names_extra )* $name ) $name @@ -242,7 +219,6 @@ macro_rules! benchmarks_iter { { $( $instance:ident )? } $runtime:ident $pallet:ident - { $( $common:tt )* } ( $( $names:tt )* ) // This contains $( $( { $instance } )? $name:ident )* ( $( $names_extra:tt )* ) $name:ident { $( $code:tt )* }: _ ( $origin:expr $( , $arg:expr )* ) @@ -253,7 +229,6 @@ macro_rules! benchmarks_iter { { $( $instance)? } $runtime $pallet - { $( $common )* } ( $( $names )* ) ( $( $names_extra )* ) $name { $( $code )* }: $name ( $origin $( , $arg )* ) @@ -266,7 +241,6 @@ macro_rules! benchmarks_iter { { $( $instance:ident )? } $runtime:ident $pallet:ident - { $( $common:tt )* } ( $( $names:tt )* ) ( $( $names_extra:tt )* ) $name:ident { $( $code:tt )* }: $dispatch:ident ( $origin:expr $( , $arg:expr )* ) @@ -277,7 +251,6 @@ macro_rules! benchmarks_iter { { $( $instance)? } $runtime $pallet - { $( $common )* } ( $( $names )* ) ( $( $names_extra )* ) $name { $( $code )* }: { @@ -297,7 +270,6 @@ macro_rules! benchmarks_iter { { $( $instance:ident )? } $runtime:ident $pallet:ident - { $( $common:tt )* } ( $( $names:tt )* ) ( $( $names_extra:tt )* ) $name:ident { $( $code:tt )* }: $eval:block @@ -309,7 +281,6 @@ macro_rules! benchmarks_iter { $name $runtime $pallet - { $( $common )* } { } { $eval } { $( $code )* } @@ -328,7 +299,6 @@ macro_rules! benchmarks_iter { { $( $instance)? } $runtime $pallet - { $( $common )* } ( $( $names )* { $( $instance )? } $name ) ( $( $names_extra )* ) $( $rest )* @@ -339,7 +309,6 @@ macro_rules! benchmarks_iter { { $( $instance:ident )? } $runtime:ident $pallet:ident - { $( $common:tt )* } ( $( $names:tt )* ) ( $( $names_extra:tt )* ) ) => { @@ -362,7 +331,6 @@ macro_rules! benchmarks_iter { { $( $instance:ident )? } $runtime:ident $pallet:ident - { $( $common:tt )* } ( $( $names:tt )* ) ( $( $names_extra:tt )* ) $name:ident { $( $code:tt )* }: _ ( $origin:expr $( , $arg:expr )* ) @@ -372,7 +340,6 @@ macro_rules! benchmarks_iter { { $( $instance)? } $runtime $pallet - { $( $common )* } ( $( $names )* ) ( $( $names_extra )* ) $name { $( $code )* }: _ ( $origin $( , $arg )* ) @@ -385,7 +352,6 @@ macro_rules! benchmarks_iter { { $( $instance:ident )? } $runtime:ident $pallet:ident - { $( $common:tt )* } ( $( $names:tt )* ) ( $( $names_extra:tt )* ) $name:ident { $( $code:tt )* }: $dispatch:ident ( $origin:expr $( , $arg:expr )* ) @@ -395,7 +361,6 @@ macro_rules! benchmarks_iter { { $( $instance)? } $runtime $pallet - { $( $common )* } ( $( $names )* ) ( $( $names_extra )* ) $name { $( $code )* }: $dispatch ( $origin $( , $arg )* ) @@ -408,7 +373,6 @@ macro_rules! benchmarks_iter { { $( $instance:ident )? } $runtime:ident $pallet:ident - { $( $common:tt )* } ( $( $names:tt )* ) ( $( $names_extra:tt )* ) $name:ident { $( $code:tt )* }: $eval:block @@ -418,7 +382,6 @@ macro_rules! benchmarks_iter { { $( $instance)? } $runtime $pallet - { $( $common )* } ( $( $names )* ) ( $( $names_extra )* ) $name { $( $code )* }: $eval @@ -437,7 +400,6 @@ macro_rules! benchmark_backend { $name:ident $runtime:ident $pallet:ident - { $( $common:tt )* } { $( PRE { $( $pre_parsed:tt )* } )* } { $eval:block } { @@ -451,7 +413,6 @@ macro_rules! benchmark_backend { $name $runtime $pallet - { $( $common )* } { $( PRE { $( $pre_parsed )* } )* PRE { $pre_id , $pre_ty , $pre_ex } @@ -466,7 +427,6 @@ macro_rules! benchmark_backend { $name:ident $runtime:ident $pallet:ident - { $( $common:tt )* } { $( $parsed:tt )* } { $eval:block } { @@ -480,7 +440,6 @@ macro_rules! benchmark_backend { $name $runtime $pallet - { $( $common )* } { $( $parsed )* PARAM { $param , $param_from , $param_to , $param_instancer } @@ -490,79 +449,12 @@ macro_rules! benchmark_backend { $postcode } }; - // mutation arm to look after defaulting to a common param - ( - { $( $instance:ident )? } - $name:ident - $runtime:ident - $pallet:ident - { $( { $common:ident , $common_from:tt , $common_to:expr , $common_instancer:expr } )* } - { $( $parsed:tt )* } - { $eval:block } - { - let $param:ident in ...; - $( $rest:tt )* - } - $postcode:block - ) => { - $crate::benchmark_backend! { - { $( $instance)? } - $name - $runtime - $pallet - { $( { $common , $common_from , $common_to , $common_instancer } )* } - { $( $parsed )* } - { $eval } - { - let $param - in ({ $( let $common = $common_from; )* $param }) - .. ({ $( let $common = $common_to; )* $param }) - => ({ $( let $common = || -> Result<(), &'static str> { $common_instancer ; Ok(()) }; )* $param()? }); - $( $rest )* - } - $postcode - } - }; - // mutation arm to look after defaulting only the range to common param - ( - { $( $instance:ident )? } - $name:ident - $runtime:ident - $pallet:ident - { $( { $common:ident , $common_from:tt , $common_to:expr , $common_instancer:expr } )* } - { $( $parsed:tt )* } - { $eval:block } - { - let $param:ident in _ .. _ => $param_instancer:expr ; - $( $rest:tt )* - } - $postcode:block - ) => { - $crate::benchmark_backend! { - { $( $instance)? } - $name - $runtime - $pallet - { $( { $common , $common_from , $common_to , $common_instancer } )* } - { $( $parsed )* } - { $eval } - { - let $param - in ({ $( let $common = $common_from; )* $param }) - .. ({ $( let $common = $common_to; )* $param }) - => $param_instancer ; - $( $rest )* - } - $postcode - } - }; // mutation arm to look after a single tt for param_from. ( { $( $instance:ident )? } $name:ident $runtime:ident $pallet:ident - { $( $common:tt )* } { $( $parsed:tt )* } { $eval:block } { @@ -576,7 +468,6 @@ macro_rules! benchmark_backend { $name $runtime $pallet - { $( $common )* } { $( $parsed )* } { $eval } { @@ -592,7 +483,6 @@ macro_rules! benchmark_backend { $name:ident $runtime:ident $pallet:ident - { $( $common:tt )* } { $( $parsed:tt )* } { $eval:block } { @@ -606,7 +496,6 @@ macro_rules! benchmark_backend { $name $runtime $pallet - { $( $common )* } { $( $parsed )* } { $eval } { @@ -622,7 +511,6 @@ macro_rules! benchmark_backend { $name:ident $runtime:ident $pallet:ident - { $( $common:tt )* } { $( $parsed:tt )* } { $eval:block } { @@ -636,7 +524,6 @@ macro_rules! benchmark_backend { $name $runtime $pallet - { $( $common )* } { $( $parsed )* } { $eval } { @@ -652,7 +539,6 @@ macro_rules! benchmark_backend { $name:ident $runtime:ident $pallet:ident - { $( { $common:ident , $common_from:tt , $common_to:expr , $common_instancer:expr } )* } { $( PRE { $pre_id:tt , $pre_ty:ty , $pre_ex:expr } )* $( PARAM { $param:ident , $param_from:expr , $param_to:expr , $param_instancer:expr } )* @@ -678,9 +564,6 @@ macro_rules! benchmark_backend { components: &[($crate::BenchmarkParameter, u32)], verify: bool ) -> Result<Box<dyn FnOnce() -> Result<(), &'static str>>, &'static str> { - $( - let $common = $common_from; - )* $( // Prepare instance let $param = components.iter() @@ -1050,15 +933,15 @@ macro_rules! impl_benchmark_test { /// ``` /// /// The `whitelist` is a parameter you pass to control the DB read/write -/// tracking. We use a vector of [TrackedStorageKey], which is a simple struct -/// used to set if a key has been read or written to. +/// tracking. We use a vector of +/// [TrackedStorageKey](./struct.TrackedStorageKey.html), which is a simple +/// struct used to set if a key has been read or written to. /// /// For values that should be skipped entirely, we can just pass `key.into()`. /// For example: /// /// ``` /// use frame_benchmarking::TrackedStorageKey; -/// use hex_literal; /// let whitelist: Vec<TrackedStorageKey> = vec![ /// // Block Number /// hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac").to_vec().into(), diff --git a/benchmarking/src/tests.rs b/benchmarking/src/tests.rs index 333a776..455b9f7 100644 --- a/benchmarking/src/tests.rs +++ b/benchmarking/src/tests.rs @@ -116,13 +116,8 @@ fn new_test_ext() -> sp_io::TestExternalities { runtime_benchmarks! { { Test, test } - _ { - // Define a common range for `b`. - let b in 1 .. 1000 => (); - } - set_value { - let b in ...; + let b in 1 .. 1000; let caller = account::<AccountId>("caller", 0, 0); }: _ (RawOrigin::Signed(caller), b.into()) verify { @@ -130,7 +125,7 @@ runtime_benchmarks! { } other_name { - let b in ...; + let b in 1 .. 1000; }: dummy (RawOrigin::None, b.into()) sort_vector { @@ -146,7 +141,7 @@ runtime_benchmarks! { } bad_origin { - let b in ...; + let b in 1 .. 1000; let caller = account::<AccountId>("caller", 0, 0); }: dummy (RawOrigin::Signed(caller), b.into()) -- GitLab