macro_rules! add_benchmark {
    ( $params:ident, $batches:ident, $name:path, $( $location:tt )* ) => { ... };
Expand description

This macro adds pallet benchmarks to a Vec<BenchmarkBatch> object.

First create an object that holds in the input parameters for the benchmark:

let params = (&config, &whitelist);

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.

For values that should be skipped entirely, we can just pass key.into(). For example:

use frame_benchmarking::TrackedStorageKey;
let whitelist: Vec<TrackedStorageKey> = vec![
	// Block Number
	// Total Issuance
	// Execution Phase
	// Event Count

Then define a mutable local variable to hold your BenchmarkBatch object:

let mut batches = Vec::<BenchmarkBatch>::new();

Then add the pallets you want to benchmark to this object, using their crate name and generated module struct:

add_benchmark!(params, batches, pallet_balances, Balances);
add_benchmark!(params, batches, pallet_session, SessionBench::<Runtime>);
add_benchmark!(params, batches, frame_system, SystemBench::<Runtime>);

At the end of dispatch_benchmark, you should return this batches object.

In the case where you have multiple instances of a pallet that you need to separately benchmark, the name of your module struct will be used as a suffix to your outputted weight file. For example:

add_benchmark!(params, batches, pallet_balances, Balances); //
add_benchmark!(params, batches, pallet_collective, Council); //
add_benchmark!(params, batches, pallet_collective, TechnicalCommittee); //

You can manipulate this suffixed string by using a type alias if needed. For example:

type Council2 = TechnicalCommittee;
add_benchmark!(params, batches, pallet_collective, Council2); //