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 |