Cap probing bitrate to max total allocated bitrate
Bug: webrtc:10070
Change-Id: I3ba2656dff08e9ff054e263d78dcacba1ff77dd1
Reviewed-on: https://webrtc-review.googlesource.com/c/112384
Commit-Queue: Erik Språng <sprang@webrtc.org>
Reviewed-by: Sebastian Jansson <srte@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#25845}
diff --git a/modules/congestion_controller/goog_cc/probe_controller.cc b/modules/congestion_controller/goog_cc/probe_controller.cc
index af967dc..4421b9e 100644
--- a/modules/congestion_controller/goog_cc/probe_controller.cc
+++ b/modules/congestion_controller/goog_cc/probe_controller.cc
@@ -78,12 +78,18 @@
constexpr char kBweRapidRecoveryExperiment[] =
"WebRTC-BweRapidRecoveryExperiment";
+// Never probe higher than configured by OnMaxTotalAllocatedBitrate().
+constexpr char kCappedProbingFieldTrialName[] = "WebRTC-BweCappedProbing";
+
} // namespace
-ProbeController::ProbeController() : enable_periodic_alr_probing_(false) {
+ProbeController::ProbeController()
+ : enable_periodic_alr_probing_(false),
+ in_rapid_recovery_experiment_(
+ webrtc::field_trial::IsEnabled(kBweRapidRecoveryExperiment)),
+ limit_probes_with_allocateable_rate_(
+ !webrtc::field_trial::IsDisabled(kCappedProbingFieldTrialName)) {
Reset(0);
- in_rapid_recovery_experiment_ = webrtc::field_trial::FindFullName(
- kBweRapidRecoveryExperiment) == "Enabled";
}
ProbeController::~ProbeController() {}
@@ -141,8 +147,6 @@
std::vector<ProbeClusterConfig> ProbeController::OnMaxTotalAllocatedBitrate(
int64_t max_total_allocated_bitrate,
int64_t at_time_ms) {
- // TODO(philipel): Should |max_total_allocated_bitrate| be used as a limit for
- // ALR probing?
if (state_ == State::kProbingComplete &&
max_total_allocated_bitrate != max_total_allocated_bitrate_ &&
estimated_bitrate_bps_ != 0 &&
@@ -330,6 +334,11 @@
RTC_DCHECK_GT(bitrate, 0);
int64_t max_probe_bitrate_bps =
max_bitrate_bps_ > 0 ? max_bitrate_bps_ : kDefaultMaxProbingBitrateBps;
+ if (limit_probes_with_allocateable_rate_ &&
+ max_total_allocated_bitrate_ > 0) {
+ max_probe_bitrate_bps =
+ std::min(max_probe_bitrate_bps, max_total_allocated_bitrate_);
+ }
if (bitrate > max_probe_bitrate_bps) {
bitrate = max_probe_bitrate_bps;
probe_further = false;