Avoid fraction_loss overflowing when packet loss is negative in send_side_bandwidth_estimation.cc.
Update an affected unit test by the change in goog_cc. Bug: webrtc:14272 Change-Id: I83e97530c861b126bed876d57f6d4f91aa45de7e Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/269002 Reviewed-by: Jakob Ivarsson <jakobi@webrtc.org> Reviewed-by: Philip Eliasson <philipel@webrtc.org> Commit-Queue: Diep Bui <diepbp@webrtc.org> Cr-Commit-Position: refs/heads/main@{#37587}
This commit is contained in:
parent
dc5cf31cad
commit
9804aa5f6a
@ -677,7 +677,7 @@ TEST(GoogCcScenario, LossBasedRecoversFasterAfterCrossInducedLoss) {
|
||||
AverageBitrateAfterCrossInducedLoss("googcc_unit/cross_loss_based");
|
||||
|
||||
EXPECT_GE(average_bitrate_with_loss_based,
|
||||
average_bitrate_without_loss_based * 1.1);
|
||||
average_bitrate_without_loss_based * 1.05);
|
||||
}
|
||||
|
||||
TEST(GoogCcScenario, LossBasedEstimatorCapsRateAtModerateLoss) {
|
||||
|
||||
@ -391,8 +391,10 @@ void SendSideBandwidthEstimation::UpdatePacketsLost(int64_t packets_lost,
|
||||
}
|
||||
|
||||
has_decreased_since_last_fraction_loss_ = false;
|
||||
int64_t lost_q8 = (lost_packets_since_last_loss_update_ + packets_lost)
|
||||
<< 8;
|
||||
int64_t lost_q8 =
|
||||
std::max<int64_t>(lost_packets_since_last_loss_update_ + packets_lost,
|
||||
0)
|
||||
<< 8;
|
||||
last_fraction_loss_ = std::min<int>(lost_q8 / expected, 255);
|
||||
|
||||
// Reset accumulators.
|
||||
@ -401,6 +403,7 @@ void SendSideBandwidthEstimation::UpdatePacketsLost(int64_t packets_lost,
|
||||
last_loss_packet_report_ = at_time;
|
||||
UpdateEstimate(at_time);
|
||||
}
|
||||
|
||||
UpdateUmaStatsPacketsLost(at_time, packets_lost);
|
||||
}
|
||||
|
||||
|
||||
@ -180,4 +180,27 @@ TEST(RttBasedBackoff, CanBeDisabled) {
|
||||
EXPECT_TRUE(rtt_backoff.rtt_limit_.IsPlusInfinity());
|
||||
}
|
||||
|
||||
TEST(SendSideBweTest, FractionLossIsNotOverflowed) {
|
||||
MockRtcEventLog event_log;
|
||||
test::ExplicitKeyValueConfig key_value_config("");
|
||||
SendSideBandwidthEstimation bwe(&key_value_config, &event_log);
|
||||
static const int kMinBitrateBps = 100000;
|
||||
static const int kInitialBitrateBps = 1000000;
|
||||
int64_t now_ms = 1000;
|
||||
bwe.SetMinMaxBitrate(DataRate::BitsPerSec(kMinBitrateBps),
|
||||
DataRate::BitsPerSec(1500000));
|
||||
bwe.SetSendBitrate(DataRate::BitsPerSec(kInitialBitrateBps),
|
||||
Timestamp::Millis(now_ms));
|
||||
|
||||
now_ms += 10000;
|
||||
|
||||
EXPECT_EQ(kInitialBitrateBps, bwe.target_rate().bps());
|
||||
EXPECT_EQ(0, bwe.fraction_loss());
|
||||
|
||||
// Signal negative loss.
|
||||
bwe.UpdatePacketsLost(/*packets_lost=*/-1, /*number_of_packets=*/100,
|
||||
Timestamp::Millis(now_ms));
|
||||
EXPECT_EQ(0, bwe.fraction_loss());
|
||||
}
|
||||
|
||||
} // namespace webrtc
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user