Remove the upper link capacity usage in the loss based bwe.
A follow up cl/ is to remove passing upper link capacity from goog_cc to loss_based_bwe_v2.
Bug: webrtc:12707
Change-Id: I45af8ca6e8ba185700d0b7eb57004d2b61edeb9e
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/320780
Reviewed-by: Per Kjellander <perkj@webrtc.org>
Commit-Queue: Diep Bui <diepbp@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#40780}
diff --git a/modules/congestion_controller/goog_cc/loss_based_bwe_v2.cc b/modules/congestion_controller/goog_cc/loss_based_bwe_v2.cc
index 4d1a097..08ad584 100644
--- a/modules/congestion_controller/goog_cc/loss_based_bwe_v2.cc
+++ b/modules/congestion_controller/goog_cc/loss_based_bwe_v2.cc
@@ -416,8 +416,6 @@
false);
FieldTrialParameter<TimeDelta> probe_expiration("ProbeExpiration",
TimeDelta::Seconds(10));
- FieldTrialParameter<bool> bound_by_upper_link_capacity_when_loss_limited(
- "BoundByUpperLinkCapacityWhenLossLimited", true);
FieldTrialParameter<bool> not_use_acked_rate_in_alr("NotUseAckedRateInAlr",
false);
if (key_value_config) {
@@ -457,7 +455,6 @@
&high_loss_rate_threshold,
&bandwidth_cap_at_high_loss_rate,
&slope_of_bwe_high_loss_func,
- &bound_by_upper_link_capacity_when_loss_limited,
¬_use_acked_rate_in_alr},
key_value_config->Lookup("WebRTC-Bwe-LossBasedBweV2"));
}
@@ -520,8 +517,6 @@
config->slope_of_bwe_high_loss_func = slope_of_bwe_high_loss_func.Get();
config->probe_integration_enabled = probe_integration_enabled.Get();
config->probe_expiration = probe_expiration.Get();
- config->bound_by_upper_link_capacity_when_loss_limited =
- bound_by_upper_link_capacity_when_loss_limited.Get();
config->not_use_acked_rate_in_alr = not_use_acked_rate_in_alr.Get();
return config;
@@ -965,12 +960,6 @@
}
}
- if (IsBandwidthLimitedDueToLoss()) {
- if (IsValid(upper_link_capacity_) &&
- config_->bound_by_upper_link_capacity_when_loss_limited) {
- instant_limit = std::min(instant_limit, upper_link_capacity_);
- }
- }
cached_instant_upper_bound_ = instant_limit;
}
diff --git a/modules/congestion_controller/goog_cc/loss_based_bwe_v2.h b/modules/congestion_controller/goog_cc/loss_based_bwe_v2.h
index fe17e63..fac4d49 100644
--- a/modules/congestion_controller/goog_cc/loss_based_bwe_v2.h
+++ b/modules/congestion_controller/goog_cc/loss_based_bwe_v2.h
@@ -114,7 +114,6 @@
double slope_of_bwe_high_loss_func = 1000.0;
bool probe_integration_enabled = false;
TimeDelta probe_expiration = TimeDelta::Zero();
- bool bound_by_upper_link_capacity_when_loss_limited = false;
bool not_use_acked_rate_in_alr = false;
};
diff --git a/modules/congestion_controller/goog_cc/loss_based_bwe_v2_test.cc b/modules/congestion_controller/goog_cc/loss_based_bwe_v2_test.cc
index d745f37..963d8ff 100644
--- a/modules/congestion_controller/goog_cc/loss_based_bwe_v2_test.cc
+++ b/modules/congestion_controller/goog_cc/loss_based_bwe_v2_test.cc
@@ -1261,132 +1261,6 @@
EXPECT_GT(result_after_recovery.bandwidth_estimate, probe_estimate);
}
-// If BoundByUpperLinkCapacityWhenLossLimited is enabled, the estimate is
-// bounded by the upper link capacity when bandwidth is loss limited.
-TEST_P(LossBasedBweV2Test, BoundEstimateByUpperLinkCapacityWhenLossLimited) {
- ExplicitKeyValueConfig key_value_config(
- "WebRTC-Bwe-LossBasedBweV2/"
- "Enabled:true,CandidateFactors:1.2|1|0.5,AckedRateCandidate:true,"
- "ObservationWindowSize:2,ObservationDurationLowerBound:200ms,"
- "InstantUpperBoundBwBalance:10000kbps,"
- "DelayBasedCandidate:true,MaxIncreaseFactor:1000,"
- "BwRampupUpperBoundFactor:2.0,BoundByUpperLinkCapacityWhenLossLimited:"
- "true/");
- LossBasedBweV2 loss_based_bandwidth_estimator(&key_value_config);
- DataRate delay_based_estimate = DataRate::KilobitsPerSec(5000);
- DataRate acked_rate = DataRate::KilobitsPerSec(300);
- loss_based_bandwidth_estimator.SetBandwidthEstimate(
- DataRate::KilobitsPerSec(600));
- loss_based_bandwidth_estimator.SetAcknowledgedBitrate(acked_rate);
-
- // Create some loss to create the loss limited scenario.
- std::vector<PacketResult> enough_feedback_1 =
- CreatePacketResultsWith100pLossRate(
- /*first_packet_timestamp=*/Timestamp::Zero());
- loss_based_bandwidth_estimator.UpdateBandwidthEstimate(
- enough_feedback_1, delay_based_estimate, BandwidthUsage::kBwNormal,
- /*probe_estimate=*/absl::nullopt,
- /*upper_link_capacity=*/DataRate::PlusInfinity(), /*in_alr=*/false);
-
- // Network recovers after loss.
- DataRate upper_link_capacity = DataRate::KilobitsPerSec(10);
- std::vector<PacketResult> enough_feedback_2 =
- CreatePacketResultsWithReceivedPackets(
- /*first_packet_timestamp=*/Timestamp::Zero() +
- kObservationDurationLowerBound);
- loss_based_bandwidth_estimator.UpdateBandwidthEstimate(
- enough_feedback_2, delay_based_estimate, BandwidthUsage::kBwNormal,
- /*probe_estimate=*/absl::nullopt, upper_link_capacity, /*in_alr=*/false);
-
- LossBasedBweV2::Result result_after_recovery =
- loss_based_bandwidth_estimator.GetLossBasedResult();
- EXPECT_EQ(result_after_recovery.bandwidth_estimate, upper_link_capacity);
-}
-
-// If BoundByUpperLinkCapacityWhenLossLimited is enabled, the estimate is not
-// bounded by the upper link capacity when bandwidth is not loss limited.
-TEST_P(LossBasedBweV2Test,
- NotBoundEstimateByUpperLinkCapacityWhenNotLossLimited) {
- ExplicitKeyValueConfig key_value_config(
- "WebRTC-Bwe-LossBasedBweV2/"
- "Enabled:true,CandidateFactors:1.2|1|0.5,AckedRateCandidate:true,"
- "ObservationWindowSize:2,ObservationDurationLowerBound:200ms,"
- "InstantUpperBoundBwBalance:10000kbps,"
- "DelayBasedCandidate:true,MaxIncreaseFactor:1000,"
- "BwRampupUpperBoundFactor:2.0,BoundByUpperLinkCapacityWhenLossLimited:"
- "true/");
- LossBasedBweV2 loss_based_bandwidth_estimator(&key_value_config);
- DataRate delay_based_estimate = DataRate::KilobitsPerSec(5000);
- DataRate acked_rate = DataRate::KilobitsPerSec(300);
- loss_based_bandwidth_estimator.SetBandwidthEstimate(
- DataRate::KilobitsPerSec(600));
- loss_based_bandwidth_estimator.SetAcknowledgedBitrate(acked_rate);
-
- // Create a normal network without loss
- std::vector<PacketResult> enough_feedback_1 =
- CreatePacketResultsWithReceivedPackets(
- /*first_packet_timestamp=*/Timestamp::Zero());
- loss_based_bandwidth_estimator.UpdateBandwidthEstimate(
- enough_feedback_1, delay_based_estimate, BandwidthUsage::kBwNormal,
- /*probe_estimate=*/absl::nullopt,
- /*upper_link_capacity=*/DataRate::PlusInfinity(), /*in_alr=*/false);
-
- DataRate upper_link_capacity = DataRate::KilobitsPerSec(10);
- std::vector<PacketResult> enough_feedback_2 =
- CreatePacketResultsWithReceivedPackets(
- /*first_packet_timestamp=*/Timestamp::Zero() +
- kObservationDurationLowerBound);
- loss_based_bandwidth_estimator.UpdateBandwidthEstimate(
- enough_feedback_2, delay_based_estimate, BandwidthUsage::kBwNormal,
- /*probe_estimate=*/absl::nullopt, upper_link_capacity, /*in_alr=*/false);
-
- LossBasedBweV2::Result loss_based_result =
- loss_based_bandwidth_estimator.GetLossBasedResult();
- EXPECT_GT(loss_based_result.bandwidth_estimate, upper_link_capacity);
-}
-
-// If BoundByUpperLinkCapacityWhenLossLimited is disabled, the estimate is not
-// bounded by the upper link capacity.
-TEST_P(LossBasedBweV2Test, NotBoundEstimateByUpperLinkCapacity) {
- ExplicitKeyValueConfig key_value_config(
- "WebRTC-Bwe-LossBasedBweV2/"
- "Enabled:true,CandidateFactors:1.2|1|0.5,AckedRateCandidate:true,"
- "ObservationWindowSize:2,ObservationDurationLowerBound:200ms,"
- "InstantUpperBoundBwBalance:10000kbps,"
- "DelayBasedCandidate:true,MaxIncreaseFactor:1000,"
- "BwRampupUpperBoundFactor:2.0,BoundByUpperLinkCapacityWhenLossLimited:"
- "false/");
- LossBasedBweV2 loss_based_bandwidth_estimator(&key_value_config);
- DataRate delay_based_estimate = DataRate::KilobitsPerSec(5000);
- DataRate acked_rate = DataRate::KilobitsPerSec(300);
- loss_based_bandwidth_estimator.SetBandwidthEstimate(
- DataRate::KilobitsPerSec(600));
- loss_based_bandwidth_estimator.SetAcknowledgedBitrate(acked_rate);
-
- // Create some loss to create the loss limited scenario.
- std::vector<PacketResult> enough_feedback_1 =
- CreatePacketResultsWith100pLossRate(
- /*first_packet_timestamp=*/Timestamp::Zero());
- loss_based_bandwidth_estimator.UpdateBandwidthEstimate(
- enough_feedback_1, delay_based_estimate, BandwidthUsage::kBwNormal,
- /*probe_estimate=*/absl::nullopt,
- /*upper_link_capacity=*/DataRate::PlusInfinity(), /*in_alr=*/false);
-
- // Network recovers after loss.
- DataRate upper_link_capacity = DataRate::KilobitsPerSec(10);
- std::vector<PacketResult> enough_feedback_2 =
- CreatePacketResultsWithReceivedPackets(
- /*first_packet_timestamp=*/Timestamp::Zero() +
- kObservationDurationLowerBound);
- loss_based_bandwidth_estimator.UpdateBandwidthEstimate(
- enough_feedback_2, delay_based_estimate, BandwidthUsage::kBwNormal,
- /*probe_estimate=*/absl::nullopt, upper_link_capacity, /*in_alr=*/false);
-
- LossBasedBweV2::Result result_after_recovery =
- loss_based_bandwidth_estimator.GetLossBasedResult();
- EXPECT_GT(result_after_recovery.bandwidth_estimate, upper_link_capacity);
-}
-
TEST_P(LossBasedBweV2Test,
StricterBoundUsingHighLossRateThresholdAt10pLossRate) {
ExplicitKeyValueConfig key_value_config(