From 7333846cd725772d3fb2231da6ef2788965536f7 Mon Sep 17 00:00:00 2001
From: bgallois <benjamin@gallois.cc>
Date: Tue, 26 Dec 2023 14:33:03 +0100
Subject: [PATCH] add relative weight

---
 resources/weight_analyzer/src/main.rs | 52 +++++++++++++++++++--------
 1 file changed, 38 insertions(+), 14 deletions(-)

diff --git a/resources/weight_analyzer/src/main.rs b/resources/weight_analyzer/src/main.rs
index cc18295af..2acb7f776 100644
--- a/resources/weight_analyzer/src/main.rs
+++ b/resources/weight_analyzer/src/main.rs
@@ -1,4 +1,5 @@
 use glob::glob;
+use std::collections::HashMap;
 use std::path::Path;
 use subweight_core::parse::overhead::Weight;
 use subweight_core::parse::pallet::ChromaticExtrinsic;
@@ -7,25 +8,26 @@ use subweight_core::parse::storage::Weights;
 use subweight_core::scope::Scope;
 use subweight_core::term::Term;
 
+const MAX_BLOCK_WEIGHT: f64 = 2_000_000_000_000.; // TODO auto extraction from metadata using
+                                                  // frame_system blockweights constant
+
+#[derive(Debug)]
+pub struct WeightInfo {
+    pub weight: u128,
+    pub relative_weight: f64,
+}
+
 fn main() {
     let pallet_weights = read_pallet_weight();
     let db_weight = read_db_weight();
-    let _overhead_weight = read_overhead_weight();
+    let _overhead_weights = read_overhead_weight();
 
-    // Initialize scope
+    // Initialize scope with db weights
     let mut scope = Scope::from_substrate();
     scope = scope.with_storage_weights(db_weight.weights.read, db_weight.weights.write);
 
-    // Test
-    for i in pallet_weights {
-        for j in i {
-            let (pallet, extrinsic, weight) = evaluate_weight(j, &mut scope).unwrap();
-            println!(
-                "Pallet: {:?} ; Extrinsic: {:?} ; Weight: {:?}",
-                pallet, extrinsic, weight
-            );
-        }
-    }
+    let weight_by_pallet = process(pallet_weights, scope);
+    println!("{:?}", weight_by_pallet);
 }
 
 fn read_pallet_weight() -> Vec<Vec<ChromaticExtrinsic>> {
@@ -59,7 +61,7 @@ fn read_overhead_weight() -> Weight {
 fn evaluate_weight(
     extrinsic: ChromaticExtrinsic,
     scope: &mut Scope<Term<u128>>,
-) -> Result<(String, String, u128), String> {
+) -> Result<(String, String, WeightInfo), String> {
     // Extend the scope with the maximum value of the complexity parameter.
     if let Some(params) = extrinsic.comp_ranges {
         params
@@ -76,5 +78,27 @@ fn evaluate_weight(
         .expect("Can't evaluate")
         .eval(scope)
         .unwrap();
-    Ok((extrinsic.pallet, extrinsic.name, weight))
+    let relative_weight = (weight as f64) / MAX_BLOCK_WEIGHT * 100.;
+    Ok((
+        extrinsic.pallet,
+        extrinsic.name,
+        WeightInfo {
+            weight,
+            relative_weight,
+        },
+    ))
+}
+
+fn process(
+    pallet_weights: Vec<Vec<ChromaticExtrinsic>>,
+    mut scope: Scope<Term<u128>>,
+) -> HashMap<String, HashMap<String, WeightInfo>> {
+    let mut weight_by_pallet = HashMap::new();
+    for i in pallet_weights {
+        for j in i {
+            let (pallet, extrinsic, weight) = evaluate_weight(j, &mut scope).unwrap();
+            weight_by_pallet.insert(pallet.clone(), HashMap::from([(extrinsic.clone(), weight)]));
+        }
+    }
+    weight_by_pallet
 }
-- 
GitLab