mirror of https://github.com/xzeldon/htop.git
parent
e65cdf947c
commit
f32f0188cd
|
@ -240,6 +240,11 @@ else
|
|||
AC_SEARCH_LIBS([keypad], [tinfo])
|
||||
fi
|
||||
|
||||
if test "$my_htop_platform" = "darwin"; then
|
||||
AC_CHECK_HEADERS([mach/mach_time.h])
|
||||
AC_CHECK_FUNCS([mach_timebase_info])
|
||||
fi
|
||||
|
||||
if test "$my_htop_platform" = "freebsd"; then
|
||||
AC_CHECK_LIB([kvm], [kvm_open], [], [missing_libraries="$missing_libraries libkvm"])
|
||||
fi
|
||||
|
|
|
@ -14,6 +14,7 @@ in the source distribution for its full text.
|
|||
#include <mach/mach.h>
|
||||
|
||||
#include "CRT.h"
|
||||
#include "Platform.h"
|
||||
#include "Process.h"
|
||||
|
||||
|
||||
|
@ -248,7 +249,7 @@ void DarwinProcess_setFromLibprocPidinfo(DarwinProcess* proc, DarwinProcessList*
|
|||
uint64_t diff = (pti.pti_total_system - proc->stime)
|
||||
+ (pti.pti_total_user - proc->utime);
|
||||
|
||||
proc->super.percent_cpu = (double)diff * (double)dpl->super.cpuCount
|
||||
proc->super.percent_cpu = (double)diff * (double)dpl->super.cpuCount * Platform_timebaseToNS
|
||||
/ ((double)dpl->global_diff * 100000.0);
|
||||
|
||||
// fprintf(stderr, "%f %llu %llu %llu %llu %llu\n", proc->super.percent_cpu,
|
||||
|
|
|
@ -6,6 +6,8 @@ Released under the GNU GPLv2, see the COPYING file
|
|||
in the source distribution for its full text.
|
||||
*/
|
||||
|
||||
#include "config.h" // IWYU pragma: keep
|
||||
|
||||
#include "Platform.h"
|
||||
|
||||
#include <math.h>
|
||||
|
@ -32,6 +34,10 @@ in the source distribution for its full text.
|
|||
#include "zfs/ZfsArcMeter.h"
|
||||
#include "zfs/ZfsCompressedArcMeter.h"
|
||||
|
||||
#ifdef HAVE_MACH_MACH_TIME_H
|
||||
#include <mach/mach_time.h>
|
||||
#endif
|
||||
|
||||
|
||||
ProcessField Platform_defaultFields[] = { PID, USER, PRIORITY, NICE, M_VIRT, M_RESIDENT, STATE, PERCENT_CPU, PERCENT_MEM, TIME, COMM, 0 };
|
||||
|
||||
|
@ -135,8 +141,18 @@ const MeterClass* const Platform_meterTypes[] = {
|
|||
|
||||
int Platform_numberOfFields = 100;
|
||||
|
||||
double Platform_timebaseToNS = 1.0;
|
||||
|
||||
void Platform_init(void) {
|
||||
/* no platform-specific setup needed */
|
||||
// Check if we can determine the timebase used on this system.
|
||||
// If the API is unavailable assume we get our timebase in nanoseconds.
|
||||
#ifdef HAVE_MACH_TIMEBASE_INFO
|
||||
mach_timebase_info_data_t info;
|
||||
mach_timebase_info(&info);
|
||||
Platform_timebaseToNS = (double)info.numer / (double)info.denom;
|
||||
#else
|
||||
Platform_timebaseToNS = 1.0;
|
||||
#endif
|
||||
}
|
||||
|
||||
void Platform_done(void) {
|
||||
|
|
|
@ -19,12 +19,15 @@ in the source distribution for its full text.
|
|||
#include "ProcessLocksScreen.h"
|
||||
#include "SignalsPanel.h"
|
||||
|
||||
|
||||
extern ProcessFieldData Process_fields[];
|
||||
|
||||
extern ProcessField Platform_defaultFields[];
|
||||
|
||||
extern int Platform_numberOfFields;
|
||||
|
||||
extern double Platform_timebaseToNS;
|
||||
|
||||
extern const SignalItem Platform_signals[];
|
||||
|
||||
extern const unsigned int Platform_numberOfSignals;
|
||||
|
|
Loading…
Reference in New Issue