Chromium Code Reviews| Index: base/process/process_metrics_mac.cc |
| diff --git a/base/process/process_metrics_mac.cc b/base/process/process_metrics_mac.cc |
| index be4107e22322cd0f37bd1927649169e070c38271..5a881c3dbe36f2afa407363f334e27dde7ab770e 100644 |
| --- a/base/process/process_metrics_mac.cc |
| +++ b/base/process/process_metrics_mac.cc |
| @@ -13,6 +13,7 @@ |
| #include "base/containers/hash_tables.h" |
| #include "base/logging.h" |
| +#include "base/mac/mac_util.h" |
| #include "base/mac/mach_logging.h" |
| #include "base/mac/scoped_mach_port.h" |
| #include "base/memory/ptr_util.h" |
| @@ -23,6 +24,38 @@ namespace base { |
| namespace { |
| +#if !defined(MAC_OS_X_VERSION_10_11) || \ |
| + MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_11 |
|
Mark Mentovai
2017/04/21 03:30:00
Whether task_vm_info is available and correct is a
erikchen
2017/04/21 17:35:32
Thanks, I seem to have a penchant for mixing the t
|
| +// The |phys_footprint| field was introduced in 10.11. |
| +struct ChromeTaskVMInfo { |
| + mach_vm_size_t virtual_size; |
| + integer_t region_count; |
| + integer_t page_size; |
| + mach_vm_size_t resident_size; |
| + mach_vm_size_t resident_size_peak; |
| + mach_vm_size_t device; |
| + mach_vm_size_t device_peak; |
| + mach_vm_size_t internal; |
| + mach_vm_size_t internal_peak; |
| + mach_vm_size_t external; |
| + mach_vm_size_t external_peak; |
| + mach_vm_size_t reusable; |
| + mach_vm_size_t reusable_peak; |
| + mach_vm_size_t purgeable_volatile_pmap; |
| + mach_vm_size_t purgeable_volatile_resident; |
| + mach_vm_size_t purgeable_volatile_virtual; |
| + mach_vm_size_t compressed; |
| + mach_vm_size_t compressed_peak; |
| + mach_vm_size_t compressed_lifetime; |
| + mach_vm_size_t phys_footprint; |
| +}; |
| +mach_msg_type_number_t ChromeTaskVMInfoCount = |
| + sizeof(ChromeTaskVMInfo) / sizeof(natural_t); |
| +#else |
| +using ChromeTaskVMInfo = task_vm_info; |
| +mach_msg_type_number_t ChromeTaskVMInfoCount = TASK_VM_INFO_REV1_COUNT; |
|
zino
2017/04/23 20:35:45
Hi
This line is breaking build on 11.x.
I'm not s
|
| +#endif // MAC_OS_X_VERSION_10_11 |
| + |
| bool GetTaskInfo(mach_port_t task, task_basic_info_64* task_info_data) { |
| if (task == MACH_PORT_NULL) |
| return false; |
| @@ -290,6 +323,20 @@ bool ProcessMetrics::GetCommittedAndWorkingSetKBytes( |
| return true; |
| } |
| +size_t ProcessMetrics::GetPhysicalFootprint() const { |
| + if (mac::IsAtMostOS10_10()) |
| + return 0; |
| + |
| + ChromeTaskVMInfo task_vm_info; |
| + mach_msg_type_number_t count = ChromeTaskVMInfoCount; |
| + kern_return_t result = |
| + task_info(TaskForPid(process_), TASK_VM_INFO, |
| + reinterpret_cast<task_info_t>(&task_vm_info), &count); |
| + if (result != KERN_SUCCESS) |
| + return 0; |
| + return task_vm_info.phys_footprint; |
| +} |
| + |
| #define TIME_VALUE_TO_TIMEVAL(a, r) do { \ |
| (r)->tv_sec = (a)->seconds; \ |
| (r)->tv_usec = (a)->microseconds; \ |