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

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

Issue 1815363002: Add RetainedRef uses where needed. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 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
OLDNEW
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/cpu.h" 7 #include "base/cpu.h"
8 #include "base/files/file_util.h" 8 #include "base/files/file_util.h"
9 #include "base/guid.h" 9 #include "base/guid.h"
10 #include "base/json/string_escape.h" 10 #include "base/json/string_escape.h"
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after
405 approximate_event_count_ = 0; 405 approximate_event_count_ = 0;
406 406
407 base::trace_event::TraceLogStatus status = 407 base::trace_event::TraceLogStatus status =
408 TraceLog::GetInstance()->GetStatus(); 408 TraceLog::GetInstance()->GetStatus();
409 // Call OnTraceLogStatusReply unconditionally for the browser process. 409 // Call OnTraceLogStatusReply unconditionally for the browser process.
410 // This will result in immediate execution of the callback if there are no 410 // This will result in immediate execution of the callback if there are no
411 // child processes. 411 // child processes.
412 BrowserThread::PostTask( 412 BrowserThread::PostTask(
413 BrowserThread::UI, FROM_HERE, 413 BrowserThread::UI, FROM_HERE,
414 base::Bind(&TracingControllerImpl::OnTraceLogStatusReply, 414 base::Bind(&TracingControllerImpl::OnTraceLogStatusReply,
415 base::Unretained(this), scoped_refptr<TraceMessageFilter>(), 415 base::Unretained(this), nullptr, status));
416 status));
417 416
418 // Notify all child processes. 417 // Notify all child processes.
419 for (TraceMessageFilterSet::iterator it = trace_message_filters_.begin(); 418 for (TraceMessageFilterSet::iterator it = trace_message_filters_.begin();
420 it != trace_message_filters_.end(); ++it) { 419 it != trace_message_filters_.end(); ++it) {
421 it->get()->SendGetTraceLogStatus(); 420 it->get()->SendGetTraceLogStatus();
422 } 421 }
423 return true; 422 return true;
424 } 423 }
425 424
426 bool TracingControllerImpl::SetWatchEvent( 425 bool TracingControllerImpl::SetWatchEvent(
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
463 return true; 462 return true;
464 } 463 }
465 464
466 bool TracingControllerImpl::IsTracing() const { 465 bool TracingControllerImpl::IsTracing() const {
467 return is_tracing_; 466 return is_tracing_;
468 } 467 }
469 468
470 void TracingControllerImpl::AddTraceMessageFilter( 469 void TracingControllerImpl::AddTraceMessageFilter(
471 TraceMessageFilter* trace_message_filter) { 470 TraceMessageFilter* trace_message_filter) {
472 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { 471 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
473 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 472 BrowserThread::PostTask(
473 BrowserThread::UI, FROM_HERE,
474 base::Bind(&TracingControllerImpl::AddTraceMessageFilter, 474 base::Bind(&TracingControllerImpl::AddTraceMessageFilter,
475 base::Unretained(this), 475 base::Unretained(this),
476 make_scoped_refptr(trace_message_filter))); 476 base::RetainedRef(trace_message_filter)));
477 return; 477 return;
478 } 478 }
479 479
480 #if defined(OS_LINUX) 480 #if defined(OS_LINUX)
481 // On Linux the browser process dumps process metrics for child process due to 481 // On Linux the browser process dumps process metrics for child process due to
482 // sandbox. 482 // sandbox.
483 tracing::ProcessMetricsMemoryDumpProvider::RegisterForProcess( 483 tracing::ProcessMetricsMemoryDumpProvider::RegisterForProcess(
484 trace_message_filter->peer_pid()); 484 trace_message_filter->peer_pid());
485 #endif 485 #endif
486 486
487 trace_message_filters_.insert(trace_message_filter); 487 trace_message_filters_.insert(trace_message_filter);
488 if (can_cancel_watch_event()) { 488 if (can_cancel_watch_event()) {
489 trace_message_filter->SendSetWatchEvent(watch_category_name_, 489 trace_message_filter->SendSetWatchEvent(watch_category_name_,
490 watch_event_name_); 490 watch_event_name_);
491 } 491 }
492 if (can_stop_tracing()) { 492 if (can_stop_tracing()) {
493 trace_message_filter->SendBeginTracing( 493 trace_message_filter->SendBeginTracing(
494 TraceLog::GetInstance()->GetCurrentTraceConfig()); 494 TraceLog::GetInstance()->GetCurrentTraceConfig());
495 } 495 }
496 496
497 FOR_EACH_OBSERVER(TraceMessageFilterObserver, trace_message_filter_observers_, 497 FOR_EACH_OBSERVER(TraceMessageFilterObserver, trace_message_filter_observers_,
498 OnTraceMessageFilterAdded(trace_message_filter)); 498 OnTraceMessageFilterAdded(trace_message_filter));
499 } 499 }
500 500
501 void TracingControllerImpl::RemoveTraceMessageFilter( 501 void TracingControllerImpl::RemoveTraceMessageFilter(
502 TraceMessageFilter* trace_message_filter) { 502 TraceMessageFilter* trace_message_filter) {
503 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { 503 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
504 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 504 BrowserThread::PostTask(
505 BrowserThread::UI, FROM_HERE,
505 base::Bind(&TracingControllerImpl::RemoveTraceMessageFilter, 506 base::Bind(&TracingControllerImpl::RemoveTraceMessageFilter,
506 base::Unretained(this), 507 base::Unretained(this),
507 make_scoped_refptr(trace_message_filter))); 508 base::RetainedRef(trace_message_filter)));
508 return; 509 return;
509 } 510 }
510 511
511 #if defined(OS_LINUX) 512 #if defined(OS_LINUX)
512 tracing::ProcessMetricsMemoryDumpProvider::UnregisterForProcess( 513 tracing::ProcessMetricsMemoryDumpProvider::UnregisterForProcess(
513 trace_message_filter->peer_pid()); 514 trace_message_filter->peer_pid());
514 #endif 515 #endif
515 516
516 // If a filter is removed while a response from that filter is pending then 517 // If a filter is removed while a response from that filter is pending then
517 // simulate the response. Otherwise the response count will be wrong and the 518 // simulate the response. Otherwise the response count will be wrong and the
518 // completion callback will never be executed. 519 // completion callback will never be executed.
519 if (pending_stop_tracing_ack_count_ > 0) { 520 if (pending_stop_tracing_ack_count_ > 0) {
520 TraceMessageFilterSet::const_iterator it = 521 TraceMessageFilterSet::const_iterator it =
521 pending_stop_tracing_filters_.find(trace_message_filter); 522 pending_stop_tracing_filters_.find(trace_message_filter);
522 if (it != pending_stop_tracing_filters_.end()) { 523 if (it != pending_stop_tracing_filters_.end()) {
523 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 524 BrowserThread::PostTask(
525 BrowserThread::UI, FROM_HERE,
524 base::Bind(&TracingControllerImpl::OnStopTracingAcked, 526 base::Bind(&TracingControllerImpl::OnStopTracingAcked,
525 base::Unretained(this), 527 base::Unretained(this),
526 make_scoped_refptr(trace_message_filter), 528 base::RetainedRef(trace_message_filter),
527 std::vector<std::string>())); 529 std::vector<std::string>()));
528 } 530 }
529 } 531 }
530 if (pending_trace_log_status_ack_count_ > 0) { 532 if (pending_trace_log_status_ack_count_ > 0) {
531 TraceMessageFilterSet::const_iterator it = 533 TraceMessageFilterSet::const_iterator it =
532 pending_trace_log_status_filters_.find(trace_message_filter); 534 pending_trace_log_status_filters_.find(trace_message_filter);
533 if (it != pending_trace_log_status_filters_.end()) { 535 if (it != pending_trace_log_status_filters_.end()) {
534 BrowserThread::PostTask( 536 BrowserThread::PostTask(
535 BrowserThread::UI, FROM_HERE, 537 BrowserThread::UI, FROM_HERE,
536 base::Bind(&TracingControllerImpl::OnTraceLogStatusReply, 538 base::Bind(&TracingControllerImpl::OnTraceLogStatusReply,
537 base::Unretained(this), 539 base::Unretained(this),
538 make_scoped_refptr(trace_message_filter), 540 base::RetainedRef(trace_message_filter),
539 base::trace_event::TraceLogStatus())); 541 base::trace_event::TraceLogStatus()));
540 } 542 }
541 } 543 }
542 if (pending_memory_dump_ack_count_ > 0) { 544 if (pending_memory_dump_ack_count_ > 0) {
543 TraceMessageFilterSet::const_iterator it = 545 TraceMessageFilterSet::const_iterator it =
544 pending_memory_dump_filters_.find(trace_message_filter); 546 pending_memory_dump_filters_.find(trace_message_filter);
545 if (it != pending_memory_dump_filters_.end()) { 547 if (it != pending_memory_dump_filters_.end()) {
546 BrowserThread::PostTask( 548 BrowserThread::PostTask(
547 BrowserThread::UI, FROM_HERE, 549 BrowserThread::UI, FROM_HERE,
548 base::Bind(&TracingControllerImpl::OnProcessMemoryDumpResponse, 550 base::Bind(&TracingControllerImpl::OnProcessMemoryDumpResponse,
549 base::Unretained(this), 551 base::Unretained(this),
550 make_scoped_refptr(trace_message_filter), 552 base::RetainedRef(trace_message_filter),
551 pending_memory_dump_guid_, false /* success */)); 553 pending_memory_dump_guid_, false /* success */));
552 } 554 }
553 } 555 }
554 trace_message_filters_.erase(trace_message_filter); 556 trace_message_filters_.erase(trace_message_filter);
555 } 557 }
556 558
557 void TracingControllerImpl::AddTracingAgent(const std::string& agent_name) { 559 void TracingControllerImpl::AddTracingAgent(const std::string& agent_name) {
558 #if defined(OS_CHROMEOS) 560 #if defined(OS_CHROMEOS)
559 auto debug_daemon = 561 auto debug_daemon =
560 chromeos::DBusThreadManager::Get()->GetDebugDaemonClient(); 562 chromeos::DBusThreadManager::Get()->GetDebugDaemonClient();
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
598 if (--pending_start_tracing_ack_count_ == 0) { 600 if (--pending_start_tracing_ack_count_ == 0) {
599 start_tracing_timer_.Stop(); 601 start_tracing_timer_.Stop();
600 OnAllTracingAgentsStarted(); 602 OnAllTracingAgentsStarted();
601 } 603 }
602 } 604 }
603 605
604 void TracingControllerImpl::OnStopTracingAcked( 606 void TracingControllerImpl::OnStopTracingAcked(
605 TraceMessageFilter* trace_message_filter, 607 TraceMessageFilter* trace_message_filter,
606 const std::vector<std::string>& known_category_groups) { 608 const std::vector<std::string>& known_category_groups) {
607 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { 609 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
608 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 610 BrowserThread::PostTask(
609 base::Bind(&TracingControllerImpl::OnStopTracingAcked, 611 BrowserThread::UI, FROM_HERE,
610 base::Unretained(this), 612 base::Bind(
611 make_scoped_refptr(trace_message_filter), 613 &TracingControllerImpl::OnStopTracingAcked, base::Unretained(this),
612 known_category_groups)); 614 base::RetainedRef(trace_message_filter), known_category_groups));
613 return; 615 return;
614 } 616 }
615 617
616 // Merge known_category_groups with known_category_groups_ 618 // Merge known_category_groups with known_category_groups_
617 known_category_groups_.insert(known_category_groups.begin(), 619 known_category_groups_.insert(known_category_groups.begin(),
618 known_category_groups.end()); 620 known_category_groups.end());
619 621
620 if (pending_stop_tracing_ack_count_ == 0) 622 if (pending_stop_tracing_ack_count_ == 0)
621 return; 623 return;
622 624
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
713 } 715 }
714 716
715 void TracingControllerImpl::OnTraceLogStatusReply( 717 void TracingControllerImpl::OnTraceLogStatusReply(
716 TraceMessageFilter* trace_message_filter, 718 TraceMessageFilter* trace_message_filter,
717 const base::trace_event::TraceLogStatus& status) { 719 const base::trace_event::TraceLogStatus& status) {
718 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { 720 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
719 BrowserThread::PostTask( 721 BrowserThread::PostTask(
720 BrowserThread::UI, FROM_HERE, 722 BrowserThread::UI, FROM_HERE,
721 base::Bind(&TracingControllerImpl::OnTraceLogStatusReply, 723 base::Bind(&TracingControllerImpl::OnTraceLogStatusReply,
722 base::Unretained(this), 724 base::Unretained(this),
723 make_scoped_refptr(trace_message_filter), status)); 725 base::RetainedRef(trace_message_filter), status));
724 return; 726 return;
725 } 727 }
726 728
727 if (pending_trace_log_status_ack_count_ == 0) 729 if (pending_trace_log_status_ack_count_ == 0)
728 return; 730 return;
729 731
730 if (trace_message_filter && 732 if (trace_message_filter &&
731 !pending_trace_log_status_filters_.erase(trace_message_filter)) { 733 !pending_trace_log_status_filters_.erase(trace_message_filter)) {
732 // The response from the specified message filter has already been received. 734 // The response from the specified message filter has already been received.
733 return; 735 return;
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
954 956
955 void TracingControllerImpl::OnProcessMemoryDumpResponse( 957 void TracingControllerImpl::OnProcessMemoryDumpResponse(
956 TraceMessageFilter* trace_message_filter, 958 TraceMessageFilter* trace_message_filter,
957 uint64_t dump_guid, 959 uint64_t dump_guid,
958 bool success) { 960 bool success) {
959 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { 961 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
960 BrowserThread::PostTask( 962 BrowserThread::PostTask(
961 BrowserThread::UI, FROM_HERE, 963 BrowserThread::UI, FROM_HERE,
962 base::Bind(&TracingControllerImpl::OnProcessMemoryDumpResponse, 964 base::Bind(&TracingControllerImpl::OnProcessMemoryDumpResponse,
963 base::Unretained(this), 965 base::Unretained(this),
964 make_scoped_refptr(trace_message_filter), dump_guid, 966 base::RetainedRef(trace_message_filter), dump_guid,
965 success)); 967 success));
966 return; 968 return;
967 } 969 }
968 970
969 TraceMessageFilterSet::iterator it = 971 TraceMessageFilterSet::iterator it =
970 pending_memory_dump_filters_.find(trace_message_filter); 972 pending_memory_dump_filters_.find(trace_message_filter);
971 973
972 if (pending_memory_dump_guid_ != dump_guid || 974 if (pending_memory_dump_guid_ != dump_guid ||
973 it == pending_memory_dump_filters_.end()) { 975 it == pending_memory_dump_filters_.end()) {
974 DLOG(WARNING) << "Received unexpected memory dump response: " << dump_guid; 976 DLOG(WARNING) << "Received unexpected memory dump response: " << dump_guid;
(...skipping 30 matching lines...) Expand all
1005 const bool global_success = failed_memory_dump_count_ == 0; 1007 const bool global_success = failed_memory_dump_count_ == 0;
1006 if (!pending_memory_dump_callback_.is_null()) { 1008 if (!pending_memory_dump_callback_.is_null()) {
1007 pending_memory_dump_callback_.Run(pending_memory_dump_guid_, 1009 pending_memory_dump_callback_.Run(pending_memory_dump_guid_,
1008 global_success); 1010 global_success);
1009 pending_memory_dump_callback_.Reset(); 1011 pending_memory_dump_callback_.Reset();
1010 } 1012 }
1011 pending_memory_dump_guid_ = 0; 1013 pending_memory_dump_guid_ = 0;
1012 } 1014 }
1013 1015
1014 } // namespace content 1016 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698