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

Unified Diff: base/trace_event/memory_dump_manager.cc

Issue 2743993004: [memory-infra] Make MemoryDumpScheduler non-thread safe singleton (Closed)
Patch Set: . Created 3 years, 9 months 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 5a54a773c5e4eb8b7eb816000855e23dc0374780..54f2df266a5befcb70810116eb506d3350eee85b 100644
--- a/base/trace_event/memory_dump_manager.cc
+++ b/base/trace_event/memory_dump_manager.cc
@@ -421,7 +421,7 @@ void MemoryDumpManager::RegisterPollingMDPOnDumpThread(
// registered. This handles the case where OnTraceLogEnabled() did not notify
// ready since no polling supported mdp has yet been registered.
if (dump_providers_for_polling_.size() == 1)
- dump_scheduler_->NotifyPollingSupported();
+ MemoryDumpScheduler::GetInstance()->EnablePollingIfNeeded();
}
void MemoryDumpManager::UnregisterPollingMDPOnDumpThread(
@@ -515,8 +515,7 @@ void MemoryDumpManager::CreateProcessDump(const MemoryDumpRequestArgs& args,
CHECK(!session_state_ ||
session_state_->IsDumpModeAllowed(args.level_of_detail));
- if (dump_scheduler_)
- dump_scheduler_->NotifyDumpTriggered();
+ MemoryDumpScheduler::GetInstance()->NotifyDumpTriggered();
}
TRACE_EVENT_WITH_FLOW0(kTraceCategory, "MemoryDumpManager::CreateProcessDump",
@@ -829,18 +828,6 @@ void MemoryDumpManager::OnTraceLogEnabled() {
session_state, &MemoryDumpSessionState::type_name_deduplicator));
}
- std::unique_ptr<MemoryDumpScheduler> dump_scheduler(
- new MemoryDumpScheduler(this, dump_thread->task_runner()));
- DCHECK_LE(memory_dump_config.triggers.size(), 3u);
- for (const auto& trigger : memory_dump_config.triggers) {
- if (!session_state->IsDumpModeAllowed(trigger.level_of_detail)) {
- NOTREACHED();
- continue;
- }
- dump_scheduler->AddTrigger(trigger.trigger_type, trigger.level_of_detail,
- trigger.min_time_between_dumps_ms);
- }
-
{
AutoLock lock(lock_);
@@ -849,7 +836,6 @@ void MemoryDumpManager::OnTraceLogEnabled() {
DCHECK(!dump_thread_);
dump_thread_ = std::move(dump_thread);
- dump_scheduler_ = std::move(dump_scheduler);
subtle::NoBarrier_Store(&memory_tracing_enabled_, 1);
@@ -858,15 +844,28 @@ void MemoryDumpManager::OnTraceLogEnabled() {
if (mdpinfo->options.is_fast_polling_supported)
dump_providers_for_polling_.insert(mdpinfo);
}
+
+ MemoryDumpScheduler* dump_scheduler = MemoryDumpScheduler::GetInstance();
+ dump_scheduler->Setup(this, dump_thread_->task_runner());
+ DCHECK_LE(memory_dump_config.triggers.size(), 3u);
+ for (const auto& trigger : memory_dump_config.triggers) {
+ if (!session_state_->IsDumpModeAllowed(trigger.level_of_detail)) {
+ NOTREACHED();
+ continue;
+ }
+ dump_scheduler->AddTrigger(trigger.trigger_type, trigger.level_of_detail,
+ trigger.min_time_between_dumps_ms);
+ }
+
// Notify polling supported only if some polling supported provider was
// registered, else RegisterPollingMDPOnDumpThread() will notify when first
// polling MDP registers.
if (!dump_providers_for_polling_.empty())
- dump_scheduler_->NotifyPollingSupported();
+ dump_scheduler->EnablePollingIfNeeded();
// Only coordinator process triggers periodic global memory dumps.
if (is_coordinator_)
- dump_scheduler_->NotifyPeriodicTriggerSupported();
+ dump_scheduler->EnablePeriodicTriggerIfNeeded();
}
}
@@ -879,14 +878,12 @@ void MemoryDumpManager::OnTraceLogDisabled() {
return;
subtle::NoBarrier_Store(&memory_tracing_enabled_, 0);
std::unique_ptr<Thread> dump_thread;
- std::unique_ptr<MemoryDumpScheduler> scheduler;
{
AutoLock lock(lock_);
dump_thread = std::move(dump_thread_);
session_state_ = nullptr;
- scheduler = std::move(dump_scheduler_);
+ MemoryDumpScheduler::GetInstance()->DisableAllTriggers();
}
- scheduler->DisableAllTriggers();
// Thread stops are blocking and must be performed outside of the |lock_|
// or will deadlock (e.g., if SetupNextMemoryDump() tries to acquire it).

Powered by Google App Engine
This is Rietveld 408576698