diff options
author | Baptiste Daroussin <bapt@FreeBSD.org> | 2011-07-24 01:36:33 +0000 |
---|---|---|
committer | Michael Stapelberg <michael@stapelberg.de> | 2011-07-24 02:12:22 +0200 |
commit | f288fd2e4fb2c2861d6d417fb8bfff5f0a297749 (patch) | |
tree | 75bf3ac20ee48fe1319a6e42ce280894c42c7c48 /src/print_cpu_usage.c | |
parent | 342f942f15a79a2a149485c2c00810919aa7c927 (diff) |
Add support for cpu usage on FreeBSD
Diffstat (limited to 'src/print_cpu_usage.c')
-rw-r--r-- | src/print_cpu_usage.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/print_cpu_usage.c b/src/print_cpu_usage.c index d5913b0..71fc5b7 100644 --- a/src/print_cpu_usage.c +++ b/src/print_cpu_usage.c @@ -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; @@ -36,6 +42,25 @@ void print_cpu_usage(const char *format) { 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 != '%') { putchar(*walk); |