From b7eaff7c1a3b7bf707bc12950af08f153766d343 Mon Sep 17 00:00:00 2001 From: Olivier Duchateau Date: Fri, 6 Jan 2017 10:36:15 +0100 Subject: [PATCH] Improve memory usage on FreeBSD system. --- src/task-manager-freebsd.c | 42 +++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/src/task-manager-freebsd.c b/src/task-manager-freebsd.c index 79a8aea..065bc39 100644 --- a/src/task-manager-freebsd.c +++ b/src/task-manager-freebsd.c @@ -26,25 +26,39 @@ #include "task-manager.h" +gulong +get_mem_by_bytes (const gchar *name) +{ + gulong buf; + gsize len = sizeof (gulong); + + if (sysctlbyname (name, &buf, &len, NULL, 0) < 0) + return 0; + + return buf; +} + +guint64 +get_mem_by_pages (const gchar *name) +{ + gulong res; + + res = get_mem_by_bytes (name); + if (res > 0) + res = res * getpagesize (); + + return (guint64) res; +} + gboolean get_memory_usage (guint64 *memory_total, guint64 *memory_free, guint64 *memory_cache, guint64 *memory_buffers, guint64 *swap_total, guint64 *swap_free) { /* Get memory usage */ { - gulong total = 0, free = 0, inactive = 0; - size_t size; - - size = sizeof (gulong); - sysctlbyname ("vm.stats.vm.v_page_count", &total, &size, NULL, 0); - size = sizeof (gulong); - sysctlbyname ("vm.stats.vm.v_free_count", &free, &size, NULL, 0); - size = sizeof (gulong); - sysctlbyname ("vm.stats.vm.v_inactive_count", &inactive, &size, NULL, 0); - - *memory_total = total * getpagesize (); - *memory_free = free * getpagesize (); - *memory_cache = inactive * getpagesize (); - *memory_buffers = 0; + *memory_total = (guint64) get_mem_by_bytes ("hw.physmem");; + *memory_free = get_mem_by_pages ("vm.stats.vm.v_free_count"); + *memory_cache = get_mem_by_pages ("vm.stats.vm.v_inactive_count"); + *memory_buffers = (guint64) get_mem_by_bytes ("vfs.bufspace"); } /* Get swap usage */