summaryrefslogtreecommitdiffstats
path: root/freebsd
diff options
context:
space:
mode:
authorHisham Muhammad <hisham@gobolinux.org>2014-11-27 17:44:55 -0200
committerHisham Muhammad <hisham@gobolinux.org>2014-11-27 17:44:55 -0200
commit28712f22b1a832018915f7721b394fb693569132 (patch)
tree8a23f627dff7718d31abca1203874f99ba7e717c /freebsd
parent8a2e235a48320a413602f6096b35a353ea61ef64 (diff)
Reading first bits of data!
Diffstat (limited to 'freebsd')
-rw-r--r--freebsd/FreeBSDProcessList.c58
-rw-r--r--freebsd/FreeBSDProcessList.h10
2 files changed, 59 insertions, 9 deletions
diff --git a/freebsd/FreeBSDProcessList.c b/freebsd/FreeBSDProcessList.c
index 275c1082..c75fb10f 100644
--- a/freebsd/FreeBSDProcessList.c
+++ b/freebsd/FreeBSDProcessList.c
@@ -1,39 +1,81 @@
/*
-htop - UnsupportedProcessList.c
+htop - FreeBSDProcessList.c
(C) 2014 Hisham H. Muhammad
Released under the GNU GPL, see the COPYING file
in the source distribution for its full text.
*/
#include "ProcessList.h"
+#include "FreeBSDProcessList.h"
+#include <unistd.h>
#include <stdlib.h>
+#include <sys/types.h>
#include <sys/sysctl.h>
+#include <fcntl.h>
/*{
+#include <kvm.h>
+
+typedef struct FreeBSDProcessList_ {
+ ProcessList super;
+ kvm_t* kd;
+} FreeBSDProcessList;
+
}*/
+static int MIB_vm_stats_vm_v_wire_count[4];
+static int MIB_hw_physmem[2];
+
ProcessList* ProcessList_new(UsersTable* usersTable, Hashtable* pidWhiteList) {
- ProcessList* this = calloc(1, sizeof(ProcessList));
- ProcessList_init(this, usersTable, pidWhiteList);
+ FreeBSDProcessList* this = calloc(1, sizeof(FreeBSDProcessList));
+ ProcessList* pl = (ProcessList*) this;
+ ProcessList_init((ProcessList*)this, usersTable, pidWhiteList);
int cpus = 1;
size_t sizeof_cpus = sizeof(cpus);
int err = sysctlbyname("hw.ncpu", &cpus, &sizeof_cpus, NULL, 0);
if (err) cpus = 1;
- this->cpuCount = MAX(cpus, 1);
- this->cpus = realloc(this->cpus, cpus * sizeof(CPUData));
+ pl->cpuCount = MAX(cpus, 1);
+ pl->cpus = realloc(pl->cpus, cpus * sizeof(CPUData));
for (int i = 0; i < cpus; i++) {
- this->cpus[i].totalTime = 1;
- this->cpus[i].totalPeriod = 1;
+ pl->cpus[i].totalTime = 1;
+ pl->cpus[i].totalPeriod = 1;
}
+
+ size_t len = 4;
+ sysctlnametomib("vm.stats.vm.v_wire_count", MIB_vm_stats_vm_v_wire_count, &len);
+ len = 2;
+ sysctlnametomib("hw.physmem", MIB_hw_physmem, &len);
- return this;
+ return (ProcessList*) this;
+}
+
+static inline void FreeBSDProcessList_scanMemoryInfo(ProcessList* pl) {
+ const FreeBSDProcessList* fpl = (FreeBSDProcessList*) pl;
+
+ unsigned long long int swapFree = 0;
+ size_t len = sizeof(pl->totalMem);
+ sysctl(MIB_hw_physmem, 2, &(pl->totalMem), &len, NULL, 0);
+ pl->totalMem /= 1024;
+ sysctl(MIB_vm_stats_vm_v_wire_count, 4, &(pl->usedMem), &len, NULL, 0);
+ pl->usedMem *= PAGE_SIZE / 1024;
+ pl->freeMem = pl->totalMem - pl->usedMem;
+
+ pl->sharedMem = 0;
+ pl->buffersMem = 0;
+ pl->cachedMem = 0;
+ pl->totalSwap = 0;
+ swapFree = 0;
+ pl->usedSwap = pl->totalSwap - swapFree;
}
void ProcessList_scan(ProcessList* this) {
(void) this;
+
+ FreeBSDProcessList_scanMemoryInfo(this);
+
// stub!
}
diff --git a/freebsd/FreeBSDProcessList.h b/freebsd/FreeBSDProcessList.h
index ed9a7a36..9389e3aa 100644
--- a/freebsd/FreeBSDProcessList.h
+++ b/freebsd/FreeBSDProcessList.h
@@ -3,13 +3,21 @@
#ifndef HEADER_FreeBSDProcessList
#define HEADER_FreeBSDProcessList
/*
-htop - UnsupportedProcessList.h
+htop - FreeBSDProcessList.h
(C) 2014 Hisham H. Muhammad
Released under the GNU GPL, see the COPYING file
in the source distribution for its full text.
*/
+#include <kvm.h>
+
+typedef struct FreeBSDProcessList_ {
+ ProcessList super;
+ kvm_t* kd;
+} FreeBSDProcessList;
+
+
ProcessList* ProcessList_new(UsersTable* usersTable, Hashtable* pidWhiteList);

© 2014-2024 Faster IT GmbH | imprint | privacy policy