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

Side by Side Diff: content/browser/tracing/tracing_controller_impl.cc

Issue 2466873002: Enable FILTERING_MODE for tracing if event filters were given in config (Closed)
Patch Set: rebase. 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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 #include "content/browser/tracing/tracing_controller_impl.h" 4 #include "content/browser/tracing/tracing_controller_impl.h"
5 5
6 #include "base/bind.h" 6 #include "base/bind.h"
7 #include "base/cpu.h" 7 #include "base/cpu.h"
8 #include "base/files/file_util.h" 8 #include "base/files/file_util.h"
9 #include "base/guid.h" 9 #include "base/guid.h"
10 #include "base/json/string_escape.h" 10 #include "base/json/string_escape.h"
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 189
190 TracingControllerImpl::TracingControllerImpl() 190 TracingControllerImpl::TracingControllerImpl()
191 : pending_start_tracing_ack_count_(0), 191 : pending_start_tracing_ack_count_(0),
192 pending_stop_tracing_ack_count_(0), 192 pending_stop_tracing_ack_count_(0),
193 pending_trace_log_status_ack_count_(0), 193 pending_trace_log_status_ack_count_(0),
194 maximum_trace_buffer_usage_(0), 194 maximum_trace_buffer_usage_(0),
195 approximate_event_count_(0), 195 approximate_event_count_(0),
196 pending_memory_dump_ack_count_(0), 196 pending_memory_dump_ack_count_(0),
197 failed_memory_dump_count_(0), 197 failed_memory_dump_count_(0),
198 pending_clock_sync_ack_count_(0), 198 pending_clock_sync_ack_count_(0),
199 is_tracing_(false) { 199 enabled_tracing_modes_(0) {
200 base::trace_event::MemoryDumpManager::GetInstance()->Initialize( 200 base::trace_event::MemoryDumpManager::GetInstance()->Initialize(
201 this /* delegate */, true /* is_coordinator */); 201 this /* delegate */, true /* is_coordinator */);
202 202
203 // Deliberately leaked, like this class. 203 // Deliberately leaked, like this class.
204 base::FileTracing::SetProvider(new FileTracingProviderImpl); 204 base::FileTracing::SetProvider(new FileTracingProviderImpl);
205 } 205 }
206 206
207 TracingControllerImpl::~TracingControllerImpl() { 207 TracingControllerImpl::~TracingControllerImpl() {
208 // This is a Leaky instance. 208 // This is a Leaky instance.
209 NOTREACHED(); 209 NOTREACHED();
(...skipping 16 matching lines...) Expand all
226 return false; 226 return false;
227 } 227 }
228 228
229 bool ok = StopTracing(NULL); 229 bool ok = StopTracing(NULL);
230 DCHECK(ok); 230 DCHECK(ok);
231 return true; 231 return true;
232 } 232 }
233 233
234 void TracingControllerImpl::SetEnabledOnFileThread( 234 void TracingControllerImpl::SetEnabledOnFileThread(
235 const TraceConfig& trace_config, 235 const TraceConfig& trace_config,
236 int mode,
237 const base::Closure& callback) { 236 const base::Closure& callback) {
238 DCHECK_CURRENTLY_ON(BrowserThread::FILE); 237 DCHECK_CURRENTLY_ON(BrowserThread::FILE);
239 238
240 TraceLog::GetInstance()->SetEnabled( 239 TraceLog::GetInstance()->SetEnabled(trace_config, enabled_tracing_modes_);
241 trace_config, static_cast<TraceLog::Mode>(mode));
242 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, callback); 240 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, callback);
243 } 241 }
244 242
245 void TracingControllerImpl::SetDisabledOnFileThread( 243 void TracingControllerImpl::SetDisabledOnFileThread(
246 const base::Closure& callback) { 244 const base::Closure& callback) {
247 DCHECK_CURRENTLY_ON(BrowserThread::FILE); 245 DCHECK_CURRENTLY_ON(BrowserThread::FILE);
248 246
249 TraceLog::GetInstance()->SetDisabled(); 247 DCHECK(enabled_tracing_modes_);
248 TraceLog::GetInstance()->SetDisabled(enabled_tracing_modes_);
250 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, callback); 249 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, callback);
251 } 250 }
252 251
253 bool TracingControllerImpl::StartTracing( 252 bool TracingControllerImpl::StartTracing(
254 const TraceConfig& trace_config, 253 const TraceConfig& trace_config,
255 const StartTracingDoneCallback& callback) { 254 const StartTracingDoneCallback& callback) {
256 DCHECK_CURRENTLY_ON(BrowserThread::UI); 255 DCHECK_CURRENTLY_ON(BrowserThread::UI);
257 DCHECK(additional_tracing_agents_.empty()); 256 DCHECK(additional_tracing_agents_.empty());
258 257
259 if (!can_start_tracing()) 258 if (!can_start_tracing())
260 return false; 259 return false;
261 is_tracing_ = true;
262 start_tracing_done_callback_ = callback; 260 start_tracing_done_callback_ = callback;
263 start_tracing_trace_config_.reset( 261 start_tracing_trace_config_.reset(
264 new base::trace_event::TraceConfig(trace_config)); 262 new base::trace_event::TraceConfig(trace_config));
263 enabled_tracing_modes_ = TraceLog::RECORDING_MODE;
264 if (!start_tracing_trace_config_->event_filters().empty())
265 enabled_tracing_modes_ |= TraceLog::FILTERING_MODE;
265 metadata_.reset(new base::DictionaryValue()); 266 metadata_.reset(new base::DictionaryValue());
266 pending_start_tracing_ack_count_ = 0; 267 pending_start_tracing_ack_count_ = 0;
267 268
268 #if defined(OS_ANDROID) 269 #if defined(OS_ANDROID)
269 if (pending_get_categories_done_callback_.is_null()) 270 if (pending_get_categories_done_callback_.is_null())
270 TraceLog::GetInstance()->AddClockSyncMetadataEvent(); 271 TraceLog::GetInstance()->AddClockSyncMetadataEvent();
271 #endif 272 #endif
272 273
273 if (trace_config.IsSystraceEnabled()) { 274 if (trace_config.IsSystraceEnabled()) {
274 #if defined(ENABLE_POWER_TRACING) 275 #if defined(ENABLE_POWER_TRACING)
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
455 456
456 // Notify all child processes. 457 // Notify all child processes.
457 for (TraceMessageFilterSet::iterator it = trace_message_filters_.begin(); 458 for (TraceMessageFilterSet::iterator it = trace_message_filters_.begin();
458 it != trace_message_filters_.end(); ++it) { 459 it != trace_message_filters_.end(); ++it) {
459 it->get()->SendGetTraceLogStatus(); 460 it->get()->SendGetTraceLogStatus();
460 } 461 }
461 return true; 462 return true;
462 } 463 }
463 464
464 bool TracingControllerImpl::IsTracing() const { 465 bool TracingControllerImpl::IsTracing() const {
465 return is_tracing_; 466 return !!enabled_tracing_modes_;
466 } 467 }
467 468
468 void TracingControllerImpl::AddTraceMessageFilter( 469 void TracingControllerImpl::AddTraceMessageFilter(
469 TraceMessageFilter* trace_message_filter) { 470 TraceMessageFilter* trace_message_filter) {
470 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { 471 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
471 BrowserThread::PostTask( 472 BrowserThread::PostTask(
472 BrowserThread::UI, FROM_HERE, 473 BrowserThread::UI, FROM_HERE,
473 base::Bind(&TracingControllerImpl::AddTraceMessageFilter, 474 base::Bind(&TracingControllerImpl::AddTraceMessageFilter,
474 base::Unretained(this), 475 base::Unretained(this),
475 base::RetainedRef(trace_message_filter))); 476 base::RetainedRef(trace_message_filter)));
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
640 base::Unretained(this))); 641 base::Unretained(this)));
641 } 642 }
642 return; 643 return;
643 } 644 }
644 645
645 if (pending_stop_tracing_ack_count_ != 0) 646 if (pending_stop_tracing_ack_count_ != 0)
646 return; 647 return;
647 648
648 // All acks (including from the subprocesses and the local trace) have been 649 // All acks (including from the subprocesses and the local trace) have been
649 // received. 650 // received.
650 is_tracing_ = false; 651 enabled_tracing_modes_ = 0;
651 652
652 // Trigger callback if one is set. 653 // Trigger callback if one is set.
653 if (!pending_get_categories_done_callback_.is_null()) { 654 if (!pending_get_categories_done_callback_.is_null()) {
654 pending_get_categories_done_callback_.Run(known_category_groups_); 655 pending_get_categories_done_callback_.Run(known_category_groups_);
655 pending_get_categories_done_callback_.Reset(); 656 pending_get_categories_done_callback_.Reset();
656 } else if (trace_data_sink_.get()) { 657 } else if (trace_data_sink_.get()) {
657 trace_data_sink_->Close(); 658 trace_data_sink_->Close();
658 trace_data_sink_ = NULL; 659 trace_data_sink_ = NULL;
659 } 660 }
660 } 661 }
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
769 const base::trace_event::TraceConfig& trace_config, 770 const base::trace_event::TraceConfig& trace_config,
770 const StartAgentTracingCallback& callback) { 771 const StartAgentTracingCallback& callback) {
771 DCHECK_CURRENTLY_ON(BrowserThread::UI); 772 DCHECK_CURRENTLY_ON(BrowserThread::UI);
772 773
773 base::Closure on_agent_started = 774 base::Closure on_agent_started =
774 base::Bind(callback, kChromeTracingAgentName, true); 775 base::Bind(callback, kChromeTracingAgentName, true);
775 if (!BrowserThread::PostTask( 776 if (!BrowserThread::PostTask(
776 BrowserThread::FILE, FROM_HERE, 777 BrowserThread::FILE, FROM_HERE,
777 base::Bind(&TracingControllerImpl::SetEnabledOnFileThread, 778 base::Bind(&TracingControllerImpl::SetEnabledOnFileThread,
778 base::Unretained(this), trace_config, 779 base::Unretained(this), trace_config,
779 base::trace_event::TraceLog::RECORDING_MODE,
780 on_agent_started))) { 780 on_agent_started))) {
781 // BrowserThread::PostTask fails if the threads haven't been created yet, 781 // BrowserThread::PostTask fails if the threads haven't been created yet,
782 // so it should be safe to just use TraceLog::SetEnabled directly. 782 // so it should be safe to just use TraceLog::SetEnabled directly.
783 base::trace_event::TraceLog::GetInstance()->SetEnabled( 783 TraceLog::GetInstance()->SetEnabled(trace_config, enabled_tracing_modes_);
784 trace_config, base::trace_event::TraceLog::RECORDING_MODE);
785 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, on_agent_started); 784 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, on_agent_started);
786 } 785 }
787 } 786 }
788 787
789 void TracingControllerImpl::StopAgentTracing( 788 void TracingControllerImpl::StopAgentTracing(
790 const StopAgentTracingCallback& callback) { 789 const StopAgentTracingCallback& callback) {
791 DCHECK_CURRENTLY_ON(BrowserThread::UI); 790 DCHECK_CURRENTLY_ON(BrowserThread::UI);
792 // Handle special case of zero child processes by immediately flushing the 791 // Handle special case of zero child processes by immediately flushing the
793 // trace log. Once the flush has completed the caller will be notified that 792 // trace log. Once the flush has completed the caller will be notified that
794 // tracing has ended. 793 // tracing has ended.
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after
1061 // Schedule the next queued dump (if applicable). 1060 // Schedule the next queued dump (if applicable).
1062 if (!queued_memory_dump_requests_.empty()) { 1061 if (!queued_memory_dump_requests_.empty()) {
1063 BrowserThread::PostTask( 1062 BrowserThread::PostTask(
1064 BrowserThread::UI, FROM_HERE, 1063 BrowserThread::UI, FROM_HERE,
1065 base::Bind(&TracingControllerImpl::PerformNextQueuedGlobalMemoryDump, 1064 base::Bind(&TracingControllerImpl::PerformNextQueuedGlobalMemoryDump,
1066 base::Unretained(this))); 1065 base::Unretained(this)));
1067 } 1066 }
1068 } 1067 }
1069 1068
1070 } // namespace content 1069 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698