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); |
} |
} |