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

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

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

Powered by Google App Engine
This is Rietveld 408576698