diff options
Diffstat (limited to 'desktop/modules/perf/Perf.qml')
| -rw-r--r-- | desktop/modules/perf/Perf.qml | 51 |
1 files changed, 16 insertions, 35 deletions
diff --git a/desktop/modules/perf/Perf.qml b/desktop/modules/perf/Perf.qml index 6216959..9ebfe45 100644 --- a/desktop/modules/perf/Perf.qml +++ b/desktop/modules/perf/Perf.qml @@ -18,19 +18,14 @@ import QtQml import "../.." import "Perf.js" as P -// The numbers behind the performance panel and the status pill's icon. CPU, -// RAM, temperatures and disks are sampled always, so the icon can warn while -// the panel is closed; per-core load, the network rate, VRAM and the fan only -// while `detailed`, which is any PerfPanel existing (the drawer page). +// The numbers behind the performance panel and the status pill's icon, all +// sampled always: the icon warns while the panel is closed, and the panel +// opens on history (the network graph) rather than an empty first sample. // /proc and /sys are FileViews reloaded on a timer, no subprocess; df, the // fdinfo scan, ip and curl are Processes. Singleton { id: root - // PerfPanel instances alive; each counts itself in and out. - property int viewers: 0 - readonly property bool detailed: viewers > 0 - // ponytail: host constants, as conky had them. One mount per NFS server // (Library and Slackware are one export, so are shared and backup); br0 // is a bridge, so VM-to-host copies show in the graph; xe puts no VRAM @@ -56,13 +51,13 @@ Singleton { property var hwmon: ({}) // chip name -> /sys/class/hwmon/hwmonN property string cpuModel: "" property var load: null // aggregate percent - property var cores: [] // percent per core, while detailed + property var cores: [] // percent per core property var mem: null // {total, used} bytes property var temps: [] // [{label, value, warn, crit}], value null if unread property var disks: [] // Perf.js df rows - property var vram: null // bytes, while detailed - property var fan: null // rpm, while detailed - property var rx: [] // bytes/s, newest last, while detailed + property var vram: null // bytes + property var fan: null // rpm + property var rx: [] // bytes/s, newest last property var tx: [] property string lan: "" property var pub: null // {ip, fetched} @@ -100,18 +95,9 @@ Singleton { pubProc.running = true; } - onDetailedChanged: { - if (detailed) { - if (!root.lan) lanProc.running = true; - root.fetchPubip(); - } else { - root.cores = []; - root.rx = []; - root.tx = []; - root.prevNet = null; - root.vram = null; - root.fan = null; - } + Component.onCompleted: { + lanProc.running = true; + root.fetchPubip(); } // --- /proc and /sys --------------------------------------------------- @@ -162,7 +148,6 @@ Singleton { stdout: StdioCollector { onStreamFinished: root.hwmon = P.hwmonMap(text) } } - // CPU, RAM and temperatures always; the fan and VRAM while detailed. Timer { interval: 2000 running: true @@ -174,9 +159,7 @@ Singleton { stat.reload(); const cur = P.cpuTimes(stat.text()); root.load = P.load(root.prevCpu[0], cur[0]); - root.cores = root.detailed - ? cur.slice(1).map((c, i) => P.load(root.prevCpu[i + 1], c) ?? 0) - : []; + root.cores = cur.slice(1).map((c, i) => P.load(root.prevCpu[i + 1], c) ?? 0); root.prevCpu = cur; meminfo.reload(); @@ -196,15 +179,13 @@ Singleton { } root.temps = t; - if (root.detailed) { - if (fanView.path) { fanView.reload(); root.fan = root.num(fanView); } - if (!vramProc.running) vramProc.running = true; - } + if (fanView.path) { fanView.reload(); root.fan = root.num(fanView); } + if (!vramProc.running) vramProc.running = true; } } - // ponytail: a shell glob over every fd on the system, ~14ms; only while - // the panel is open. Only the user's own processes are readable, so a + // ponytail: a shell glob over every fd on the system, ~14ms every 2s, + // always; gate it on the panel again if that shows up. Only the user's own processes are readable, so a // system service's GPU use is not counted, as in conky. Process { id: vramProc @@ -217,7 +198,7 @@ Singleton { Timer { interval: 1000 - running: root.detailed + running: true repeat: true triggeredOnStart: true onTriggered: { |
