difftreelog
feat(common) benchmarking
in: master
3 files changed
pallets/common/src/benchmarking.rsdiffbeforeafterboth1use sp_std::vec::Vec;2use crate::{Config, CollectionHandle};3use nft_data_structs::{4 CollectionMode, Collection, CollectionId, MAX_COLLECTION_NAME_LENGTH,5 MAX_COLLECTION_DESCRIPTION_LENGTH, MAX_TOKEN_PREFIX_LENGTH, OFFCHAIN_SCHEMA_LIMIT,6 VARIABLE_ON_CHAIN_SCHEMA_LIMIT, CONST_ON_CHAIN_SCHEMA_LIMIT,7};8use frame_support::traits::{Currency, Get};9use core::convert::TryInto;10use sp_runtime::DispatchError;1112pub fn create_data(size: usize) -> Vec<u8> {13 (0..size).map(|v| (v & 0xff) as u8).collect()14}15pub fn create_u16_data(size: usize) -> Vec<u16> {16 (0..size).map(|v| (v & 0xffff) as u16).collect()17}1819pub fn create_collection_raw<T: Config, R>(20 owner: T::AccountId,21 mode: CollectionMode,22 handler: impl FnOnce(Collection<T>) -> Result<CollectionId, DispatchError>,23 cast: impl FnOnce(CollectionHandle<T>) -> R,24) -> Result<R, DispatchError> {25 T::Currency::deposit_creating(&owner, T::CollectionCreationPrice::get());26 let name = create_u16_data(MAX_COLLECTION_NAME_LENGTH)27 .try_into()28 .unwrap();29 let description = create_u16_data(MAX_COLLECTION_DESCRIPTION_LENGTH)30 .try_into()31 .unwrap();32 let token_prefix = create_data(MAX_TOKEN_PREFIX_LENGTH).try_into().unwrap();33 let offchain_schema = create_data(OFFCHAIN_SCHEMA_LIMIT as usize)34 .try_into()35 .unwrap();36 let variable_on_chain_schema = create_data(VARIABLE_ON_CHAIN_SCHEMA_LIMIT as usize)37 .try_into()38 .unwrap();39 let const_on_chain_schema = create_data(CONST_ON_CHAIN_SCHEMA_LIMIT as usize)40 .try_into()41 .unwrap();42 handler(Collection {43 owner,44 mode,45 access: Default::default(),46 name,47 description,48 token_prefix,49 mint_mode: true,50 offchain_schema,51 schema_version: Default::default(),52 sponsorship: Default::default(),53 limits: Default::default(),54 variable_on_chain_schema,55 const_on_chain_schema,56 meta_update_permission: Default::default(),57 transfers_enabled: true,58 })59 .and_then(CollectionHandle::try_get)60 .map(cast)61}621#![cfg(feature = "runtime-benchmarking")]63#[macro_export]64macro_rules! bench_init {65 ($name:ident: sub $(($id:expr))?; $($rest:tt)*) => {66 let $name: T::AccountId = account(stringify!($name), 0 $(+ $id)?, SEED);67 bench_init!($($rest)*);68 };69 ($name:ident: collection($owner:ident); $($rest:tt)*) => {70 let $name = create_collection::<T>($owner.clone())?;71 bench_init!($($rest)*);72 };73 ($name:ident: cross; $($rest:tt)*) => {74 let $name = T::CrossAccountId::from_sub($name);75 bench_init!($($rest)*);76 };77 ($name:ident: cross_sub $(($id:expr))?; $($rest:tt)*) => {78 let account: T::AccountId = account(stringify!($name), 0 $(+ $id)?, SEED);79 let $name = T::CrossAccountId::from_sub(account);80 bench_init!($($rest)*);81 };82 ($name:ident: cross_from_sub; $($rest:tt)*) => {83 let $name = T::CrossAccountId::from_sub($name);84 bench_init!($($rest)*);85 };86 ($name:ident: cross_from_sub($from:ident); $($rest:tt)*) => {87 let $name = T::CrossAccountId::from_sub($from);88 bench_init!($($rest)*);89 };90 () => {}91}292pallets/common/src/lib.rsdiffbeforeafterboth--- a/pallets/common/src/lib.rs
+++ b/pallets/common/src/lib.rs
@@ -17,6 +17,7 @@
use sp_core::H160;
use sp_runtime::{ArithmeticError, DispatchError, DispatchResult};
pub mod account;
+#[cfg(feature = "runtime-benchmarks")]
pub mod benchmarking;
pub mod erc;
pub mod eth;
pallets/nft/Cargo.tomldiffbeforeafterboth--- a/pallets/nft/Cargo.toml
+++ b/pallets/nft/Cargo.toml
@@ -16,7 +16,10 @@
[features]
default = ['std']
-runtime-benchmarks = ['frame-benchmarking']
+runtime-benchmarks = [
+ 'frame-benchmarking',
+ 'pallet-common/runtime-benchmarks',
+]
std = [
'codec/std',
'serde/std',