Skip to content

Commit 893c5d7

Browse files
committed
use task_info
- get rid of libproc - in case we use task_vm_info_data_t.phys_footprint or those ledgers
1 parent eeb9f62 commit 893c5d7

File tree

1 file changed

+24
-25
lines changed

1 file changed

+24
-25
lines changed

Common/Cpp/MemoryUtilization/MemoryUtilization_Mac.tpp

Lines changed: 24 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,12 @@
88
#define PokemonAutomation_MemoryUtilization_Mac_TPP
99

1010
#include <iostream>
11-
#include <unistd.h> // For getpid()
1211
#include <sys/types.h>
1312
#include <sys/sysctl.h>
14-
#include <sys/proc_info.h>
15-
#include <libproc.h>
1613
#include <mach/mach.h>
1714
#include <mach/mach_host.h>
1815
#include <mach/mach_vm.h>
16+
#include <mach/task_info.h>
1917
#include <mach/vm_statistics.h>
2018

2119
namespace PokemonAutomation{
@@ -85,18 +83,6 @@ void analyze_vm_regions() {
8583

8684
MemoryUsage process_memory_usage(){
8785
MemoryUsage usage;
88-
89-
pid_t pid = getpid();
90-
struct proc_taskinfo task_info;
91-
int ret = proc_pidinfo(pid, PROC_PIDTASKINFO, 0, &task_info, sizeof(task_info));
92-
93-
if (ret <= 0) {
94-
std::cerr << "Error getting process info for PID " << pid << ": " << strerror(errno) << std::endl;
95-
}else{
96-
usage.process_physical_memory = task_info.pti_resident_size;
97-
usage.process_virtual_memory = task_info.pti_virtual_size;
98-
}
99-
10086
int mib[] = {CTL_HW, HW_MEMSIZE};
10187
int64_t physical_memory = 0;
10288
size_t length = sizeof(physical_memory);
@@ -107,16 +93,29 @@ MemoryUsage process_memory_usage(){
10793
usage.total_system_memory = physical_memory;
10894
}
10995

110-
vm_statistics_data_t vm_stats;
111-
mach_msg_type_number_t count = HOST_VM_INFO_COUNT;
112-
if (host_statistics(mach_host_self(), HOST_VM_INFO, (host_info_t)&vm_stats, &count) != 0) {
113-
std::cerr << "Failed to get host statistics." << std::endl;
114-
} else {
115-
// Calculate used memory from vm_statistics
116-
// Used = active_count + wire_count
117-
// Cached = inactive_count
118-
// Buffered = purgeable_count
119-
usage.total_used_system_memory = (size_t)(vm_stats.active_count + vm_stats.wire_count) * (size_t)vm_page_size;
96+
{
97+
task_vm_info_data_t tvi;
98+
mach_msg_type_number_t count = TASK_VM_INFO_COUNT;
99+
if(KERN_SUCCESS == task_info(mach_task_self(), TASK_VM_INFO, (task_info_t) &tvi, &count))
100+
{
101+
usage.process_physical_memory = tvi.resident_size;
102+
usage.process_virtual_memory = tvi.virtual_size;
103+
} else {
104+
std::cerr << "Failed to get task info." << std::endl;
105+
}
106+
}
107+
{
108+
vm_statistics_data_t vm_stats;
109+
mach_msg_type_number_t count = HOST_VM_INFO_COUNT;
110+
if (KERN_SUCCESS == host_statistics(mach_host_self(), HOST_VM_INFO, (host_info_t)&vm_stats, &count)) {
111+
// Calculate used memory from vm_statistics
112+
// Used = active_count + wire_count
113+
// Cached = inactive_count
114+
// Buffered = purgeable_count
115+
usage.total_used_system_memory = (size_t)(vm_stats.active_count + vm_stats.wire_count) * (size_t)vm_page_size;
116+
} else {
117+
std::cerr << "Failed to get host statistics." << std::endl;
118+
}
120119
}
121120
return usage;
122121
}

0 commit comments

Comments
 (0)