Index: components/tracing/common/process_metrics_memory_dump_provider.cc |
diff --git a/components/tracing/common/process_metrics_memory_dump_provider.cc b/components/tracing/common/process_metrics_memory_dump_provider.cc |
index 147e8b33fde1d3f5eaaf2c0879f46cc48e1a9dee..c2961357f60eeaf42549955f4abd6ca9d022e6e5 100644 |
--- a/components/tracing/common/process_metrics_memory_dump_provider.cc |
+++ b/components/tracing/common/process_metrics_memory_dump_provider.cc |
@@ -213,6 +213,10 @@ std::unique_ptr<base::ProcessMetrics> CreateProcessMetrics( |
// static |
uint64_t ProcessMetricsMemoryDumpProvider::rss_bytes_for_testing = 0; |
+// static |
+ProcessMetricsMemoryDumpProvider::FactoryFunction |
+ ProcessMetricsMemoryDumpProvider::factory_for_testing = nullptr; |
+ |
#if defined(OS_LINUX) || defined(OS_ANDROID) |
// static |
@@ -542,23 +546,31 @@ bool ProcessMetricsMemoryDumpProvider::DumpProcessMemoryMaps( |
// static |
void ProcessMetricsMemoryDumpProvider::RegisterForProcess( |
base::ProcessId process) { |
- std::unique_ptr<ProcessMetricsMemoryDumpProvider> metrics_provider( |
- new ProcessMetricsMemoryDumpProvider(process)); |
- base::trace_event::MemoryDumpProvider::Options options; |
- options.target_pid = process; |
- options.is_fast_polling_supported = true; |
- base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider( |
- metrics_provider.get(), "ProcessMemoryMetrics", nullptr, options); |
+ std::unique_ptr<ProcessMetricsMemoryDumpProvider> owned_provider; |
+ if (factory_for_testing) { |
+ owned_provider = factory_for_testing(process); |
+ } else { |
+ owned_provider = std::unique_ptr<ProcessMetricsMemoryDumpProvider>( |
+ new ProcessMetricsMemoryDumpProvider(process)); |
+ } |
+ |
+ ProcessMetricsMemoryDumpProvider* provider = owned_provider.get(); |
bool did_insert = |
g_dump_providers_map.Get() |
- .insert(std::make_pair(process, std::move(metrics_provider))) |
+ .insert(std::make_pair(process, std::move(owned_provider))) |
.second; |
if (!did_insert) { |
DLOG(ERROR) << "ProcessMetricsMemoryDumpProvider already registered for " |
<< (process == base::kNullProcessId |
? "current process" |
: "process id " + base::IntToString(process)); |
+ return; |
} |
+ base::trace_event::MemoryDumpProvider::Options options; |
+ options.target_pid = process; |
+ options.is_fast_polling_supported = true; |
+ base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider( |
+ provider, "ProcessMemoryMetrics", nullptr, options); |
} |
// static |