From 4f63cb01c768f7bd5bbf90128914960d9f254c33 Mon Sep 17 00:00:00 2001 From: thiolliere Date: Tue, 13 Jul 2021 18:28:28 +0200 Subject: [PATCH 1/8] optimize calls --- frame/lottery/src/lib.rs | 4 +-- frame/lottery/src/tests.rs | 22 ++++++------- frame/utility/src/lib.rs | 4 +-- frame/utility/src/tests.rs | 66 +++++++++++++++++++------------------- 4 files changed, 48 insertions(+), 48 deletions(-) diff --git a/frame/lottery/src/lib.rs b/frame/lottery/src/lib.rs index 53cadbf02b940..f269135bc7a1d 100644 --- a/frame/lottery/src/lib.rs +++ b/frame/lottery/src/lib.rs @@ -301,7 +301,7 @@ pub mod pallet { /// /// This extrinsic must be called by the Manager origin. #[pallet::weight(T::WeightInfo::set_calls(calls.len() as u32))] - pub fn set_calls(origin: OriginFor, calls: Vec<::Call>) -> DispatchResult { + pub fn set_calls(origin: OriginFor, calls: Vec::Call>>) -> DispatchResult { T::ManagerOrigin::ensure_origin(origin)?; ensure!(calls.len() <= T::MaxCalls::get() as usize, Error::::TooManyCalls); if calls.is_empty() { @@ -395,7 +395,7 @@ impl Pallet { } // Converts a vector of calls into a vector of call indices. - fn calls_to_indices(calls: &[::Call]) -> Result, DispatchError> { + fn calls_to_indices(calls: &[Box<::Call>]) -> Result, DispatchError> { let mut indices = Vec::with_capacity(calls.len()); for c in calls.iter() { let index = Self::call_to_index(c)?; diff --git a/frame/lottery/src/tests.rs b/frame/lottery/src/tests.rs index 38994b2864c62..de84503484f22 100644 --- a/frame/lottery/src/tests.rs +++ b/frame/lottery/src/tests.rs @@ -44,8 +44,8 @@ fn basic_end_to_end_works() { let length = 20; let delay = 5; let calls = vec![ - Call::Balances(BalancesCall::force_transfer(0, 0, 0)), - Call::Balances(BalancesCall::transfer(0, 0)), + Box::new(Call::Balances(BalancesCall::force_transfer(0, 0, 0))), + Box::new(Call::Balances(BalancesCall::transfer(0, 0))), ]; // Set calls for the lottery @@ -103,17 +103,17 @@ fn set_calls_works() { assert!(!CallIndices::::exists()); let calls = vec![ - Call::Balances(BalancesCall::force_transfer(0, 0, 0)), - Call::Balances(BalancesCall::transfer(0, 0)), + Box::new(Call::Balances(BalancesCall::force_transfer(0, 0, 0))), + Box::new(Call::Balances(BalancesCall::transfer(0, 0))), ]; assert_ok!(Lottery::set_calls(Origin::root(), calls)); assert!(CallIndices::::exists()); let too_many_calls = vec![ - Call::Balances(BalancesCall::force_transfer(0, 0, 0)), - Call::Balances(BalancesCall::transfer(0, 0)), - Call::System(SystemCall::remark(vec![])), + Box::new(Call::Balances(BalancesCall::force_transfer(0, 0, 0))), + Box::new(Call::Balances(BalancesCall::transfer(0, 0))), + Box::new(Call::System(SystemCall::remark(vec![]))), ]; assert_noop!( @@ -165,8 +165,8 @@ fn buy_ticket_works_as_simple_passthrough() { // Lottery is set up, but too expensive to enter, so `do_buy_ticket` fails. let calls = vec![ - Call::Balances(BalancesCall::force_transfer(0, 0, 0)), - Call::Balances(BalancesCall::transfer(0, 0)), + Box::new(Call::Balances(BalancesCall::force_transfer(0, 0, 0))), + Box::new(Call::Balances(BalancesCall::transfer(0, 0))), ]; assert_ok!(Lottery::set_calls(Origin::root(), calls)); @@ -205,8 +205,8 @@ fn buy_ticket_works() { new_test_ext().execute_with(|| { // Set calls for the lottery. let calls = vec![ - Call::System(SystemCall::remark(vec![])), - Call::Balances(BalancesCall::transfer(0, 0)), + Box::new(Call::System(SystemCall::remark(vec![]))), + Box::new(Call::Balances(BalancesCall::transfer(0, 0))), ]; assert_ok!(Lottery::set_calls(Origin::root(), calls)); diff --git a/frame/utility/src/lib.rs b/frame/utility/src/lib.rs index b8170ac8ba002..1b79edf39afe2 100644 --- a/frame/utility/src/lib.rs +++ b/frame/utility/src/lib.rs @@ -149,7 +149,7 @@ pub mod pallet { })] pub fn batch( origin: OriginFor, - calls: Vec<::Call>, + calls: Vec::Call>>, ) -> DispatchResultWithPostInfo { let is_root = ensure_root(origin.clone()).is_ok(); let calls_len = calls.len(); @@ -256,7 +256,7 @@ pub mod pallet { #[transactional] pub fn batch_all( origin: OriginFor, - calls: Vec<::Call>, + calls: Vec::Call>>, ) -> DispatchResultWithPostInfo { let is_root = ensure_root(origin.clone()).is_ok(); let calls_len = calls.len(); diff --git a/frame/utility/src/tests.rs b/frame/utility/src/tests.rs index aa6bea8a27d36..dcf519a2cc2b1 100644 --- a/frame/utility/src/tests.rs +++ b/frame/utility/src/tests.rs @@ -273,9 +273,9 @@ fn batch_with_root_works() { assert_eq!(Balances::free_balance(1), 10); assert_eq!(Balances::free_balance(2), 10); assert_ok!(Utility::batch(Origin::root(), vec![ - Call::Balances(BalancesCall::force_transfer(1, 2, 5)), - Call::Balances(BalancesCall::force_transfer(1, 2, 5)), - call, // Check filters are correctly bypassed + Box::new(Call::Balances(BalancesCall::force_transfer(1, 2, 5))), + Box::new(Call::Balances(BalancesCall::force_transfer(1, 2, 5))), + Box::new(call), // Check filters are correctly bypassed ])); assert_eq!(Balances::free_balance(1), 0); assert_eq!(Balances::free_balance(2), 20); @@ -290,8 +290,8 @@ fn batch_with_signed_works() { assert_eq!(Balances::free_balance(2), 10); assert_ok!( Utility::batch(Origin::signed(1), vec![ - Call::Balances(BalancesCall::transfer(2, 5)), - Call::Balances(BalancesCall::transfer(2, 5)) + Box::new(Call::Balances(BalancesCall::transfer(2, 5))), + Box::new(Call::Balances(BalancesCall::transfer(2, 5))) ]), ); assert_eq!(Balances::free_balance(1), 0); @@ -304,7 +304,7 @@ fn batch_with_signed_filters() { new_test_ext().execute_with(|| { assert_ok!( Utility::batch(Origin::signed(1), vec![ - Call::Balances(pallet_balances::Call::transfer_keep_alive(2, 1)) + Box::new(Call::Balances(pallet_balances::Call::transfer_keep_alive(2, 1))) ]), ); System::assert_last_event(utility::Event::BatchInterrupted(0, DispatchError::BadOrigin).into()); @@ -318,9 +318,9 @@ fn batch_early_exit_works() { assert_eq!(Balances::free_balance(2), 10); assert_ok!( Utility::batch(Origin::signed(1), vec![ - Call::Balances(BalancesCall::transfer(2, 5)), - Call::Balances(BalancesCall::transfer(2, 10)), - Call::Balances(BalancesCall::transfer(2, 5)), + Box::new(Call::Balances(BalancesCall::transfer(2, 5))), + Box::new(Call::Balances(BalancesCall::transfer(2, 10))), + Box::new(Call::Balances(BalancesCall::transfer(2, 5))), ]), ); assert_eq!(Balances::free_balance(1), 5); @@ -337,9 +337,9 @@ fn batch_weight_calculation_doesnt_overflow() { // 3 * 50% saturates to 100% let batch_call = Call::Utility(crate::Call::batch(vec![ - big_call.clone(), - big_call.clone(), - big_call.clone(), + Box::new(big_call.clone()), + Box::new(big_call.clone()), + Box::new(big_call.clone()), ])); assert_eq!(batch_call.get_dispatch_info().weight, Weight::max_value()); @@ -356,7 +356,7 @@ fn batch_handles_weight_refund() { // Full weight when ok let inner_call = Call::Example(ExampleCall::foobar(false, start_weight, None)); - let batch_calls = vec![inner_call; batch_len as usize]; + let batch_calls = vec![Box::new(inner_call); batch_len as usize]; let call = Call::Utility(UtilityCall::batch(batch_calls)); let info = call.get_dispatch_info(); let result = call.dispatch(Origin::signed(1)); @@ -365,7 +365,7 @@ fn batch_handles_weight_refund() { // Refund weight when ok let inner_call = Call::Example(ExampleCall::foobar(false, start_weight, Some(end_weight))); - let batch_calls = vec![inner_call; batch_len as usize]; + let batch_calls = vec![Box::new(inner_call); batch_len as usize]; let call = Call::Utility(UtilityCall::batch(batch_calls)); let info = call.get_dispatch_info(); let result = call.dispatch(Origin::signed(1)); @@ -376,7 +376,7 @@ fn batch_handles_weight_refund() { // Full weight when err let good_call = Call::Example(ExampleCall::foobar(false, start_weight, None)); let bad_call = Call::Example(ExampleCall::foobar(true, start_weight, None)); - let batch_calls = vec![good_call, bad_call]; + let batch_calls = vec![Box::new(good_call), Box::new(bad_call)]; let call = Call::Utility(UtilityCall::batch(batch_calls)); let info = call.get_dispatch_info(); let result = call.dispatch(Origin::signed(1)); @@ -388,7 +388,7 @@ fn batch_handles_weight_refund() { // Refund weight when err let good_call = Call::Example(ExampleCall::foobar(false, start_weight, Some(end_weight))); let bad_call = Call::Example(ExampleCall::foobar(true, start_weight, Some(end_weight))); - let batch_calls = vec![good_call, bad_call]; + let batch_calls = vec![Box::new(good_call), Box::new(bad_call)]; let batch_len = batch_calls.len() as Weight; let call = Call::Utility(UtilityCall::batch(batch_calls)); let info = call.get_dispatch_info(); @@ -400,7 +400,7 @@ fn batch_handles_weight_refund() { // Partial batch completion let good_call = Call::Example(ExampleCall::foobar(false, start_weight, Some(end_weight))); let bad_call = Call::Example(ExampleCall::foobar(true, start_weight, Some(end_weight))); - let batch_calls = vec![good_call, bad_call.clone(), bad_call]; + let batch_calls = vec![Box::new(good_call), Box::new(bad_call.clone()), Box::new(bad_call)]; let call = Call::Utility(UtilityCall::batch(batch_calls)); let info = call.get_dispatch_info(); let result = call.dispatch(Origin::signed(1)); @@ -421,8 +421,8 @@ fn batch_all_works() { assert_eq!(Balances::free_balance(2), 10); assert_ok!( Utility::batch_all(Origin::signed(1), vec![ - Call::Balances(BalancesCall::transfer(2, 5)), - Call::Balances(BalancesCall::transfer(2, 5)) + Box::new(Call::Balances(BalancesCall::transfer(2, 5))), + Box::new(Call::Balances(BalancesCall::transfer(2, 5))) ]), ); assert_eq!(Balances::free_balance(1), 0); @@ -440,9 +440,9 @@ fn batch_all_revert() { assert_eq!(Balances::free_balance(2), 10); assert_noop!( Utility::batch_all(Origin::signed(1), vec![ - Call::Balances(BalancesCall::transfer(2, 5)), - Call::Balances(BalancesCall::transfer(2, 10)), - Call::Balances(BalancesCall::transfer(2, 5)), + Box::new(Call::Balances(BalancesCall::transfer(2, 5))), + Box::new(Call::Balances(BalancesCall::transfer(2, 10))), + Box::new(Call::Balances(BalancesCall::transfer(2, 5))), ]), DispatchErrorWithPostInfo { post_info: PostDispatchInfo { @@ -467,7 +467,7 @@ fn batch_all_handles_weight_refund() { // Full weight when ok let inner_call = Call::Example(ExampleCall::foobar(false, start_weight, None)); - let batch_calls = vec![inner_call; batch_len as usize]; + let batch_calls = vec![Box::new(inner_call); batch_len as usize]; let call = Call::Utility(UtilityCall::batch_all(batch_calls)); let info = call.get_dispatch_info(); let result = call.dispatch(Origin::signed(1)); @@ -476,7 +476,7 @@ fn batch_all_handles_weight_refund() { // Refund weight when ok let inner_call = Call::Example(ExampleCall::foobar(false, start_weight, Some(end_weight))); - let batch_calls = vec![inner_call; batch_len as usize]; + let batch_calls = vec![Box::new(inner_call); batch_len as usize]; let call = Call::Utility(UtilityCall::batch_all(batch_calls)); let info = call.get_dispatch_info(); let result = call.dispatch(Origin::signed(1)); @@ -487,7 +487,7 @@ fn batch_all_handles_weight_refund() { // Full weight when err let good_call = Call::Example(ExampleCall::foobar(false, start_weight, None)); let bad_call = Call::Example(ExampleCall::foobar(true, start_weight, None)); - let batch_calls = vec![good_call, bad_call]; + let batch_calls = vec![Box::new(good_call), Box::new(bad_call)]; let call = Call::Utility(UtilityCall::batch_all(batch_calls)); let info = call.get_dispatch_info(); let result = call.dispatch(Origin::signed(1)); @@ -498,7 +498,7 @@ fn batch_all_handles_weight_refund() { // Refund weight when err let good_call = Call::Example(ExampleCall::foobar(false, start_weight, Some(end_weight))); let bad_call = Call::Example(ExampleCall::foobar(true, start_weight, Some(end_weight))); - let batch_calls = vec![good_call, bad_call]; + let batch_calls = vec![Box::new(good_call), Box::new(bad_call)]; let batch_len = batch_calls.len() as Weight; let call = Call::Utility(UtilityCall::batch_all(batch_calls)); let info = call.get_dispatch_info(); @@ -509,7 +509,7 @@ fn batch_all_handles_weight_refund() { // Partial batch completion let good_call = Call::Example(ExampleCall::foobar(false, start_weight, Some(end_weight))); let bad_call = Call::Example(ExampleCall::foobar(true, start_weight, Some(end_weight))); - let batch_calls = vec![good_call, bad_call.clone(), bad_call]; + let batch_calls = vec![Box::new(good_call), Box::new(bad_call.clone()), Box::new(bad_call)]; let call = Call::Utility(UtilityCall::batch_all(batch_calls)); let info = call.get_dispatch_info(); let result = call.dispatch(Origin::signed(1)); @@ -528,9 +528,9 @@ fn batch_all_does_not_nest() { let batch_all = Call::Utility( UtilityCall::batch_all( vec![ - Call::Balances(BalancesCall::transfer(2, 1)), - Call::Balances(BalancesCall::transfer(2, 1)), - Call::Balances(BalancesCall::transfer(2, 1)), + Box::new(Call::Balances(BalancesCall::transfer(2, 1))), + Box::new(Call::Balances(BalancesCall::transfer(2, 1))), + Box::new(Call::Balances(BalancesCall::transfer(2, 1))), ] ) ); @@ -541,7 +541,7 @@ fn batch_all_does_not_nest() { assert_eq!(Balances::free_balance(2), 10); // A nested batch_all call will not pass the filter, and fail with `BadOrigin`. assert_noop!( - Utility::batch_all(Origin::signed(1), vec![batch_all.clone()]), + Utility::batch_all(Origin::signed(1), vec![Box::new(batch_all.clone())]), DispatchErrorWithPostInfo { post_info: PostDispatchInfo { actual_weight: Some(::WeightInfo::batch_all(1) + info.weight), @@ -553,10 +553,10 @@ fn batch_all_does_not_nest() { // And for those who want to get a little fancy, we check that the filter persists across // other kinds of dispatch wrapping functions... in this case `batch_all(batch(batch_all(..)))` - let batch_nested = Call::Utility(UtilityCall::batch(vec![batch_all])); + let batch_nested = Call::Utility(UtilityCall::batch(vec![Box::new(batch_all)])); // Batch will end with `Ok`, but does not actually execute as we can see from the event // and balances. - assert_ok!(Utility::batch_all(Origin::signed(1), vec![batch_nested])); + assert_ok!(Utility::batch_all(Origin::signed(1), vec![Box::new(batch_nested)])); System::assert_has_event(utility::Event::BatchInterrupted(0, DispatchError::BadOrigin).into()); assert_eq!(Balances::free_balance(1), 10); assert_eq!(Balances::free_balance(2), 10); From 6603341dfd4b62c205d602b70e370fa728fe419c Mon Sep 17 00:00:00 2001 From: thiolliere Date: Tue, 13 Jul 2021 18:43:29 +0200 Subject: [PATCH 2/8] fix benchmarks --- frame/lottery/src/benchmarking.rs | 6 +++--- frame/utility/Cargo.toml | 1 + frame/utility/src/benchmarking.rs | 10 ++++------ 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/frame/lottery/src/benchmarking.rs b/frame/lottery/src/benchmarking.rs index 8fe91088b84ea..f16ca19127e4a 100644 --- a/frame/lottery/src/benchmarking.rs +++ b/frame/lottery/src/benchmarking.rs @@ -35,11 +35,11 @@ fn setup_lottery(repeat: bool) -> Result<(), &'static str> { let delay = 5u32.into(); // Calls will be maximum length... let mut calls = vec![ - frame_system::Call::::set_code(vec![]).into(); + Box::new(frame_system::Call::::set_code(vec![]).into()); T::MaxCalls::get().saturating_sub(1) as usize ]; // Last call will be the match for worst case scenario. - calls.push(frame_system::Call::::remark(vec![]).into()); + calls.push(Box::new(frame_system::Call::::remark(vec![]).into())); let origin = T::ManagerOrigin::successful_origin(); Lottery::::set_calls(origin.clone(), calls)?; Lottery::::start_lottery(origin, price, length, delay, repeat)?; @@ -72,7 +72,7 @@ benchmarks! { set_calls { let n in 0 .. T::MaxCalls::get() as u32; - let calls = vec![frame_system::Call::::remark(vec![]).into(); n as usize]; + let calls = vec![Box::new(frame_system::Call::::remark(vec![]).into()); n as usize]; let call = Call::::set_calls(calls); let origin = T::ManagerOrigin::successful_origin(); diff --git a/frame/utility/Cargo.toml b/frame/utility/Cargo.toml index 8f9e18c610fb6..f98b1e3cd7453 100644 --- a/frame/utility/Cargo.toml +++ b/frame/utility/Cargo.toml @@ -39,6 +39,7 @@ std = [ ] runtime-benchmarks = [ "frame-benchmarking", + "frame-system/runtime-benchmarks", "frame-support/runtime-benchmarks", ] try-runtime = ["frame-support/try-runtime"] diff --git a/frame/utility/src/benchmarking.rs b/frame/utility/src/benchmarking.rs index 44019e48c1eb4..37e2d7a03d02b 100644 --- a/frame/utility/src/benchmarking.rs +++ b/frame/utility/src/benchmarking.rs @@ -32,10 +32,9 @@ fn assert_last_event(generic_event: ::Event) { benchmarks! { batch { let c in 0 .. 1000; - let mut calls: Vec<::Call> = Vec::new(); + let mut calls = Vec::new(); for i in 0 .. c { - let call = frame_system::Call::remark(vec![]).into(); - calls.push(call); + calls.push(Box::new(frame_system::Call::remark(vec![]).into())); } let caller = whitelisted_caller(); }: _(RawOrigin::Signed(caller), calls) @@ -53,10 +52,9 @@ benchmarks! { batch_all { let c in 0 .. 1000; - let mut calls: Vec<::Call> = Vec::new(); + let mut calls = Vec::new(); for i in 0 .. c { - let call = frame_system::Call::remark(vec![]).into(); - calls.push(call); + calls.push(Box::new(frame_system::Call::remark(vec![]).into())); } let caller = whitelisted_caller(); }: _(RawOrigin::Signed(caller), calls) From ec935393244c8c17064650f1ae913d1cd43a6312 Mon Sep 17 00:00:00 2001 From: Parity Bot Date: Tue, 13 Jul 2021 16:51:04 +0000 Subject: [PATCH 3/8] cargo run --release --features=runtime-benchmarks --manifest-path=bin/node/cli/Cargo.toml -- benchmark --chain=dev --steps=50 --repeat=20 --pallet=pallet_utility --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --output=./frame/utility/src/weights.rs --template=./.maintain/frame-weight-template.hbs --- frame/utility/src/weights.rs | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/frame/utility/src/weights.rs b/frame/utility/src/weights.rs index 0bab97201008c..55a6517e2ca0a 100644 --- a/frame/utility/src/weights.rs +++ b/frame/utility/src/weights.rs @@ -17,8 +17,8 @@ //! Autogenerated weights for pallet_utility //! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 3.0.0 -//! DATE: 2021-06-19, STEPS: `[50, ]`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2021-07-13, STEPS: `[50, ]`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 128 // Executed Command: @@ -53,33 +53,33 @@ pub trait WeightInfo { pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { fn batch(c: u32, ) -> Weight { - (14_618_000 as Weight) + (17_673_000 as Weight) // Standard Error: 0 - .saturating_add((610_000 as Weight).saturating_mul(c as Weight)) + .saturating_add((461_000 as Weight).saturating_mul(c as Weight)) } fn as_derivative() -> Weight { - (3_175_000 as Weight) + (3_693_000 as Weight) } fn batch_all(c: u32, ) -> Weight { - (14_561_000 as Weight) - // Standard Error: 0 - .saturating_add((1_013_000 as Weight).saturating_mul(c as Weight)) + (21_008_000 as Weight) + // Standard Error: 1_000 + .saturating_add((889_000 as Weight).saturating_mul(c as Weight)) } } // For backwards compatibility and tests impl WeightInfo for () { fn batch(c: u32, ) -> Weight { - (14_618_000 as Weight) + (17_673_000 as Weight) // Standard Error: 0 - .saturating_add((610_000 as Weight).saturating_mul(c as Weight)) + .saturating_add((461_000 as Weight).saturating_mul(c as Weight)) } fn as_derivative() -> Weight { - (3_175_000 as Weight) + (3_693_000 as Weight) } fn batch_all(c: u32, ) -> Weight { - (14_561_000 as Weight) - // Standard Error: 0 - .saturating_add((1_013_000 as Weight).saturating_mul(c as Weight)) + (21_008_000 as Weight) + // Standard Error: 1_000 + .saturating_add((889_000 as Weight).saturating_mul(c as Weight)) } } From 0510139dcead662c190e40ef0f6bbfd72fe9f834 Mon Sep 17 00:00:00 2001 From: Parity Bot Date: Tue, 13 Jul 2021 16:55:01 +0000 Subject: [PATCH 4/8] cargo run --release --features=runtime-benchmarks --manifest-path=bin/node/cli/Cargo.toml -- benchmark --chain=dev --steps=50 --repeat=20 --pallet=pallet_lottery --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --output=./frame/lottery/src/weights.rs --template=./.maintain/frame-weight-template.hbs --- frame/lottery/src/weights.rs | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/frame/lottery/src/weights.rs b/frame/lottery/src/weights.rs index a73d0b667e351..72e7415eeb07c 100644 --- a/frame/lottery/src/weights.rs +++ b/frame/lottery/src/weights.rs @@ -17,8 +17,8 @@ //! Autogenerated weights for pallet_lottery //! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 3.0.0 -//! DATE: 2021-06-19, STEPS: `[50, ]`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2021-07-13, STEPS: `[50, ]`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 128 // Executed Command: @@ -56,33 +56,33 @@ pub trait WeightInfo { pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { fn buy_ticket() -> Weight { - (71_604_000 as Weight) + (89_015_000 as Weight) .saturating_add(T::DbWeight::get().reads(6 as Weight)) .saturating_add(T::DbWeight::get().writes(4 as Weight)) } fn set_calls(n: u32, ) -> Weight { - (15_015_000 as Weight) + (19_654_000 as Weight) // Standard Error: 5_000 - .saturating_add((301_000 as Weight).saturating_mul(n as Weight)) + .saturating_add((384_000 as Weight).saturating_mul(n as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn start_lottery() -> Weight { - (58_855_000 as Weight) + (72_310_000 as Weight) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn stop_repeat() -> Weight { - (7_524_000 as Weight) + (9_068_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn on_initialize_end() -> Weight { - (114_766_000 as Weight) + (140_884_000 as Weight) .saturating_add(T::DbWeight::get().reads(6 as Weight)) .saturating_add(T::DbWeight::get().writes(4 as Weight)) } fn on_initialize_repeat() -> Weight { - (119_402_000 as Weight) + (146_739_000 as Weight) .saturating_add(T::DbWeight::get().reads(7 as Weight)) .saturating_add(T::DbWeight::get().writes(5 as Weight)) } @@ -91,33 +91,33 @@ impl WeightInfo for SubstrateWeight { // For backwards compatibility and tests impl WeightInfo for () { fn buy_ticket() -> Weight { - (71_604_000 as Weight) + (89_015_000 as Weight) .saturating_add(RocksDbWeight::get().reads(6 as Weight)) .saturating_add(RocksDbWeight::get().writes(4 as Weight)) } fn set_calls(n: u32, ) -> Weight { - (15_015_000 as Weight) + (19_654_000 as Weight) // Standard Error: 5_000 - .saturating_add((301_000 as Weight).saturating_mul(n as Weight)) + .saturating_add((384_000 as Weight).saturating_mul(n as Weight)) .saturating_add(RocksDbWeight::get().writes(1 as Weight)) } fn start_lottery() -> Weight { - (58_855_000 as Weight) + (72_310_000 as Weight) .saturating_add(RocksDbWeight::get().reads(3 as Weight)) .saturating_add(RocksDbWeight::get().writes(3 as Weight)) } fn stop_repeat() -> Weight { - (7_524_000 as Weight) + (9_068_000 as Weight) .saturating_add(RocksDbWeight::get().reads(1 as Weight)) .saturating_add(RocksDbWeight::get().writes(1 as Weight)) } fn on_initialize_end() -> Weight { - (114_766_000 as Weight) + (140_884_000 as Weight) .saturating_add(RocksDbWeight::get().reads(6 as Weight)) .saturating_add(RocksDbWeight::get().writes(4 as Weight)) } fn on_initialize_repeat() -> Weight { - (119_402_000 as Weight) + (146_739_000 as Weight) .saturating_add(RocksDbWeight::get().reads(7 as Weight)) .saturating_add(RocksDbWeight::get().writes(5 as Weight)) } From 8bc21dd16b6288e1a3fff049327ac4985c49e12a Mon Sep 17 00:00:00 2001 From: thiolliere Date: Tue, 13 Jul 2021 19:08:10 +0200 Subject: [PATCH 5/8] fix tests --- frame/contracts/src/exec.rs | 2 +- frame/proxy/src/tests.rs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/frame/contracts/src/exec.rs b/frame/contracts/src/exec.rs index ae1585afbb890..97dea12af28db 100644 --- a/frame/contracts/src/exec.rs +++ b/frame/contracts/src/exec.rs @@ -2575,7 +2575,7 @@ mod tests { // as part of a patch: return is OK (but it interrupted the batch) assert_ok!( ctx.ext.call_runtime(Call::Utility(UtilCall::batch(vec![ - allowed_call.clone(), forbidden_call, allowed_call + Box::new(allowed_call.clone()), Box::new(forbidden_call), Box::new(allowed_call) ]))), ); diff --git a/frame/proxy/src/tests.rs b/frame/proxy/src/tests.rs index 4383fbea00713..00cbafe7bf281 100644 --- a/frame/proxy/src/tests.rs +++ b/frame/proxy/src/tests.rs @@ -328,7 +328,7 @@ fn filtering_works() { assert_ok!(Proxy::proxy(Origin::signed(4), 1, None, call.clone())); System::assert_last_event(ProxyEvent::ProxyExecuted(Err(DispatchError::BadOrigin)).into()); - let call = Box::new(Call::Utility(UtilityCall::batch(vec![*inner]))); + let call = Box::new(Call::Utility(UtilityCall::batch(vec![inner]))); assert_ok!(Proxy::proxy(Origin::signed(2), 1, None, call.clone())); expect_events(vec![UtilityEvent::BatchCompleted.into(), ProxyEvent::ProxyExecuted(Ok(())).into()]); assert_ok!(Proxy::proxy(Origin::signed(3), 1, None, call.clone())); @@ -340,7 +340,7 @@ fn filtering_works() { ]); let inner = Box::new(Call::Proxy(ProxyCall::add_proxy(5, ProxyType::Any, 0))); - let call = Box::new(Call::Utility(UtilityCall::batch(vec![*inner]))); + let call = Box::new(Call::Utility(UtilityCall::batch(vec![inner]))); assert_ok!(Proxy::proxy(Origin::signed(2), 1, None, call.clone())); expect_events(vec![UtilityEvent::BatchCompleted.into(), ProxyEvent::ProxyExecuted(Ok(())).into()]); assert_ok!(Proxy::proxy(Origin::signed(3), 1, None, call.clone())); From 5a93791444d4b057d1e4d32e204a1ad8cd42edda Mon Sep 17 00:00:00 2001 From: thiolliere Date: Tue, 13 Jul 2021 19:40:33 +0200 Subject: [PATCH 6/8] improve benchmarks --- frame/lottery/src/benchmarking.rs | 6 +++++- frame/utility/src/benchmarking.rs | 12 ++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/frame/lottery/src/benchmarking.rs b/frame/lottery/src/benchmarking.rs index f16ca19127e4a..0fa0240727b77 100644 --- a/frame/lottery/src/benchmarking.rs +++ b/frame/lottery/src/benchmarking.rs @@ -77,7 +77,11 @@ benchmarks! { let call = Call::::set_calls(calls); let origin = T::ManagerOrigin::successful_origin(); assert!(CallIndices::::get().is_empty()); - }: { call.dispatch_bypass_filter(origin)? } + let call = call.encode(); + }: { + let call = >::decode(&mut &call[..]).expect("encoding is valid"); + call.dispatch_bypass_filter(origin)?; + } verify { if !n.is_zero() { assert!(!CallIndices::::get().is_empty()); diff --git a/frame/utility/src/benchmarking.rs b/frame/utility/src/benchmarking.rs index 37e2d7a03d02b..3e3d2cf5abc6d 100644 --- a/frame/utility/src/benchmarking.rs +++ b/frame/utility/src/benchmarking.rs @@ -37,7 +37,11 @@ benchmarks! { calls.push(Box::new(frame_system::Call::remark(vec![]).into())); } let caller = whitelisted_caller(); - }: _(RawOrigin::Signed(caller), calls) + let call = >::batch(calls).encode(); + }: { + let call = >::decode(&mut &call[..]).expect("encoding is valid"); + call.dispatch_bypass_filter(RawOrigin::Signed(caller).into())?; + } verify { assert_last_event::(Event::BatchCompleted.into()) } @@ -57,7 +61,11 @@ benchmarks! { calls.push(Box::new(frame_system::Call::remark(vec![]).into())); } let caller = whitelisted_caller(); - }: _(RawOrigin::Signed(caller), calls) + let call = >::batch_all(calls).encode(); + }: { + let call = >::decode(&mut &call[..]).expect("encoding is valid"); + call.dispatch_bypass_filter(RawOrigin::Signed(caller).into())?; + } verify { assert_last_event::(Event::BatchCompleted.into()) } From ee9aabfe1e713044342ade08ca303be56c788b6e Mon Sep 17 00:00:00 2001 From: Parity Benchmarking Bot Date: Tue, 13 Jul 2021 20:21:17 +0000 Subject: [PATCH 7/8] cargo run --release --features=runtime-benchmarks --manifest-path=bin/node/cli/Cargo.toml -- benchmark --chain=dev --steps=50 --repeat=20 --pallet=pallet_lottery --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --output=./frame/lottery/src/weights.rs --template=./.maintain/frame-weight-template.hbs --- frame/lottery/src/weights.rs | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/frame/lottery/src/weights.rs b/frame/lottery/src/weights.rs index 72e7415eeb07c..e438e33710b3b 100644 --- a/frame/lottery/src/weights.rs +++ b/frame/lottery/src/weights.rs @@ -56,33 +56,33 @@ pub trait WeightInfo { pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { fn buy_ticket() -> Weight { - (89_015_000 as Weight) + (72_703_000 as Weight) .saturating_add(T::DbWeight::get().reads(6 as Weight)) .saturating_add(T::DbWeight::get().writes(4 as Weight)) } fn set_calls(n: u32, ) -> Weight { - (19_654_000 as Weight) + (15_536_000 as Weight) // Standard Error: 5_000 - .saturating_add((384_000 as Weight).saturating_mul(n as Weight)) + .saturating_add((786_000 as Weight).saturating_mul(n as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn start_lottery() -> Weight { - (72_310_000 as Weight) + (57_937_000 as Weight) .saturating_add(T::DbWeight::get().reads(3 as Weight)) .saturating_add(T::DbWeight::get().writes(3 as Weight)) } fn stop_repeat() -> Weight { - (9_068_000 as Weight) + (7_468_000 as Weight) .saturating_add(T::DbWeight::get().reads(1 as Weight)) .saturating_add(T::DbWeight::get().writes(1 as Weight)) } fn on_initialize_end() -> Weight { - (140_884_000 as Weight) + (114_880_000 as Weight) .saturating_add(T::DbWeight::get().reads(6 as Weight)) .saturating_add(T::DbWeight::get().writes(4 as Weight)) } fn on_initialize_repeat() -> Weight { - (146_739_000 as Weight) + (119_713_000 as Weight) .saturating_add(T::DbWeight::get().reads(7 as Weight)) .saturating_add(T::DbWeight::get().writes(5 as Weight)) } @@ -91,33 +91,33 @@ impl WeightInfo for SubstrateWeight { // For backwards compatibility and tests impl WeightInfo for () { fn buy_ticket() -> Weight { - (89_015_000 as Weight) + (72_703_000 as Weight) .saturating_add(RocksDbWeight::get().reads(6 as Weight)) .saturating_add(RocksDbWeight::get().writes(4 as Weight)) } fn set_calls(n: u32, ) -> Weight { - (19_654_000 as Weight) + (15_536_000 as Weight) // Standard Error: 5_000 - .saturating_add((384_000 as Weight).saturating_mul(n as Weight)) + .saturating_add((786_000 as Weight).saturating_mul(n as Weight)) .saturating_add(RocksDbWeight::get().writes(1 as Weight)) } fn start_lottery() -> Weight { - (72_310_000 as Weight) + (57_937_000 as Weight) .saturating_add(RocksDbWeight::get().reads(3 as Weight)) .saturating_add(RocksDbWeight::get().writes(3 as Weight)) } fn stop_repeat() -> Weight { - (9_068_000 as Weight) + (7_468_000 as Weight) .saturating_add(RocksDbWeight::get().reads(1 as Weight)) .saturating_add(RocksDbWeight::get().writes(1 as Weight)) } fn on_initialize_end() -> Weight { - (140_884_000 as Weight) + (114_880_000 as Weight) .saturating_add(RocksDbWeight::get().reads(6 as Weight)) .saturating_add(RocksDbWeight::get().writes(4 as Weight)) } fn on_initialize_repeat() -> Weight { - (146_739_000 as Weight) + (119_713_000 as Weight) .saturating_add(RocksDbWeight::get().reads(7 as Weight)) .saturating_add(RocksDbWeight::get().writes(5 as Weight)) } From 2832e55a8dd6fb04aa753dcda08d11310b74465f Mon Sep 17 00:00:00 2001 From: Parity Benchmarking Bot Date: Tue, 13 Jul 2021 20:28:32 +0000 Subject: [PATCH 8/8] cargo run --release --features=runtime-benchmarks --manifest-path=bin/node/cli/Cargo.toml -- benchmark --chain=dev --steps=50 --repeat=20 --pallet=pallet_utility --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --output=./frame/utility/src/weights.rs --template=./.maintain/frame-weight-template.hbs --- frame/utility/src/weights.rs | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/frame/utility/src/weights.rs b/frame/utility/src/weights.rs index 55a6517e2ca0a..79f545641d600 100644 --- a/frame/utility/src/weights.rs +++ b/frame/utility/src/weights.rs @@ -53,33 +53,33 @@ pub trait WeightInfo { pub struct SubstrateWeight(PhantomData); impl WeightInfo for SubstrateWeight { fn batch(c: u32, ) -> Weight { - (17_673_000 as Weight) + (14_802_000 as Weight) // Standard Error: 0 - .saturating_add((461_000 as Weight).saturating_mul(c as Weight)) + .saturating_add((836_000 as Weight).saturating_mul(c as Weight)) } fn as_derivative() -> Weight { - (3_693_000 as Weight) + (3_249_000 as Weight) } fn batch_all(c: u32, ) -> Weight { - (21_008_000 as Weight) - // Standard Error: 1_000 - .saturating_add((889_000 as Weight).saturating_mul(c as Weight)) + (14_248_000 as Weight) + // Standard Error: 0 + .saturating_add((1_228_000 as Weight).saturating_mul(c as Weight)) } } // For backwards compatibility and tests impl WeightInfo for () { fn batch(c: u32, ) -> Weight { - (17_673_000 as Weight) + (14_802_000 as Weight) // Standard Error: 0 - .saturating_add((461_000 as Weight).saturating_mul(c as Weight)) + .saturating_add((836_000 as Weight).saturating_mul(c as Weight)) } fn as_derivative() -> Weight { - (3_693_000 as Weight) + (3_249_000 as Weight) } fn batch_all(c: u32, ) -> Weight { - (21_008_000 as Weight) - // Standard Error: 1_000 - .saturating_add((889_000 as Weight).saturating_mul(c as Weight)) + (14_248_000 as Weight) + // Standard Error: 0 + .saturating_add((1_228_000 as Weight).saturating_mul(c as Weight)) } }