| Index: webrtc/modules/bitrate_controller/send_side_bandwidth_estimation_unittest.cc
|
| 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 75384ae28408149a3d0242ea0a191aebb42f61f8..0424d22bd683a40cb4ccff6dbd222f032a359891 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
|
|
|