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 d557843be24ee10937d7e8c99a2c041d0b2d3375..14a73fe1cdccfb1a3bdaed8f6771f5fe1af3cc1f 100644 |
--- a/webrtc/modules/congestion_controller/congestion_controller.cc |
+++ b/webrtc/modules/congestion_controller/congestion_controller.cc |
@@ -20,6 +20,7 @@ |
#include "webrtc/base/socket.h" |
#include "webrtc/base/thread_annotations.h" |
#include "webrtc/modules/bitrate_controller/include/bitrate_controller.h" |
+#include "webrtc/modules/pacing/paced_sender.h" |
#include "webrtc/modules/remote_bitrate_estimator/include/send_time_history.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" |
@@ -140,76 +141,28 @@ CongestionController::CongestionController( |
BitrateObserver* bitrate_observer, |
RemoteBitrateObserver* remote_bitrate_observer) |
: clock_(clock), |
- observer_(nullptr), |
- packet_router_(new PacketRouter()), |
pacer_(new PacedSender(clock_, |
- packet_router_.get(), |
- BitrateController::kDefaultStartBitratebps)), |
- remote_bitrate_estimator_( |
- new WrappingBitrateEstimator(remote_bitrate_observer, clock_)), |
- bitrate_controller_( |
- BitrateController::CreateBitrateController(clock_, bitrate_observer)), |
- remote_estimator_proxy_(clock_, packet_router_.get()), |
- transport_feedback_adapter_(bitrate_controller_.get(), clock_), |
- min_bitrate_bps_(RemoteBitrateEstimator::kDefaultMinBitrateBps), |
- send_queue_is_full_(false) { |
- Init(); |
-} |
- |
-CongestionController::CongestionController( |
- Clock* clock, |
- Observer* observer, |
- RemoteBitrateObserver* remote_bitrate_observer) |
- : clock_(clock), |
- observer_(observer), |
- packet_router_(new PacketRouter()), |
- pacer_(new PacedSender(clock_, |
- packet_router_.get(), |
- BitrateController::kDefaultStartBitratebps)), |
- remote_bitrate_estimator_( |
- new WrappingBitrateEstimator(remote_bitrate_observer, clock_)), |
- bitrate_controller_(BitrateController::CreateBitrateController(clock_)), |
- remote_estimator_proxy_(clock_, packet_router_.get()), |
- transport_feedback_adapter_(bitrate_controller_.get(), clock_), |
- min_bitrate_bps_(RemoteBitrateEstimator::kDefaultMinBitrateBps), |
- send_queue_is_full_(false) { |
- Init(); |
-} |
- |
-CongestionController::CongestionController( |
- Clock* clock, |
- Observer* observer, |
- RemoteBitrateObserver* remote_bitrate_observer, |
- std::unique_ptr<PacketRouter> packet_router, |
- std::unique_ptr<PacedSender> pacer) |
- : clock_(clock), |
- observer_(observer), |
- packet_router_(std::move(packet_router)), |
- pacer_(std::move(pacer)), |
+ &packet_router_, |
+ BitrateController::kDefaultStartBitrateKbps, |
+ PacedSender::kDefaultPaceMultiplier * |
+ BitrateController::kDefaultStartBitrateKbps, |
+ 0)), |
remote_bitrate_estimator_( |
new WrappingBitrateEstimator(remote_bitrate_observer, clock_)), |
// Constructed last as this object calls the provided callback on |
// construction. |
- bitrate_controller_(BitrateController::CreateBitrateController(clock_)), |
- remote_estimator_proxy_(clock_, packet_router_.get()), |
+ bitrate_controller_( |
+ BitrateController::CreateBitrateController(clock_, bitrate_observer)), |
+ remote_estimator_proxy_(clock_, &packet_router_), |
transport_feedback_adapter_(bitrate_controller_.get(), clock_), |
- min_bitrate_bps_(RemoteBitrateEstimator::kDefaultMinBitrateBps), |
- send_queue_is_full_(false) { |
- Init(); |
-} |
- |
-CongestionController::~CongestionController() {} |
- |
-void CongestionController::Init() { |
+ min_bitrate_bps_(RemoteBitrateEstimator::kDefaultMinBitrateBps) { |
transport_feedback_adapter_.SetBitrateEstimator( |
new RemoteBitrateEstimatorAbsSendTime(&transport_feedback_adapter_)); |
transport_feedback_adapter_.GetBitrateEstimator()->SetMinBitrate( |
min_bitrate_bps_); |
- // This calls the observer_, which means that the observer provided by the |
- // user must be ready to accept a bitrate update when it constructs the |
- // controller. We do this to avoid having to keep synchronized initial values |
- // in both the controller and the allocator. |
- MaybeTriggerOnNetworkChanged(); |
+} |
+ |
+CongestionController::~CongestionController() { |
} |
@@ -236,7 +189,6 @@ void CongestionController::SetBweBitrates(int min_bitrate_bps, |
min_bitrate_bps_ = min_bitrate_bps; |
transport_feedback_adapter_.GetBitrateEstimator()->SetMinBitrate( |
min_bitrate_bps_); |
- MaybeTriggerOnNetworkChanged(); |
} |
BitrateController* CongestionController::GetBitrateController() const { |
@@ -257,9 +209,10 @@ CongestionController::GetTransportFeedbackObserver() { |
return &transport_feedback_adapter_; |
} |
-void CongestionController::SetAllocatedSendBitrate(int allocated_bitrate_bps, |
- int padding_bitrate_bps) { |
- pacer_->SetAllocatedSendBitrate(allocated_bitrate_bps, padding_bitrate_bps); |
+void CongestionController::UpdatePacerBitrate(int bitrate_kbps, |
+ int max_bitrate_kbps, |
+ int min_bitrate_kbps) { |
+ pacer_->UpdateBitrate(bitrate_kbps, max_bitrate_kbps, min_bitrate_kbps); |
} |
int64_t CongestionController::GetPacerQueuingDelayMs() const { |
@@ -292,36 +245,6 @@ int64_t CongestionController::TimeUntilNextProcess() { |
void CongestionController::Process() { |
bitrate_controller_->Process(); |
remote_bitrate_estimator_->Process(); |
- MaybeTriggerOnNetworkChanged(); |
-} |
- |
-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. |
- if (!observer_) |
- return; |
- |
- uint32_t bitrate_bps; |
- uint8_t fraction_loss; |
- int64_t rtt; |
- bool network_changed = bitrate_controller_->GetNetworkParameters( |
- &bitrate_bps, &fraction_loss, &rtt); |
- if (network_changed) |
- pacer_->SetEstimatedBitrate(bitrate_bps); |
- bool send_queue_is_full = |
- pacer_->ExpectedQueueTimeMs() > PacedSender::kMaxQueueLengthMs; |
- bitrate_bps = send_queue_is_full ? 0 : bitrate_bps; |
- if ((network_changed && !send_queue_is_full) || |
- UpdateSendQueueStatus(send_queue_is_full)) { |
- observer_->OnNetworkChanged(bitrate_bps, fraction_loss, rtt); |
- } |
-} |
- |
-bool CongestionController::UpdateSendQueueStatus(bool send_queue_is_full) { |
- rtc::CritScope cs(&critsect_); |
- bool result = send_queue_is_full_ != send_queue_is_full; |
- send_queue_is_full_ = send_queue_is_full; |
- return result; |
} |
} // namespace webrtc |