@@ -80,24 +80,40 @@ pub fn prefetch_tries_for_accounts<'a, Provider>(
80
80
consistent_db_view : ConsistentDbView < Provider > ,
81
81
shared_cache : SparseTrieSharedCache ,
82
82
changed_data : impl Iterator < Item = & ' a ChangedAccountData > ,
83
- ) -> Result < ( ) , SparseTrieError >
83
+ ) -> Result < SparseTrieMetrics , SparseTrieError >
84
84
where
85
85
Provider : DatabaseProviderFactory < Provider : BlockReader > + Send + Sync ,
86
86
Provider : StateCommitmentProvider ,
87
87
{
88
+ let mut metrics = SparseTrieMetrics :: default ( ) ;
89
+
90
+ let start = Instant :: now ( ) ;
88
91
let change_set = prepare_change_set_for_prefetch ( changed_data) ;
92
+ metrics. change_set_time += start. elapsed ( ) ;
89
93
90
94
let fetcher = TrieFetcher :: new ( consistent_db_view) ;
91
95
92
96
for _ in 0 ..3 {
97
+ let start = Instant :: now ( ) ;
93
98
let gather_result = shared_cache. gather_tries_for_changes ( & change_set) ;
99
+ metrics. gather_nodes_time += start. elapsed ( ) ;
94
100
95
101
let missing_nodes = match gather_result {
96
- Ok ( _) => return Ok ( ( ) ) ,
102
+ Ok ( _) => return Ok ( metrics ) ,
97
103
Err ( missing_nodes) => missing_nodes,
98
104
} ;
105
+ metrics. missing_nodes += missing_nodes. len ( ) ;
106
+
107
+ let start = Instant :: now ( ) ;
99
108
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 ( ) ;
100
115
shared_cache. update_cache_with_fetched_nodes ( multiproof) ?;
116
+ metrics. fill_cache_time += start. elapsed ( ) ;
101
117
}
102
118
103
119
Err ( SparseTrieError :: FailedToFetchData )
0 commit comments