]> git.sur5r.net Git - i3/i3status/commitdiff
Add support for cpu usage on FreeBSD
authorBaptiste Daroussin <bapt@FreeBSD.org>
Sun, 24 Jul 2011 01:36:33 +0000 (01:36 +0000)
committerMichael Stapelberg <michael@stapelberg.de>
Sun, 24 Jul 2011 00:12:22 +0000 (02:12 +0200)
src/print_cpu_usage.c

index d5913b0166df76ce0a2469c523a5846e75ff4f83..71fc5b7b97ea02a8da441e600e86f35cae99b7b2 100644 (file)
@@ -4,6 +4,12 @@
 #include <stdio.h>
 #include <string.h>
 
+#ifdef __FreeBSD__
+#include <sys/types.h>
+#include <sys/sysctl.h>
+#include <sys/dkstat.h>
+#endif
+
 #include "i3status.h"
 
 static int prev_total = 0;
@@ -35,6 +41,25 @@ void print_cpu_usage(const char *format) {
         diff_usage = (1000 * (diff_total - diff_idle)/diff_total + 5)/10;
         prev_total = curr_total;
         prev_idle  = curr_idle;
+#endif
+#if defined(__FreeBSD__)
+        size_t size;
+        long cp_time[CPUSTATES];
+        size = sizeof cp_time;
+        if (sysctlbyname("kern.cp_time", &cp_time, &size, NULL, 0) < 0){
+                return;
+        }
+        curr_user = cp_time[CP_USER];
+        curr_nice = cp_time[CP_NICE];
+        curr_system = cp_time[CP_SYS];
+        curr_idle = cp_time[CP_IDLE];
+        curr_total = curr_user + curr_nice + curr_system + curr_idle;
+        diff_idle  = curr_idle - prev_idle;
+        diff_total = curr_total - prev_total;
+        diff_usage = (1000 * (diff_total - diff_idle)/diff_total + 5)/10;
+        prev_total = curr_total;
+        prev_idle  = curr_idle;
+
 #endif
         for (walk = format; *walk != '\0'; walk++) {
                 if (*walk != '%') {