Index: webrtc/modules/congestion_controller/send_side_congestion_controller.cc |
diff --git a/webrtc/modules/congestion_controller/congestion_controller.cc b/webrtc/modules/congestion_controller/send_side_congestion_controller.cc |
similarity index 53% |
copy from webrtc/modules/congestion_controller/congestion_controller.cc |
copy to webrtc/modules/congestion_controller/send_side_congestion_controller.cc |
index 6dc25d2b77ab8205d41fcb6fe11d8a83ff352b12..f3cbed96520e2c911621a13a22f26bf9a0253be3 100644 |
--- a/webrtc/modules/congestion_controller/congestion_controller.cc |
+++ b/webrtc/modules/congestion_controller/send_side_congestion_controller.cc |
@@ -8,7 +8,7 @@ |
* be found in the AUTHORS file in the root of the source tree. |
*/ |
-#include "webrtc/modules/congestion_controller/include/congestion_controller.h" |
+#include "webrtc/modules/congestion_controller/include/send_side_congestion_controller.h" |
#include <algorithm> |
#include <memory> |
@@ -21,13 +21,10 @@ |
#include "webrtc/modules/bitrate_controller/include/bitrate_controller.h" |
#include "webrtc/modules/congestion_controller/probe_controller.h" |
#include "webrtc/modules/remote_bitrate_estimator/include/bwe_defines.h" |
-#include "webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.h" |
-#include "webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream.h" |
namespace webrtc { |
namespace { |
-static const uint32_t kTimeOffsetSwitchThreshold = 30; |
static const int64_t kRetransmitWindowSizeMs = 500; |
// Makes sure that the bitrate and the min, max values are in valid range. |
@@ -47,129 +44,32 @@ static void ClampBitrates(int* bitrate_bps, |
} // namespace |
-CongestionController::WrappingBitrateEstimator::WrappingBitrateEstimator( |
- RemoteBitrateObserver* observer, const Clock* clock) |
- : observer_(observer), |
- clock_(clock), |
- rbe_(new RemoteBitrateEstimatorSingleStream(observer_, clock_)), |
- using_absolute_send_time_(false), |
- packets_since_absolute_send_time_(0), |
- min_bitrate_bps_(congestion_controller::GetMinBitrateBps()) {} |
- |
-void CongestionController::WrappingBitrateEstimator::IncomingPacket( |
- int64_t arrival_time_ms, |
- size_t payload_size, |
- const RTPHeader& header) { |
- rtc::CritScope cs(&crit_sect_); |
- PickEstimatorFromHeader(header); |
- rbe_->IncomingPacket(arrival_time_ms, payload_size, header); |
-} |
- |
-void CongestionController::WrappingBitrateEstimator::Process() { |
- rtc::CritScope cs(&crit_sect_); |
- rbe_->Process(); |
-} |
- |
-int64_t CongestionController::WrappingBitrateEstimator::TimeUntilNextProcess() { |
- rtc::CritScope cs(&crit_sect_); |
- return rbe_->TimeUntilNextProcess(); |
-} |
- |
-void CongestionController::WrappingBitrateEstimator::OnRttUpdate( |
- int64_t avg_rtt_ms, int64_t max_rtt_ms) { |
- rtc::CritScope cs(&crit_sect_); |
- rbe_->OnRttUpdate(avg_rtt_ms, max_rtt_ms); |
-} |
- |
-void CongestionController::WrappingBitrateEstimator::RemoveStream( |
- unsigned int ssrc) { |
- rtc::CritScope cs(&crit_sect_); |
- rbe_->RemoveStream(ssrc); |
-} |
- |
-bool CongestionController::WrappingBitrateEstimator::LatestEstimate( |
- std::vector<unsigned int>* ssrcs, |
- unsigned int* bitrate_bps) const { |
- rtc::CritScope cs(&crit_sect_); |
- return rbe_->LatestEstimate(ssrcs, bitrate_bps); |
-} |
- |
-void CongestionController::WrappingBitrateEstimator::SetMinBitrate( |
- int min_bitrate_bps) { |
- rtc::CritScope cs(&crit_sect_); |
- rbe_->SetMinBitrate(min_bitrate_bps); |
- min_bitrate_bps_ = min_bitrate_bps; |
-} |
- |
-void CongestionController::WrappingBitrateEstimator::PickEstimatorFromHeader( |
- const RTPHeader& header) { |
- if (header.extension.hasAbsoluteSendTime) { |
- // If we see AST in header, switch RBE strategy immediately. |
- if (!using_absolute_send_time_) { |
- LOG(LS_INFO) << |
- "WrappingBitrateEstimator: Switching to absolute send time RBE."; |
- using_absolute_send_time_ = true; |
- PickEstimator(); |
- } |
- packets_since_absolute_send_time_ = 0; |
- } else { |
- // When we don't see AST, wait for a few packets before going back to TOF. |
- if (using_absolute_send_time_) { |
- ++packets_since_absolute_send_time_; |
- if (packets_since_absolute_send_time_ >= kTimeOffsetSwitchThreshold) { |
- LOG(LS_INFO) << "WrappingBitrateEstimator: Switching to transmission " |
- << "time offset RBE."; |
- using_absolute_send_time_ = false; |
- PickEstimator(); |
- } |
- } |
- } |
-} |
- |
-// Instantiate RBE for Time Offset or Absolute Send Time extensions. |
-void CongestionController::WrappingBitrateEstimator::PickEstimator() { |
- if (using_absolute_send_time_) { |
- rbe_.reset(new RemoteBitrateEstimatorAbsSendTime(observer_, clock_)); |
- } else { |
- rbe_.reset(new RemoteBitrateEstimatorSingleStream(observer_, clock_)); |
- } |
- rbe_->SetMinBitrate(min_bitrate_bps_); |
-} |
- |
-CongestionController::CongestionController( |
+SendSideCongestionController::SendSideCongestionController( |
const Clock* clock, |
Observer* observer, |
- RemoteBitrateObserver* remote_bitrate_observer, |
RtcEventLog* event_log, |
PacketRouter* packet_router) |
- : CongestionController( |
+ : SendSideCongestionController( |
clock, |
observer, |
- remote_bitrate_observer, |
event_log, |
- packet_router, |
std::unique_ptr<PacedSender>(new PacedSender(clock, packet_router))) { |
} |
-CongestionController::CongestionController( |
+SendSideCongestionController::SendSideCongestionController( |
const Clock* clock, |
Observer* observer, |
- RemoteBitrateObserver* remote_bitrate_observer, |
RtcEventLog* event_log, |
- PacketRouter* packet_router, |
std::unique_ptr<PacedSender> pacer) |
: clock_(clock), |
observer_(observer), |
event_log_(event_log), |
- packet_router_(packet_router), |
pacer_(std::move(pacer)), |
bitrate_controller_( |
BitrateController::CreateBitrateController(clock_, event_log)), |
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_(clock_), |
last_reported_bitrate_bps_(0), |
last_reported_fraction_loss_(0), |
@@ -181,34 +81,18 @@ CongestionController::CongestionController( |
worker_thread_checker_.DetachFromThread(); |
} |
-CongestionController::~CongestionController() {} |
- |
-void CongestionController::OnReceivedPacket(int64_t arrival_time_ms, |
- size_t payload_size, |
- const RTPHeader& header) { |
- // Send-side BWE. |
- if (header.extension.hasTransportSequenceNumber) { |
- remote_estimator_proxy_.IncomingPacket(arrival_time_ms, payload_size, |
- header); |
- } else { |
- // Receive-side BWE. |
- remote_bitrate_estimator_.IncomingPacket(arrival_time_ms, payload_size, |
- header); |
- } |
-} |
+SendSideCongestionController::~SendSideCongestionController() {} |
-void CongestionController::SetBweBitrates(int min_bitrate_bps, |
- int start_bitrate_bps, |
- int max_bitrate_bps) { |
+void SendSideCongestionController::SetBweBitrates(int min_bitrate_bps, |
+ int start_bitrate_bps, |
+ int max_bitrate_bps) { |
ClampBitrates(&start_bitrate_bps, &min_bitrate_bps, &max_bitrate_bps); |
- bitrate_controller_->SetBitrates(start_bitrate_bps, |
- min_bitrate_bps, |
+ bitrate_controller_->SetBitrates(start_bitrate_bps, min_bitrate_bps, |
max_bitrate_bps); |
probe_controller_->SetBitrates(min_bitrate_bps, start_bitrate_bps, |
max_bitrate_bps); |
- remote_bitrate_estimator_.SetMinBitrate(min_bitrate_bps); |
{ |
rtc::CritScope cs(&bwe_lock_); |
if (start_bitrate_bps > 0) |
@@ -221,19 +105,16 @@ void CongestionController::SetBweBitrates(int min_bitrate_bps, |
// TODO(holmer): Split this up and use SetBweBitrates in combination with |
// OnNetworkRouteChanged. |
-void CongestionController::OnNetworkRouteChanged( |
+void SendSideCongestionController::OnNetworkRouteChanged( |
const rtc::NetworkRoute& network_route, |
int bitrate_bps, |
int min_bitrate_bps, |
int max_bitrate_bps) { |
ClampBitrates(&bitrate_bps, &min_bitrate_bps, &max_bitrate_bps); |
// TODO(honghaiz): Recreate this object once the bitrate controller is |
- // no longer exposed outside CongestionController. |
+ // no longer exposed outside SendSideCongestionController. |
bitrate_controller_->ResetBitrates(bitrate_bps, min_bitrate_bps, |
max_bitrate_bps); |
- // TODO(honghaiz): Recreate this object once the remote bitrate estimator is |
- // no longer exposed outside CongestionController. |
- remote_bitrate_estimator_.SetMinBitrate(min_bitrate_bps); |
transport_feedback_adapter_.SetNetworkIds(network_route.local_network_id, |
network_route.remote_network_id); |
@@ -242,7 +123,7 @@ void CongestionController::OnNetworkRouteChanged( |
min_bitrate_bps_ = min_bitrate_bps; |
delay_based_bwe_.reset(new DelayBasedBwe(event_log_, clock_)); |
delay_based_bwe_->SetStartBitrate(bitrate_bps); |
- delay_based_bwe_->SetMinBitrate(min_bitrate_bps_); |
+ delay_based_bwe_->SetMinBitrate(min_bitrate_bps); |
} |
probe_controller_->Reset(); |
@@ -251,38 +132,29 @@ void CongestionController::OnNetworkRouteChanged( |
MaybeTriggerOnNetworkChanged(); |
} |
-BitrateController* CongestionController::GetBitrateController() const { |
+BitrateController* SendSideCongestionController::GetBitrateController() const { |
return bitrate_controller_.get(); |
} |
-RemoteBitrateEstimator* CongestionController::GetRemoteBitrateEstimator( |
- bool send_side_bwe) { |
- if (send_side_bwe) { |
- return &remote_estimator_proxy_; |
- } else { |
- return &remote_bitrate_estimator_; |
- } |
-} |
- |
-RateLimiter* CongestionController::GetRetransmissionRateLimiter() { |
+RateLimiter* SendSideCongestionController::GetRetransmissionRateLimiter() { |
return retransmission_rate_limiter_.get(); |
} |
-void CongestionController::EnablePeriodicAlrProbing(bool enable) { |
+void SendSideCongestionController::EnablePeriodicAlrProbing(bool enable) { |
probe_controller_->EnablePeriodicAlrProbing(enable); |
} |
-void CongestionController::SetAllocatedSendBitrateLimits( |
+void SendSideCongestionController::SetAllocatedSendBitrateLimits( |
int min_send_bitrate_bps, |
int max_padding_bitrate_bps) { |
pacer_->SetSendBitrateLimits(min_send_bitrate_bps, max_padding_bitrate_bps); |
} |
-int64_t CongestionController::GetPacerQueuingDelayMs() const { |
+int64_t SendSideCongestionController::GetPacerQueuingDelayMs() const { |
return IsNetworkDown() ? 0 : pacer_->QueueInMs(); |
} |
-void CongestionController::SignalNetworkState(NetworkState state) { |
+void SendSideCongestionController::SignalNetworkState(NetworkState state) { |
LOG(LS_INFO) << "SignalNetworkState " |
<< (state == kNetworkUp ? "Up" : "Down"); |
if (state == kNetworkUp) { |
@@ -298,13 +170,14 @@ void CongestionController::SignalNetworkState(NetworkState state) { |
MaybeTriggerOnNetworkChanged(); |
} |
-void CongestionController::SetTransportOverhead( |
+void SendSideCongestionController::SetTransportOverhead( |
size_t transport_overhead_bytes_per_packet) { |
transport_feedback_adapter_.SetTransportOverhead( |
transport_overhead_bytes_per_packet); |
} |
-void CongestionController::OnSentPacket(const rtc::SentPacket& sent_packet) { |
+void SendSideCongestionController::OnSentPacket( |
+ const rtc::SentPacket& sent_packet) { |
// We're not interested in packets without an id, which may be stun packets, |
// etc, sent on the same transport. |
if (sent_packet.packet_id == -1) |
@@ -313,33 +186,30 @@ void CongestionController::OnSentPacket(const rtc::SentPacket& sent_packet) { |
sent_packet.send_time_ms); |
} |
-void CongestionController::OnRttUpdate(int64_t avg_rtt_ms, int64_t max_rtt_ms) { |
- remote_bitrate_estimator_.OnRttUpdate(avg_rtt_ms, max_rtt_ms); |
- { |
- rtc::CritScope cs(&bwe_lock_); |
- delay_based_bwe_->OnRttUpdate(avg_rtt_ms, max_rtt_ms); |
- } |
+void SendSideCongestionController::OnRttUpdate(int64_t avg_rtt_ms, |
+ int64_t max_rtt_ms) { |
+ rtc::CritScope cs(&bwe_lock_); |
+ delay_based_bwe_->OnRttUpdate(avg_rtt_ms, max_rtt_ms); |
} |
-int64_t CongestionController::TimeUntilNextProcess() { |
- return std::min(bitrate_controller_->TimeUntilNextProcess(), |
- remote_bitrate_estimator_.TimeUntilNextProcess()); |
+int64_t SendSideCongestionController::TimeUntilNextProcess() { |
+ return bitrate_controller_->TimeUntilNextProcess(); |
} |
-void CongestionController::Process() { |
+void SendSideCongestionController::Process() { |
bitrate_controller_->Process(); |
- remote_bitrate_estimator_.Process(); |
probe_controller_->Process(); |
MaybeTriggerOnNetworkChanged(); |
} |
-void CongestionController::AddPacket(uint16_t sequence_number, |
- size_t length, |
- const PacedPacketInfo& pacing_info) { |
+void SendSideCongestionController::AddPacket( |
+ uint16_t sequence_number, |
+ size_t length, |
+ const PacedPacketInfo& pacing_info) { |
transport_feedback_adapter_.AddPacket(sequence_number, length, pacing_info); |
} |
-void CongestionController::OnTransportFeedback( |
+void SendSideCongestionController::OnTransportFeedback( |
const rtcp::TransportFeedback& feedback) { |
RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); |
transport_feedback_adapter_.OnTransportFeedback(feedback); |
@@ -356,13 +226,13 @@ void CongestionController::OnTransportFeedback( |
bitrate_controller_->OnDelayBasedBweResult(result); |
} |
-std::vector<PacketFeedback> CongestionController::GetTransportFeedbackVector() |
- const { |
+std::vector<PacketFeedback> |
+SendSideCongestionController::GetTransportFeedbackVector() const { |
RTC_DCHECK(worker_thread_checker_.CalledOnValidThread()); |
return transport_feedback_adapter_.GetTransportFeedbackVector(); |
} |
-void CongestionController::MaybeTriggerOnNetworkChanged() { |
+void SendSideCongestionController::MaybeTriggerOnNetworkChanged() { |
// TODO(perkj): |observer_| can be nullptr if the ctor that accepts a |
// BitrateObserver is used. Remove this check once the ctor is removed. |
if (!observer_) |
@@ -389,11 +259,10 @@ void CongestionController::MaybeTriggerOnNetworkChanged() { |
} |
observer_->OnNetworkChanged(bitrate_bps, fraction_loss, rtt, |
probing_interval_ms); |
- remote_estimator_proxy_.OnBitrateChanged(bitrate_bps); |
} |
} |
-bool CongestionController::HasNetworkParametersToReportChanged( |
+bool SendSideCongestionController::HasNetworkParametersToReportChanged( |
uint32_t bitrate_bps, |
uint8_t fraction_loss, |
int64_t rtt) { |
@@ -412,11 +281,11 @@ bool CongestionController::HasNetworkParametersToReportChanged( |
return changed; |
} |
-bool CongestionController::IsSendQueueFull() const { |
+bool SendSideCongestionController::IsSendQueueFull() const { |
return pacer_->ExpectedQueueTimeMs() > PacedSender::kMaxQueueLengthMs; |
} |
-bool CongestionController::IsNetworkDown() const { |
+bool SendSideCongestionController::IsNetworkDown() const { |
rtc::CritScope cs(&network_state_lock_); |
return network_state_ == kNetworkDown; |
} |