From e18f388dac6c8345a3cff6a69b9e31fad2633078 Mon Sep 17 00:00:00 2001
From: Guillaume Thiolliere <gui.thiolliere@gmail.com>
Date: Thu, 22 Jul 2021 11:29:44 +0200
Subject: [PATCH] Benchmarking also benchmark for decoding the call (#9343)

* benchmark for decoding of call

* better names

* fix benchmarks

* cargo run --quiet --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

* cargo run --quiet --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

* cargo run --quiet --release --features=runtime-benchmarks --manifest-path=bin/node/cli/Cargo.toml -- benchmark --chain=dev --steps=50 --repeat=20 --pallet=frame_system --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --output=./frame/system/src/weights.rs --template=./.maintain/frame-weight-template.hbs

* Update frame/system/src/weights.rs

Co-authored-by: Parity Benchmarking Bot <admin@parity.io>
Co-authored-by: Shawn Tabrizi <shawntabrizi@gmail.com>
---
 substrate/frame/benchmarking/src/lib.rs       | 17 ++++--
 .../frame/contracts/src/benchmarking/mod.rs   |  2 +-
 substrate/frame/lottery/src/weights.rs        | 36 ++++++-------
 substrate/frame/system/src/weights.rs         | 52 ++++++++++---------
 substrate/frame/utility/src/weights.rs        | 32 ++++++------
 5 files changed, 76 insertions(+), 63 deletions(-)

diff --git a/substrate/frame/benchmarking/src/lib.rs b/substrate/frame/benchmarking/src/lib.rs
index ebf8a209860..a0aa78f722f 100644
--- a/substrate/frame/benchmarking/src/lib.rs
+++ b/substrate/frame/benchmarking/src/lib.rs
@@ -302,12 +302,21 @@ macro_rules! benchmarks_iter {
 			{ $( $where_clause )* }
 			( $( $names )* )
 			( $( $names_extra )* )
-			$name { $( $code )* }: {
+			$name {
+				$( $code )*
+				let __benchmarked_call_encoded = $crate::frame_support::codec::Encode::encode(
+					&<Call<T $(, $instance )?>>::$dispatch($( $arg ),*)
+				);
+			}: {
+				let call_decoded = <
+					Call<T $(, $instance )?>
+					as $crate::frame_support::codec::Decode
+				>::decode(&mut &__benchmarked_call_encoded[..])
+					.expect("call is encoded above, encoding must be correct");
+
 				<
 					Call<T $(, $instance)? > as $crate::frame_support::traits::UnfilteredDispatchable
-				>::dispatch_bypass_filter(
-					Call::<T $(, $instance)? >::$dispatch($($arg),*), $origin.into()
-				)?;
+				>::dispatch_bypass_filter(call_decoded, $origin.into())?;
 			}
 			verify $postcode
 			$( $rest )*
diff --git a/substrate/frame/contracts/src/benchmarking/mod.rs b/substrate/frame/contracts/src/benchmarking/mod.rs
index 83c18f8f79e..683a575826a 100644
--- a/substrate/frame/contracts/src/benchmarking/mod.rs
+++ b/substrate/frame/contracts/src/benchmarking/mod.rs
@@ -727,7 +727,7 @@ benchmarks! {
 		let origin = RawOrigin::Signed(instance.caller.clone());
 		assert_eq!(T::Currency::total_balance(&beneficiary), 0u32.into());
 		assert_eq!(T::Currency::total_balance(&instance.account_id), Endow::max::<T>());
-	}: call(origin, instance.addr, 0u32.into(), Weight::max_value(), vec![])
+	}: call(origin, instance.addr.clone(), 0u32.into(), Weight::max_value(), vec![])
 	verify {
 		if r > 0 {
 			assert_eq!(T::Currency::total_balance(&instance.account_id), 0u32.into());
diff --git a/substrate/frame/lottery/src/weights.rs b/substrate/frame/lottery/src/weights.rs
index 1b191ef5345..038050c0fb4 100644
--- a/substrate/frame/lottery/src/weights.rs
+++ b/substrate/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-14, STEPS: `[50, ]`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]`
 //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 128
 
 // Executed Command:
@@ -57,33 +57,33 @@ pub trait WeightInfo {
 pub struct SubstrateWeight<T>(PhantomData<T>);
 impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 	fn buy_ticket() -> Weight {
-		(71_604_000 as Weight)
+		(74_856_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)
-			// Standard Error: 5_000
-			.saturating_add((301_000 as Weight).saturating_mul(n as Weight))
+		(15_549_000 as Weight)
+			// Standard Error: 7_000
+			.saturating_add((281_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)
+		(58_904_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)
+		(7_714_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)
+		(117_420_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)
+		(123_035_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(7 as Weight))
 			.saturating_add(T::DbWeight::get().writes(5 as Weight))
 	}
@@ -92,33 +92,33 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 // For backwards compatibility and tests
 impl WeightInfo for () {
 	fn buy_ticket() -> Weight {
-		(71_604_000 as Weight)
+		(74_856_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)
-			// Standard Error: 5_000
-			.saturating_add((301_000 as Weight).saturating_mul(n as Weight))
+		(15_549_000 as Weight)
+			// Standard Error: 7_000
+			.saturating_add((281_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)
+		(58_904_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)
+		(7_714_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)
+		(117_420_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)
+		(123_035_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(7 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(5 as Weight))
 	}
diff --git a/substrate/frame/system/src/weights.rs b/substrate/frame/system/src/weights.rs
index 89fc63fab84..e5821739d0e 100644
--- a/substrate/frame/system/src/weights.rs
+++ b/substrate/frame/system/src/weights.rs
@@ -17,8 +17,8 @@
 
 //! Autogenerated weights for frame_system
 //!
-//! 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-20, STEPS: `[50, ]`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]`
 //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 128
 
 // Executed Command:
@@ -57,78 +57,82 @@ pub trait WeightInfo {
 /// Weights for frame_system using the Substrate node and recommended hardware.
 pub struct SubstrateWeight<T>(PhantomData<T>);
 impl<T: crate::Config> WeightInfo for SubstrateWeight<T> {
-	fn remark(_b: u32, ) -> Weight {
-		(1_038_000 as Weight)
+	fn remark(b: u32, ) -> Weight {
+		(0 as Weight)
+			// Standard Error: 0
+			.saturating_add((1_000 as Weight).saturating_mul(b as Weight))
 	}
 	fn remark_with_event(b: u32, ) -> Weight {
-		(5_246_000 as Weight)
+		(16_569_000 as Weight)
 			// Standard Error: 0
-			.saturating_add((1_000 as Weight).saturating_mul(b as Weight))
+			.saturating_add((2_000 as Weight).saturating_mul(b as Weight))
 	}
 	fn set_heap_pages() -> Weight {
-		(1_586_000 as Weight)
+		(1_783_000 as Weight)
 			.saturating_add(T::DbWeight::get().writes(1 as Weight))
 	}
 	fn set_changes_trie_config() -> Weight {
-		(7_181_000 as Weight)
+		(7_727_000 as Weight)
 			.saturating_add(T::DbWeight::get().reads(1 as Weight))
 			.saturating_add(T::DbWeight::get().writes(2 as Weight))
 	}
 	fn set_storage(i: u32, ) -> Weight {
 		(0 as Weight)
 			// Standard Error: 0
-			.saturating_add((568_000 as Weight).saturating_mul(i as Weight))
+			.saturating_add((875_000 as Weight).saturating_mul(i as Weight))
 			.saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(i as Weight)))
 	}
 	fn kill_storage(i: u32, ) -> Weight {
-		(2_278_000 as Weight)
+		(4_216_000 as Weight)
 			// Standard Error: 0
-			.saturating_add((423_000 as Weight).saturating_mul(i as Weight))
+			.saturating_add((555_000 as Weight).saturating_mul(i as Weight))
 			.saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(i as Weight)))
 	}
 	fn kill_prefix(p: u32, ) -> Weight {
-		(8_243_000 as Weight)
+		(14_558_000 as Weight)
 			// Standard Error: 1_000
-			.saturating_add((795_000 as Weight).saturating_mul(p as Weight))
+			.saturating_add((781_000 as Weight).saturating_mul(p as Weight))
 			.saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(p as Weight)))
 	}
 }
 
 // For backwards compatibility and tests
 impl WeightInfo for () {
-	fn remark(_b: u32, ) -> Weight {
-		(1_038_000 as Weight)
+	fn remark(b: u32, ) -> Weight {
+		(0 as Weight)
+			// Standard Error: 0
+			.saturating_add((1_000 as Weight).saturating_mul(b as Weight))
 	}
 	fn remark_with_event(b: u32, ) -> Weight {
-		(5_246_000 as Weight)
+		(16_569_000 as Weight)
 			// Standard Error: 0
-			.saturating_add((1_000 as Weight).saturating_mul(b as Weight))
+			.saturating_add((2_000 as Weight).saturating_mul(b as Weight))
 	}
 	fn set_heap_pages() -> Weight {
-		(1_586_000 as Weight)
+		(1_783_000 as Weight)
 			.saturating_add(RocksDbWeight::get().writes(1 as Weight))
 	}
 	fn set_changes_trie_config() -> Weight {
-		(7_181_000 as Weight)
+		(7_727_000 as Weight)
 			.saturating_add(RocksDbWeight::get().reads(1 as Weight))
 			.saturating_add(RocksDbWeight::get().writes(2 as Weight))
 	}
 	fn set_storage(i: u32, ) -> Weight {
 		(0 as Weight)
 			// Standard Error: 0
-			.saturating_add((568_000 as Weight).saturating_mul(i as Weight))
+			.saturating_add((875_000 as Weight).saturating_mul(i as Weight))
 			.saturating_add(RocksDbWeight::get().writes((1 as Weight).saturating_mul(i as Weight)))
 	}
 	fn kill_storage(i: u32, ) -> Weight {
-		(2_278_000 as Weight)
+		(4_216_000 as Weight)
 			// Standard Error: 0
-			.saturating_add((423_000 as Weight).saturating_mul(i as Weight))
+			.saturating_add((555_000 as Weight).saturating_mul(i as Weight))
 			.saturating_add(RocksDbWeight::get().writes((1 as Weight).saturating_mul(i as Weight)))
 	}
 	fn kill_prefix(p: u32, ) -> Weight {
-		(8_243_000 as Weight)
+		(14_558_000 as Weight)
 			// Standard Error: 1_000
-			.saturating_add((795_000 as Weight).saturating_mul(p as Weight))
+			.saturating_add((781_000 as Weight).saturating_mul(p as Weight))
 			.saturating_add(RocksDbWeight::get().writes((1 as Weight).saturating_mul(p as Weight)))
 	}
 }
diff --git a/substrate/frame/utility/src/weights.rs b/substrate/frame/utility/src/weights.rs
index e098bf2b8a9..b676ca5cdbc 100644
--- a/substrate/frame/utility/src/weights.rs
+++ b/substrate/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-14, STEPS: `[50, ]`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]`
 //! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 128
 
 // Executed Command:
@@ -54,33 +54,33 @@ pub trait WeightInfo {
 pub struct SubstrateWeight<T>(PhantomData<T>);
 impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
 	fn batch(c: u32, ) -> Weight {
-		(14_618_000 as Weight)
-			// Standard Error: 0
-			.saturating_add((610_000 as Weight).saturating_mul(c as Weight))
+		(20_779_000 as Weight)
+			// Standard Error: 1_000
+			.saturating_add((1_080_000 as Weight).saturating_mul(c as Weight))
 	}
 	fn as_derivative() -> Weight {
-		(3_175_000 as Weight)
+		(3_994_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))
+		(22_183_000 as Weight)
+			// Standard Error: 1_000
+			.saturating_add((1_506_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)
-			// Standard Error: 0
-			.saturating_add((610_000 as Weight).saturating_mul(c as Weight))
+		(20_779_000 as Weight)
+			// Standard Error: 1_000
+			.saturating_add((1_080_000 as Weight).saturating_mul(c as Weight))
 	}
 	fn as_derivative() -> Weight {
-		(3_175_000 as Weight)
+		(3_994_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))
+		(22_183_000 as Weight)
+			// Standard Error: 1_000
+			.saturating_add((1_506_000 as Weight).saturating_mul(c as Weight))
 	}
 }
-- 
GitLab