Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(355)

Unified Diff: webrtc/modules/remote_bitrate_estimator/aimd_rate_control_unittest.cc

Issue 2789233005: Move BWE period calculation from ProbingIntervalEstimator to AimdRateControl. (Closed)
Patch Set: Nit Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/modules/remote_bitrate_estimator/aimd_rate_control_unittest.cc
diff --git a/webrtc/modules/remote_bitrate_estimator/aimd_rate_control_unittest.cc b/webrtc/modules/remote_bitrate_estimator/aimd_rate_control_unittest.cc
index 68e6f51708eb9d3e188179bb6445395dd7548886..6376167cc11ac1c29ebd4e6aa3b43f5cf0a18167 100644
--- a/webrtc/modules/remote_bitrate_estimator/aimd_rate_control_unittest.cc
+++ b/webrtc/modules/remote_bitrate_estimator/aimd_rate_control_unittest.cc
@@ -18,6 +18,10 @@ namespace {
constexpr int64_t kClockInitialTime = 123456;
+constexpr int kMinBwePeriodMs = 2000;
+constexpr int kMaxBwePeriodMs = 50000;
+constexpr int kDefaultPeriodMs = 3000;
+
struct AimdRateControlStates {
std::unique_ptr<AimdRateControl> aimd_rate_control;
std::unique_ptr<SimulatedClock> simulated_clock;
@@ -66,21 +70,17 @@ TEST(AimdRateControlTest, NearMaxIncreaseRateIs5kbpsOn60kbpsAnd100msRtt) {
EXPECT_EQ(5000, states.aimd_rate_control->GetNearMaxIncreaseRateBps());
}
-TEST(AimdRateControlTest, UnknownBitrateDecreaseBeforeFirstOveruse) {
- auto states = CreateAimdRateControlStates();
- EXPECT_EQ(rtc::Optional<int>(),
- states.aimd_rate_control->GetLastBitrateDecreaseBps());
-}
-
TEST(AimdRateControlTest, GetLastBitrateDecrease) {
minyue-webrtc 2017/04/11 10:50:02 rename test
terelius 2017/04/19 07:36:01 Done.
auto states = CreateAimdRateControlStates();
constexpr int kBitrate = 300000;
states.aimd_rate_control->SetEstimate(
kBitrate, states.simulated_clock->TimeInMilliseconds());
- UpdateRateControl(states, kBwOverusing, kBitrate - 2000,
+ UpdateRateControl(states, kBwOverusing, kBitrate,
states.simulated_clock->TimeInMilliseconds());
- EXPECT_EQ(rtc::Optional<int>(46700),
- states.aimd_rate_control->GetLastBitrateDecreaseBps());
+ EXPECT_NEAR(14000, states.aimd_rate_control->GetNearMaxIncreaseRateBps(),
minyue-webrtc 2017/04/11 10:50:02 can we be stricter on this?
terelius 2017/04/19 07:36:01 Yes, we could enforce strict equality but that wou
minyue-webrtc 2017/04/19 07:49:05 Sure, if you think 1s a good margin.
+ 1000);
+ ASSERT_TRUE(states.aimd_rate_control->GetExpectedBandwidthPeriodMs());
minyue-webrtc 2017/04/11 10:50:02 what does 82 do?
terelius 2017/04/19 07:36:01 Left-over from previous version. Removed.
+ EXPECT_EQ(3000, states.aimd_rate_control->GetExpectedBandwidthPeriodMs());
}
TEST(AimdRateControlTest, BweLimitedByAckedBitrate) {
@@ -121,4 +121,57 @@ TEST(AimdRateControlTest, BweNotLimitedByDecreasingAckedBitrate) {
2000);
EXPECT_EQ(new_estimate, prev_estimate);
}
+
+TEST(AimdRateControlTest, DefaultPeriodUntilFirstOveruse) {
+ auto states = CreateAimdRateControlStates();
+ states.aimd_rate_control->SetStartBitrate(300000);
+ EXPECT_EQ(kDefaultPeriodMs,
+ states.aimd_rate_control->GetExpectedBandwidthPeriodMs());
+ states.simulated_clock->AdvanceTimeMilliseconds(100);
+ UpdateRateControl(states, kBwOverusing, 100000,
+ states.simulated_clock->TimeInMilliseconds());
+ EXPECT_NE(kDefaultPeriodMs,
+ states.aimd_rate_control->GetExpectedBandwidthPeriodMs());
+}
+
+TEST(AimdRateControlTest, ExpectedPeriodAfter20kbpsDrop5kbpsIncrease) {
minyue-webrtc 2017/04/11 10:50:02 Preferrably not hard code numerics in the name
terelius 2017/04/19 07:36:01 I'm following the convention used in the other tes
+ auto states = CreateAimdRateControlStates();
+ constexpr int kInitialBitrate = 110000;
+ states.aimd_rate_control->SetEstimate(
+ kInitialBitrate, states.simulated_clock->TimeInMilliseconds());
+ states.simulated_clock->AdvanceTimeMilliseconds(100);
+ // Make the bitrate drop to 20 kbps fo get to 90 kbps.
minyue-webrtc 2017/04/11 10:50:02 fo -> to
terelius 2017/04/19 07:36:01 Done.
+ // The rate increase at 90 kbps should be 5 kbps, so the period should be 4 s.
+ UpdateRateControl(states, kBwOverusing, (kInitialBitrate - 20000) / 0.85,
minyue-webrtc 2017/04/11 10:50:02 what is 0.85
terelius 2017/04/19 07:36:01 We back off to 85% of the measured bitrate after a
minyue-webrtc 2017/04/19 07:49:05 can we give a name to it and constexpr?
terelius 2017/04/19 15:15:04 Done.
+ states.simulated_clock->TimeInMilliseconds());
+ EXPECT_EQ(5000, states.aimd_rate_control->GetNearMaxIncreaseRateBps());
+ EXPECT_EQ(4000, states.aimd_rate_control->GetExpectedBandwidthPeriodMs());
+}
+
+TEST(AimdRateControlTest, BandwidthPeriodNotBelowMin) {
minyue-webrtc 2017/04/11 10:50:02 Not -> CanNot
terelius 2017/04/19 07:36:01 Done. (IsNot)
+ auto states = CreateAimdRateControlStates();
+ constexpr int kInitialBitrate = 10000;
+ states.aimd_rate_control->SetEstimate(
+ kInitialBitrate, states.simulated_clock->TimeInMilliseconds());
+ states.simulated_clock->AdvanceTimeMilliseconds(100);
+ // Make a small (1.5 kbps) bitrate drop to 8.5 kbps.
+ UpdateRateControl(states, kBwOverusing, kInitialBitrate - 1,
+ states.simulated_clock->TimeInMilliseconds());
+ EXPECT_EQ(kMinBwePeriodMs,
+ states.aimd_rate_control->GetExpectedBandwidthPeriodMs());
+}
+
+TEST(AimdRateControlTest, BandwidthPeriodNotAboveMax) {
minyue-webrtc 2017/04/11 10:50:02 Not -> CanNot
terelius 2017/04/19 07:36:01 Done. (IsNot)
+ auto states = CreateAimdRateControlStates();
+ constexpr int kInitialBitrate = 10010000;
+ states.aimd_rate_control->SetEstimate(
+ kInitialBitrate, states.simulated_clock->TimeInMilliseconds());
+ states.simulated_clock->AdvanceTimeMilliseconds(100);
+ // Make a large (10 Mbps) bitrate drop to 10 kbps.
+ UpdateRateControl(states, kBwOverusing, 10000 / 0.85,
+ states.simulated_clock->TimeInMilliseconds());
+ EXPECT_EQ(kMaxBwePeriodMs,
+ states.aimd_rate_control->GetExpectedBandwidthPeriodMs());
+}
+
} // namespace webrtc

Powered by Google App Engine
This is Rietveld 408576698