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

Side by Side Diff: base/trace_event/memory_dump_manager.cc

Issue 1308403002: [Tracing] Disable registration of regular dump providers during tests (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@reland-content-browsertest
Patch Set: Rename variable Created 5 years, 2 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/trace_event/memory_dump_manager.h" 5 #include "base/trace_event/memory_dump_manager.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/atomic_sequence_num.h" 9 #include "base/atomic_sequence_num.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
91 MemoryDumpManager* MemoryDumpManager::GetInstance() { 91 MemoryDumpManager* MemoryDumpManager::GetInstance() {
92 if (g_instance_for_testing) 92 if (g_instance_for_testing)
93 return g_instance_for_testing; 93 return g_instance_for_testing;
94 94
95 return Singleton<MemoryDumpManager, 95 return Singleton<MemoryDumpManager,
96 LeakySingletonTraits<MemoryDumpManager>>::get(); 96 LeakySingletonTraits<MemoryDumpManager>>::get();
97 } 97 }
98 98
99 // static 99 // static
100 void MemoryDumpManager::SetInstanceForTesting(MemoryDumpManager* instance) { 100 void MemoryDumpManager::SetInstanceForTesting(MemoryDumpManager* instance) {
101 if (instance)
102 instance->skip_core_dumpers_auto_registration_for_testing_ = true;
103 g_instance_for_testing = instance; 101 g_instance_for_testing = instance;
104 } 102 }
105 103
106 MemoryDumpManager::MemoryDumpManager() 104 MemoryDumpManager::MemoryDumpManager()
107 : delegate_(nullptr), 105 : delegate_(nullptr),
108 is_coordinator_(false), 106 is_coordinator_(false),
109 memory_tracing_enabled_(0), 107 memory_tracing_enabled_(0),
110 tracing_process_id_(kInvalidTracingProcessId), 108 tracing_process_id_(kInvalidTracingProcessId),
111 skip_core_dumpers_auto_registration_for_testing_(false) { 109 dumper_registrations_ignored_for_testing_(false) {
112 g_next_guid.GetNext(); // Make sure that first guid is not zero. 110 g_next_guid.GetNext(); // Make sure that first guid is not zero.
113 } 111 }
114 112
115 MemoryDumpManager::~MemoryDumpManager() { 113 MemoryDumpManager::~MemoryDumpManager() {
116 TraceLog::GetInstance()->RemoveEnabledStateObserver(this); 114 TraceLog::GetInstance()->RemoveEnabledStateObserver(this);
117 } 115 }
118 116
119 void MemoryDumpManager::Initialize(MemoryDumpManagerDelegate* delegate, 117 void MemoryDumpManager::Initialize(MemoryDumpManagerDelegate* delegate,
120 bool is_coordinator) { 118 bool is_coordinator) {
121 { 119 {
122 AutoLock lock(lock_); 120 AutoLock lock(lock_);
123 DCHECK(delegate); 121 DCHECK(delegate);
124 DCHECK(!delegate_); 122 DCHECK(!delegate_);
125 delegate_ = delegate; 123 delegate_ = delegate;
126 is_coordinator_ = is_coordinator; 124 is_coordinator_ = is_coordinator;
127 } 125 }
128 126
129 // Enable the core dump providers. 127 // Enable the core dump providers.
130 if (!skip_core_dumpers_auto_registration_for_testing_) {
131 #if !defined(OS_NACL) 128 #if !defined(OS_NACL)
132 RegisterDumpProvider(ProcessMemoryTotalsDumpProvider::GetInstance()); 129 RegisterDumpProvider(ProcessMemoryTotalsDumpProvider::GetInstance());
133 #endif 130 #endif
134 131
135 #if defined(OS_LINUX) || defined(OS_ANDROID) 132 #if defined(OS_LINUX) || defined(OS_ANDROID)
136 RegisterDumpProvider(ProcessMemoryMapsDumpProvider::GetInstance()); 133 RegisterDumpProvider(ProcessMemoryMapsDumpProvider::GetInstance());
137 RegisterDumpProvider(MallocDumpProvider::GetInstance()); 134 RegisterDumpProvider(MallocDumpProvider::GetInstance());
138 #endif 135 #endif
139 136
140 #if defined(OS_ANDROID) 137 #if defined(OS_ANDROID)
141 RegisterDumpProvider(JavaHeapDumpProvider::GetInstance()); 138 RegisterDumpProvider(JavaHeapDumpProvider::GetInstance());
142 #endif 139 #endif
143 140
144 #if defined(OS_WIN) 141 #if defined(OS_WIN)
145 RegisterDumpProvider(WinHeapDumpProvider::GetInstance()); 142 RegisterDumpProvider(WinHeapDumpProvider::GetInstance());
146 #endif 143 #endif
147 } // !skip_core_dumpers_auto_registration_for_testing_
148 144
149 // If tracing was enabled before initializing MemoryDumpManager, we missed the 145 // If tracing was enabled before initializing MemoryDumpManager, we missed the
150 // OnTraceLogEnabled() event. Synthetize it so we can late-join the party. 146 // OnTraceLogEnabled() event. Synthetize it so we can late-join the party.
151 bool is_tracing_already_enabled = TraceLog::GetInstance()->IsEnabled(); 147 bool is_tracing_already_enabled = TraceLog::GetInstance()->IsEnabled();
152 TRACE_EVENT0(kTraceCategory, "init"); // Add to trace-viewer category list. 148 TRACE_EVENT0(kTraceCategory, "init"); // Add to trace-viewer category list.
153 TraceLog::GetInstance()->AddEnabledStateObserver(this); 149 TraceLog::GetInstance()->AddEnabledStateObserver(this);
154 if (is_tracing_already_enabled) 150 if (is_tracing_already_enabled)
155 OnTraceLogEnabled(); 151 OnTraceLogEnabled();
156 } 152 }
157 153
158 void MemoryDumpManager::RegisterDumpProvider( 154 void MemoryDumpManager::RegisterDumpProvider(
159 MemoryDumpProvider* mdp, 155 MemoryDumpProvider* mdp,
160 const scoped_refptr<SingleThreadTaskRunner>& task_runner) { 156 const scoped_refptr<SingleThreadTaskRunner>& task_runner) {
157 if (dumper_registrations_ignored_for_testing_)
158 return;
159
161 MemoryDumpProviderInfo mdp_info(mdp, task_runner); 160 MemoryDumpProviderInfo mdp_info(mdp, task_runner);
162 AutoLock lock(lock_); 161 AutoLock lock(lock_);
163 auto iter_new = dump_providers_.insert(mdp_info); 162 auto iter_new = dump_providers_.insert(mdp_info);
164 163
165 // If there was a previous entry, replace it with the new one. This is to deal 164 // If there was a previous entry, replace it with the new one. This is to deal
166 // with the case where a dump provider unregisters itself and then re- 165 // with the case where a dump provider unregisters itself and then re-
167 // registers before a memory dump happens, so its entry was still in the 166 // registers before a memory dump happens, so its entry was still in the
168 // collection but flagged |unregistered|. 167 // collection but flagged |unregistered|.
169 if (!iter_new.second) { 168 if (!iter_new.second) {
170 dump_providers_.erase(iter_new.first); 169 dump_providers_.erase(iter_new.first);
(...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after
506 next_dump_provider(next_dump_provider), 505 next_dump_provider(next_dump_provider),
507 callback(callback), 506 callback(callback),
508 task_runner(MessageLoop::current()->task_runner()) { 507 task_runner(MessageLoop::current()->task_runner()) {
509 } 508 }
510 509
511 MemoryDumpManager::ProcessMemoryDumpAsyncState::~ProcessMemoryDumpAsyncState() { 510 MemoryDumpManager::ProcessMemoryDumpAsyncState::~ProcessMemoryDumpAsyncState() {
512 } 511 }
513 512
514 } // namespace trace_event 513 } // namespace trace_event
515 } // namespace base 514 } // namespace base
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698