summaryrefslogtreecommitdiffstats
path: root/openbsd/Platform.c
diff options
context:
space:
mode:
authorChristian Göttsche <cgzones@googlemail.com>2021-06-12 18:17:28 +0200
committerBenny Baumann <BenBE@geshi.org>2021-07-18 07:44:02 +0200
commit41af31be7ffbd34518b27aad56a4f54af6a8adf3 (patch)
tree6e86813a332e93f7ee22b873d7522fa766b4af97 /openbsd/Platform.c
parentc9abd788b17ab28424961310b7e224498510780c (diff)
Rework CPU counting
Currently htop does not support offline CPUs and hot-swapping, e.g. via echo 0 > /sys/devices/system/cpu/cpu2/online Split the current single cpuCount variable into activeCPUs and existingCPUs. Supersedes: #650 Related: #580
Diffstat (limited to 'openbsd/Platform.c')
-rw-r--r--openbsd/Platform.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/openbsd/Platform.c b/openbsd/Platform.c
index 1afbdfde..2116cccb 100644
--- a/openbsd/Platform.c
+++ b/openbsd/Platform.c
@@ -169,11 +169,25 @@ int Platform_getMaxPid() {
double Platform_setCPUValues(Meter* this, unsigned int cpu) {
const OpenBSDProcessList* pl = (const OpenBSDProcessList*) this->pl;
- const CPUData* cpuData = &(pl->cpus[cpu]);
- double total = cpuData->totalPeriod == 0 ? 1 : cpuData->totalPeriod;
+ const CPUData* cpuData = NULL;
+ double total;
double totalPercent;
double* v = this->values;
+ for (unsigned int i = 0; i < pl->super.activeCPUs; i++) {
+ if (pl->cpus[i].cpuIndex == cpu) {
+ cpuData = &(pl->cpus[i]);
+ break;
+ }
+ }
+
+ if (!cpuData) {
+ this->curItems = 0;
+ return NAN;
+ }
+
+ total = cpuData->totalPeriod == 0 ? 1 : cpuData->totalPeriod;
+
v[CPU_METER_NICE] = cpuData->nicePeriod / total * 100.0;
v[CPU_METER_NORMAL] = cpuData->userPeriod / total * 100.0;
if (this->pl->settings->detailedCPUTime) {

© 2014-2024 Faster IT GmbH | imprint | privacy policy