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

Side by Side Diff: content/browser/trace_controller.cc

Issue 6862002: Merge gpu_trace_event back into base/debug/trace_event (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: merge to 84062 Created 9 years, 7 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 | Annotate | Revision Log
OLDNEW
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/bind.h"
8 #include "base/debug/trace_event.h"
7 #include "base/task.h" 9 #include "base/task.h"
8 #include "content/browser/browser_message_filter.h" 10 #include "content/browser/browser_message_filter.h"
9 #include "content/browser/trace_message_filter.h" 11 #include "content/browser/trace_message_filter.h"
10 #include "content/common/child_process_messages.h" 12 #include "content/common/child_process_messages.h"
11 #include "gpu/common/gpu_trace_event.h"
12 13
13 14
14 TraceController::TraceController() : 15 TraceController::TraceController() :
15 subscriber_(NULL), 16 subscriber_(NULL),
16 pending_end_ack_count_(0), 17 pending_end_ack_count_(0),
17 pending_bpf_ack_count_(0), 18 pending_bpf_ack_count_(0),
18 maximum_bpf_(0.0f), 19 maximum_bpf_(0.0f),
19 is_tracing_(false) { 20 is_tracing_(false) {
20 gpu::TraceLog::GetInstance()->SetOutputCallback( 21 base::debug::TraceLog::GetInstance()->SetOutputCallback(
21 NewCallback(this, &TraceController::OnTraceDataCollected)); 22 base::Bind(&TraceController::OnTraceDataCollected,
23 base::Unretained(this)));
22 } 24 }
23 25
24 TraceController::~TraceController() { 26 TraceController::~TraceController() {
25 gpu::TraceLog::GetInstance()->SetOutputCallback(NULL); 27 base::debug::TraceLog::GetInstance()->SetOutputCallback(
28 base::debug::TraceLog::OutputCallback());
Sigurður Ásgeirsson 2011/05/04 18:58:09 nit: 4 spaces for continuation.
scheib 2011/05/05 00:06:37 Done.
26 } 29 }
27 30
28 //static 31 //static
29 TraceController* TraceController::GetInstance() { 32 TraceController* TraceController::GetInstance() {
30 return Singleton<TraceController>::get(); 33 return Singleton<TraceController>::get();
31 } 34 }
32 35
33 bool TraceController::BeginTracing(TraceSubscriber* subscriber) { 36 bool TraceController::BeginTracing(TraceSubscriber* subscriber) {
34 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 37 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
35 38
36 if (!can_begin_tracing() || 39 if (!can_begin_tracing() ||
37 (subscriber_ != NULL && subscriber != subscriber_)) 40 (subscriber_ != NULL && subscriber != subscriber_))
38 return false; 41 return false;
39 42
40 subscriber_ = subscriber; 43 subscriber_ = subscriber;
41 44
42 // Enable tracing 45 // Enable tracing
43 is_tracing_ = true; 46 is_tracing_ = true;
44 gpu::TraceLog::GetInstance()->SetEnabled(true); 47 base::debug::TraceLog::GetInstance()->SetEnabled(true);
45 48
46 // Notify all child processes. 49 // Notify all child processes.
47 for (FilterMap::iterator it = filters_.begin(); it != filters_.end(); ++it) { 50 for (FilterMap::iterator it = filters_.begin(); it != filters_.end(); ++it) {
48 it->get()->SendBeginTracing(); 51 it->get()->SendBeginTracing();
49 } 52 }
50 53
51 return true; 54 return true;
52 } 55 }
53 56
54 bool TraceController::EndTracingAsync(TraceSubscriber* subscriber) { 57 bool TraceController::EndTracingAsync(TraceSubscriber* subscriber) {
(...skipping 30 matching lines...) Expand all
85 88
86 if (!can_get_buffer_percent_full() || subscriber != subscriber_) 89 if (!can_get_buffer_percent_full() || subscriber != subscriber_)
87 return false; 90 return false;
88 91
89 maximum_bpf_ = 0.0f; 92 maximum_bpf_ = 0.0f;
90 pending_bpf_ack_count_ = filters_.size() + 1; 93 pending_bpf_ack_count_ = filters_.size() + 1;
91 94
92 // Handle special case of zero child processes. 95 // Handle special case of zero child processes.
93 if (pending_bpf_ack_count_ == 1) { 96 if (pending_bpf_ack_count_ == 1) {
94 // Ack asynchronously now, because we don't have any children to wait for. 97 // Ack asynchronously now, because we don't have any children to wait for.
95 float bpf = gpu::TraceLog::GetInstance()->GetBufferPercentFull(); 98 float bpf = base::debug::TraceLog::GetInstance()->GetBufferPercentFull();
96 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 99 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
97 NewRunnableMethod(this, 100 NewRunnableMethod(this,
98 &TraceController::OnTraceBufferPercentFullReply, 101 &TraceController::OnTraceBufferPercentFullReply,
99 bpf)); 102 bpf));
100 } 103 }
101 104
102 // Message all child processes. 105 // Message all child processes.
103 for (FilterMap::iterator it = filters_.begin(); it != filters_.end(); ++it) { 106 for (FilterMap::iterator it = filters_.begin(); it != filters_.end(); ++it) {
104 it->get()->SendGetTraceBufferPercentFull(); 107 it->get()->SendGetTraceBufferPercentFull();
105 } 108 }
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
154 return; 157 return;
155 158
156 if (--pending_end_ack_count_ == 0) { 159 if (--pending_end_ack_count_ == 0) {
157 // All acks have been received. 160 // All acks have been received.
158 is_tracing_ = false; 161 is_tracing_ = false;
159 162
160 // Disable local trace. During this call, our OnTraceDataCollected will be 163 // Disable local trace. During this call, our OnTraceDataCollected will be
161 // called with the last of the local trace data. Since we are on the UI 164 // called with the last of the local trace data. Since we are on the UI
162 // thread, the call to OnTraceDataCollected will be synchronous, so we can 165 // thread, the call to OnTraceDataCollected will be synchronous, so we can
163 // immediately call OnEndTracingComplete below. 166 // immediately call OnEndTracingComplete below.
164 gpu::TraceLog::GetInstance()->SetEnabled(false); 167 base::debug::TraceLog::GetInstance()->SetEnabled(false);
165 168
166 // Trigger callback if one is set. 169 // Trigger callback if one is set.
167 if (subscriber_) { 170 if (subscriber_) {
168 subscriber_->OnEndTracingComplete(); 171 subscriber_->OnEndTracingComplete();
169 // Clear subscriber so that others can use TraceController. 172 // Clear subscriber so that others can use TraceController.
170 subscriber_ = NULL; 173 subscriber_ = NULL;
171 } 174 }
172 } 175 }
173 176
174 if (pending_end_ack_count_ == 1) { 177 if (pending_end_ack_count_ == 1) {
175 // The last ack represents local trace, so we need to ack it now. Note that 178 // The last ack represents local trace, so we need to ack it now. Note that
176 // this code only executes if there were child processes. 179 // this code only executes if there were child processes.
177 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 180 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
178 NewRunnableMethod(this, &TraceController::OnEndTracingAck)); 181 NewRunnableMethod(this, &TraceController::OnEndTracingAck));
179 } 182 }
180 } 183 }
181 184
182 void TraceController::OnTraceDataCollected(const std::string& data) { 185 void TraceController::OnTraceDataCollected(
186 const scoped_refptr<base::debug::TraceLog::RefCountedString>&
Sigurður Ásgeirsson 2011/05/04 18:58:09 nit: is there a typedef you can borrow to make thi
scheib 2011/05/05 00:06:37 Style guidance from jam is to not typedef scoped_r
187 json_events_str_ptr) {
183 // OnTraceDataCollected may be called from any browser thread, either by the 188 // OnTraceDataCollected may be called from any browser thread, either by the
184 // local event trace system or from child processes via TraceMessageFilter. 189 // local event trace system or from child processes via TraceMessageFilter.
185 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { 190 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
186 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 191 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
187 NewRunnableMethod(this, &TraceController::OnTraceDataCollected, data)); 192 NewRunnableMethod(this,
193 &TraceController::OnTraceDataCollected,
194 json_events_str_ptr));
188 return; 195 return;
189 } 196 }
190 197
191 if (subscriber_) 198 if (subscriber_)
192 subscriber_->OnTraceDataCollected(data); 199 subscriber_->OnTraceDataCollected(json_events_str_ptr->data);
193 } 200 }
194 201
195 void TraceController::OnTraceBufferFull() { 202 void TraceController::OnTraceBufferFull() {
196 // OnTraceBufferFull may be called from any browser thread, either by the 203 // OnTraceBufferFull may be called from any browser thread, either by the
197 // local event trace system or from child processes via TraceMessageFilter. 204 // local event trace system or from child processes via TraceMessageFilter.
198 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { 205 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
199 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 206 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
200 NewRunnableMethod(this, &TraceController::OnTraceBufferFull)); 207 NewRunnableMethod(this, &TraceController::OnTraceBufferFull));
201 return; 208 return;
202 } 209 }
(...skipping 19 matching lines...) Expand all
222 229
223 if (--pending_bpf_ack_count_ == 0) { 230 if (--pending_bpf_ack_count_ == 0) {
224 // Trigger callback if one is set. 231 // Trigger callback if one is set.
225 if (subscriber_) 232 if (subscriber_)
226 subscriber_->OnTraceBufferPercentFullReply(maximum_bpf_); 233 subscriber_->OnTraceBufferPercentFullReply(maximum_bpf_);
227 } 234 }
228 235
229 if (pending_bpf_ack_count_ == 1) { 236 if (pending_bpf_ack_count_ == 1) {
230 // The last ack represents local trace, so we need to ack it now. Note that 237 // The last ack represents local trace, so we need to ack it now. Note that
231 // this code only executes if there were child processes. 238 // this code only executes if there were child processes.
232 float bpf = gpu::TraceLog::GetInstance()->GetBufferPercentFull(); 239 float bpf = base::debug::TraceLog::GetInstance()->GetBufferPercentFull();
233 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 240 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
234 NewRunnableMethod(this, 241 NewRunnableMethod(this,
235 &TraceController::OnTraceBufferPercentFullReply, 242 &TraceController::OnTraceBufferPercentFullReply,
236 bpf)); 243 bpf));
237 } 244 }
238 } 245 }
239 246
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698