(&self, slow_threshold: Duration)
| 2254 | /// the serialized constants alone, no kernel run. |
| 2255 | /// |
| 2256 | /// - Vertices: ingress units (a Muts block or a standalone constant), |
| 2257 | /// `serialized_size` real, `const_count` = member constants, |
| 2258 | /// `heartbeats` := size (report-only). |
| 2259 | /// - Balance weight: the partitioner's vertex weight is `block_step_cost` |
| 2260 | /// (a linear model over the op counters), so the byte weight is carried |
| 2261 | /// in `subst` — `vweight ∝ size` exactly, matching the measured-best |
| 2262 | /// bisection weight (`ix_kernel::shard::STATIC_OWNED_PER_BYTE` docs). |
| 2263 | /// - Edges: the claim-walk relation (`ixon::shard_claim::walk_edges` — |
| 2264 | /// positively-used refs + projection block pointers) at block |
| 2265 | /// granularity, deduped, self-edges dropped. These are exactly the |
| 2266 | /// edges that generate a shard's thin frontier, i.e. its ingress. |
| 2267 | #[allow(clippy::cast_possible_truncation)] // block sizes clamped to u32::MAX |
| 2268 | fn static_block_profile(env: &IxonEnv) -> BlockProfile { |
| 2269 | use rayon::prelude::*; |
| 2270 | let addrs: Vec<Address> = |
| 2271 | env.consts.iter().map(|e| e.key().clone()).collect(); |
| 2272 | // Phase 1 (parallel): parse each constant exactly ONCE. Lazy mmap |
| 2273 | // entries re-parse on every `get()` (see `LazyConstant`'s cache |
| 2274 | // policy), so the home block is derived from the constant we already |
| 2275 | // hold instead of `profile_block_of` (which would parse again), and |
| 2276 | // edge targets are kept as raw addresses to be resolved in phase 2 |
| 2277 | // through the addr→home table this pass produces. |
| 2278 | struct ConstRow { |
| 2279 | addr: Address, |
| 2280 | home: Address, |
no test coverage detected