Chromium Code Reviews| Index: webrtc/modules/congestion_controller/congestion_controller.cc |
| diff --git a/webrtc/modules/congestion_controller/congestion_controller.cc b/webrtc/modules/congestion_controller/congestion_controller.cc |
| index bc2f29cf0cfee22cd75ac6facf4a9bb74e6a7bd9..e926ccc17cf3b171d0eedf45096fa1e6055f4e24 100644 |
| --- a/webrtc/modules/congestion_controller/congestion_controller.cc |
| +++ b/webrtc/modules/congestion_controller/congestion_controller.cc |
| @@ -160,6 +160,7 @@ CongestionController::CongestionController( |
| std::unique_ptr<PacedSender> pacer) |
| : clock_(clock), |
| observer_(observer), |
| + event_log_(event_log), |
| packet_router_(packet_router), |
| pacer_(std::move(pacer)), |
| bitrate_controller_( |
| @@ -169,15 +170,15 @@ CongestionController::CongestionController( |
| new RateLimiter(clock, kRetransmitWindowSizeMs)), |
| remote_bitrate_estimator_(remote_bitrate_observer, clock_), |
| remote_estimator_proxy_(clock_, packet_router_), |
| - transport_feedback_adapter_(event_log, clock_, bitrate_controller_.get()), |
| + transport_feedback_adapter_(clock_), |
| min_bitrate_bps_(congestion_controller::GetMinBitrateBps()), |
| max_bitrate_bps_(0), |
| last_reported_bitrate_bps_(0), |
| last_reported_fraction_loss_(0), |
| last_reported_rtt_(0), |
| - network_state_(kNetworkUp) { |
| - transport_feedback_adapter_.InitBwe(); |
| - transport_feedback_adapter_.SetMinBitrate(min_bitrate_bps_); |
| + network_state_(kNetworkUp), |
| + delay_based_bwe_(new DelayBasedBwe(event_log_, clock_)) { |
| + delay_based_bwe_->SetMinBitrate(min_bitrate_bps_); |
| } |
| CongestionController::~CongestionController() {} |
| @@ -210,9 +211,12 @@ void CongestionController::SetBweBitrates(int min_bitrate_bps, |
| remote_bitrate_estimator_.SetMinBitrate(min_bitrate_bps); |
| min_bitrate_bps_ = min_bitrate_bps; |
| - if (start_bitrate_bps > 0) |
| - transport_feedback_adapter_.SetStartBitrate(start_bitrate_bps); |
| - transport_feedback_adapter_.SetMinBitrate(min_bitrate_bps_); |
| + { |
| + rtc::CritScope cs(&bwe_lock_); |
| + if (start_bitrate_bps > 0) |
| + delay_based_bwe_->SetStartBitrate(start_bitrate_bps); |
| + delay_based_bwe_->SetMinBitrate(min_bitrate_bps_); |
| + } |
| MaybeTriggerOnNetworkChanged(); |
| } |
| @@ -231,9 +235,12 @@ void CongestionController::ResetBweAndBitrates(int bitrate_bps, |
| remote_bitrate_estimator_.SetMinBitrate(min_bitrate_bps); |
| transport_feedback_adapter_.ClearSendTimeHistory(); |
| - transport_feedback_adapter_.InitBwe(); |
| - transport_feedback_adapter_.SetStartBitrate(bitrate_bps); |
| - transport_feedback_adapter_.SetMinBitrate(min_bitrate_bps); |
| + { |
| + rtc::CritScope cs(&bwe_lock_); |
| + delay_based_bwe_.reset(new DelayBasedBwe(event_log_, clock_)); |
| + delay_based_bwe_->SetStartBitrate(bitrate_bps); |
| + delay_based_bwe_->SetMinBitrate(min_bitrate_bps); |
| + } |
| probe_controller_->Reset(); |
| probe_controller_->SetBitrates(min_bitrate_bps, bitrate_bps, max_bitrate_bps); |
| @@ -254,11 +261,6 @@ RemoteBitrateEstimator* CongestionController::GetRemoteBitrateEstimator( |
| } |
| } |
| -TransportFeedbackObserver* |
| -CongestionController::GetTransportFeedbackObserver() { |
| - return &transport_feedback_adapter_; |
| -} |
| - |
| RateLimiter* CongestionController::GetRetransmissionRateLimiter() { |
| return retransmission_rate_limiter_.get(); |
| } |
| @@ -310,7 +312,10 @@ void CongestionController::OnSentPacket(const rtc::SentPacket& sent_packet) { |
| void CongestionController::OnRttUpdate(int64_t avg_rtt_ms, int64_t max_rtt_ms) { |
| remote_bitrate_estimator_.OnRttUpdate(avg_rtt_ms, max_rtt_ms); |
| - transport_feedback_adapter_.OnRttUpdate(avg_rtt_ms, max_rtt_ms); |
| + { |
| + rtc::CritScope cs(&bwe_lock_); |
| + delay_based_bwe_->OnRttUpdate(avg_rtt_ms, max_rtt_ms); |
| + } |
| } |
| int64_t CongestionController::TimeUntilNextProcess() { |
| @@ -325,6 +330,30 @@ void CongestionController::Process() { |
| MaybeTriggerOnNetworkChanged(); |
| } |
| +void CongestionController::AddPacket(uint16_t sequence_number, |
| + size_t length, |
| + const PacedPacketInfo& pacing_info) { |
| + transport_feedback_adapter_.AddPacket(sequence_number, length, pacing_info); |
| +} |
| + |
| +void CongestionController::OnTransportFeedback( |
| + const rtcp::TransportFeedback& feedback) { |
| + transport_feedback_adapter_.OnTransportFeedback(feedback); |
| + DelayBasedBwe::Result result; |
| + { |
| + rtc::CritScope cs(&bwe_lock_); |
| + result = delay_based_bwe_->IncomingPacketFeedbackVector( |
| + transport_feedback_adapter_.GetTransportFeedbackVector()); |
| + } |
| + if (result.updated) |
| + bitrate_controller_->OnDelayBasedBweResult(result); |
| +} |
| + |
| +std::vector<PacketFeedback> CongestionController::GetTransportFeedbackVector() |
| + const { |
| + return transport_feedback_adapter_.GetTransportFeedbackVector(); |
|
elad.alon_webrtc.org
2017/03/08 18:34:20
Stefan, are we worried because there's nobody maki
stefan-webrtc
2017/03/09 09:41:02
A thread checker might be good. We can start with
elad.alon_webrtc.org
2017/03/09 12:03:53
Done.
|
| +} |
| + |
| void CongestionController::MaybeTriggerOnNetworkChanged() { |
| // TODO(perkj): |observer_| can be nullptr if the ctor that accepts a |
| // BitrateObserver is used. Remove this check once the ctor is removed. |
| @@ -345,9 +374,13 @@ void CongestionController::MaybeTriggerOnNetworkChanged() { |
| bitrate_bps = IsNetworkDown() || IsSendQueueFull() ? 0 : bitrate_bps; |
| if (HasNetworkParametersToReportChanged(bitrate_bps, fraction_loss, rtt)) { |
| - observer_->OnNetworkChanged( |
| - bitrate_bps, fraction_loss, rtt, |
| - transport_feedback_adapter_.GetProbingIntervalMs()); |
| + int64_t probing_interval_ms; |
| + { |
| + rtc::CritScope cs(&bwe_lock_); |
| + probing_interval_ms = delay_based_bwe_->GetProbingIntervalMs(); |
| + } |
| + observer_->OnNetworkChanged(bitrate_bps, fraction_loss, rtt, |
| + probing_interval_ms); |
| remote_estimator_proxy_.OnBitrateChanged(bitrate_bps); |
| } |
| } |