| Index: base/trace_event/memory_dump_manager.cc
|
| diff --git a/base/trace_event/memory_dump_manager.cc b/base/trace_event/memory_dump_manager.cc
|
| index f3f74cdd647192c63f417250d5947a1ea86f26e8..4bd0eb23f69f13e0aa2d3e26309a1c4482dc3dd0 100644
|
| --- a/base/trace_event/memory_dump_manager.cc
|
| +++ b/base/trace_event/memory_dump_manager.cc
|
| @@ -19,13 +19,8 @@
|
| #include "base/trace_event/trace_event_argument.h"
|
| #include "build/build_config.h"
|
|
|
| -#if !defined(OS_NACL)
|
| -#include "base/trace_event/process_memory_totals_dump_provider.h"
|
| -#endif
|
| -
|
| #if defined(OS_LINUX) || defined(OS_ANDROID)
|
| #include "base/trace_event/malloc_dump_provider.h"
|
| -#include "base/trace_event/process_memory_maps_dump_provider.h"
|
| #endif
|
|
|
| #if defined(OS_ANDROID)
|
| @@ -150,23 +145,25 @@ void MemoryDumpManager::Initialize(MemoryDumpManagerDelegate* delegate,
|
| }
|
|
|
| // Enable the core dump providers.
|
| -#if !defined(OS_NACL)
|
| - RegisterDumpProvider(ProcessMemoryTotalsDumpProvider::GetInstance(),
|
| - "ProcessMemoryTotals", nullptr);
|
| -#endif
|
| +#if defined(OS_ANDROID)
|
| + const ProcessHandle current_process = GetCurrentProcessHandle();
|
| + scoped_ptr<ProcessMemoryTotalsDumpProvider> totals_provider(
|
| + ProcessMemoryTotalsDumpProvider::CreateForProcess(current_process));
|
| + RegisterDumpProvider(totals_provider.get(), "ProcessMemoryTotals", nullptr);
|
| + process_totals_providers_map_.insert(current_process, totals_provider.Pass());
|
|
|
| -#if defined(OS_LINUX) || defined(OS_ANDROID)
|
| - RegisterDumpProvider(ProcessMemoryMapsDumpProvider::GetInstance(),
|
| - "ProcessMemoryMaps", nullptr);
|
| - RegisterDumpProvider(MallocDumpProvider::GetInstance(), "Malloc", nullptr);
|
| -#endif
|
| + scoped_ptr<ProcessMemoryMapsDumpProvider> mmaps_provider(
|
| + ProcessMemoryMapsDumpProvider::CreateForProcess(current_process));
|
| + RegisterDumpProvider(mmaps_provider.get(), "ProcessMemoryMaps", nullptr);
|
| + process_mmaps_providers_map_.insert(current_process, mmaps_provider.Pass());
|
|
|
| -#if defined(OS_ANDROID)
|
| RegisterDumpProvider(JavaHeapDumpProvider::GetInstance(), "JavaHeap",
|
| nullptr);
|
| -#endif
|
| +#endif // defined(OS_ANDROID)
|
|
|
| -#if defined(OS_WIN)
|
| +#if defined(OS_LINUX) || defined(OS_ANDROID)
|
| + RegisterDumpProvider(MallocDumpProvider::GetInstance(), "Malloc", nullptr);
|
| +#elif defined(OS_WIN)
|
| RegisterDumpProvider(WinHeapDumpProvider::GetInstance(), "WinHeap", nullptr);
|
| #endif
|
|
|
| @@ -602,6 +599,42 @@ uint64_t MemoryDumpManager::GetTracingProcessId() const {
|
| return delegate_->GetTracingProcessId();
|
| }
|
|
|
| +void MemoryDumpManager::RegisterProcessMetricsProvidersFor(
|
| + ProcessHandle process) {
|
| +#if defined(OS_LINUX)
|
| + scoped_ptr<ProcessMemoryTotalsDumpProvider> totals_provider(
|
| + ProcessMemoryTotalsDumpProvider::CreateForProcess(process));
|
| + MemoryDumpProvider::Options totals_options = {process};
|
| + RegisterDumpProvider(totals_provider.get(), "ProcessMemoryTotals", nullptr,
|
| + totals_options);
|
| + process_totals_providers_map_.insert(process, totals_provider.Pass());
|
| +
|
| + scoped_ptr<ProcessMemoryMapsDumpProvider> mmaps_provider(
|
| + ProcessMemoryMapsDumpProvider::CreateForProcess(process));
|
| + MemoryDumpProvider::Options mmaps_options = {process};
|
| + RegisterDumpProvider(mmaps_provider.get(), "ProcessMemoryMaps", nullptr,
|
| + mmaps_options);
|
| + process_mmaps_providers_map_.insert(process, mmaps_provider.Pass());
|
| +#endif // defined(OS_LINUX)
|
| +}
|
| +
|
| +void MemoryDumpManager::UnregisterProcessMetricsProvidersFor(
|
| + ProcessHandle process) {
|
| +#if defined(OS_LINUX)
|
| + ProcessTotalsDumpProvidersMap::const_iterator totals_it =
|
| + process_totals_providers_map_.find(process);
|
| + DCHECK(totals_it != process_totals_providers_map_.end());
|
| + UnregisterDumpProvider(totals_it->second);
|
| + process_totals_providers_map_.erase(totals_it);
|
| +
|
| + ProcessMapsDumpProvidersMap::const_iterator mmaps_it =
|
| + process_mmaps_providers_map_.find(process);
|
| + DCHECK(mmaps_it != process_mmaps_providers_map_.begin());
|
| + UnregisterDumpProvider(mmaps_it->second);
|
| + process_mmaps_providers_map_.erase(mmaps_it);
|
| +#endif // defined(OS_LINUX)
|
| +}
|
| +
|
| MemoryDumpManager::MemoryDumpProviderInfo::MemoryDumpProviderInfo(
|
| MemoryDumpProvider* dump_provider,
|
| const char* name,
|
|
|