OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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 #include "content/browser/tracing/tracing_controller_impl.h" | 4 #include "content/browser/tracing/tracing_controller_impl.h" |
5 | 5 |
6 #include "base/bind.h" | 6 #include "base/bind.h" |
7 #include "base/debug/trace_event.h" | 7 #include "base/debug/trace_event.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" |
11 #include "content/browser/tracing/trace_message_filter.h" | 11 #include "content/browser/tracing/trace_message_filter.h" |
12 #include "content/browser/tracing/tracing_ui.h" | 12 #include "content/browser/tracing/tracing_ui.h" |
13 #include "content/common/child_process_messages.h" | 13 #include "content/common/child_process_messages.h" |
14 #include "content/public/browser/browser_message_filter.h" | 14 #include "content/public/browser/browser_message_filter.h" |
15 #include "content/public/common/content_switches.h" | 15 #include "content/public/common/content_switches.h" |
16 | 16 |
17 #if defined(OS_CHROMEOS) | 17 #if defined(OS_CHROMEOS) |
18 #include "chromeos/dbus/dbus_thread_manager.h" | 18 #include "chromeos/dbus/dbus_thread_manager.h" |
19 #include "chromeos/dbus/debug_daemon_client.h" | 19 #include "chromeos/dbus/debug_daemon_client.h" |
20 #endif | 20 #endif |
21 | 21 |
22 #if defined(OS_WIN) | 22 #if defined(OS_WIN) |
23 #include "content/browser/tracing/etw_system_event_consumer_win.h" | 23 #include "content/browser/tracing/etw_system_event_consumer_win.h" |
24 #endif | 24 #endif |
25 | 25 |
26 using base::debug::TraceLog; | 26 using base::debug::TraceLog; |
| 27 using base::debug::TraceOptions; |
| 28 using base::debug::CategoryFilter; |
27 | 29 |
28 namespace content { | 30 namespace content { |
29 | 31 |
30 namespace { | 32 namespace { |
31 | 33 |
32 base::LazyInstance<TracingControllerImpl>::Leaky g_controller = | 34 base::LazyInstance<TracingControllerImpl>::Leaky g_controller = |
33 LAZY_INSTANCE_INITIALIZER; | 35 LAZY_INSTANCE_INITIALIZER; |
34 | 36 |
35 } // namespace | 37 } // namespace |
36 | 38 |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
184 } | 186 } |
185 | 187 |
186 bool TracingControllerImpl::GetCategories( | 188 bool TracingControllerImpl::GetCategories( |
187 const GetCategoriesDoneCallback& callback) { | 189 const GetCategoriesDoneCallback& callback) { |
188 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 190 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
189 | 191 |
190 // Known categories come back from child processes with the EndTracingAck | 192 // Known categories come back from child processes with the EndTracingAck |
191 // message. So to get known categories, just begin and end tracing immediately | 193 // message. So to get known categories, just begin and end tracing immediately |
192 // afterwards. This will ping all the child processes for categories. | 194 // afterwards. This will ping all the child processes for categories. |
193 pending_get_categories_done_callback_ = callback; | 195 pending_get_categories_done_callback_ = callback; |
194 if (!EnableRecording("*", TracingController::Options(), | 196 if (!EnableRecording( |
195 EnableRecordingDoneCallback())) { | 197 CategoryFilter("*"), TraceOptions(), EnableRecordingDoneCallback())) { |
196 pending_get_categories_done_callback_.Reset(); | 198 pending_get_categories_done_callback_.Reset(); |
197 return false; | 199 return false; |
198 } | 200 } |
199 | 201 |
200 bool ok = DisableRecording(base::FilePath(), TracingFileResultCallback()); | 202 bool ok = DisableRecording(base::FilePath(), TracingFileResultCallback()); |
201 DCHECK(ok); | 203 DCHECK(ok); |
202 return true; | 204 return true; |
203 } | 205 } |
204 | 206 |
205 void TracingControllerImpl::SetEnabledOnFileThread( | 207 void TracingControllerImpl::SetEnabledOnFileThread( |
206 const std::string& category_filter, | 208 const CategoryFilter& category_filter, |
207 int mode, | 209 int mode, |
208 int trace_options, | 210 const TraceOptions& trace_options, |
209 const base::Closure& callback) { | 211 const base::Closure& callback) { |
210 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); | 212 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
211 | 213 |
212 TraceLog::GetInstance()->SetEnabled( | 214 TraceLog::GetInstance()->SetEnabled( |
213 base::debug::CategoryFilter(category_filter), | 215 category_filter, static_cast<TraceLog::Mode>(mode), trace_options); |
214 static_cast<TraceLog::Mode>(mode), | |
215 static_cast<TraceLog::Options>(trace_options)); | |
216 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, callback); | 216 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, callback); |
217 } | 217 } |
218 | 218 |
219 void TracingControllerImpl::SetDisabledOnFileThread( | 219 void TracingControllerImpl::SetDisabledOnFileThread( |
220 const base::Closure& callback) { | 220 const base::Closure& callback) { |
221 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); | 221 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
222 | 222 |
223 TraceLog::GetInstance()->SetDisabled(); | 223 TraceLog::GetInstance()->SetDisabled(); |
224 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, callback); | 224 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, callback); |
225 } | 225 } |
226 | 226 |
227 bool TracingControllerImpl::EnableRecording( | 227 bool TracingControllerImpl::EnableRecording( |
228 const std::string& category_filter, | 228 const CategoryFilter& category_filter, |
229 TracingController::Options options, | 229 const TraceOptions& trace_options, |
230 const EnableRecordingDoneCallback& callback) { | 230 const EnableRecordingDoneCallback& callback) { |
231 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 231 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
232 | 232 |
233 if (!can_enable_recording()) | 233 if (!can_enable_recording()) |
234 return false; | 234 return false; |
235 is_recording_ = true; | 235 is_recording_ = true; |
236 | 236 |
237 #if defined(OS_ANDROID) | 237 #if defined(OS_ANDROID) |
238 if (pending_get_categories_done_callback_.is_null()) | 238 if (pending_get_categories_done_callback_.is_null()) |
239 TraceLog::GetInstance()->AddClockSyncMetadataEvent(); | 239 TraceLog::GetInstance()->AddClockSyncMetadataEvent(); |
240 #endif | 240 #endif |
241 | 241 |
242 options_ = options; | 242 trace_options_ = trace_options; |
243 int trace_options = (options & RECORD_CONTINUOUSLY) ? | |
244 TraceLog::RECORD_CONTINUOUSLY : TraceLog::RECORD_UNTIL_FULL; | |
245 if (options & ENABLE_SAMPLING) { | |
246 trace_options |= TraceLog::ENABLE_SAMPLING; | |
247 } | |
248 | 243 |
249 if (options & ENABLE_SYSTRACE) { | 244 if (trace_options.enable_systrace) { |
250 #if defined(OS_CHROMEOS) | 245 #if defined(OS_CHROMEOS) |
251 DCHECK(!is_system_tracing_); | 246 DCHECK(!is_system_tracing_); |
252 chromeos::DBusThreadManager::Get()->GetDebugDaemonClient()-> | 247 chromeos::DBusThreadManager::Get()->GetDebugDaemonClient()-> |
253 StartSystemTracing(); | 248 StartSystemTracing(); |
254 is_system_tracing_ = true; | 249 is_system_tracing_ = true; |
255 #elif defined(OS_WIN) | 250 #elif defined(OS_WIN) |
256 DCHECK(!is_system_tracing_); | 251 DCHECK(!is_system_tracing_); |
257 is_system_tracing_ = | 252 is_system_tracing_ = |
258 EtwSystemEventConsumer::GetInstance()->StartSystemTracing(); | 253 EtwSystemEventConsumer::GetInstance()->StartSystemTracing(); |
259 #endif | 254 #endif |
260 } | 255 } |
261 | 256 |
262 | 257 |
263 base::Closure on_enable_recording_done_callback = | 258 base::Closure on_enable_recording_done_callback = |
264 base::Bind(&TracingControllerImpl::OnEnableRecordingDone, | 259 base::Bind(&TracingControllerImpl::OnEnableRecordingDone, |
265 base::Unretained(this), | 260 base::Unretained(this), |
266 category_filter, trace_options, callback); | 261 category_filter, trace_options, callback); |
267 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, | 262 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, |
268 base::Bind(&TracingControllerImpl::SetEnabledOnFileThread, | 263 base::Bind(&TracingControllerImpl::SetEnabledOnFileThread, |
269 base::Unretained(this), | 264 base::Unretained(this), |
270 category_filter, | 265 category_filter, |
271 base::debug::TraceLog::RECORDING_MODE, | 266 base::debug::TraceLog::RECORDING_MODE, |
272 trace_options, | 267 trace_options, |
273 on_enable_recording_done_callback)); | 268 on_enable_recording_done_callback)); |
274 return true; | 269 return true; |
275 } | 270 } |
276 | 271 |
277 void TracingControllerImpl::OnEnableRecordingDone( | 272 void TracingControllerImpl::OnEnableRecordingDone( |
278 const std::string& category_filter, | 273 const CategoryFilter& category_filter, |
279 int trace_options, | 274 const TraceOptions& trace_options, |
280 const EnableRecordingDoneCallback& callback) { | 275 const EnableRecordingDoneCallback& callback) { |
281 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 276 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
282 | 277 |
283 // Notify all child processes. | 278 // Notify all child processes. |
284 for (TraceMessageFilterSet::iterator it = trace_message_filters_.begin(); | 279 for (TraceMessageFilterSet::iterator it = trace_message_filters_.begin(); |
285 it != trace_message_filters_.end(); ++it) { | 280 it != trace_message_filters_.end(); ++it) { |
286 it->get()->SendBeginTracing(category_filter, | 281 it->get()->SendBeginTracing(category_filter, trace_options); |
287 static_cast<TraceLog::Options>(trace_options)); | |
288 } | 282 } |
289 | 283 |
290 if (!callback.is_null()) | 284 if (!callback.is_null()) |
291 callback.Run(); | 285 callback.Run(); |
292 } | 286 } |
293 | 287 |
294 bool TracingControllerImpl::DisableRecording( | 288 bool TracingControllerImpl::DisableRecording( |
295 const base::FilePath& result_file_path, | 289 const base::FilePath& result_file_path, |
296 const TracingFileResultCallback& callback) { | 290 const TracingFileResultCallback& callback) { |
297 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 291 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
298 | 292 |
299 if (!can_disable_recording()) | 293 if (!can_disable_recording()) |
300 return false; | 294 return false; |
301 | 295 |
302 options_ = TracingController::Options(); | 296 trace_options_ = TraceOptions(); |
303 // Disable local trace early to avoid traces during end-tracing process from | 297 // Disable local trace early to avoid traces during end-tracing process from |
304 // interfering with the process. | 298 // interfering with the process. |
305 base::Closure on_disable_recording_done_callback = | 299 base::Closure on_disable_recording_done_callback = |
306 base::Bind(&TracingControllerImpl::OnDisableRecordingDone, | 300 base::Bind(&TracingControllerImpl::OnDisableRecordingDone, |
307 base::Unretained(this), | 301 base::Unretained(this), |
308 result_file_path, callback); | 302 result_file_path, callback); |
309 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, | 303 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, |
310 base::Bind(&TracingControllerImpl::SetDisabledOnFileThread, | 304 base::Bind(&TracingControllerImpl::SetDisabledOnFileThread, |
311 base::Unretained(this), | 305 base::Unretained(this), |
312 on_disable_recording_done_callback)); | 306 on_disable_recording_done_callback)); |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
367 } | 361 } |
368 | 362 |
369 // Notify all child processes. | 363 // Notify all child processes. |
370 for (TraceMessageFilterSet::iterator it = trace_message_filters_.begin(); | 364 for (TraceMessageFilterSet::iterator it = trace_message_filters_.begin(); |
371 it != trace_message_filters_.end(); ++it) { | 365 it != trace_message_filters_.end(); ++it) { |
372 it->get()->SendEndTracing(); | 366 it->get()->SendEndTracing(); |
373 } | 367 } |
374 } | 368 } |
375 | 369 |
376 bool TracingControllerImpl::EnableMonitoring( | 370 bool TracingControllerImpl::EnableMonitoring( |
377 const std::string& category_filter, | 371 const CategoryFilter& category_filter, |
378 TracingController::Options options, | 372 const TraceOptions& trace_options, |
379 const EnableMonitoringDoneCallback& callback) { | 373 const EnableMonitoringDoneCallback& callback) { |
380 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 374 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
381 | 375 |
382 if (!can_enable_monitoring()) | 376 if (!can_enable_monitoring()) |
383 return false; | 377 return false; |
384 OnMonitoringStateChanged(true); | 378 OnMonitoringStateChanged(true); |
385 | 379 |
386 #if defined(OS_ANDROID) | 380 #if defined(OS_ANDROID) |
387 TraceLog::GetInstance()->AddClockSyncMetadataEvent(); | 381 TraceLog::GetInstance()->AddClockSyncMetadataEvent(); |
388 #endif | 382 #endif |
389 | 383 |
390 options_ = options; | 384 trace_options_ = trace_options; |
391 int trace_options = 0; | |
392 if (options & ENABLE_SAMPLING) | |
393 trace_options |= TraceLog::ENABLE_SAMPLING; | |
394 | 385 |
395 base::Closure on_enable_monitoring_done_callback = | 386 base::Closure on_enable_monitoring_done_callback = |
396 base::Bind(&TracingControllerImpl::OnEnableMonitoringDone, | 387 base::Bind(&TracingControllerImpl::OnEnableMonitoringDone, |
397 base::Unretained(this), | 388 base::Unretained(this), |
398 category_filter, trace_options, callback); | 389 category_filter, trace_options, callback); |
399 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, | 390 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, |
400 base::Bind(&TracingControllerImpl::SetEnabledOnFileThread, | 391 base::Bind(&TracingControllerImpl::SetEnabledOnFileThread, |
401 base::Unretained(this), | 392 base::Unretained(this), |
402 category_filter, | 393 category_filter, |
403 base::debug::TraceLog::MONITORING_MODE, | 394 base::debug::TraceLog::MONITORING_MODE, |
404 trace_options, | 395 trace_options, |
405 on_enable_monitoring_done_callback)); | 396 on_enable_monitoring_done_callback)); |
406 return true; | 397 return true; |
407 } | 398 } |
408 | 399 |
409 void TracingControllerImpl::OnEnableMonitoringDone( | 400 void TracingControllerImpl::OnEnableMonitoringDone( |
410 const std::string& category_filter, | 401 const CategoryFilter& category_filter, |
411 int trace_options, | 402 const TraceOptions& trace_options, |
412 const EnableMonitoringDoneCallback& callback) { | 403 const EnableMonitoringDoneCallback& callback) { |
413 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 404 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
414 | 405 |
415 // Notify all child processes. | 406 // Notify all child processes. |
416 for (TraceMessageFilterSet::iterator it = trace_message_filters_.begin(); | 407 for (TraceMessageFilterSet::iterator it = trace_message_filters_.begin(); |
417 it != trace_message_filters_.end(); ++it) { | 408 it != trace_message_filters_.end(); ++it) { |
418 it->get()->SendEnableMonitoring(category_filter, | 409 it->get()->SendEnableMonitoring(category_filter, trace_options); |
419 static_cast<TraceLog::Options>(trace_options)); | |
420 } | 410 } |
421 | 411 |
422 if (!callback.is_null()) | 412 if (!callback.is_null()) |
423 callback.Run(); | 413 callback.Run(); |
424 } | 414 } |
425 | 415 |
426 bool TracingControllerImpl::DisableMonitoring( | 416 bool TracingControllerImpl::DisableMonitoring( |
427 const DisableMonitoringDoneCallback& callback) { | 417 const DisableMonitoringDoneCallback& callback) { |
428 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 418 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
429 | 419 |
430 if (!can_disable_monitoring()) | 420 if (!can_disable_monitoring()) |
431 return false; | 421 return false; |
432 | 422 |
433 options_ = TracingController::Options(); | 423 trace_options_ = TraceOptions(); |
434 base::Closure on_disable_monitoring_done_callback = | 424 base::Closure on_disable_monitoring_done_callback = |
435 base::Bind(&TracingControllerImpl::OnDisableMonitoringDone, | 425 base::Bind(&TracingControllerImpl::OnDisableMonitoringDone, |
436 base::Unretained(this), callback); | 426 base::Unretained(this), callback); |
437 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, | 427 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, |
438 base::Bind(&TracingControllerImpl::SetDisabledOnFileThread, | 428 base::Bind(&TracingControllerImpl::SetDisabledOnFileThread, |
439 base::Unretained(this), | 429 base::Unretained(this), |
440 on_disable_monitoring_done_callback)); | 430 on_disable_monitoring_done_callback)); |
441 return true; | 431 return true; |
442 } | 432 } |
443 | 433 |
444 void TracingControllerImpl::OnDisableMonitoringDone( | 434 void TracingControllerImpl::OnDisableMonitoringDone( |
445 const DisableMonitoringDoneCallback& callback) { | 435 const DisableMonitoringDoneCallback& callback) { |
446 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 436 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
447 | 437 |
448 OnMonitoringStateChanged(false); | 438 OnMonitoringStateChanged(false); |
449 | 439 |
450 // Notify all child processes. | 440 // Notify all child processes. |
451 for (TraceMessageFilterSet::iterator it = trace_message_filters_.begin(); | 441 for (TraceMessageFilterSet::iterator it = trace_message_filters_.begin(); |
452 it != trace_message_filters_.end(); ++it) { | 442 it != trace_message_filters_.end(); ++it) { |
453 it->get()->SendDisableMonitoring(); | 443 it->get()->SendDisableMonitoring(); |
454 } | 444 } |
455 | 445 |
456 if (!callback.is_null()) | 446 if (!callback.is_null()) |
457 callback.Run(); | 447 callback.Run(); |
458 } | 448 } |
459 | 449 |
460 void TracingControllerImpl::GetMonitoringStatus( | 450 void TracingControllerImpl::GetMonitoringStatus( |
461 bool* out_enabled, | 451 bool* out_enabled, |
462 std::string* out_category_filter, | 452 CategoryFilter* out_category_filter, |
463 TracingController::Options* out_options) { | 453 TraceOptions* out_trace_options) { |
464 *out_enabled = is_monitoring_; | 454 *out_enabled = is_monitoring_; |
465 *out_category_filter = | 455 *out_category_filter = TraceLog::GetInstance()->GetCurrentCategoryFilter(); |
466 TraceLog::GetInstance()->GetCurrentCategoryFilter().ToString(); | 456 *out_trace_options = trace_options_; |
467 *out_options = options_; | |
468 } | 457 } |
469 | 458 |
470 bool TracingControllerImpl::CaptureMonitoringSnapshot( | 459 bool TracingControllerImpl::CaptureMonitoringSnapshot( |
471 const base::FilePath& result_file_path, | 460 const base::FilePath& result_file_path, |
472 const TracingFileResultCallback& callback) { | 461 const TracingFileResultCallback& callback) { |
473 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 462 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
474 | 463 |
475 if (!can_disable_monitoring()) | 464 if (!can_disable_monitoring()) |
476 return false; | 465 return false; |
477 | 466 |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
592 return; | 581 return; |
593 } | 582 } |
594 | 583 |
595 trace_message_filters_.insert(trace_message_filter); | 584 trace_message_filters_.insert(trace_message_filter); |
596 if (can_cancel_watch_event()) { | 585 if (can_cancel_watch_event()) { |
597 trace_message_filter->SendSetWatchEvent(watch_category_name_, | 586 trace_message_filter->SendSetWatchEvent(watch_category_name_, |
598 watch_event_name_); | 587 watch_event_name_); |
599 } | 588 } |
600 if (can_disable_recording()) { | 589 if (can_disable_recording()) { |
601 trace_message_filter->SendBeginTracing( | 590 trace_message_filter->SendBeginTracing( |
602 TraceLog::GetInstance()->GetCurrentCategoryFilter().ToString(), | 591 TraceLog::GetInstance()->GetCurrentCategoryFilter(), |
603 TraceLog::GetInstance()->trace_options()); | 592 TraceLog::GetInstance()->GetCurrentTraceOptions()); |
604 } | 593 } |
605 if (can_disable_monitoring()) { | 594 if (can_disable_monitoring()) { |
606 trace_message_filter->SendEnableMonitoring( | 595 trace_message_filter->SendEnableMonitoring( |
607 TraceLog::GetInstance()->GetCurrentCategoryFilter().ToString(), | 596 TraceLog::GetInstance()->GetCurrentCategoryFilter(), |
608 TraceLog::GetInstance()->trace_options()); | 597 TraceLog::GetInstance()->GetCurrentTraceOptions()); |
609 } | 598 } |
610 } | 599 } |
611 | 600 |
612 void TracingControllerImpl::RemoveTraceMessageFilter( | 601 void TracingControllerImpl::RemoveTraceMessageFilter( |
613 TraceMessageFilter* trace_message_filter) { | 602 TraceMessageFilter* trace_message_filter) { |
614 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { | 603 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { |
615 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, | 604 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |
616 base::Bind(&TracingControllerImpl::RemoveTraceMessageFilter, | 605 base::Bind(&TracingControllerImpl::RemoveTraceMessageFilter, |
617 base::Unretained(this), | 606 base::Unretained(this), |
618 make_scoped_refptr(trace_message_filter))); | 607 make_scoped_refptr(trace_message_filter))); |
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
913 is_monitoring_ = is_monitoring; | 902 is_monitoring_ = is_monitoring; |
914 #if !defined(OS_ANDROID) | 903 #if !defined(OS_ANDROID) |
915 for (std::set<TracingUI*>::iterator it = tracing_uis_.begin(); | 904 for (std::set<TracingUI*>::iterator it = tracing_uis_.begin(); |
916 it != tracing_uis_.end(); it++) { | 905 it != tracing_uis_.end(); it++) { |
917 (*it)->OnMonitoringStateChanged(is_monitoring); | 906 (*it)->OnMonitoringStateChanged(is_monitoring); |
918 } | 907 } |
919 #endif | 908 #endif |
920 } | 909 } |
921 | 910 |
922 } // namespace content | 911 } // namespace content |
OLD | NEW |