From e417f986be88097aefeaccc9f1e9b41fcb2b85d2 Mon Sep 17 00:00:00 2001
From: Nikolay Volf <nikvolf@gmail.com>
Date: Wed, 19 Feb 2020 13:38:40 +0300
Subject: [PATCH] wasm per block size bench (#4982)

---
 substrate/bin/node/testing/benches/import.rs | 47 +++++++++++++++++++-
 1 file changed, 46 insertions(+), 1 deletion(-)

diff --git a/substrate/bin/node/testing/benches/import.rs b/substrate/bin/node/testing/benches/import.rs
index f8cbbec79d5..d0ec993655c 100644
--- a/substrate/bin/node/testing/benches/import.rs
+++ b/substrate/bin/node/testing/benches/import.rs
@@ -28,7 +28,9 @@
 //! to much configuring - just block full of randomized transactions.
 //! It is not supposed to measure runtime modules weight correctness
 
+use std::fmt;
 use node_testing::bench::{BenchDb, Profile};
+use node_primitives::Block;
 use sp_runtime::generic::BlockId;
 use criterion::{Criterion, criterion_group, criterion_main};
 use sc_client_api::backend::Backend;
@@ -38,12 +40,17 @@ criterion_group!(
 	config = Criterion::default().sample_size(50).warm_up_time(std::time::Duration::from_secs(20));
 	targets = bench_block_import
 );
+criterion_group!(
+	name = wasm_size;
+	config = Criterion::default().sample_size(10);
+	targets = bench_wasm_size_import
+);
 criterion_group!(
 	name = profile;
 	config = Criterion::default().sample_size(10);
 	targets = profile_block_import
 );
-criterion_main!(benches, profile);
+criterion_main!(benches, profile, wasm_size);
 
 fn bench_block_import(c: &mut Criterion) {
 	sc_cli::init_logger("");
@@ -139,3 +146,41 @@ fn profile_block_import(c: &mut Criterion) {
 		},
 	);
 }
+
+struct Setup {
+	db: BenchDb,
+	block: Block,
+}
+
+impl fmt::Debug for Setup {
+    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+        write!(f, "Setup: {} tx/block", self.block.extrinsics.len())
+    }
+}
+
+fn bench_wasm_size_import(c: &mut Criterion) {
+	sc_cli::init_logger("");
+
+	let mut setups = Vec::new();
+
+	for block_size in 5..15 {
+		let mut db = BenchDb::new(block_size*50);
+		let block = db.generate_block(block_size * 50);
+		setups.push(Setup { db, block });
+	}
+
+	c.bench_function_over_inputs("wasm_size_import",
+		move |bencher, setup| {
+			bencher.iter_batched(
+				|| {
+					setup.db.create_context(Profile::Wasm)
+				},
+				|mut context| {
+					context.import_block(setup.block.clone());
+				},
+				criterion::BatchSize::PerIteration,
+			);
+		},
+		setups,
+	);
+}
\ No newline at end of file
-- 
GitLab