From b38c4165a4b4e657caafd96c9aa3c521a5da59d1 Mon Sep 17 00:00:00 2001
From: Shawn Tabrizi <shawntabrizi@gmail.com>
Date: Wed, 12 Oct 2022 12:32:10 -0400
Subject: [PATCH] Dont use benchmark range on constant functions (#12456)

* dont use benchmark range on constant function

* update weights

* fix

* new weights

* Update frame/examples/basic/src/benchmarking.rs

Co-authored-by: parity-processbot <>
---
 .../frame/examples/basic/src/benchmarking.rs  | 17 ++--
 substrate/frame/examples/basic/src/lib.rs     |  2 +-
 substrate/frame/examples/basic/src/weights.rs | 78 +++++++++----------
 3 files changed, 46 insertions(+), 51 deletions(-)

diff --git a/substrate/frame/examples/basic/src/benchmarking.rs b/substrate/frame/examples/basic/src/benchmarking.rs
index 87d65a0bfa5..13f069c23e2 100644
--- a/substrate/frame/examples/basic/src/benchmarking.rs
+++ b/substrate/frame/examples/basic/src/benchmarking.rs
@@ -34,25 +34,26 @@ use frame_system::RawOrigin;
 // Details on using the benchmarks macro can be seen at:
 //   https://paritytech.github.io/substrate/master/frame_benchmarking/trait.Benchmarking.html#tymethod.benchmarks
 benchmarks! {
-	// This will measure the execution time of `set_dummy` for b in [0..1000] range.
+	// This will measure the execution time of `set_dummy`.
 	set_dummy_benchmark {
-		// This is the benchmark setup phase
-		let b in 0 .. 1000;
-	}: set_dummy(RawOrigin::Root, b.into()) // The execution phase is just running `set_dummy` extrinsic call
+		// This is the benchmark setup phase.
+		// `set_dummy` is a constant time function, hence we hard-code some random value here.
+		let value = 1000u32.into();
+	}: set_dummy(RawOrigin::Root, value) // The execution phase is just running `set_dummy` extrinsic call
 	verify {
 		// This is the optional benchmark verification phase, asserting certain states.
-		assert_eq!(Pallet::<T>::dummy(), Some(b.into()))
+		assert_eq!(Pallet::<T>::dummy(), Some(value))
 	}
 
-	// This will measure the execution time of `accumulate_dummy` for b in [0..1000] range.
+	// This will measure the execution time of `accumulate_dummy`.
 	// The benchmark execution phase is shorthanded. When the name of the benchmark case is the same
 	// as the extrinsic call. `_(...)` is used to represent the extrinsic name.
 	// The benchmark verification phase is omitted.
 	accumulate_dummy {
-		let b in 0 .. 1000;
+		let value = 1000u32.into();
 		// The caller account is whitelisted for DB reads/write by the benchmarking macro.
 		let caller: T::AccountId = whitelisted_caller();
-	}: _(RawOrigin::Signed(caller), b.into())
+	}: _(RawOrigin::Signed(caller), value)
 
 	// This will measure the execution time of sorting a vector.
 	sort_vector {
diff --git a/substrate/frame/examples/basic/src/lib.rs b/substrate/frame/examples/basic/src/lib.rs
index f754348782c..256529421ca 100644
--- a/substrate/frame/examples/basic/src/lib.rs
+++ b/substrate/frame/examples/basic/src/lib.rs
@@ -498,7 +498,7 @@ pub mod pallet {
 		// The weight for this extrinsic we rely on the auto-generated `WeightInfo` from the
 		// benchmark toolchain.
 		#[pallet::weight(
-			<T as pallet::Config>::WeightInfo::accumulate_dummy((*increase_by).saturated_into())
+			<T as pallet::Config>::WeightInfo::accumulate_dummy()
 		)]
 		pub fn accumulate_dummy(origin: OriginFor<T>, increase_by: T::Balance) -> DispatchResult {
 			// This is a public call, so we ensure that the origin is some signed account.
diff --git a/substrate/frame/examples/basic/src/weights.rs b/substrate/frame/examples/basic/src/weights.rs
index 986648b4302..a69f0824eac 100644
--- a/substrate/frame/examples/basic/src/weights.rs
+++ b/substrate/frame/examples/basic/src/weights.rs
@@ -1,6 +1,6 @@
 // This file is part of Substrate.
 
-// Copyright (C) 2021-2022 Parity Technologies (UK) Ltd.
+// Copyright (C) 2022 Parity Technologies (UK) Ltd.
 // SPDX-License-Identifier: Apache-2.0
 
 // Licensed under the Apache License, Version 2.0 (the "License");
@@ -17,34 +17,26 @@
 
 //! Autogenerated weights for pallet_example_basic
 //!
-//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 3.0.0
-//! DATE: 2021-03-15, STEPS: `[100, ]`, REPEAT: 10, LOW RANGE: `[]`, HIGH RANGE: `[]`
-//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 128
+//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
+//! DATE: 2022-10-09, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! HOSTNAME: `Shawns-MacBook-Pro.local`, CPU: `<UNKNOWN>`
+//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024
 
 // Executed Command:
 // ./target/release/substrate
 // benchmark
-// --chain
-// dev
-// --execution
-// wasm
-// --wasm-execution
-// compiled
-// --pallet
-// pallet_example_basic
-// --extrinsic
-// *
-// --steps
-// 100
-// --repeat
-// 10
-// --raw
-// --output
-// ./
+// pallet
+// --chain=dev
+// --execution=wasm
+// --wasm-execution=compiled
+// --pallet=pallet_example_basic
+// --extrinsic=*
+// --steps=50
+// --repeat=20
+// --output=./
 // --template
 // ./.maintain/frame-weight-template.hbs
 
-
 #![cfg_attr(rustfmt, rustfmt_skip)]
 #![allow(unused_parens)]
 #![allow(unused_imports)]
@@ -54,48 +46,50 @@ use sp_std::marker::PhantomData;
 
 /// Weight functions needed for pallet_example_basic.
 pub trait WeightInfo {
-	fn set_dummy_benchmark(b: u32, ) -> Weight;
-	fn accumulate_dummy(b: u32, ) -> Weight;
+	fn set_dummy_benchmark() -> Weight;
+	fn accumulate_dummy() -> Weight;
 	fn sort_vector(x: u32, ) -> Weight;
 }
 
 /// Weights for pallet_example_basic using the Substrate node and recommended hardware.
 pub struct SubstrateWeight<T>(PhantomData<T>);
 impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
-	fn set_dummy_benchmark(b: u32, ) -> Weight {
-		Weight::from_ref_time(5_834_000 as u64)
-			.saturating_add(Weight::from_ref_time(24_000 as u64).saturating_mul(b as u64))
+	// Storage: BasicExample Dummy (r:0 w:1)
+	fn set_dummy_benchmark() -> Weight {
+		Weight::from_ref_time(19_000_000 as u64)
 			.saturating_add(T::DbWeight::get().writes(1 as u64))
 	}
-	fn accumulate_dummy(b: u32, ) -> Weight {
-		Weight::from_ref_time(51_353_000 as u64)
-			.saturating_add(Weight::from_ref_time(14_000 as u64).saturating_mul(b as u64))
+	// Storage: BasicExample Dummy (r:1 w:1)
+	fn accumulate_dummy() -> Weight {
+		Weight::from_ref_time(18_000_000 as u64)
 			.saturating_add(T::DbWeight::get().reads(1 as u64))
 			.saturating_add(T::DbWeight::get().writes(1 as u64))
 	}
+	/// The range of component `x` is `[0, 10000]`.
 	fn sort_vector(x: u32, ) -> Weight {
-		Weight::from_ref_time(2_569_000 as u64)
-			// Standard Error: 0
-			.saturating_add(Weight::from_ref_time(4_000 as u64).saturating_mul(x as u64))
+		Weight::from_ref_time(0 as u64)
+			// Standard Error: 2
+			.saturating_add(Weight::from_ref_time(520 as u64).saturating_mul(x as u64))
 	}
 }
 
 // For backwards compatibility and tests
 impl WeightInfo for () {
-	fn set_dummy_benchmark(b: u32, ) -> Weight {
-		Weight::from_ref_time(5_834_000 as u64)
-			.saturating_add(Weight::from_ref_time(24_000 as u64).saturating_mul(b as u64))
+	// Storage: BasicExample Dummy (r:0 w:1)
+	fn set_dummy_benchmark() -> Weight {
+		Weight::from_ref_time(19_000_000 as u64)
 			.saturating_add(RocksDbWeight::get().writes(1 as u64))
 	}
-	fn accumulate_dummy(b: u32, ) -> Weight {
-		Weight::from_ref_time(51_353_000 as u64)
-			.saturating_add(Weight::from_ref_time(14_000 as u64).saturating_mul(b as u64))
+	// Storage: BasicExample Dummy (r:1 w:1)
+	fn accumulate_dummy() -> Weight {
+		Weight::from_ref_time(18_000_000 as u64)
 			.saturating_add(RocksDbWeight::get().reads(1 as u64))
 			.saturating_add(RocksDbWeight::get().writes(1 as u64))
 	}
+	/// The range of component `x` is `[0, 10000]`.
 	fn sort_vector(x: u32, ) -> Weight {
-		Weight::from_ref_time(2_569_000 as u64)
-			// Standard Error: 0
-			.saturating_add(Weight::from_ref_time(4_000 as u64).saturating_mul(x as u64))
+		Weight::from_ref_time(0 as u64)
+			// Standard Error: 2
+			.saturating_add(Weight::from_ref_time(520 as u64).saturating_mul(x as u64))
 	}
 }
-- 
GitLab