From 5cfb891b593b2a040664f7246e15b0be67128c46 Mon Sep 17 00:00:00 2001 From: YK Date: Thu, 5 Feb 2026 21:00:08 +0800 Subject: [PATCH] perf(engine): single-pass fold for EvmState metrics collection (#21852) --- crates/engine/tree/src/tree/mod.rs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/crates/engine/tree/src/tree/mod.rs b/crates/engine/tree/src/tree/mod.rs index c6700ad6d5..742869aa8a 100644 --- a/crates/engine/tree/src/tree/mod.rs +++ b/crates/engine/tree/src/tree/mod.rs @@ -231,9 +231,14 @@ struct MeteredStateHook { impl OnStateHook for MeteredStateHook { fn on_state(&mut self, source: StateChangeSource, state: &EvmState) { // Update the metrics for the number of accounts, storage slots and bytecodes loaded - let accounts = state.keys().len(); - let storage_slots = state.values().map(|account| account.storage.len()).sum::(); - let bytecodes = state.values().filter(|account| !account.info.is_empty_code_hash()).count(); + let accounts = state.len(); + let (storage_slots, bytecodes) = + state.values().fold((0, 0), |(storage_slots, bytecodes), account| { + ( + storage_slots + account.storage.len(), + bytecodes + usize::from(!account.info.is_empty_code_hash()), + ) + }); self.metrics.accounts_loaded_histogram.record(accounts as f64); self.metrics.storage_slots_loaded_histogram.record(storage_slots as f64);