| /* |
| htop - freebsd/Platform.c |
| (C) 2014 Hisham H. Muhammad |
| Released under the GNU GPL, see the COPYING file |
| in the source distribution for its full text. |
| */ |
| |
| #include "Platform.h" |
| #include "Meter.h" |
| #include "CPUMeter.h" |
| #include "MemoryMeter.h" |
| #include "SwapMeter.h" |
| #include "TasksMeter.h" |
| #include "LoadAverageMeter.h" |
| #include "UptimeMeter.h" |
| #include "ClockMeter.h" |
| #include "HostnameMeter.h" |
| #include "FreeBSDProcess.h" |
| |
| #include <sys/types.h> |
| #include <sys/sysctl.h> |
| #include <sys/time.h> |
| #include <sys/resource.h> |
| #include <vm/vm_param.h> |
| #include <time.h> |
| |
| /*{ |
| #include "Action.h" |
| #include "BatteryMeter.h" |
| |
| extern ProcessFieldData Process_fields[]; |
| |
| }*/ |
| |
| ProcessField Platform_defaultFields[] = { PID, USER, PRIORITY, NICE, M_SIZE, M_RESIDENT, STATE, PERCENT_CPU, PERCENT_MEM, TIME, COMM, 0 }; |
| |
| int Platform_numberOfFields = LAST_PROCESSFIELD; |
| |
| void Platform_setBindings(Htop_Action* keys) { |
| (void) keys; |
| } |
| |
| MeterClass* Platform_meterTypes[] = { |
| &CPUMeter_class, |
| &ClockMeter_class, |
| &LoadAverageMeter_class, |
| &LoadMeter_class, |
| &MemoryMeter_class, |
| &SwapMeter_class, |
| &TasksMeter_class, |
| &UptimeMeter_class, |
| &BatteryMeter_class, |
| &HostnameMeter_class, |
| &AllCPUsMeter_class, |
| &AllCPUs2Meter_class, |
| &LeftCPUsMeter_class, |
| &RightCPUsMeter_class, |
| &LeftCPUs2Meter_class, |
| &RightCPUs2Meter_class, |
| &BlankMeter_class, |
| NULL |
| }; |
| |
| int Platform_getUptime() { |
| struct timeval bootTime, currTime; |
| int mib[2] = { CTL_KERN, KERN_BOOTTIME }; |
| size_t size = sizeof(bootTime); |
| |
| int err = sysctl(mib, 2, &bootTime, &size, NULL, 0); |
| if (err) { |
| return -1; |
| } |
| gettimeofday(&currTime, NULL); |
| |
| return (int) difftime(currTime.tv_sec, bootTime.tv_sec); |
| } |
| |
| void Platform_getLoadAverage(double* one, double* five, double* fifteen) { |
| struct loadavg loadAverage; |
| int mib[2] = { CTL_VM, VM_LOADAVG }; |
| size_t size = sizeof(loadAverage); |
| |
| int err = sysctl(mib, 2, &loadAverage, &size, NULL, 0); |
| if (err) { |
| *one = 0; |
| *five = 0; |
| *fifteen = 0; |
| return; |
| } |
| *one = (double) loadAverage.ldavg[0] / loadAverage.fscale; |
| *five = (double) loadAverage.ldavg[1] / loadAverage.fscale; |
| *fifteen = (double) loadAverage.ldavg[2] / loadAverage.fscale; |
| } |
| |
| int Platform_getMaxPid() { |
| int maxPid; |
| size_t size = sizeof(maxPid); |
| int err = sysctlbyname("kern.pid_max", &maxPid, &size, NULL, 0); |
| if (err) { |
| return 99999; |
| } |
| return maxPid; |
| } |
| |
| double Platform_setCPUValues(Meter* this, int cpu) { |
| // TODO |
| } |
| |
| void Platform_setMemoryValues(Meter* this) { |
| // TODO |
| } |
| |
| void Platform_setSwapValues(Meter* this) { |
| // TODO |
| } |
| |
| void Platform_setTasksValues(Meter* this) { |
| // TODO |
| } |