slstatus

My fork of https://tools.suckless.org/slstatus/
git clone https://git.inz.fi/slstatus
Log | Files | Refs | README | LICENSE

commit 2b82bf02488147a3e69a715267934f015fe29a43
parent efb41724b5499bf61ab65ff65908d686e59ecdc0
Author: Aaron Marcher <me@drkhsh.at>
Date:   Sun,  6 May 2018 17:48:37 +0200

cpu_perc: Port to OpenBSD

In OpenBSD the CPU usage in percent is now computed using KERN_CPTIME
sysctl.

Diffstat:
MREADME | 2+-
Mcomponents/cpu.c | 35+++++++++++++++++++++++++++++++++++
2 files changed, 36 insertions(+), 1 deletion(-)

diff --git a/README b/README @@ -62,5 +62,5 @@ Porting to OpenBSD is the current goal before thinking about a release. The following functions are not portable at the moment: - wifi_{perc,essid} -- cpu_{perc,iowait} +- cpu_iowait - entropy diff --git a/components/cpu.c b/components/cpu.c @@ -68,6 +68,8 @@ return bprintf("%d", perc); } #elif defined(__OpenBSD__) + #include <sys/param.h> + #include <sys/sched.h> #include <sys/sysctl.h> const char * @@ -89,4 +91,37 @@ return bprintf("%d", freq); } + + const char * + cpu_perc(void) + { + int mib[2], perc; + static int valid; + static long int a[CPUSTATES]; + long int b[CPUSTATES]; + size_t size; + + mib[0] = CTL_KERN; + mib[1] = KERN_CPTIME; + + size = sizeof(a); + + memcpy(b, a, sizeof(b)); + if (sysctl(mib, 2, &a, &size, NULL, 0) == -1) { + fprintf(stderr, "sysctl 'KERN_CPTIME': %s\n", strerror(errno)); + return NULL; + } + if (!valid) { + valid = 1; + return NULL; + } + + perc = 100 * + ((a[CP_USER]+a[CP_NICE]+a[CP_SYS]+a[CP_INTR]) - + (b[CP_USER]+b[CP_NICE]+b[CP_SYS]+b[CP_INTR])) / + ((a[CP_USER]+a[CP_NICE]+a[CP_SYS]+a[CP_INTR]+a[CP_IDLE]) - + (b[CP_USER]+b[CP_NICE]+b[CP_SYS]+b[CP_INTR]+b[CP_IDLE])); + + return bprintf("%d", perc); + } #endif