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

Side by Side Diff: content/browser/tracing/tracing_controller_impl.cc

Issue 65343006: Use TracingController for startup tracing (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 1 month 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/tracing/tracing_controller_impl.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/tracing/tracing_controller_impl.h" 5 #include "content/browser/tracing/tracing_controller_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/file_util.h" 8 #include "base/file_util.h"
9 #include "base/json/string_escape.h" 9 #include "base/json/string_escape.h"
10 #include "base/strings/string_number_conversions.h" 10 #include "base/strings/string_number_conversions.h"
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 file_util::CloseFile(file_); 106 file_util::CloseFile(file_);
107 file_ = NULL; 107 file_ = NULL;
108 108
109 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, callback); 109 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, callback);
110 } 110 }
111 111
112 112
113 TracingControllerImpl::TracingControllerImpl() : 113 TracingControllerImpl::TracingControllerImpl() :
114 pending_disable_recording_ack_count_(0), 114 pending_disable_recording_ack_count_(0),
115 pending_capture_monitoring_snapshot_ack_count_(0), 115 pending_capture_monitoring_snapshot_ack_count_(0),
116 is_recording_(false), 116 // Tracing may have been enabled by ContentMainRunner if kTraceStartup
117 // is specified in command line.
118 is_recording_(TraceLog::GetInstance()->IsEnabled()),
117 is_monitoring_(false), 119 is_monitoring_(false),
118 trace_options_(TraceLog::RECORD_UNTIL_FULL),
119 category_filter_( 120 category_filter_(
120 base::debug::CategoryFilter::kDefaultCategoryFilterString) { 121 base::debug::CategoryFilter::kDefaultCategoryFilterString) {
121 } 122 }
122 123
123 TracingControllerImpl::~TracingControllerImpl() { 124 TracingControllerImpl::~TracingControllerImpl() {
124 // This is a Leaky instance. 125 // This is a Leaky instance.
125 NOTREACHED(); 126 NOTREACHED();
126 } 127 }
127 128
128 TracingControllerImpl* TracingControllerImpl::GetInstance() { 129 TracingControllerImpl* TracingControllerImpl::GetInstance() {
(...skipping 21 matching lines...) Expand all
150 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 151 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
151 152
152 if (!can_enable_recording()) 153 if (!can_enable_recording())
153 return false; 154 return false;
154 155
155 #if defined(OS_ANDROID) 156 #if defined(OS_ANDROID)
156 if (pending_get_categories_done_callback_.is_null()) 157 if (pending_get_categories_done_callback_.is_null())
157 TraceLog::GetInstance()->AddClockSyncMetadataEvent(); 158 TraceLog::GetInstance()->AddClockSyncMetadataEvent();
158 #endif 159 #endif
159 160
160 trace_options_ = TraceLog::GetInstance()->trace_options(); 161 TraceLog::Options trace_options = TraceLog::GetInstance()->trace_options();
161 TraceLog::GetInstance()->SetEnabled(filter, trace_options_); 162 TraceLog::GetInstance()->SetEnabled(filter, trace_options);
162 163
163 is_recording_ = true; 164 is_recording_ = true;
164 category_filter_ = TraceLog::GetInstance()->GetCurrentCategoryFilter(); 165 category_filter_ = TraceLog::GetInstance()->GetCurrentCategoryFilter();
165 166
166 // Notify all child processes. 167 // Notify all child processes.
167 for (FilterMap::iterator it = filters_.begin(); it != filters_.end(); ++it) { 168 for (FilterMap::iterator it = filters_.begin(); it != filters_.end(); ++it) {
168 it->get()->SendBeginTracing( 169 it->get()->SendBeginTracing(category_filter_.ToString(), trace_options);
169 category_filter_.ToString(), trace_options_, false);
170 } 170 }
171 171
172 if (!callback.is_null()) 172 if (!callback.is_null())
173 callback.Run(); 173 callback.Run();
174 return true; 174 return true;
175 } 175 }
176 176
177 bool TracingControllerImpl::DisableRecording( 177 bool TracingControllerImpl::DisableRecording(
178 const base::FilePath& result_file_path, 178 const base::FilePath& result_file_path,
179 const TracingFileResultCallback& callback) { 179 const TracingFileResultCallback& callback) {
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
232 is_monitoring_ = true; 232 is_monitoring_ = true;
233 233
234 #if defined(OS_ANDROID) 234 #if defined(OS_ANDROID)
235 TraceLog::GetInstance()->AddClockSyncMetadataEvent(); 235 TraceLog::GetInstance()->AddClockSyncMetadataEvent();
236 #endif 236 #endif
237 237
238 int monitoring_tracing_options = 0; 238 int monitoring_tracing_options = 0;
239 if (options & ENABLE_SAMPLING) 239 if (options & ENABLE_SAMPLING)
240 monitoring_tracing_options |= base::debug::TraceLog::MONITOR_SAMPLING; 240 monitoring_tracing_options |= base::debug::TraceLog::MONITOR_SAMPLING;
241 241
242 TraceLog::GetInstance()->SetEnabled(
243 filter, base::debug::TraceLog::Options(monitoring_tracing_options));
244
242 // Notify all child processes. 245 // Notify all child processes.
243 for (FilterMap::iterator it = filters_.begin(); it != filters_.end(); ++it) { 246 for (FilterMap::iterator it = filters_.begin(); it != filters_.end(); ++it) {
244 it->get()->SendEnableMonitoring(filter.ToString(), 247 it->get()->SendEnableMonitoring(filter.ToString(),
245 base::debug::TraceLog::Options(monitoring_tracing_options)); 248 base::debug::TraceLog::Options(monitoring_tracing_options));
246 } 249 }
247 250
248 if (!callback.is_null()) 251 if (!callback.is_null())
249 callback.Run(); 252 callback.Run();
250 return true; 253 return true;
251 } 254 }
252 255
253 bool TracingControllerImpl::DisableMonitoring( 256 bool TracingControllerImpl::DisableMonitoring(
254 const DisableMonitoringDoneCallback& callback) { 257 const DisableMonitoringDoneCallback& callback) {
255 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 258 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
256 259
257 if (!can_disable_monitoring()) 260 if (!can_disable_monitoring())
258 return false; 261 return false;
259 is_monitoring_ = false; 262 is_monitoring_ = false;
260 263
264 TraceLog::GetInstance()->SetDisabled();
265
261 // Notify all child processes. 266 // Notify all child processes.
262 for (FilterMap::iterator it = filters_.begin(); it != filters_.end(); ++it) { 267 for (FilterMap::iterator it = filters_.begin(); it != filters_.end(); ++it) {
263 it->get()->SendDisableMonitoring(); 268 it->get()->SendDisableMonitoring();
264 } 269 }
265 270
266 if (!callback.is_null()) 271 if (!callback.is_null())
267 callback.Run(); 272 callback.Run();
268 return true; 273 return true;
269 } 274 }
270 275
271 void TracingControllerImpl::GetMonitoringStatus( 276 void TracingControllerImpl::GetMonitoringStatus(
272 bool* out_enabled, 277 bool* out_enabled,
273 base::debug::CategoryFilter* out_filter, 278 base::debug::CategoryFilter* out_filter,
274 TracingController::Options* out_options) { 279 TracingController::Options* out_options) {
275 NOTIMPLEMENTED(); 280 NOTIMPLEMENTED();
276 } 281 }
277 282
278 void TracingControllerImpl::CaptureMonitoringSnapshot( 283 void TracingControllerImpl::CaptureMonitoringSnapshot(
279 const base::FilePath& result_file_path, 284 const base::FilePath& result_file_path,
280 const TracingFileResultCallback& callback) { 285 const TracingFileResultCallback& callback) {
281 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 286 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
282 287
283 if (!can_disable_monitoring()) 288 if (!can_disable_monitoring())
284 return; 289 return;
285 290
291 if (callback.is_null() && result_file_path.empty())
292 return;
293
286 pending_capture_monitoring_snapshot_done_callback_ = callback; 294 pending_capture_monitoring_snapshot_done_callback_ = callback;
287 295 monitoring_snapshot_file_.reset(new ResultFile(result_file_path));
288 if (!callback.is_null() || !result_file_path.empty())
289 monitoring_snapshot_file_.reset(new ResultFile(result_file_path));
290 296
291 // There could be a case where there are no child processes and filters_ 297 // There could be a case where there are no child processes and filters_
292 // is empty. In that case we can immediately tell the subscriber that tracing 298 // is empty. In that case we can immediately tell the subscriber that tracing
293 // has ended. To avoid recursive calls back to the subscriber, we will just 299 // has ended. To avoid recursive calls back to the subscriber, we will just
294 // use the existing asynchronous OnCaptureMonitoringSnapshotAcked code. 300 // use the existing asynchronous OnCaptureMonitoringSnapshotAcked code.
295 // Count myself in pending_capture_monitoring_snapshot_ack_count_, 301 // Count myself in pending_capture_monitoring_snapshot_ack_count_,
296 // acked below. 302 // acked below.
297 pending_capture_monitoring_snapshot_ack_count_ = filters_.size() + 1; 303 pending_capture_monitoring_snapshot_ack_count_ = filters_.size() + 1;
298 304
299 // Handle special case of zero child processes. 305 // Handle special case of zero child processes.
(...skipping 18 matching lines...) Expand all
318 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { 324 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
319 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 325 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
320 base::Bind(&TracingControllerImpl::AddFilter, base::Unretained(this), 326 base::Bind(&TracingControllerImpl::AddFilter, base::Unretained(this),
321 make_scoped_refptr(filter))); 327 make_scoped_refptr(filter)));
322 return; 328 return;
323 } 329 }
324 330
325 filters_.insert(filter); 331 filters_.insert(filter);
326 if (can_disable_recording()) { 332 if (can_disable_recording()) {
327 std::string cf_str = category_filter_.ToString(); 333 std::string cf_str = category_filter_.ToString();
328 filter->SendBeginTracing(cf_str, trace_options_, false); 334 filter->SendBeginTracing(cf_str, TraceLog::GetInstance()->trace_options());
329 } 335 }
330 } 336 }
331 337
332 void TracingControllerImpl::RemoveFilter(TraceMessageFilter* filter) { 338 void TracingControllerImpl::RemoveFilter(TraceMessageFilter* filter) {
333 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { 339 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
334 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 340 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
335 base::Bind(&TracingControllerImpl::RemoveFilter, base::Unretained(this), 341 base::Bind(&TracingControllerImpl::RemoveFilter, base::Unretained(this),
336 make_scoped_refptr(filter))); 342 make_scoped_refptr(filter)));
337 return; 343 return;
338 } 344 }
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
457 463
458 void TracingControllerImpl::OnMonitoringTraceDataCollected( 464 void TracingControllerImpl::OnMonitoringTraceDataCollected(
459 const scoped_refptr<base::RefCountedString>& events_str_ptr) { 465 const scoped_refptr<base::RefCountedString>& events_str_ptr) {
460 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { 466 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
461 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 467 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
462 base::Bind(&TracingControllerImpl::OnMonitoringTraceDataCollected, 468 base::Bind(&TracingControllerImpl::OnMonitoringTraceDataCollected,
463 base::Unretained(this), events_str_ptr)); 469 base::Unretained(this), events_str_ptr));
464 return; 470 return;
465 } 471 }
466 472
467 if (!monitoring_snapshot_file_) 473 if (monitoring_snapshot_file_)
468 monitoring_snapshot_file_->Write(events_str_ptr); 474 monitoring_snapshot_file_->Write(events_str_ptr);
469 } 475 }
470 476
471 void TracingControllerImpl::OnLocalTraceDataCollected( 477 void TracingControllerImpl::OnLocalTraceDataCollected(
472 const scoped_refptr<base::RefCountedString>& events_str_ptr, 478 const scoped_refptr<base::RefCountedString>& events_str_ptr,
473 bool has_more_events) { 479 bool has_more_events) {
474 if (events_str_ptr->data().size()) 480 if (events_str_ptr->data().size())
475 OnTraceDataCollected(events_str_ptr); 481 OnTraceDataCollected(events_str_ptr);
476 482
477 if (has_more_events) 483 if (has_more_events)
(...skipping 12 matching lines...) Expand all
490 OnMonitoringTraceDataCollected(events_str_ptr); 496 OnMonitoringTraceDataCollected(events_str_ptr);
491 497
492 if (has_more_events) 498 if (has_more_events)
493 return; 499 return;
494 500
495 // Simulate an CaptureMonitoringSnapshotAcked for the local trace. 501 // Simulate an CaptureMonitoringSnapshotAcked for the local trace.
496 OnCaptureMonitoringSnapshotAcked(); 502 OnCaptureMonitoringSnapshotAcked();
497 } 503 }
498 504
499 } // namespace content 505 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/tracing/tracing_controller_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698