reth_engine_tree/tree/payload_processor/
multiproof.rs1use metrics::{Gauge, Histogram};
4use reth_metrics::Metrics;
5
6pub use reth_trie_parallel::state_root_task::{
7 evm_state_to_hashed_post_state, Source, StateHookSender, StateRootComputeOutcome,
8 StateRootHandle, StateRootMessage,
9};
10
11pub(crate) const DEFAULT_MAX_TARGETS_FOR_CHUNKING: usize = 300;
14
15#[derive(Metrics, Clone)]
16#[metrics(scope = "tree.root")]
17pub(crate) struct MultiProofTaskMetrics {
18 pub sparse_trie_reveal_multiproof_duration_histogram: Histogram,
20 pub sparse_trie_proof_coalesce_duration_histogram: Histogram,
22 pub sparse_trie_channel_wait_duration_histogram: Histogram,
24 pub sparse_trie_process_updates_duration_histogram: Histogram,
26 pub sparse_trie_final_update_duration_histogram: Histogram,
28 pub sparse_trie_total_duration_histogram: Histogram,
30 pub into_trie_for_reuse_duration_histogram: Histogram,
32 pub sparse_trie_cache_wait_duration_histogram: Histogram,
34 pub sparse_trie_idle_time_seconds: Histogram,
37 pub hashing_task_idle_time_seconds: Histogram,
40
41 pub sparse_trie_account_cache_hits: Histogram,
43 pub sparse_trie_account_cache_misses: Histogram,
45 pub sparse_trie_storage_cache_hits: Histogram,
47 pub sparse_trie_storage_cache_misses: Histogram,
49
50 pub sparse_trie_retained_memory_bytes: Gauge,
52 pub sparse_trie_retained_storage_tries: Gauge,
54}
55
56#[expect(clippy::too_many_arguments)]
59pub(crate) fn dispatch_with_chunking<T, I>(
60 items: T,
61 chunking_len: usize,
62 chunk_size: usize,
63 max_targets_for_chunking: usize,
64 has_multiple_idle_account_workers: bool,
65 has_multiple_idle_storage_workers: bool,
66 chunker: impl FnOnce(T, usize) -> I,
67 mut dispatch: impl FnMut(T),
68) where
69 I: IntoIterator<Item = T>,
70{
71 let should_chunk = chunking_len > max_targets_for_chunking ||
72 has_multiple_idle_account_workers ||
73 has_multiple_idle_storage_workers;
74
75 if should_chunk && chunking_len > chunk_size {
76 for chunk in chunker(items, chunk_size) {
77 dispatch(chunk);
78 }
79 return;
80 }
81
82 dispatch(items);
83}