| 182 | /// Aiur functions (indices resolve to names via the Lean |
| 183 | /// `CompiledToplevel`). Heaviest maps first, by retained G elements. |
| 184 | static QUERY_STATS: std::sync::LazyLock<bool> = |
| 185 | std::sync::LazyLock::new(|| { |
| 186 | std::env::var_os("IX_AIUR_QUERY_STATS").is_some() |
| 187 | }); |
| 188 | |
| 189 | fn dump_query_stats(record: &QueryRecord, tag: &str) { |
| 190 | let mut rows: Vec<(usize, usize, usize)> = record |
| 191 | .function_queries |
| 192 | .iter() |
| 193 | .enumerate() |
| 194 | .map(|(i, m)| (i, m.len(), m.retained_elems())) |
| 195 | .filter(|(_, n, _)| *n > 0) |
| 196 | .collect(); |
| 197 | rows.sort_by(|a, b| b.2.cmp(&a.2)); |
| 198 | let total_entries: usize = rows.iter().map(|r| r.1).sum(); |
| 199 | let total_elems: usize = rows.iter().map(|r| r.2).sum(); |
| 200 | eprintln!( |
| 201 | "[aiur-stats {tag}] function_queries: {total_entries} entries, \ |
| 202 | {total_elems} G-elems; top maps:" |
| 203 | ); |
| 204 | for (i, n, e) in rows.iter().take(30) { |
| 205 | eprintln!(" fn{i:<4} entries={n:<12} g_elems={e}"); |
| 206 | } |
| 207 | let mem: Vec<String> = record |
| 208 | .memory_queries |
| 209 | .iter() |
| 210 | .map(|(w, m)| format!("w{w}={}", m.len())) |
| 211 | .collect(); |