diff options
Diffstat (limited to 'base/trace_event/process_memory_dump.cc')
-rw-r--r-- | base/trace_event/process_memory_dump.cc | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/base/trace_event/process_memory_dump.cc b/base/trace_event/process_memory_dump.cc index 63d1340e42..826989237b 100644 --- a/base/trace_event/process_memory_dump.cc +++ b/base/trace_event/process_memory_dump.cc @@ -18,7 +18,7 @@ #include "build/build_config.h" #if defined(OS_IOS) -#include <mach/vm_page_size.h> +#include <sys/sysctl.h> #endif #if defined(OS_POSIX) @@ -57,13 +57,19 @@ bool ProcessMemoryDump::is_black_hole_non_fatal_for_testing_ = false; size_t ProcessMemoryDump::GetSystemPageSize() { #if defined(OS_IOS) // On iOS, getpagesize() returns the user page sizes, but for allocating - // arrays for mincore(), kernel page sizes is needed. Use vm_kernel_page_size - // as recommended by Apple, https://forums.developer.apple.com/thread/47532/. - // Refer to http://crbug.com/542671 and Apple rdar://23651782 - return vm_kernel_page_size; -#else - return base::GetPageSize(); + // arrays for mincore(), kernel page sizes is needed. sysctlbyname() should + // be used for this. Refer to crbug.com/542671 and Apple rdar://23651782 + int pagesize; + size_t pagesize_len; + int status = sysctlbyname("vm.pagesize", NULL, &pagesize_len, nullptr, 0); + if (!status && pagesize_len == sizeof(pagesize)) { + if (!sysctlbyname("vm.pagesize", &pagesize, &pagesize_len, nullptr, 0)) + return pagesize; + } + LOG(ERROR) << "sysctlbyname(\"vm.pagesize\") failed."; + // Falls back to getpagesize() although it may be wrong in certain cases. #endif // defined(OS_IOS) + return base::GetPageSize(); } // static @@ -158,14 +164,14 @@ ProcessMemoryDump::~ProcessMemoryDump() {} MemoryAllocatorDump* ProcessMemoryDump::CreateAllocatorDump( const std::string& absolute_name) { return AddAllocatorDumpInternal( - MakeUnique<MemoryAllocatorDump>(absolute_name, this)); + WrapUnique(new MemoryAllocatorDump(absolute_name, this))); } MemoryAllocatorDump* ProcessMemoryDump::CreateAllocatorDump( const std::string& absolute_name, const MemoryAllocatorDumpGuid& guid) { return AddAllocatorDumpInternal( - MakeUnique<MemoryAllocatorDump>(absolute_name, this, guid)); + WrapUnique(new MemoryAllocatorDump(absolute_name, this, guid))); } MemoryAllocatorDump* ProcessMemoryDump::AddAllocatorDumpInternal( |