aboutsummaryrefslogtreecommitdiff
path: root/webrtc/modules/bitrate_controller/send_side_bandwidth_estimation_unittest.cc
diff options
context:
space:
mode:
authorpbos <pbos@webrtc.org>2015-10-22 08:52:20 -0700
committerCommit bot <commit-bot@chromium.org>2015-10-22 15:52:28 +0000
commitb7edb88ae2bb65b3b7ce3be31dd708470baa3575 (patch)
tree5e13ad78b23164f14d102b22e1b79d9af0236a0a /webrtc/modules/bitrate_controller/send_side_bandwidth_estimation_unittest.cc
parent4a859fdce53224a0a1e32e519165433a2471fba8 (diff)
downloadwebrtc-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.cc51
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