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, |