Slobodan Predolac
184f304dd3
Refactor stats.c: separate gathering from emission; read top-down
...
src/stats.c fused mallctl reads with dual-format (text/JSON) emission inside a
few very large, bottom-up functions, behind dense macros, with the public entry
point at the very bottom. Rework it to be output-preserving but much easier to
read and extend:
- Separate gathering from emission where it is worth it: most sections become a
small gather (stats_gather_*, the mallctl reads into a typed struct) plus an
emit that renders it, with the plumbing macros (CTL_*, COL*) and gather
structs moved to internal header (stats_internal.h). This is a balance,
not a rule: the per-size-class tables stay O(1) streaming (per-row gather+emit,
no large stack buffers, avoiding heap buffering), the mutex rows keep reading
straight into emitter columns, and the already-readable config/opt probes are
left as they are.
- Read like the output: open with a table-of-contents comment and the public
stats_print(), then the section functions top-down, keeping the
interval/boot/fork plumbing at the bottom. The ToC names the function that
prints each section, and its JSON sub-path.
- Keep one emission engine: the emitter remains the single dual-format renderer,
so each section has one rendering path rather than parallel renderers (the two
formats are not field-identical). Move some table-only concerns into it --
gap-collapsing ("---") and a dual columnar row op (emitter_row) -- so section
code carries less table-format detail.
Output-preserving: text is byte-identical and JSON keys/values are unchanged.
2026-07-20 07:30:52 -04:00
..
2026-04-30 15:17:18 -04:00
2017-02-23 08:57:02 -08:00
2017-02-23 08:57:02 -08:00
2026-03-10 18:14:33 -07:00
2026-05-13 17:50:41 -04:00
2026-03-10 18:14:33 -07:00
2026-07-16 21:52:34 -07:00
2026-03-10 18:14:33 -07:00
2026-07-16 21:52:34 -07:00
2026-06-11 11:45:05 -04:00
2026-06-11 11:45:05 -04:00
2026-03-10 18:14:33 -07:00
2025-05-28 19:21:49 -07:00
2026-03-10 18:14:33 -07:00
2026-06-11 11:45:05 -04:00
2026-06-11 11:45:05 -04:00
2026-05-22 23:34:10 -07:00
2026-06-11 11:45:05 -04:00
2026-03-10 18:14:33 -07:00
2026-03-10 18:14:33 -07:00
2026-03-10 18:14:33 -07:00
2026-04-01 23:15:19 -04:00
2026-03-10 18:14:33 -07:00
2026-03-10 18:14:33 -07:00
2026-07-16 21:52:34 -07:00
2026-03-10 18:14:33 -07:00
2026-06-02 13:24:23 -04:00
2020-10-15 10:03:16 -07:00
2026-03-10 18:14:33 -07:00
2026-06-01 18:18:31 -04:00
2026-07-20 07:30:52 -04:00
2026-06-01 18:18:31 -04:00
2026-05-05 10:44:28 -07:00
2026-05-12 13:14:39 -04:00
2026-03-10 18:14:33 -07:00
2026-03-10 18:14:33 -07:00
2026-07-16 21:52:34 -07:00
2026-03-10 18:14:33 -07:00
2026-03-10 18:14:33 -07:00
2026-05-12 13:43:16 -07:00
2026-03-10 18:14:33 -07:00
2026-06-11 11:45:05 -04:00
2026-05-21 13:07:08 -07:00
2026-06-27 22:57:48 -04:00
2026-03-10 18:14:33 -07:00
2026-06-27 22:57:48 -04:00
2026-03-10 18:14:33 -07:00
2026-06-27 22:57:48 -04:00
2025-04-25 19:19:03 -07:00
2026-06-27 22:57:48 -04:00
2026-03-10 18:14:33 -07:00
2026-07-16 21:52:34 -07:00
2026-03-10 18:14:33 -07:00
2026-06-11 11:45:05 -04:00
2026-03-10 18:14:33 -07:00
2026-06-02 13:24:23 -04:00
2021-12-22 20:10:28 -08:00
2026-05-11 16:23:09 -07:00
2026-06-24 10:54:34 -07:00
2017-02-23 08:57:02 -08:00
2017-02-23 08:57:02 -08:00
2017-02-23 08:57:02 -08:00
2017-02-23 08:57:02 -08:00
2026-03-10 18:14:33 -07:00
2017-02-23 08:57:02 -08:00
2026-04-01 23:15:19 -04:00
2026-03-10 18:14:33 -07:00
2026-07-18 11:51:02 -07:00
2026-06-02 13:24:23 -04:00
2020-03-31 06:25:08 -07:00
2026-06-04 11:32:53 -04:00
2026-04-01 23:15:19 -04:00
2026-03-10 18:14:33 -07:00
2026-03-10 18:14:33 -07:00
2026-03-10 18:14:33 -07:00
2026-03-10 18:14:33 -07:00
2026-03-10 18:14:33 -07:00
2026-06-11 11:45:05 -04:00
2026-03-10 18:14:33 -07:00
2026-04-01 23:15:19 -04:00
2026-07-16 21:52:34 -07:00
2026-07-16 21:52:34 -07:00
2026-06-24 10:54:34 -07:00
2026-07-16 21:52:34 -07:00
2026-03-10 18:14:33 -07:00
2017-05-18 11:33:45 -07:00
2026-03-10 18:14:33 -07:00
2026-03-10 18:14:33 -07:00
2026-07-16 14:53:25 -07:00
2026-07-16 14:53:25 -07:00
2026-03-10 18:14:33 -07:00
2026-03-10 18:14:33 -07:00
2026-06-11 11:45:05 -04:00
2017-02-23 08:57:02 -08:00
2026-06-11 11:45:05 -04:00
2021-12-22 20:10:28 -08:00
2026-03-10 18:14:33 -07:00
2024-04-09 12:57:01 -07:00
2026-06-06 10:01:00 -04:00
2022-09-12 13:56:22 -07:00
2026-03-10 18:14:33 -07:00
2017-04-21 10:06:12 -07:00
2026-06-11 11:45:05 -04:00
2021-12-22 20:10:28 -08:00
2026-03-10 18:14:33 -07:00
2020-06-29 14:27:50 -07:00
2026-06-11 11:45:05 -04:00
2023-05-11 09:10:57 -07:00
2026-06-11 11:45:05 -04:00
2019-12-30 15:58:57 -08:00
2026-03-10 18:14:33 -07:00
2023-07-03 16:19:06 -07:00
2026-03-10 18:14:33 -07:00
2021-12-22 20:10:28 -08:00
2026-03-10 18:14:33 -07:00
2021-12-22 20:10:28 -08:00
2026-06-11 11:45:05 -04:00
2021-12-22 20:10:28 -08:00
2026-03-10 18:14:33 -07:00
2017-02-23 08:57:02 -08:00
2026-06-11 11:45:05 -04:00
2026-03-10 18:14:33 -07:00
2026-03-10 18:14:33 -07:00
2026-03-10 18:14:33 -07:00
2026-03-10 18:14:33 -07:00
2026-03-10 18:14:33 -07:00
2026-06-02 13:24:23 -04:00
2021-12-22 20:10:28 -08:00
2026-06-04 11:32:53 -04:00
2026-03-10 18:14:33 -07:00
2021-12-15 10:39:17 -08:00
2026-03-10 18:14:33 -07:00
2026-06-24 10:54:34 -07:00
2026-03-10 18:14:33 -07:00
2026-06-02 13:24:23 -04:00
2021-12-22 20:10:28 -08:00
2026-05-27 11:39:04 -04:00
2025-05-06 14:47:35 -07:00
2026-06-04 11:32:53 -04:00
2026-03-10 18:14:33 -07:00
2026-03-10 18:14:33 -07:00
2026-03-10 18:14:33 -07:00
2026-06-04 11:32:53 -04:00
2026-06-11 11:45:05 -04:00
2026-06-18 13:02:23 -04:00
2026-03-10 18:14:33 -07:00
2026-04-01 23:15:19 -04:00
2024-06-25 12:59:45 -07:00
2026-03-10 18:14:33 -07:00
2026-03-10 18:14:33 -07:00
2019-11-04 11:15:50 -08:00
2026-03-10 18:14:33 -07:00
2026-07-09 11:30:15 -04:00
2026-06-02 13:24:23 -04:00
2026-03-10 18:14:33 -07:00
2026-06-02 13:24:23 -04:00
2019-10-29 17:48:44 -07:00
2026-03-10 18:14:33 -07:00
2022-04-20 10:27:25 -07:00
2026-03-10 18:14:33 -07:00
2019-10-29 17:48:44 -07:00
2026-03-10 18:14:33 -07:00
2019-10-29 17:48:44 -07:00
2026-03-10 18:14:33 -07:00
2017-02-23 08:57:02 -08:00