| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "content/browser/trace_controller.h" | 5 #include "content/browser/trace_controller.h" |
| 6 | 6 |
| 7 #include "base/debug/trace_event.h" |
| 7 #include "base/task.h" | 8 #include "base/task.h" |
| 8 #include "content/browser/browser_message_filter.h" | 9 #include "content/browser/browser_message_filter.h" |
| 9 #include "content/browser/trace_message_filter.h" | 10 #include "content/browser/trace_message_filter.h" |
| 10 #include "content/common/child_process_messages.h" | 11 #include "content/common/child_process_messages.h" |
| 11 #include "gpu/common/gpu_trace_event.h" | |
| 12 | 12 |
| 13 | 13 |
| 14 TraceController::TraceController() : | 14 TraceController::TraceController() : |
| 15 pending_ack_count_(0), | 15 pending_ack_count_(0), |
| 16 is_tracing_(false), | 16 is_tracing_(false), |
| 17 subscriber_(NULL) { | 17 subscriber_(NULL) { |
| 18 gpu::TraceLog::GetInstance()->SetOutputCallback( | 18 base::debug::TraceLog::GetInstance()->SetOutputCallback( |
| 19 NewCallback(this, &TraceController::OnTraceDataCollected)); | 19 NewCallback(this, &TraceController::OnTraceDataCollected)); |
| 20 } | 20 } |
| 21 | 21 |
| 22 TraceController::~TraceController() { | 22 TraceController::~TraceController() { |
| 23 gpu::TraceLog::GetInstance()->SetOutputCallback(NULL); | 23 base::debug::TraceLog::GetInstance()->SetOutputCallback(NULL); |
| 24 } | 24 } |
| 25 | 25 |
| 26 //static | 26 //static |
| 27 TraceController* TraceController::GetInstance() { | 27 TraceController* TraceController::GetInstance() { |
| 28 return Singleton<TraceController>::get(); | 28 return Singleton<TraceController>::get(); |
| 29 } | 29 } |
| 30 | 30 |
| 31 bool TraceController::BeginTracing(TraceSubscriber* subscriber) { | 31 bool TraceController::BeginTracing(TraceSubscriber* subscriber) { |
| 32 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 32 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 33 | 33 |
| 34 if (!can_begin_tracing() || | 34 if (!can_begin_tracing() || |
| 35 (subscriber_ != NULL && subscriber != subscriber_)) | 35 (subscriber_ != NULL && subscriber != subscriber_)) |
| 36 return false; | 36 return false; |
| 37 | 37 |
| 38 subscriber_ = subscriber; | 38 subscriber_ = subscriber; |
| 39 | 39 |
| 40 // Enable tracing | 40 // Enable tracing |
| 41 is_tracing_ = true; | 41 is_tracing_ = true; |
| 42 gpu::TraceLog::GetInstance()->SetEnabled(true); | 42 base::debug::TraceLog::GetInstance()->SetEnabled(true); |
| 43 | 43 |
| 44 // Notify all child processes. | 44 // Notify all child processes. |
| 45 for (FilterMap::iterator it = filters_.begin(); it != filters_.end(); ++it) { | 45 for (FilterMap::iterator it = filters_.begin(); it != filters_.end(); ++it) { |
| 46 it->get()->SendBeginTracing(); | 46 it->get()->SendBeginTracing(); |
| 47 } | 47 } |
| 48 | 48 |
| 49 return true; | 49 return true; |
| 50 } | 50 } |
| 51 | 51 |
| 52 bool TraceController::EndTracingAsync(TraceSubscriber* subscriber) { | 52 bool TraceController::EndTracingAsync(TraceSubscriber* subscriber) { |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 121 } | 121 } |
| 122 | 122 |
| 123 if (--pending_ack_count_ == 0) { | 123 if (--pending_ack_count_ == 0) { |
| 124 // All acks have been received. | 124 // All acks have been received. |
| 125 is_tracing_ = false; | 125 is_tracing_ = false; |
| 126 | 126 |
| 127 // Disable local trace. During this call, our OnTraceDataCollected will be | 127 // Disable local trace. During this call, our OnTraceDataCollected will be |
| 128 // called with the last of the local trace data. Since we are on the UI | 128 // called with the last of the local trace data. Since we are on the UI |
| 129 // thread, the call to OnTraceDataCollected will be synchronous, so we can | 129 // thread, the call to OnTraceDataCollected will be synchronous, so we can |
| 130 // immediately call OnEndTracingComplete below. | 130 // immediately call OnEndTracingComplete below. |
| 131 gpu::TraceLog::GetInstance()->SetEnabled(false); | 131 base::debug::TraceLog::GetInstance()->SetEnabled(false); |
| 132 | 132 |
| 133 // Trigger callback if one is set. | 133 // Trigger callback if one is set. |
| 134 if (subscriber_ != NULL) { | 134 if (subscriber_ != NULL) { |
| 135 subscriber_->OnEndTracingComplete(); | 135 subscriber_->OnEndTracingComplete(); |
| 136 // Clear subscriber so that others can use TraceController. | 136 // Clear subscriber so that others can use TraceController. |
| 137 subscriber_ = NULL; | 137 subscriber_ = NULL; |
| 138 } | 138 } |
| 139 } | 139 } |
| 140 | 140 |
| 141 if (pending_ack_count_ == 1) { | 141 if (pending_ack_count_ == 1) { |
| (...skipping 11 matching lines...) Expand all Loading... |
| 153 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, | 153 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |
| 154 NewRunnableMethod(this, &TraceController::OnTraceDataCollected, data)); | 154 NewRunnableMethod(this, &TraceController::OnTraceDataCollected, data)); |
| 155 return; | 155 return; |
| 156 } | 156 } |
| 157 | 157 |
| 158 if (subscriber_) { | 158 if (subscriber_) { |
| 159 subscriber_->OnTraceDataCollected(data); | 159 subscriber_->OnTraceDataCollected(data); |
| 160 } | 160 } |
| 161 } | 161 } |
| 162 | 162 |
| OLD | NEW |