diff --git a/resources/weight_analyzer/Cargo.toml b/resources/weight_analyzer/Cargo.toml index d7ef1f134010480f37137e00567342b8a67e2d6e..56c59b7e21cc5b10e117a43e22800756748b91b1 100644 --- a/resources/weight_analyzer/Cargo.toml +++ b/resources/weight_analyzer/Cargo.toml @@ -14,4 +14,6 @@ path = "src/lib.rs" [dependencies] subweight-core = "3.3.1" +convert_case = "0.6.0" glob = "0.3.1" +serde = { version = "1.0.101", features = ["derive"] } diff --git a/resources/weight_analyzer/src/lib.rs b/resources/weight_analyzer/src/lib.rs index ac3fd9604bd587444ed9a41cc9f69cc55dcd35ea..b289cfcba6dc42ab6598145652cb03af8847d73d 100644 --- a/resources/weight_analyzer/src/lib.rs +++ b/resources/weight_analyzer/src/lib.rs @@ -1,4 +1,6 @@ +use convert_case::{Case, Casing}; use glob::glob; +use serde::Serialize; use std::collections::HashMap; use std::ops::Div; use std::path::Path; @@ -22,7 +24,7 @@ impl Div<&MaxBlockWeight> for f64 { } } -#[derive(Debug)] +#[derive(Clone, Debug, Serialize)] pub struct WeightInfo { pub weight: u128, pub relative_weight: f64, @@ -64,14 +66,9 @@ pub fn analyze_weight( fn read_pallet_weight(folder_path: &Path) -> Vec<Vec<ChromaticExtrinsic>> { let mut parsed_files = Vec::new(); - for path in glob( - folder_path - .join("pallet_*") - .to_str() - .expect("Invalid pallet path"), - ) - .expect("Invalid pallet pattern") - .filter_map(Result::ok) + for path in glob(folder_path.join("*").to_str().expect("Invalid pallet path")) + .expect("Invalid pallet pattern") + .filter_map(Result::ok) { let file = subweight_core::parse::pallet::parse_file(&path); if let Ok(file) = file { @@ -117,7 +114,14 @@ fn evaluate_weight( .unwrap(); let relative_weight = (weight as f64) / max_block_weight * 100.; Ok(( - extrinsic.pallet, + extrinsic + .pallet + .to_case(Case::Title) + .replace("Pallet", "") + .replace(".rs", "") + .chars() + .filter(|c| !c.is_whitespace()) + .collect(), extrinsic.name, WeightInfo { weight, @@ -131,12 +135,16 @@ fn process( mut scope: Scope<Term<u128>>, max_block_weight: &MaxBlockWeight, ) -> HashMap<String, HashMap<String, WeightInfo>> { - let mut weight_by_pallet = HashMap::new(); + let mut weight_by_pallet: HashMap<String, HashMap<String, WeightInfo>> = HashMap::new(); for i in pallet_weights { for j in i { let (pallet, extrinsic, weight) = evaluate_weight(j, &mut scope, max_block_weight).unwrap(); - weight_by_pallet.insert(pallet.clone(), HashMap::from([(extrinsic.clone(), weight)])); + if let Some(i) = weight_by_pallet.get_mut(&pallet) { + i.insert(extrinsic, weight); + } else { + weight_by_pallet.insert(pallet, HashMap::from([(extrinsic, weight)])); + } } } weight_by_pallet @@ -153,6 +161,7 @@ mod tests { Path::new("../../runtime/common/src/weights/"), &MaxBlockWeight::default(), ); + assert!(weight_by_pallet.get("Balances").unwrap().len() == 7); // 7 extrinsics in pallet println!("{:?}", weight_by_pallet); // cargo test -- --nocapture } #[test]