Add a function for enabling the congestion window and pushback controller in the webrtc::SendSideCongestionController.
Bug: webrtc:9923
Change-Id: Id01ebd7237ba33f34003aa9560405a13da7580e2
Reviewed-on: https://webrtc-review.googlesource.com/c/107893
Reviewed-by: Sebastian Jansson <srte@webrtc.org>
Reviewed-by: Ying Wang <yinwa@webrtc.org>
Commit-Queue: Erik Varga <erikvarga@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#25393}
diff --git a/modules/congestion_controller/goog_cc/congestion_window_pushback_controller.cc b/modules/congestion_controller/goog_cc/congestion_window_pushback_controller.cc
index 2011bef..1e59cb5 100644
--- a/modules/congestion_controller/goog_cc/congestion_window_pushback_controller.cc
+++ b/modules/congestion_controller/goog_cc/congestion_window_pushback_controller.cc
@@ -47,6 +47,10 @@
}
}
+CongestionWindowPushbackController::CongestionWindowPushbackController(
+ uint32_t min_pushback_target_bitrate_bps)
+ : min_pushback_target_bitrate_bps_(min_pushback_target_bitrate_bps) {}
+
void CongestionWindowPushbackController::UpdateOutstandingData(
size_t outstanding_bytes) {
outstanding_bytes_ = outstanding_bytes;
diff --git a/modules/congestion_controller/goog_cc/congestion_window_pushback_controller.h b/modules/congestion_controller/goog_cc/congestion_window_pushback_controller.h
index d8a3343..7ef0974 100644
--- a/modules/congestion_controller/goog_cc/congestion_window_pushback_controller.h
+++ b/modules/congestion_controller/goog_cc/congestion_window_pushback_controller.h
@@ -23,6 +23,8 @@
class CongestionWindowPushbackController {
public:
CongestionWindowPushbackController();
+ explicit CongestionWindowPushbackController(
+ uint32_t min_pushback_target_bitrate_bps);
void UpdateOutstandingData(size_t outstanding_bytes);
void UpdateMaxOutstandingData(size_t max_outstanding_bytes);
uint32_t UpdateTargetBitrate(uint32_t bitrate_bps);
diff --git a/modules/congestion_controller/include/send_side_congestion_controller.h b/modules/congestion_controller/include/send_side_congestion_controller.h
index 06856a3..88530a2 100644
--- a/modules/congestion_controller/include/send_side_congestion_controller.h
+++ b/modules/congestion_controller/include/send_side_congestion_controller.h
@@ -113,6 +113,9 @@
void SetAllocatedBitrateWithoutFeedback(uint32_t bitrate_bps) override;
+ void EnableCongestionWindowPushback(int64_t accepted_queue_ms,
+ uint32_t min_pushback_target_bitrate_bps);
+
private:
void MaybeTriggerOnNetworkChanged();
@@ -161,7 +164,7 @@
bool pacer_pushback_experiment_ = false;
float encoding_rate_ = 1.0;
- const std::unique_ptr<CongestionWindowPushbackController>
+ std::unique_ptr<CongestionWindowPushbackController>
congestion_window_pushback_controller_;
RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(SendSideCongestionController);
diff --git a/modules/congestion_controller/send_side_congestion_controller.cc b/modules/congestion_controller/send_side_congestion_controller.cc
index 5b5443f..cf03baa 100644
--- a/modules/congestion_controller/send_side_congestion_controller.cc
+++ b/modules/congestion_controller/send_side_congestion_controller.cc
@@ -164,6 +164,23 @@
SendSideCongestionController::~SendSideCongestionController() {}
+void SendSideCongestionController::EnableCongestionWindowPushback(
+ int64_t accepted_queue_ms,
+ uint32_t min_pushback_target_bitrate_bps) {
+ RTC_DCHECK(!congestion_window_pushback_controller_)
+ << "The congestion pushback is already enabled.";
+ RTC_CHECK_GE(accepted_queue_ms, 0)
+ << "Accepted must be greater than or equal to 0.";
+ RTC_CHECK_GE(min_pushback_target_bitrate_bps, 0)
+ << "Min pushback target bitrate must be greater than or equal to 0.";
+
+ in_cwnd_experiment_ = true;
+ accepted_queue_ms_ = accepted_queue_ms;
+ congestion_window_pushback_controller_ =
+ absl::make_unique<CongestionWindowPushbackController>(
+ min_pushback_target_bitrate_bps);
+}
+
void SendSideCongestionController::RegisterPacketFeedbackObserver(
PacketFeedbackObserver* observer) {
transport_feedback_adapter_.RegisterPacketFeedbackObserver(observer);