mirror of https://github.com/xzeldon/htop.git
Merge branch 'fix_mach_timebase' of benbe/htop
This commit is contained in:
commit
4b1a4a4ebd
|
@ -240,6 +240,11 @@ else
|
||||||
AC_SEARCH_LIBS([keypad], [tinfo])
|
AC_SEARCH_LIBS([keypad], [tinfo])
|
||||||
fi
|
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
|
if test "$my_htop_platform" = "freebsd"; then
|
||||||
AC_CHECK_LIB([kvm], [kvm_open], [], [missing_libraries="$missing_libraries libkvm"])
|
AC_CHECK_LIB([kvm], [kvm_open], [], [missing_libraries="$missing_libraries libkvm"])
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -14,6 +14,7 @@ in the source distribution for its full text.
|
||||||
#include <mach/mach.h>
|
#include <mach/mach.h>
|
||||||
|
|
||||||
#include "CRT.h"
|
#include "CRT.h"
|
||||||
|
#include "Platform.h"
|
||||||
#include "Process.h"
|
#include "Process.h"
|
||||||
|
|
||||||
|
|
||||||
|
@ -308,7 +309,7 @@ void DarwinProcess_setFromLibprocPidinfo(DarwinProcess* proc, DarwinProcessList*
|
||||||
uint64_t diff = (pti.pti_total_system - proc->stime)
|
uint64_t diff = (pti.pti_total_system - proc->stime)
|
||||||
+ (pti.pti_total_user - proc->utime);
|
+ (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);
|
/ ((double)dpl->global_diff * 100000.0);
|
||||||
|
|
||||||
// fprintf(stderr, "%f %llu %llu %llu %llu %llu\n", proc->super.percent_cpu,
|
// fprintf(stderr, "%f %llu %llu %llu %llu %llu\n", proc->super.percent_cpu,
|
||||||
|
|
|
@ -6,22 +6,9 @@ Released under the GNU GPLv2, see the COPYING file
|
||||||
in the source distribution for its full text.
|
in the source distribution for its full text.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "config.h" // IWYU pragma: keep
|
||||||
|
|
||||||
#include "Platform.h"
|
#include "Platform.h"
|
||||||
#include "Macros.h"
|
|
||||||
#include "CPUMeter.h"
|
|
||||||
#include "MemoryMeter.h"
|
|
||||||
#include "SwapMeter.h"
|
|
||||||
#include "TasksMeter.h"
|
|
||||||
#include "LoadAverageMeter.h"
|
|
||||||
#include "ClockMeter.h"
|
|
||||||
#include "DateMeter.h"
|
|
||||||
#include "DateTimeMeter.h"
|
|
||||||
#include "HostnameMeter.h"
|
|
||||||
#include "ProcessLocksScreen.h"
|
|
||||||
#include "UptimeMeter.h"
|
|
||||||
#include "zfs/ZfsArcMeter.h"
|
|
||||||
#include "zfs/ZfsCompressedArcMeter.h"
|
|
||||||
#include "DarwinProcessList.h"
|
|
||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
@ -31,6 +18,27 @@ in the source distribution for its full text.
|
||||||
#include <IOKit/ps/IOPowerSources.h>
|
#include <IOKit/ps/IOPowerSources.h>
|
||||||
#include <IOKit/ps/IOPSKeys.h>
|
#include <IOKit/ps/IOPSKeys.h>
|
||||||
|
|
||||||
|
#include "ClockMeter.h"
|
||||||
|
#include "CPUMeter.h"
|
||||||
|
#include "DarwinProcessList.h"
|
||||||
|
#include "DateMeter.h"
|
||||||
|
#include "DateTimeMeter.h"
|
||||||
|
#include "HostnameMeter.h"
|
||||||
|
#include "LoadAverageMeter.h"
|
||||||
|
#include "Macros.h"
|
||||||
|
#include "MemoryMeter.h"
|
||||||
|
#include "ProcessLocksScreen.h"
|
||||||
|
#include "SwapMeter.h"
|
||||||
|
#include "TasksMeter.h"
|
||||||
|
#include "UptimeMeter.h"
|
||||||
|
#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 };
|
ProcessField Platform_defaultFields[] = { PID, USER, PRIORITY, NICE, M_VIRT, M_RESIDENT, STATE, PERCENT_CPU, PERCENT_MEM, TIME, COMM, 0 };
|
||||||
|
|
||||||
const SignalItem Platform_signals[] = {
|
const SignalItem Platform_signals[] = {
|
||||||
|
@ -104,8 +112,18 @@ const MeterClass* const Platform_meterTypes[] = {
|
||||||
|
|
||||||
int Platform_numberOfFields = LAST_PROCESSFIELD;
|
int Platform_numberOfFields = LAST_PROCESSFIELD;
|
||||||
|
|
||||||
|
double Platform_timebaseToNS = 1.0;
|
||||||
|
|
||||||
void Platform_init(void) {
|
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) {
|
void Platform_done(void) {
|
||||||
|
|
|
@ -19,10 +19,14 @@ in the source distribution for its full text.
|
||||||
#include "ProcessLocksScreen.h"
|
#include "ProcessLocksScreen.h"
|
||||||
#include "SignalsPanel.h"
|
#include "SignalsPanel.h"
|
||||||
|
|
||||||
|
extern ProcessFieldData Process_fields[];
|
||||||
|
|
||||||
extern ProcessField Platform_defaultFields[];
|
extern ProcessField Platform_defaultFields[];
|
||||||
|
|
||||||
extern int Platform_numberOfFields;
|
extern int Platform_numberOfFields;
|
||||||
|
|
||||||
|
extern double Platform_timebaseToNS;
|
||||||
|
|
||||||
extern const SignalItem Platform_signals[];
|
extern const SignalItem Platform_signals[];
|
||||||
|
|
||||||
extern const unsigned int Platform_numberOfSignals;
|
extern const unsigned int Platform_numberOfSignals;
|
||||||
|
|
Loading…
Reference in New Issue