Skip to content
Snippets Groups Projects
Unverified Commit 1457b101 authored by bgallois's avatar bgallois
Browse files

rework at a lib

parent 0da77060
No related branches found
No related tags found
No related merge requests found
Pipeline #35041 failed
This commit is part of merge request !222. Comments created here will be created in the context of that merge request.
...@@ -10,6 +10,10 @@ version = '0.0.0' ...@@ -10,6 +10,10 @@ version = '0.0.0'
[workspace] [workspace]
[lib]
name = "weightanalyzer"
path = "src/lib.rs"
[dependencies] [dependencies]
subweight-core = "3.3.1" subweight-core = "3.3.1"
glob = "0.3.1" glob = "0.3.1"
...@@ -17,45 +17,63 @@ pub struct WeightInfo { ...@@ -17,45 +17,63 @@ pub struct WeightInfo {
pub relative_weight: f64, pub relative_weight: f64,
} }
fn main() { /// Returns a HashMap <pallet_name, <extrinsic_name, weigh_info>>
let pallet_weights = read_pallet_weight(); /// of the analyzed weights.
let db_weight = read_db_weight(); ///
let _overhead_weights = read_overhead_weight(); /// # Arguments
///
/// * `folder_path` - A Path to a folder where the weight files are stored.
/// `paritydb_weights.rs` is mandatory and pallet weights should start by
/// `pallet_`.
///
/// # Examples
///
/// ```
/// let weight_by_pallet = analyze_weight(Path::new("../../runtime/common/src/weights/"));
/// println!("{:?}", weight_by_pallet);
/// ```
pub fn analyze_weight(folder_path: &Path) -> Option<HashMap<String, HashMap<String, WeightInfo>>> {
let pallet_weights = read_pallet_weight(folder_path);
let db_weight = read_db_weight(folder_path);
let _overhead_weights = read_overhead_weight(folder_path);
// Initialize scope with db weights // Initialize scope with db weights
let mut scope = Scope::from_substrate(); let mut scope = Scope::from_substrate();
scope = scope.with_storage_weights(db_weight.weights.read, db_weight.weights.write); scope = scope.with_storage_weights(db_weight.weights.read, db_weight.weights.write);
let weight_by_pallet = process(pallet_weights, scope); process(pallet_weights, scope)
println!("{:?}", weight_by_pallet);
} }
fn read_pallet_weight() -> Vec<Vec<ChromaticExtrinsic>> { fn read_pallet_weight(folder_path: &Path) -> Vec<Vec<ChromaticExtrinsic>> {
let mut parsed_files = Vec::new(); let mut parsed_files = Vec::new();
for path in glob("../../runtime/common/src/weights/pallet_*") for path in glob(
.expect("No pallet found") folder_path
.filter_map(Result::ok) .join("pallet_*")
.to_str()
.expect("Invalid pallet path"),
)
.expect("Invalid pallet pattern")
.filter_map(Result::ok)
{ {
let file = subweight_core::parse::pallet::parse_file(&path); let file = subweight_core::parse::pallet::parse_file(&path);
if let Ok(file) = file { if let Ok(file) = file {
parsed_files.push(file); parsed_files.push(file);
} }
} }
if parsed_files.is_empty() {
panic!("No pallet found");
}
parsed_files parsed_files
} }
fn read_db_weight() -> Weights { fn read_db_weight(folder_path: &Path) -> Weights {
subweight_core::parse::storage::parse_file(Path::new( subweight_core::parse::storage::parse_file(folder_path.join("paritydb_weights.rs").as_path())
"../../runtime/common/src/weights/paritydb_weights.rs", .expect("No DB weights")
))
.expect("No DB weights")
} }
fn read_overhead_weight() -> Weight { fn read_overhead_weight(folder_path: &Path) -> Weight {
subweight_core::parse::overhead::parse_file(Path::new( subweight_core::parse::overhead::parse_file(folder_path.join("block_weights.rs").as_path())
"../../runtime/common/src/weights/block_weights.rs", .expect("No overhead weight")
))
.expect("No overhead weight")
} }
fn evaluate_weight( fn evaluate_weight(
...@@ -92,7 +110,10 @@ fn evaluate_weight( ...@@ -92,7 +110,10 @@ fn evaluate_weight(
fn process( fn process(
pallet_weights: Vec<Vec<ChromaticExtrinsic>>, pallet_weights: Vec<Vec<ChromaticExtrinsic>>,
mut scope: Scope<Term<u128>>, mut scope: Scope<Term<u128>>,
) -> HashMap<String, HashMap<String, WeightInfo>> { ) -> Option<HashMap<String, HashMap<String, WeightInfo>>> {
if pallet_weights.is_empty() {
return None;
}
let mut weight_by_pallet = HashMap::new(); let mut weight_by_pallet = HashMap::new();
for i in pallet_weights { for i in pallet_weights {
for j in i { for j in i {
...@@ -100,5 +121,16 @@ fn process( ...@@ -100,5 +121,16 @@ fn process(
weight_by_pallet.insert(pallet.clone(), HashMap::from([(extrinsic.clone(), weight)])); weight_by_pallet.insert(pallet.clone(), HashMap::from([(extrinsic.clone(), weight)]));
} }
} }
weight_by_pallet Some(weight_by_pallet)
}
#[cfg(test)]
mod tests {
use crate::analyze_weight;
use std::path::Path;
#[test]
fn should_works() {
let weight_by_pallet = analyze_weight(Path::new("../../runtime/common/src/weights/"));
println!("{:?}", weight_by_pallet); // cargo test -- --nocapture
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment