From b27578801673769f8a1393c2bd11b8c2fd7fb850 Mon Sep 17 00:00:00 2001 From: "Piotr (Peter) Slatala" Date: Tue, 18 Dec 2018 11:17:09 -0800 Subject: [PATCH] Register stat callbacks after rate observer is registered. Currently the stats callback is registered too early. For now we ignore media transport for these callbacks (it was ignored already), and we will introduce changes to media transport in the future. Bug: webrtc:9719 Bug: chromium:906998 Bug: chromium:906533 Change-Id: I24c0265d46ec2eb35743de6cd96a11d8c41fefbe Reviewed-on: https://webrtc-review.googlesource.com/c/114904 Reviewed-by: Sebastian Jansson Commit-Queue: Peter Slatala Cr-Commit-Position: refs/heads/master@{#26062} --- call/call.cc | 41 +++++++++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 16 deletions(-) diff --git a/call/call.cc b/call/call.cc index 5811f5ccf4..0bd0a5cd3a 100644 --- a/call/call.cc +++ b/call/call.cc @@ -455,15 +455,6 @@ Call::Call(const Call::Config& config, RTC_DCHECK(config.event_log != nullptr); transport_send_ = std::move(transport_send); transport_send_ptr_ = transport_send_.get(); - - call_stats_->RegisterStatsObserver(&receive_side_cc_); - call_stats_->RegisterStatsObserver(transport_send_->GetCallStatsObserver()); - - module_process_thread_->RegisterModule( - receive_side_cc_.GetRemoteBitrateEstimator(true), RTC_FROM_HERE); - module_process_thread_->RegisterModule(call_stats_.get(), RTC_FROM_HERE); - module_process_thread_->RegisterModule(&receive_side_cc_, RTC_FROM_HERE); - module_process_thread_->Start(); } Call::~Call() { @@ -475,13 +466,16 @@ Call::~Call() { RTC_CHECK(audio_receive_streams_.empty()); RTC_CHECK(video_receive_streams_.empty()); - module_process_thread_->DeRegisterModule( - receive_side_cc_.GetRemoteBitrateEstimator(true)); - module_process_thread_->DeRegisterModule(&receive_side_cc_); - module_process_thread_->DeRegisterModule(call_stats_.get()); - module_process_thread_->Stop(); - call_stats_->DeregisterStatsObserver(&receive_side_cc_); - call_stats_->DeregisterStatsObserver(transport_send_->GetCallStatsObserver()); + if (!media_transport_) { + module_process_thread_->DeRegisterModule( + receive_side_cc_.GetRemoteBitrateEstimator(true)); + module_process_thread_->DeRegisterModule(&receive_side_cc_); + module_process_thread_->DeRegisterModule(call_stats_.get()); + module_process_thread_->Stop(); + call_stats_->DeregisterStatsObserver(&receive_side_cc_); + call_stats_->DeregisterStatsObserver( + transport_send_->GetCallStatsObserver()); + } int64_t first_sent_packet_ms = transport_send_->GetFirstPacketTimeMs(); // Only update histograms after process threads have been shut down, so that @@ -504,9 +498,21 @@ void Call::RegisterRateObserver() { is_target_rate_observer_registered_ = true; if (media_transport_) { + // TODO(bugs.webrtc.org/9719): We should report call_stats_ from + // media transport (at least Rtt). We should extend media transport + // interface to include "receive_side bwe" if needed. media_transport_->AddTargetTransferRateObserver(this); } else { transport_send_ptr_->RegisterTargetTransferRateObserver(this); + + call_stats_->RegisterStatsObserver(&receive_side_cc_); + call_stats_->RegisterStatsObserver(transport_send_->GetCallStatsObserver()); + + module_process_thread_->RegisterModule( + receive_side_cc_.GetRemoteBitrateEstimator(true), RTC_FROM_HERE); + module_process_thread_->RegisterModule(call_stats_.get(), RTC_FROM_HERE); + module_process_thread_->RegisterModule(&receive_side_cc_, RTC_FROM_HERE); + module_process_thread_->Start(); } } @@ -695,6 +701,7 @@ webrtc::AudioReceiveStream* Call::CreateAudioReceiveStream( const webrtc::AudioReceiveStream::Config& config) { TRACE_EVENT0("webrtc", "Call::CreateAudioReceiveStream"); RTC_DCHECK_CALLED_SEQUENTIALLY(&configuration_sequence_checker_); + RegisterRateObserver(); event_log_->Log(absl::make_unique( CreateRtcLogStreamConfig(config))); AudioReceiveStream* receive_stream = new AudioReceiveStream( @@ -849,6 +856,8 @@ webrtc::VideoReceiveStream* Call::CreateVideoReceiveStream( TRACE_EVENT0("webrtc", "Call::CreateVideoReceiveStream"); RTC_DCHECK_CALLED_SEQUENTIALLY(&configuration_sequence_checker_); + RegisterRateObserver(); + VideoReceiveStream* receive_stream = new VideoReceiveStream( &video_receiver_controller_, num_cpu_cores_, transport_send_ptr_->packet_router(), std::move(configuration),