| Index: content/browser/tracing/tracing_controller_impl.cc
|
| diff --git a/content/browser/tracing/tracing_controller_impl.cc b/content/browser/tracing/tracing_controller_impl.cc
|
| index 6b8a58d9bfbb45d20e7ef9ab61fc575baaa3a151..9e49c0bec7c2d3a51070f2885887dff9293be262 100644
|
| --- a/content/browser/tracing/tracing_controller_impl.cc
|
| +++ b/content/browser/tracing/tracing_controller_impl.cc
|
| @@ -200,7 +200,7 @@ TracingControllerImpl::TracingControllerImpl()
|
| maximum_trace_buffer_usage_(0),
|
| approximate_event_count_(0),
|
| pending_clock_sync_ack_count_(0),
|
| - is_tracing_(false) {
|
| + enabled_tracing_modes_(0) {
|
| // Deliberately leaked, like this class.
|
| base::FileTracing::SetProvider(new FileTracingProviderImpl);
|
| }
|
| @@ -234,12 +234,10 @@ bool TracingControllerImpl::GetCategories(
|
|
|
| void TracingControllerImpl::SetEnabledOnFileThread(
|
| const TraceConfig& trace_config,
|
| - int mode,
|
| const base::Closure& callback) {
|
| DCHECK_CURRENTLY_ON(BrowserThread::FILE);
|
|
|
| - TraceLog::GetInstance()->SetEnabled(
|
| - trace_config, static_cast<TraceLog::Mode>(mode));
|
| + TraceLog::GetInstance()->SetEnabled(trace_config, enabled_tracing_modes_);
|
| BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, callback);
|
| }
|
|
|
| @@ -247,7 +245,8 @@ void TracingControllerImpl::SetDisabledOnFileThread(
|
| const base::Closure& callback) {
|
| DCHECK_CURRENTLY_ON(BrowserThread::FILE);
|
|
|
| - TraceLog::GetInstance()->SetDisabled();
|
| + DCHECK(enabled_tracing_modes_);
|
| + TraceLog::GetInstance()->SetDisabled(enabled_tracing_modes_);
|
| BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, callback);
|
| }
|
|
|
| @@ -257,12 +256,16 @@ bool TracingControllerImpl::StartTracing(
|
| DCHECK_CURRENTLY_ON(BrowserThread::UI);
|
| DCHECK(additional_tracing_agents_.empty());
|
|
|
| + // TODO(ssid): Introduce a priority for tracing agents to handle multiple
|
| + // start and stop requests, crbug.com/705087.
|
| if (!can_start_tracing())
|
| return false;
|
| - is_tracing_ = true;
|
| start_tracing_done_callback_ = callback;
|
| start_tracing_trace_config_.reset(
|
| new base::trace_event::TraceConfig(trace_config));
|
| + enabled_tracing_modes_ = TraceLog::RECORDING_MODE;
|
| + if (!start_tracing_trace_config_->event_filters().empty())
|
| + enabled_tracing_modes_ |= TraceLog::FILTERING_MODE;
|
| metadata_.reset(new base::DictionaryValue());
|
| pending_start_tracing_ack_count_ = 0;
|
|
|
| @@ -469,7 +472,7 @@ bool TracingControllerImpl::GetTraceBufferUsage(
|
| }
|
|
|
| bool TracingControllerImpl::IsTracing() const {
|
| - return is_tracing_;
|
| + return !!enabled_tracing_modes_;
|
| }
|
|
|
| void TracingControllerImpl::AddTraceMessageFilter(
|
| @@ -645,7 +648,7 @@ void TracingControllerImpl::OnStopTracingAcked(
|
|
|
| // All acks (including from the subprocesses and the local trace) have been
|
| // received.
|
| - is_tracing_ = false;
|
| + enabled_tracing_modes_ = 0;
|
|
|
| // Trigger callback if one is set.
|
| if (!pending_get_categories_done_callback_.is_null()) {
|
| @@ -776,12 +779,10 @@ void TracingControllerImpl::StartAgentTracing(
|
| BrowserThread::FILE, FROM_HERE,
|
| base::Bind(&TracingControllerImpl::SetEnabledOnFileThread,
|
| base::Unretained(this), trace_config,
|
| - base::trace_event::TraceLog::RECORDING_MODE,
|
| on_agent_started))) {
|
| // BrowserThread::PostTask fails if the threads haven't been created yet,
|
| // so it should be safe to just use TraceLog::SetEnabled directly.
|
| - base::trace_event::TraceLog::GetInstance()->SetEnabled(
|
| - trace_config, base::trace_event::TraceLog::RECORDING_MODE);
|
| + TraceLog::GetInstance()->SetEnabled(trace_config, enabled_tracing_modes_);
|
| BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, on_agent_started);
|
| }
|
| }
|
|
|