diff options
author | pbos <pbos@webrtc.org> | 2015-10-22 08:52:20 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-10-22 15:52:28 +0000 |
commit | b7edb88ae2bb65b3b7ce3be31dd708470baa3575 (patch) | |
tree | 5e13ad78b23164f14d102b22e1b79d9af0236a0a /webrtc/modules/bitrate_controller/send_side_bandwidth_estimation_unittest.cc | |
parent | 4a859fdce53224a0a1e32e519165433a2471fba8 (diff) | |
download | webrtc-b7edb88ae2bb65b3b7ce3be31dd708470baa3575.tar.gz |
Prevent BWE rampdowns without new loss reports.
Before this change, UpdateEstimate would repeatedly decrease bitrate
even though there's no fresh corresponding RTCP loss report, triggering
multiple reactions to a single indication of high packet loss.
BUG=webrtc:5101
R=stefan@webrtc.org
Review URL: https://codereview.webrtc.org/1417723005
Cr-Commit-Position: refs/heads/master@{#10374}
Diffstat (limited to 'webrtc/modules/bitrate_controller/send_side_bandwidth_estimation_unittest.cc')
-rw-r--r-- | webrtc/modules/bitrate_controller/send_side_bandwidth_estimation_unittest.cc | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/webrtc/modules/bitrate_controller/send_side_bandwidth_estimation_unittest.cc b/webrtc/modules/bitrate_controller/send_side_bandwidth_estimation_unittest.cc index 75384ae284..0424d22bd6 100644 --- a/webrtc/modules/bitrate_controller/send_side_bandwidth_estimation_unittest.cc +++ b/webrtc/modules/bitrate_controller/send_side_bandwidth_estimation_unittest.cc @@ -44,4 +44,55 @@ TEST(SendSideBweTest, InitialRembWithProbing) { bwe.CurrentEstimate(&bitrate, &fraction_loss, &rtt); EXPECT_EQ(kRembBps, bitrate); } + +TEST(SendSideBweTest, DoesntReapplyBitrateDecreaseWithoutFollowingRemb) { + SendSideBandwidthEstimation bwe; + static const int kMinBitrateBps = 100000; + static const int kInitialBitrateBps = 1000000; + bwe.SetMinMaxBitrate(kMinBitrateBps, 1500000); + bwe.SetSendBitrate(kInitialBitrateBps); + + static const uint8_t kFractionLoss = 128; + static const int64_t kRttMs = 50; + + int64_t now_ms = 0; + int bitrate_bps; + uint8_t fraction_loss; + int64_t rtt_ms; + bwe.CurrentEstimate(&bitrate_bps, &fraction_loss, &rtt_ms); + EXPECT_EQ(kInitialBitrateBps, bitrate_bps); + EXPECT_EQ(0, fraction_loss); + EXPECT_EQ(0, rtt_ms); + + // Signal heavy loss to go down in bitrate. + bwe.UpdateReceiverBlock(kFractionLoss, kRttMs, 100, now_ms); + // Trigger an update 2 seconds later to not be rate limited. + now_ms += 2000; + bwe.UpdateEstimate(now_ms); + + bwe.CurrentEstimate(&bitrate_bps, &fraction_loss, &rtt_ms); + EXPECT_LT(bitrate_bps, kInitialBitrateBps); + // Verify that the obtained bitrate isn't hitting the min bitrate, or this + // test doesn't make sense. If this ever happens, update the thresholds or + // loss rates so that it doesn't hit min bitrate after one bitrate update. + EXPECT_GT(bitrate_bps, kMinBitrateBps); + EXPECT_EQ(kFractionLoss, fraction_loss); + EXPECT_EQ(kRttMs, rtt_ms); + + // Triggering an update shouldn't apply further downgrade nor upgrade since + // there's no intermediate receiver block received indicating whether this is + // currently good or not. + int last_bitrate_bps = bitrate_bps; + // Trigger an update 2 seconds later to not be rate limited (but it still + // shouldn't update). + now_ms += 2000; + bwe.UpdateEstimate(now_ms); + bwe.CurrentEstimate(&bitrate_bps, &fraction_loss, &rtt_ms); + + EXPECT_EQ(last_bitrate_bps, bitrate_bps); + // The old loss rate should still be applied though. + EXPECT_EQ(kFractionLoss, fraction_loss); + EXPECT_EQ(kRttMs, rtt_ms); +} + } // namespace webrtc |