diff --git a/configure.ac b/configure.ac index 0a90ca48b..8ba787823 100644 --- a/configure.ac +++ b/configure.ac @@ -330,6 +330,21 @@ if test "$my_htop_platform" = darwin; then AC_CHECK_FUNCS([mach_timebase_info]) AC_CHECK_DECLS([IOMainPort], [], [], [[#include ]]) AC_CHECK_DECLS([IOMasterPort], [], [], [[#include ]]) + + AC_MSG_CHECKING([for vm_statistics64 supported]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#include +#include + ]], [[ + mach_msg_type_number_t info_size = HOST_VM_INFO64_COUNT; + vm_statistics64_data_t vm_stat; + host_statistics64(mach_host_self(), HOST_VM_INFO64, (host_info64_t)&vm_stat, &info_size); + ]] + )], + AC_DEFINE([HAVE_VM_STATISTICS64], 1, [The vm_statistics64 features is supported.]) + AC_MSG_RESULT(yes), + AC_MSG_RESULT(no)) fi if test "$my_htop_platform" = pcp; then diff --git a/darwin/DarwinMachine.c b/darwin/DarwinMachine.c index 1e94d9193..fff738832 100644 --- a/darwin/DarwinMachine.c +++ b/darwin/DarwinMachine.c @@ -60,7 +60,7 @@ static unsigned DarwinMachine_allocateCPULoadInfo(processor_cpu_load_info_t* p) } static void DarwinMachine_getVMStats(DarwinMachine* this) { -#if defined(__LP64__) +#ifdef HAVE_VM_STATISTICS64 mach_msg_type_number_t info_size = HOST_VM_INFO64_COUNT; if (host_statistics64(mach_host_self(), HOST_VM_INFO64, (host_info_t)&this->vm_stats, &info_size) != 0) { diff --git a/darwin/DarwinMachine.h b/darwin/DarwinMachine.h index 7927fb446..70cb55528 100644 --- a/darwin/DarwinMachine.h +++ b/darwin/DarwinMachine.h @@ -18,7 +18,7 @@ typedef struct DarwinMachine_ { Machine super; host_basic_info_data_t host_info; -#if defined(__LP64__) +#ifdef HAVE_VM_STATISTICS64 vm_statistics64_data_t vm_stats; #else vm_statistics_data_t vm_stats; diff --git a/darwin/Platform.c b/darwin/Platform.c index 21eb5d289..4b7ff646a 100644 --- a/darwin/Platform.c +++ b/darwin/Platform.c @@ -292,7 +292,7 @@ double Platform_setCPUValues(Meter* mtr, unsigned int cpu) { void Platform_setMemoryValues(Meter* mtr) { const DarwinMachine* dhost = (const DarwinMachine*) mtr->host; -#if defined(__LP64__) +#ifdef HAVE_VM_STATISTICS64 const struct vm_statistics64* vm = &dhost->vm_stats; #else const struct vm_statistics* vm = &dhost->vm_stats; @@ -300,7 +300,7 @@ void Platform_setMemoryValues(Meter* mtr) { double page_K = (double)vm_page_size / (double)1024; mtr->total = dhost->host_info.max_mem / 1024; -#if defined(__LP64__) +#ifdef HAVE_VM_STATISTICS64 natural_t used = vm->active_count + vm->inactive_count + vm->speculative_count + vm->wire_count + vm->compressor_page_count - vm->purgeable_count - vm->external_page_count; @@ -309,7 +309,7 @@ void Platform_setMemoryValues(Meter* mtr) { mtr->values[MEMORY_METER_USED] = (double)(vm->active_count + vm->wire_count) * page_K; #endif // mtr->values[MEMORY_METER_SHARED] = "shared memory, like tmpfs and shm" -#if defined(__LP64__) +#ifdef HAVE_VM_STATISTICS64 mtr->values[MEMORY_METER_COMPRESSED] = (double)vm->compressor_page_count * page_K; #else // mtr->values[MEMORY_METER_COMPRESSED] = "compressed memory, like zswap on linux"