netstar pushed a commit to branch master.

http://git.enlightenment.org/apps/evisum.git/commit/?id=56f2667451c3cf791beb9cee05874337a8b51353

commit 56f2667451c3cf791beb9cee05874337a8b51353
Author: Alastair Poole <alastair.po...@int6.co.uk>
Date:   Sat May 25 16:24:55 2019 +0100

    OpenBSD: Unified CPU polling API.
    
    Further testing proves we can use one approach for both SP and MP
    machines.
---
 src/system.c        | 49 +++++++++----------------------------------------
 src/tingle/tingle.c | 49 +++++++++----------------------------------------
 2 files changed, 18 insertions(+), 80 deletions(-)

diff --git a/src/system.c b/src/system.c
index 67462fe..9808bc2 100644
--- a/src/system.c
+++ b/src/system.c
@@ -253,24 +253,26 @@ _cpu_state_get(cpu_core_t **cores, int ncpu)
    memset(&cpu_times, 0, CPU_STATES * sizeof(struct cpustats));
    if (!ncpu)
      return;
-   if (ncpu == 1)
+
+   for (i = 0; i < ncpu; i++)
      {
-        core = cores[0];
-        int cpu_time_mib[] = { CTL_KERN, KERN_CPTIME };
+        core = cores[i];
+        int cpu_time_mib[] = { CTL_KERN, KERN_CPUSTATS, 0 };
         size = sizeof(struct cpustats);
-        if (sysctl(cpu_time_mib, 2, &cpu_times[0], &size, NULL, 0) < 0)
+        cpu_time_mib[2] = i;
+        if (sysctl(cpu_time_mib, 3, &cpu_times[i], &size, NULL, 0) < 0)
           return;
 
         total = 0;
         for (j = 0; j < CPU_STATES; j++)
-          total += cpu_times[0].cs_time[j];
+          total += cpu_times[i].cs_time[j];
 
-        idle = cpu_times[0].cs_time[CP_IDLE];
+        idle = cpu_times[i].cs_time[CP_IDLE];
 
         diff_total = total - core->total;
-        diff_idle = idle - core->idle;
         if (diff_total == 0) diff_total = 1;
 
+        diff_idle = idle - core->idle;
         ratio = diff_total / 100.0;
         used = diff_total - diff_idle;
         percent = used / ratio;
@@ -283,39 +285,6 @@ _cpu_state_get(cpu_core_t **cores, int ncpu)
         core->total = total;
         core->idle = idle;
      }
-   else if (ncpu > 1)
-     {
-        for (i = 0; i < ncpu; i++) {
-             core = cores[i];
-             int cpu_time_mib[] = { CTL_KERN, KERN_CPUSTATS, 0 };
-             size = sizeof(struct cpustats);
-             cpu_time_mib[2] = i;
-             if (sysctl(cpu_time_mib, 3, &cpu_times[i], &size, NULL, 0) < 0)
-               return;
-
-             total = 0;
-             for (j = 0; j < CPU_STATES; j++)
-               total += cpu_times[i].cs_time[j];
-
-             idle = cpu_times[i].cs_time[CP_IDLE];
-
-             diff_total = total - core->total;
-             if (diff_total == 0) diff_total = 1;
-
-             diff_idle = idle - core->idle;
-             ratio = diff_total / 100.0;
-             used = diff_total - diff_idle;
-             percent = used / ratio;
-
-             if (percent > 100) percent = 100;
-             else if (percent < 0)
-               percent = 0;
-
-             core->percent = percent;
-             core->total = total;
-             core->idle = idle;
-          }
-     }
 #elif defined(__linux__)
    char *buf, name[128];
    int i;
diff --git a/src/tingle/tingle.c b/src/tingle/tingle.c
index aa430ac..454ef4a 100644
--- a/src/tingle/tingle.c
+++ b/src/tingle/tingle.c
@@ -322,24 +322,26 @@ _cpu_state_get(cpu_core_t **cores, int ncpu)
    memset(&cpu_times, 0, CPU_STATES * sizeof(struct cpustats));
    if (!ncpu)
      return;
-   if (ncpu == 1)
+
+   for (i = 0; i < ncpu; i++)
      {
-        core = cores[0];
-        int cpu_time_mib[] = { CTL_KERN, KERN_CPTIME };
+        core = cores[i];
+        int cpu_time_mib[] = { CTL_KERN, KERN_CPUSTATS, 0 };
         size = sizeof(struct cpustats);
-        if (sysctl(cpu_time_mib, 2, &cpu_times[0], &size, NULL, 0) < 0)
+        cpu_time_mib[2] = i;
+        if (sysctl(cpu_time_mib, 3, &cpu_times[i], &size, NULL, 0) < 0)
           return;
 
         total = 0;
         for (j = 0; j < CPU_STATES; j++)
-          total += cpu_times[0].cs_time[j];
+          total += cpu_times[i].cs_time[j];
 
-        idle = cpu_times[0].cs_time[CP_IDLE];
+        idle = cpu_times[i].cs_time[CP_IDLE];
 
         diff_total = total - core->total;
-        diff_idle = idle - core->idle;
         if (diff_total == 0) diff_total = 1;
 
+        diff_idle = idle - core->idle;
         ratio = diff_total / 100.0;
         used = diff_total - diff_idle;
         percent = used / ratio;
@@ -352,39 +354,6 @@ _cpu_state_get(cpu_core_t **cores, int ncpu)
         core->total = total;
         core->idle = idle;
      }
-   else if (ncpu > 1)
-     {
-        for (i = 0; i < ncpu; i++) {
-             core = cores[i];
-             int cpu_time_mib[] = { CTL_KERN, KERN_CPUSTATS, 0 };
-             size = sizeof(struct cpustats);
-             cpu_time_mib[2] = i;
-             if (sysctl(cpu_time_mib, 3, &cpu_times[i], &size, NULL, 0) < 0)
-               return;
-
-            total = 0;
-             for (j = 0; j < CPU_STATES; j++)
-               total += cpu_times[i].cs_time[j];
-
-             idle = cpu_times[i].cs_time[CP_IDLE];
-
-             diff_total = total - core->total;
-             if (diff_total == 0) diff_total = 1;
-
-             diff_idle = idle - core->idle;
-             ratio = diff_total / 100.0;
-             used = diff_total - diff_idle;
-             percent = used / ratio;
-
-             if (percent > 100) percent = 100;
-             else if (percent < 0)
-               percent = 0;
-
-             core->percent = percent;
-             core->total = total;
-             core->idle = idle;
-          }
-     }
 #elif defined(__linux__)
    char *buf, name[128];
    int i;

-- 


Reply via email to