83 lines
3.0 KiB
C
83 lines
3.0 KiB
C
/*
|
|
* process_info.h — process and per-tab performance diagnostics
|
|
*
|
|
* Provides the data backing for the sovereign://processes internal page.
|
|
* Two layers:
|
|
*
|
|
* Layer 1 — process view: enumerates the main browser PID, the WebKit
|
|
* child processes (renderer / network / gpu / storage) and
|
|
* the managed Tor/FIPS subprocesses, reading /proc for CPU%,
|
|
* RSS/PSS/USS, threads, uptime, I/O, FD count, cmdline, and
|
|
* service state. CPU% is computed from utime+stime deltas
|
|
* between successive calls (top-style).
|
|
*
|
|
* Layer 2 — per-tab probe: a JS user script (www/js/perf-probe.js)
|
|
* injected into every non-sovereign:// page reports a
|
|
* 1-second batch of long-task, timer, network, heap, and
|
|
* FPS samples via sovereign://processes/probe-report. The
|
|
* latest report per tab index is stored here and exposed to
|
|
* the UI and to MCP tools.
|
|
*
|
|
* All /proc parsing is Linux-specific and dependency-free.
|
|
*/
|
|
|
|
#ifndef PROCESS_INFO_H
|
|
#define PROCESS_INFO_H
|
|
|
|
#include "../nostr_core_lib/cjson/cJSON.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*
|
|
* Build the Layer 1 process list as a cJSON array (caller frees).
|
|
* Shape:
|
|
* [{ "pid":123, "name":"...", "cmdline":"...", "state":"R",
|
|
* "ppid":1, "cpu_percent":2.1, "rss_kb":..., "pss_kb":...,
|
|
* "uss_kb":..., "vmpeak_kb":..., "vmswap_kb":...,
|
|
* "threads":12, "uptime_sec":..., "io_read_kb":...,
|
|
* "io_write_kb":..., "fd_count":..., "ownership":"main",
|
|
* "service_state":"ready" (Tor/FIPS only),
|
|
* "hosted_tabs":[ {"index":3,"title":"...","url":"..."}, ... ]
|
|
* (renderers only) }]
|
|
*
|
|
* The first call returns cpu_percent 0 for every process (no baseline);
|
|
* subsequent calls return accurate deltas. Caller should poll ~1s.
|
|
*/
|
|
cJSON *process_info_get_processes_json(void);
|
|
|
|
/*
|
|
* Build the Layer 2 tab list as a cJSON array (caller frees).
|
|
* Combines tab_manager state (index, title, url, WebProcess pid) with
|
|
* the most recent probe report for each tab (if any).
|
|
* Shape:
|
|
* [{ "index":3, "title":"...", "url":"...", "webprocess_pid":12367,
|
|
* "is_internal":true,
|
|
* "probe": { ...latest probe report, or null... } }]
|
|
*/
|
|
cJSON *process_info_get_tabs_json(void);
|
|
|
|
/*
|
|
* Build a drill-down JSON object for a single tab (caller frees).
|
|
* Returns the full latest probe report (including the long-task
|
|
* timeline and top sources) plus the tab's identity fields.
|
|
* Returns NULL if the tab index is out of range.
|
|
*/
|
|
cJSON *process_info_get_tab_probe_json(int tab_index);
|
|
|
|
/*
|
|
* Record a probe report received from a page's perf-probe.js.
|
|
* Takes ownership of `probe` (frees it). `tab_index` is the
|
|
* sovereign://processes/probe-report?tab_index=N query value.
|
|
* Stores a copy of the report fields; the timeline and top_sources
|
|
* arrays are preserved for the drill-down view.
|
|
*/
|
|
void process_info_record_probe(int tab_index, cJSON *probe);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* PROCESS_INFO_H */
|