| 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 34b174ebc6f6c93c2ea46146ddbb5231528f3394..b6880bc0fb1e312ce3010598578bfbbc1bdfbbfb 100644
|
| --- a/webrtc/modules/congestion_controller/congestion_controller.cc
|
| +++ b/webrtc/modules/congestion_controller/congestion_controller.cc
|
| @@ -148,8 +148,9 @@ CongestionController::CongestionController(
|
| remote_bitrate_observer,
|
| event_log,
|
| packet_router,
|
| - std::unique_ptr<PacedSender>(new PacedSender(clock, packet_router))) {
|
| -}
|
| + std::unique_ptr<PacedSender>(new PacedSender(clock, packet_router)),
|
| + std::unique_ptr<BitrateController>(
|
| + BitrateController::CreateBitrateController(clock, event_log))) {}
|
|
|
| CongestionController::CongestionController(
|
| Clock* clock,
|
| @@ -157,27 +158,28 @@ CongestionController::CongestionController(
|
| RemoteBitrateObserver* remote_bitrate_observer,
|
| RtcEventLog* event_log,
|
| PacketRouter* packet_router,
|
| - std::unique_ptr<PacedSender> pacer)
|
| + std::unique_ptr<PacedSender> pacer,
|
| + std::unique_ptr<BitrateController> bitrate_controller)
|
| : clock_(clock),
|
| observer_(observer),
|
| + event_log_(event_log),
|
| packet_router_(packet_router),
|
| pacer_(std::move(pacer)),
|
| - bitrate_controller_(
|
| - BitrateController::CreateBitrateController(clock_, event_log)),
|
| + bitrate_controller_(std::move(bitrate_controller)),
|
| probe_controller_(new ProbeController(pacer_.get(), clock_)),
|
| retransmission_rate_limiter_(
|
| 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 +212,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();
|
| }
|
|
|
| @@ -230,9 +235,12 @@ void CongestionController::ResetBweAndBitrates(int bitrate_bps,
|
| // no longer exposed outside CongestionController.
|
| remote_bitrate_estimator_.SetMinBitrate(min_bitrate_bps);
|
|
|
| - 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);
|
| + }
|
| // TODO(holmer): Trigger a new probe once mid-call probing is implemented.
|
| MaybeTriggerOnNetworkChanged();
|
| }
|
| @@ -250,11 +258,6 @@ RemoteBitrateEstimator* CongestionController::GetRemoteBitrateEstimator(
|
| }
|
| }
|
|
|
| -TransportFeedbackObserver*
|
| -CongestionController::GetTransportFeedbackObserver() {
|
| - return &transport_feedback_adapter_;
|
| -}
|
| -
|
| RateLimiter* CongestionController::GetRetransmissionRateLimiter() {
|
| return retransmission_rate_limiter_.get();
|
| }
|
| @@ -306,7 +309,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() {
|
| @@ -321,6 +327,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();
|
| +}
|
| +
|
| 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.
|
| @@ -341,9 +371,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);
|
| }
|
| }
|
|
|