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

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: Fix indentation 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/base_switches.h" 10 #include "base/base_switches.h"
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 MemoryDumpManager* MemoryDumpManager::GetInstance() { 92 MemoryDumpManager* MemoryDumpManager::GetInstance() {
93 if (g_instance_for_testing) 93 if (g_instance_for_testing)
94 return g_instance_for_testing; 94 return g_instance_for_testing;
95 95
96 return Singleton<MemoryDumpManager, 96 return Singleton<MemoryDumpManager,
97 LeakySingletonTraits<MemoryDumpManager>>::get(); 97 LeakySingletonTraits<MemoryDumpManager>>::get();
98 } 98 }
99 99
100 // static 100 // static
101 void MemoryDumpManager::SetInstanceForTesting(MemoryDumpManager* instance) { 101 void MemoryDumpManager::SetInstanceForTesting(MemoryDumpManager* instance) {
102 if (instance)
103 instance->skip_core_dumpers_auto_registration_for_testing_ = true;
104 g_instance_for_testing = instance; 102 g_instance_for_testing = instance;
105 } 103 }
106 104
107 MemoryDumpManager::MemoryDumpManager() 105 MemoryDumpManager::MemoryDumpManager()
108 : delegate_(nullptr), 106 : delegate_(nullptr),
109 is_coordinator_(false), 107 is_coordinator_(false),
110 memory_tracing_enabled_(0), 108 memory_tracing_enabled_(0),
111 tracing_process_id_(kInvalidTracingProcessId), 109 tracing_process_id_(kInvalidTracingProcessId),
112 skip_core_dumpers_auto_registration_for_testing_(false) { 110 dumper_registrations_ignored_for_testing_(false) {
113 g_next_guid.GetNext(); // Make sure that first guid is not zero. 111 g_next_guid.GetNext(); // Make sure that first guid is not zero.
114 112
115 heap_profiling_enabled_ = CommandLine::InitializedForCurrentProcess() 113 heap_profiling_enabled_ = CommandLine::InitializedForCurrentProcess()
116 ? CommandLine::ForCurrentProcess()->HasSwitch( 114 ? CommandLine::ForCurrentProcess()->HasSwitch(
117 switches::kEnableHeapProfiling) 115 switches::kEnableHeapProfiling)
118 : false; 116 : false;
119 } 117 }
120 118
121 MemoryDumpManager::~MemoryDumpManager() { 119 MemoryDumpManager::~MemoryDumpManager() {
122 TraceLog::GetInstance()->RemoveEnabledStateObserver(this); 120 TraceLog::GetInstance()->RemoveEnabledStateObserver(this);
123 } 121 }
124 122
125 void MemoryDumpManager::Initialize(MemoryDumpManagerDelegate* delegate, 123 void MemoryDumpManager::Initialize(MemoryDumpManagerDelegate* delegate,
126 bool is_coordinator) { 124 bool is_coordinator) {
127 { 125 {
128 AutoLock lock(lock_); 126 AutoLock lock(lock_);
129 DCHECK(delegate); 127 DCHECK(delegate);
130 DCHECK(!delegate_); 128 DCHECK(!delegate_);
131 delegate_ = delegate; 129 delegate_ = delegate;
132 is_coordinator_ = is_coordinator; 130 is_coordinator_ = is_coordinator;
133 } 131 }
134 132
135 // Enable the core dump providers. 133 // Enable the core dump providers.
136 if (!skip_core_dumpers_auto_registration_for_testing_) {
137 #if !defined(OS_NACL) 134 #if !defined(OS_NACL)
138 RegisterDumpProvider(ProcessMemoryTotalsDumpProvider::GetInstance()); 135 RegisterDumpProvider(ProcessMemoryTotalsDumpProvider::GetInstance());
139 #endif 136 #endif
140 137
141 #if defined(OS_LINUX) || defined(OS_ANDROID) 138 #if defined(OS_LINUX) || defined(OS_ANDROID)
142 RegisterDumpProvider(ProcessMemoryMapsDumpProvider::GetInstance()); 139 RegisterDumpProvider(ProcessMemoryMapsDumpProvider::GetInstance());
143 RegisterDumpProvider(MallocDumpProvider::GetInstance()); 140 RegisterDumpProvider(MallocDumpProvider::GetInstance());
144 #endif 141 #endif
145 142
146 #if defined(OS_ANDROID) 143 #if defined(OS_ANDROID)
147 RegisterDumpProvider(JavaHeapDumpProvider::GetInstance()); 144 RegisterDumpProvider(JavaHeapDumpProvider::GetInstance());
148 #endif 145 #endif
149 146
150 #if defined(OS_WIN) 147 #if defined(OS_WIN)
151 RegisterDumpProvider(WinHeapDumpProvider::GetInstance()); 148 RegisterDumpProvider(WinHeapDumpProvider::GetInstance());
152 #endif 149 #endif
153 } // !skip_core_dumpers_auto_registration_for_testing_
154 150
155 // If tracing was enabled before initializing MemoryDumpManager, we missed the 151 // If tracing was enabled before initializing MemoryDumpManager, we missed the
156 // OnTraceLogEnabled() event. Synthetize it so we can late-join the party. 152 // OnTraceLogEnabled() event. Synthetize it so we can late-join the party.
157 bool is_tracing_already_enabled = TraceLog::GetInstance()->IsEnabled(); 153 bool is_tracing_already_enabled = TraceLog::GetInstance()->IsEnabled();
158 TRACE_EVENT0(kTraceCategory, "init"); // Add to trace-viewer category list. 154 TRACE_EVENT0(kTraceCategory, "init"); // Add to trace-viewer category list.
159 TraceLog::GetInstance()->AddEnabledStateObserver(this); 155 TraceLog::GetInstance()->AddEnabledStateObserver(this);
160 if (is_tracing_already_enabled) 156 if (is_tracing_already_enabled)
161 OnTraceLogEnabled(); 157 OnTraceLogEnabled();
162 } 158 }
163 159
164 void MemoryDumpManager::RegisterDumpProvider( 160 void MemoryDumpManager::RegisterDumpProvider(
165 MemoryDumpProvider* mdp, 161 MemoryDumpProvider* mdp,
166 const scoped_refptr<SingleThreadTaskRunner>& task_runner) { 162 const scoped_refptr<SingleThreadTaskRunner>& task_runner) {
163 if (dumper_registrations_ignored_for_testing_)
164 return;
165
167 MemoryDumpProviderInfo mdp_info(mdp, task_runner); 166 MemoryDumpProviderInfo mdp_info(mdp, task_runner);
168 AutoLock lock(lock_); 167 AutoLock lock(lock_);
169 auto iter_new = dump_providers_.insert(mdp_info); 168 auto iter_new = dump_providers_.insert(mdp_info);
170 169
171 // If there was a previous entry, replace it with the new one. This is to deal 170 // If there was a previous entry, replace it with the new one. This is to deal
172 // with the case where a dump provider unregisters itself and then re- 171 // with the case where a dump provider unregisters itself and then re-
173 // registers before a memory dump happens, so its entry was still in the 172 // registers before a memory dump happens, so its entry was still in the
174 // collection but flagged |unregistered|. 173 // collection but flagged |unregistered|.
175 if (!iter_new.second) { 174 if (!iter_new.second) {
176 dump_providers_.erase(iter_new.first); 175 dump_providers_.erase(iter_new.first);
(...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after
515 next_dump_provider(next_dump_provider), 514 next_dump_provider(next_dump_provider),
516 callback(callback), 515 callback(callback),
517 task_runner(MessageLoop::current()->task_runner()) { 516 task_runner(MessageLoop::current()->task_runner()) {
518 } 517 }
519 518
520 MemoryDumpManager::ProcessMemoryDumpAsyncState::~ProcessMemoryDumpAsyncState() { 519 MemoryDumpManager::ProcessMemoryDumpAsyncState::~ProcessMemoryDumpAsyncState() {
521 } 520 }
522 521
523 } // namespace trace_event 522 } // namespace trace_event
524 } // namespace base 523 } // namespace base
OLDNEW
« no previous file with comments | « base/trace_event/memory_dump_manager.h ('k') | base/trace_event/memory_dump_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698