From 32ae9f8478c7b5051066d1181c9473a067469eb8 Mon Sep 17 00:00:00 2001 From: Dmitry Sinyavin Date: Fri, 19 Aug 2022 12:24:52 +0200 Subject: [PATCH] Additional metrics --- src/stack_limiter/max_height.rs | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/stack_limiter/max_height.rs b/src/stack_limiter/max_height.rs index 3f6e0ba..96f2840 100644 --- a/src/stack_limiter/max_height.rs +++ b/src/stack_limiter/max_height.rs @@ -19,6 +19,9 @@ pub struct StackHeightStats { pub locals_count: u32, pub params_count: u32, pub blocks_count: u32, + pub push_count: u32, + pub local_set_count: u32, + pub opcode_count: u32, pub total_cost: u32, } @@ -173,6 +176,8 @@ pub fn compute(func_idx: u32, module: &elements::Module) -> Result Result { stack.push_values(1)?; + push_count += 1; }, SetLocal(_) => { stack.pop_values(1)?; + local_set_count += 1; }, TeeLocal(_) => { // This instruction pops and pushes the value, so // effectively it doesn't modify the stack height. stack.pop_values(1)?; stack.push_values(1)?; + local_set_count += 1; }, GetGlobal(_) => { stack.push_values(1)?; + push_count += 1; }, SetGlobal(_) => { stack.pop_values(1)?; @@ -358,6 +368,7 @@ pub fn compute(func_idx: u32, module: &elements::Module) -> Result Result { // Pushes current memory size stack.push_values(1)?; + push_count += 1; }, GrowMemory(_) => { // Grow memory takes the value of pages to grow and pushes stack.pop_values(1)?; stack.push_values(1)?; + push_count += 1; }, I32Const(_) | I64Const(_) | F32Const(_) | F64Const(_) => { // These instructions just push the single literal value onto the stack. stack.push_values(1)?; + push_count += 1; }, I32Eqz | I64Eqz => { @@ -393,6 +407,7 @@ pub fn compute(func_idx: u32, module: &elements::Module) -> Result Result Result Result Result Result { stack.pop_values(1)?; stack.push_values(1)?; + push_count += 1; }, } @@ -471,7 +491,11 @@ pub fn compute(func_idx: u32, module: &elements::Module) -> Result