Переглянути джерело

benchmark: proposals/discussion: fix formatting and improve `handle_from_id`

conectado 4 роки тому
батько
коміт
a3c1aee47c

+ 10 - 2
Cargo.lock

@@ -1690,6 +1690,12 @@ dependencies = [
  "proc-macro-hack",
 ]
 
+[[package]]
+name = "hex-literal"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5af1f635ef1bc545d78392b136bfe1c9809e029023c84a3638a864a10b8819c8"
+
 [[package]]
 name = "hex-literal-impl"
 version = "0.2.2"
@@ -2061,6 +2067,7 @@ dependencies = [
  "frame-system",
  "frame-system-benchmarking",
  "frame-system-rpc-runtime-api",
+ "hex-literal 0.3.1",
  "pallet-authority-discovery",
  "pallet-authorship",
  "pallet-babe",
@@ -3575,6 +3582,7 @@ dependencies = [
 name = "pallet-proposals-discussion"
 version = "3.0.0"
 dependencies = [
+ "frame-benchmarking",
  "frame-support",
  "frame-system",
  "pallet-balances",
@@ -5077,7 +5085,7 @@ dependencies = [
  "fnv",
  "futures 0.3.4",
  "hash-db",
- "hex-literal",
+ "hex-literal 0.2.1",
  "kvdb",
  "lazy_static",
  "log",
@@ -5687,7 +5695,7 @@ dependencies = [
  "fdlimit",
  "futures 0.1.29",
  "futures 0.3.4",
- "hex-literal",
+ "hex-literal 0.2.1",
  "log",
  "parity-scale-codec",
  "parking_lot 0.10.2",

+ 0 - 1
runtime-modules/proposals/discussion/Cargo.toml

@@ -12,7 +12,6 @@ frame-support = { package = 'frame-support', default-features = false, git = 'ht
 system = { package = 'frame-system', default-features = false, git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4'}
 membership = { package = 'pallet-membership', default-features = false, path = '../../membership'}
 common = { package = 'pallet-common', default-features = false, path = '../../common'}
-
 frame-benchmarking = { package = 'frame-benchmarking', default-features = false, git = 'https://github.com/paritytech/substrate.git', rev = '00768a1f21a579c478fe5d4f51e1fa71f7db9fd4', optional = true}
 
 [dev-dependencies]

+ 11 - 14
runtime-modules/proposals/discussion/src/benchmarking.rs

@@ -4,6 +4,7 @@ use crate::Module as ProposalsDiscussion;
 use core::convert::TryInto;
 use frame_benchmarking::{account, benchmarks};
 use membership::Module as Membership;
+use sp_std::cmp::min;
 use sp_std::prelude::*;
 use system as frame_system;
 use system::EventRecord;
@@ -18,16 +19,14 @@ fn get_byte(num: u32, byte_number: u8) -> u8 {
 
 // Method to generate a distintic valid handle
 // for a membership. For each index.
-// TODO: This will only work as long as max_handle_length >= 4
 fn handle_from_id<T: membership::Trait>(id: u32) -> Vec<u8> {
     let min_handle_length = Membership::<T>::min_handle_length();
-    // If the index is ever different from u32 change this
-    let mut handle = vec![
-        get_byte(id, 0),
-        get_byte(id, 1),
-        get_byte(id, 2),
-        get_byte(id, 3),
-    ];
+
+    let mut handle = vec![];
+
+    for i in 0..min(Membership::<T>::max_handle_length().try_into().unwrap(), 4) {
+        handle.push(get_byte(id, i));
+    }
 
     while handle.len() < (min_handle_length as usize) {
         handle.push(0u8);
@@ -68,18 +67,18 @@ fn member_account<T: membership::Trait>(
     (account_id, T::MemberId::from(id.try_into().unwrap()))
 }
 
+const MAX_BYTES: u32 = 50000;
+
 benchmarks! {
     _ { }
 
     add_post {
         let i in 1 .. T::MaxWhiteListSize::get();
 
-        // TODO: this parameter doesn't affect the running time
-        // maybe we should bound it here with the UI limit?
-        let j in 0 .. 50000;
+        let j in 0 .. MAX_BYTES;
 
         // We do this to ignore the id 0 because the `Test` runtime
-        // returns 0 as an invalid id but 0 as a valid one
+        // returns 0 as an invalid id but 1 as a valid one
         let (_, _) = member_account::<T>("member", 0);
         let (account_id, caller_member_id) = member_account::<T>("caller_member", 1);
 
@@ -163,7 +162,6 @@ benchmarks! {
         let (_, _) = member_account::<T>("member", 0);
         let (account_id, caller_member_id) = member_account::<T>("caller_member", 1);
 
-
         let thread_id = ProposalsDiscussion::<T>::create_thread(
             caller_member_id,
             ThreadMode::Open
@@ -171,7 +169,6 @@ benchmarks! {
 
         assert!(ThreadById::<T>::contains_key(thread_id), "Thread not created");
 
-
         let mut whitelisted_members = vec![caller_member_id];
 
         for id in 2 .. i + 1 {