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

Unified Diff: webrtc/modules/congestion_controller/probe_controller_unittest.cc

Issue 2504023002: Implement periodic bandwidth probing in application-limited region. (Closed)
Patch Set: address feedback Created 4 years, 1 month 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
« no previous file with comments | « webrtc/modules/congestion_controller/probe_controller.cc ('k') | webrtc/modules/pacing/alr_detector.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/modules/congestion_controller/probe_controller_unittest.cc
diff --git a/webrtc/modules/congestion_controller/probe_controller_unittest.cc b/webrtc/modules/congestion_controller/probe_controller_unittest.cc
index 3842ded5a6909eb61caffdca2cce69a1f4f5d669..3c43cfebbbb89f2929c1c9c22c79ae2b4ad69c87 100644
--- a/webrtc/modules/congestion_controller/probe_controller_unittest.cc
+++ b/webrtc/modules/congestion_controller/probe_controller_unittest.cc
@@ -19,6 +19,7 @@
using testing::_;
using testing::AtLeast;
using testing::NiceMock;
+using testing::Return;
namespace webrtc {
namespace test {
@@ -31,11 +32,13 @@ constexpr int kMaxBitrateBps = 10000;
constexpr int kExponentialProbingTimeoutMs = 5000;
+constexpr int kAlrProbeInterval = 5000;
+
} // namespace
class ProbeControllerTest : public ::testing::Test {
protected:
- ProbeControllerTest() : clock_(0) {
+ ProbeControllerTest() : clock_(100000000L) {
probe_controller_.reset(new ProbeController(&pacer_, &clock_));
}
~ProbeControllerTest() override {}
@@ -79,8 +82,6 @@ TEST_F(ProbeControllerTest, TestExponentialProbing) {
probe_controller_->SetBitrates(kMinBitrateBps, kStartBitrateBps,
kMaxBitrateBps);
-
-
EXPECT_CALL(pacer_, CreateProbeCluster(2 * 1800, _));
probe_controller_->SetEstimatedBitrate(1800);
}
@@ -95,5 +96,59 @@ TEST_F(ProbeControllerTest, TestExponentialProbingTimeout) {
probe_controller_->SetEstimatedBitrate(1800);
}
+TEST_F(ProbeControllerTest, ProbeAfterEstimateDropInAlr) {
+ EXPECT_CALL(pacer_, CreateProbeCluster(_, _)).Times(2);
+ probe_controller_->SetBitrates(kMinBitrateBps, kStartBitrateBps,
+ kMaxBitrateBps);
+ probe_controller_->SetEstimatedBitrate(500);
+ testing::Mock::VerifyAndClearExpectations(&pacer_);
+
+ // When bandwidth estimate drops the controller should send a probe at the
+ // previous bitrate.
+ EXPECT_CALL(pacer_, CreateProbeCluster(500, _)).Times(1);
+ EXPECT_CALL(pacer_, GetApplicationLimitedRegionStartTime())
+ .WillRepeatedly(
+ Return(rtc::Optional<int64_t>(clock_.TimeInMilliseconds())));
+ clock_.AdvanceTimeMilliseconds(kAlrProbeInterval + 1);
+ probe_controller_->SetEstimatedBitrate(50);
+}
+
+TEST_F(ProbeControllerTest, PeriodicProbing) {
+ EXPECT_CALL(pacer_, CreateProbeCluster(_, _)).Times(2);
+ probe_controller_->EnablePeriodicAlrProbing(true);
+ probe_controller_->SetBitrates(kMinBitrateBps, kStartBitrateBps,
+ kMaxBitrateBps);
+ probe_controller_->SetEstimatedBitrate(500);
+ testing::Mock::VerifyAndClearExpectations(&pacer_);
+
+ int64_t start_time = clock_.TimeInMilliseconds();
+
+ // Expect the controller to send a new probe after 5s has passed.
+ EXPECT_CALL(pacer_, CreateProbeCluster(1000, _)).Times(1);
+ EXPECT_CALL(pacer_, GetApplicationLimitedRegionStartTime())
+ .WillRepeatedly(Return(rtc::Optional<int64_t>(start_time)));
+ clock_.AdvanceTimeMilliseconds(5000);
+ probe_controller_->Process();
+ probe_controller_->SetEstimatedBitrate(500);
+ testing::Mock::VerifyAndClearExpectations(&pacer_);
+
+ // The following probe should be sent at 10s into ALR.
+ EXPECT_CALL(pacer_, CreateProbeCluster(_, _)).Times(0);
+ EXPECT_CALL(pacer_, GetApplicationLimitedRegionStartTime())
+ .WillRepeatedly(Return(rtc::Optional<int64_t>(start_time)));
+ clock_.AdvanceTimeMilliseconds(4000);
+ probe_controller_->Process();
+ probe_controller_->SetEstimatedBitrate(500);
+ testing::Mock::VerifyAndClearExpectations(&pacer_);
+
+ EXPECT_CALL(pacer_, CreateProbeCluster(_, _)).Times(1);
+ EXPECT_CALL(pacer_, GetApplicationLimitedRegionStartTime())
+ .WillRepeatedly(Return(rtc::Optional<int64_t>(start_time)));
+ clock_.AdvanceTimeMilliseconds(1000);
+ probe_controller_->Process();
+ probe_controller_->SetEstimatedBitrate(500);
+ testing::Mock::VerifyAndClearExpectations(&pacer_);
+}
+
} // namespace test
} // namespace webrtc
« no previous file with comments | « webrtc/modules/congestion_controller/probe_controller.cc ('k') | webrtc/modules/pacing/alr_detector.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698