| 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..1481f7717f4a2b2fb490063d80a66b0da12db2cf 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_MAX_ALLOWED < MAC_OS_X_VERSION_10_11
|
| +// 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;
|
| +#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; \
|
|
|