swap: add support for macOS

This commit is contained in:
Pierre Pronchery 2022-05-14 00:03:59 +02:00
parent e26c30c2f4
commit 57f536298f

View File

@ -19,11 +19,13 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <errno.h> #include <errno.h>
#if defined(__FreeBSD__) #if defined(__APPLE__) || defined(__FreeBSD__)
# include <sys/types.h> # include <sys/types.h>
# include <sys/sysctl.h> # include <sys/sysctl.h>
# include <sys/vmmeter.h> # include <sys/vmmeter.h>
# if defined(__FreeBSD__)
# include <vm/vm_param.h> # include <vm/vm_param.h>
# endif
#elif defined(__linux__) #elif defined(__linux__)
# include <sys/sysinfo.h> # include <sys/sysinfo.h>
#elif defined(__NetBSD__) #elif defined(__NetBSD__)
@ -151,6 +153,9 @@ static void _swap_destroy(Swap * swap)
/* accessors */ /* accessors */
static void _swap_set(Swap * swap, gdouble level) static void _swap_set(Swap * swap, gdouble level)
{ {
#ifdef DEBUG
fprintf(stderr, "DEBUG: %s(%f)\n", __func__, level);
#endif
#if GTK_CHECK_VERSION(3, 8, 0) #if GTK_CHECK_VERSION(3, 8, 0)
gtk_level_bar_set_value(GTK_LEVEL_BAR(swap->scale), level); gtk_level_bar_set_value(GTK_LEVEL_BAR(swap->scale), level);
#elif GTK_CHECK_VERSION(3, 6, 0) #elif GTK_CHECK_VERSION(3, 6, 0)
@ -166,21 +171,36 @@ static void _swap_set(Swap * swap, gdouble level)
/* swap_on_timeout */ /* swap_on_timeout */
static gboolean _swap_on_timeout(gpointer data) static gboolean _swap_on_timeout(gpointer data)
{ {
#if defined(__FreeBSD__)
Swap * swap = data; Swap * swap = data;
int mib[] = { CTL_VM, VM_TOTAL }; #if defined(__APPLE__)
struct vmmeter t; int mib[] = { CTL_VM, VM_SWAPUSAGE };
size_t size = sizeof(t); struct xsw_usage sw;
size_t size = sizeof(sw);
gdouble value; gdouble value;
if(sysctl(mib, 2, &t, &size, NULL, 0) < 0) if(sysctl(mib, 2, &sw, &size, NULL, 0) != 0)
{
error_set("%s: %s: %s", applet.name, "sysctl",
strerror(errno));
return swap->helper->error(NULL, error_get(NULL), TRUE);
}
value = sw.xsu_used;
value /= sw.xsu_total;
_swap_set(swap, value);
return TRUE; return TRUE;
value = t.t_rm; #elif defined(__FreeBSD__)
value /= t.t_vm; int mib[] = { CTL_VM, VM_TOTAL };
struct vmmeter vm;
size_t size = sizeof(vm);
gdouble value;
if(sysctl(mib, 2, &vm, &size, NULL, 0) < 0)
return TRUE;
value = vm.t_avm;
value /= vm.t_vm;
_swap_set(swap, value); _swap_set(swap, value);
return TRUE; return TRUE;
#elif defined(__linux__) #elif defined(__linux__)
Swap * swap = data;
struct sysinfo sy; struct sysinfo sy;
gdouble value; gdouble value;
@ -192,7 +212,6 @@ static gboolean _swap_on_timeout(gpointer data)
_swap_set(swap, value); _swap_set(swap, value);
return TRUE; return TRUE;
#elif defined(__NetBSD__) #elif defined(__NetBSD__)
Swap * swap = data;
int mib[] = { CTL_VM, VM_UVMEXP }; int mib[] = { CTL_VM, VM_UVMEXP };
struct uvmexp ue; struct uvmexp ue;
size_t size = sizeof(ue); size_t size = sizeof(ue);
@ -205,7 +224,6 @@ static gboolean _swap_on_timeout(gpointer data)
_swap_set(swap, value); _swap_set(swap, value);
return TRUE; return TRUE;
#else #else
Swap * swap = data;
/* FIXME not supported */ /* FIXME not supported */
swap->timeout = 0; swap->timeout = 0;