@@ -80,24 +80,40 @@ pub fn prefetch_tries_for_accounts<'a, Provider>(
8080 consistent_db_view : ConsistentDbView < Provider > ,
8181 shared_cache : SparseTrieSharedCache ,
8282 changed_data : impl Iterator < Item = & ' a ChangedAccountData > ,
83- ) -> Result < ( ) , SparseTrieError >
83+ ) -> Result < SparseTrieMetrics , SparseTrieError >
8484where
8585 Provider : DatabaseProviderFactory < Provider : BlockReader > + Send + Sync ,
8686 Provider : StateCommitmentProvider ,
8787{
88+ let mut metrics = SparseTrieMetrics :: default ( ) ;
89+
90+ let start = Instant :: now ( ) ;
8891 let change_set = prepare_change_set_for_prefetch ( changed_data) ;
92+ metrics. change_set_time += start. elapsed ( ) ;
8993
9094 let fetcher = TrieFetcher :: new ( consistent_db_view) ;
9195
9296 for _ in 0 ..3 {
97+ let start = Instant :: now ( ) ;
9398 let gather_result = shared_cache. gather_tries_for_changes ( & change_set) ;
99+ metrics. gather_nodes_time += start. elapsed ( ) ;
94100
95101 let missing_nodes = match gather_result {
96- Ok ( _) => return Ok ( ( ) ) ,
102+ Ok ( _) => return Ok ( metrics ) ,
97103 Err ( missing_nodes) => missing_nodes,
98104 } ;
105+ metrics. missing_nodes += missing_nodes. len ( ) ;
106+
107+ let start = Instant :: now ( ) ;
99108 let multiproof = fetcher. fetch_missing_nodes ( missing_nodes) ?;
109+
110+ metrics. fetch_iterations += 1 ;
111+ metrics. fetch_nodes_time += start. elapsed ( ) ;
112+ metrics. fetched_nodes += multiproof. len ( ) ;
113+
114+ let start = Instant :: now ( ) ;
100115 shared_cache. update_cache_with_fetched_nodes ( multiproof) ?;
116+ metrics. fill_cache_time += start. elapsed ( ) ;
101117 }
102118
103119 Err ( SparseTrieError :: FailedToFetchData )
0 commit comments