Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(306)

Unified Diff: base/trace_event/memory_dump_manager.cc

Issue 1417003003: [tracing] Dump child processes' memory metrics in browser (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@web_cache2_base
Patch Set: Nits. Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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,

Powered by Google App Engine
This is Rietveld 408576698