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}
This commit is contained in:
parent
c951d1b0f6
commit
7ee64bd9dc
@ -416,8 +416,6 @@ absl::optional<LossBasedBweV2::Config> LossBasedBweV2::CreateConfig(
|
|||||||
false);
|
false);
|
||||||
FieldTrialParameter<TimeDelta> probe_expiration("ProbeExpiration",
|
FieldTrialParameter<TimeDelta> probe_expiration("ProbeExpiration",
|
||||||
TimeDelta::Seconds(10));
|
TimeDelta::Seconds(10));
|
||||||
FieldTrialParameter<bool> bound_by_upper_link_capacity_when_loss_limited(
|
|
||||||
"BoundByUpperLinkCapacityWhenLossLimited", true);
|
|
||||||
FieldTrialParameter<bool> not_use_acked_rate_in_alr("NotUseAckedRateInAlr",
|
FieldTrialParameter<bool> not_use_acked_rate_in_alr("NotUseAckedRateInAlr",
|
||||||
false);
|
false);
|
||||||
if (key_value_config) {
|
if (key_value_config) {
|
||||||
@ -457,7 +455,6 @@ absl::optional<LossBasedBweV2::Config> LossBasedBweV2::CreateConfig(
|
|||||||
&high_loss_rate_threshold,
|
&high_loss_rate_threshold,
|
||||||
&bandwidth_cap_at_high_loss_rate,
|
&bandwidth_cap_at_high_loss_rate,
|
||||||
&slope_of_bwe_high_loss_func,
|
&slope_of_bwe_high_loss_func,
|
||||||
&bound_by_upper_link_capacity_when_loss_limited,
|
|
||||||
¬_use_acked_rate_in_alr},
|
¬_use_acked_rate_in_alr},
|
||||||
key_value_config->Lookup("WebRTC-Bwe-LossBasedBweV2"));
|
key_value_config->Lookup("WebRTC-Bwe-LossBasedBweV2"));
|
||||||
}
|
}
|
||||||
@ -520,8 +517,6 @@ absl::optional<LossBasedBweV2::Config> LossBasedBweV2::CreateConfig(
|
|||||||
config->slope_of_bwe_high_loss_func = slope_of_bwe_high_loss_func.Get();
|
config->slope_of_bwe_high_loss_func = slope_of_bwe_high_loss_func.Get();
|
||||||
config->probe_integration_enabled = probe_integration_enabled.Get();
|
config->probe_integration_enabled = probe_integration_enabled.Get();
|
||||||
config->probe_expiration = probe_expiration.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();
|
config->not_use_acked_rate_in_alr = not_use_acked_rate_in_alr.Get();
|
||||||
|
|
||||||
return config;
|
return config;
|
||||||
@ -965,12 +960,6 @@ void LossBasedBweV2::CalculateInstantUpperBound() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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;
|
cached_instant_upper_bound_ = instant_limit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -114,7 +114,6 @@ class LossBasedBweV2 {
|
|||||||
double slope_of_bwe_high_loss_func = 1000.0;
|
double slope_of_bwe_high_loss_func = 1000.0;
|
||||||
bool probe_integration_enabled = false;
|
bool probe_integration_enabled = false;
|
||||||
TimeDelta probe_expiration = TimeDelta::Zero();
|
TimeDelta probe_expiration = TimeDelta::Zero();
|
||||||
bool bound_by_upper_link_capacity_when_loss_limited = false;
|
|
||||||
bool not_use_acked_rate_in_alr = false;
|
bool not_use_acked_rate_in_alr = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -1261,132 +1261,6 @@ TEST_P(LossBasedBweV2Test, NotLimitByProbeResultWhenProbeResultIsExpired) {
|
|||||||
EXPECT_GT(result_after_recovery.bandwidth_estimate, probe_estimate);
|
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,
|
TEST_P(LossBasedBweV2Test,
|
||||||
StricterBoundUsingHighLossRateThresholdAt10pLossRate) {
|
StricterBoundUsingHighLossRateThresholdAt10pLossRate) {
|
||||||
ExplicitKeyValueConfig key_value_config(
|
ExplicitKeyValueConfig key_value_config(
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user