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

Unified Diff: webrtc/modules/pacing/packet_router_unittest.cc

Issue 2789843002: Delete VieRemb class, move functionality to PacketRouter. (Closed)
Patch Set: Delete obsolete suppression for PacketRouterTest.SendTransportFeedback. 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/pacing/packet_router_unittest.cc
diff --git a/webrtc/modules/pacing/packet_router_unittest.cc b/webrtc/modules/pacing/packet_router_unittest.cc
index be28bf1dbe65bb705036d96a25a5eb6a7058832b..28fea1ddc4b9ffb3a4c2ed23ddb40755a47c254f 100644
--- a/webrtc/modules/pacing/packet_router_unittest.cc
+++ b/webrtc/modules/pacing/packet_router_unittest.cc
@@ -12,6 +12,7 @@
#include <memory>
#include "webrtc/base/checks.h"
+#include "webrtc/base/fakeclock.h"
#include "webrtc/modules/pacing/packet_router.h"
#include "webrtc/modules/rtp_rtcp/include/rtp_rtcp.h"
#include "webrtc/modules/rtp_rtcp/mocks/mock_rtp_rtcp.h"
@@ -242,18 +243,237 @@ TEST_F(PacketRouterTest, AllocateSequenceNumbers) {
}
}
-TEST_F(PacketRouterTest, SendFeedback) {
+TEST_F(PacketRouterTest, SendTransportFeedback) {
MockRtpRtcp rtp_1;
MockRtpRtcp rtp_2;
packet_router_->AddSendRtpModule(&rtp_1);
packet_router_->AddReceiveRtpModule(&rtp_2);
rtcp::TransportFeedback feedback;
- EXPECT_CALL(rtp_1, SendFeedbackPacket(_)).Times(1);
- packet_router_->SendFeedback(&feedback);
+ EXPECT_CALL(rtp_1, SendFeedbackPacket(_)).Times(1).WillOnce(Return(true));
+ packet_router_->SendTransportFeedback(&feedback);
packet_router_->RemoveSendRtpModule(&rtp_1);
- EXPECT_CALL(rtp_2, SendFeedbackPacket(_)).Times(1);
- packet_router_->SendFeedback(&feedback);
+ EXPECT_CALL(rtp_2, SendFeedbackPacket(_)).Times(1).WillOnce(Return(true));
+ packet_router_->SendTransportFeedback(&feedback);
packet_router_->RemoveReceiveRtpModule(&rtp_2);
}
+
+TEST(PacketRouterRembTest, PreferSendModuleOverReceiveModule) {
+ rtc::ScopedFakeClock clock;
+ MockRtpRtcp rtp_recv;
+ MockRtpRtcp rtp_send;
+ PacketRouter packet_router;
+
+ EXPECT_CALL(rtp_recv, SetREMBStatus(true)).Times(1);
+ packet_router.AddReceiveRtpModule(&rtp_recv);
+
+ const uint32_t bitrate_estimate = 456;
+ const std::vector<uint32_t> ssrcs = {1234};
+
+ ON_CALL(rtp_recv, REMB()).WillByDefault(Return(true));
+ packet_router.OnReceiveBitrateChanged(ssrcs, bitrate_estimate);
+
+ // Call OnReceiveBitrateChanged twice to get a first estimate.
+ clock.AdvanceTime(rtc::TimeDelta::FromMilliseconds(1000));
+ EXPECT_CALL(rtp_recv, SetREMBData(bitrate_estimate, ssrcs)).Times(1);
+ packet_router.OnReceiveBitrateChanged(ssrcs, bitrate_estimate);
+
+ // Add a send module, which should be preferred over the receive module.
+ EXPECT_CALL(rtp_recv, SetREMBStatus(false)).Times(1);
+ EXPECT_CALL(rtp_send, SetREMBStatus(true)).Times(1);
+ packet_router.AddSendRtpModule(&rtp_send);
+ ON_CALL(rtp_recv, REMB()).WillByDefault(Return(false));
+ ON_CALL(rtp_send, REMB()).WillByDefault(Return(true));
+
+ // Lower bitrate to send another REMB packet.
+ EXPECT_CALL(rtp_send, SetREMBData(bitrate_estimate - 100, ssrcs)).Times(1);
+ packet_router.OnReceiveBitrateChanged(ssrcs, bitrate_estimate - 100);
+
+ EXPECT_CALL(rtp_send, SetREMBStatus(false)).Times(1);
+ EXPECT_CALL(rtp_recv, SetREMBStatus(true)).Times(1);
+ packet_router.RemoveSendRtpModule(&rtp_send);
+ EXPECT_CALL(rtp_recv, SetREMBStatus(false)).Times(1);
+ packet_router.RemoveReceiveRtpModule(&rtp_recv);
+}
+
+TEST(PacketRouterRembTest, LowerEstimateToSendRemb) {
+ rtc::ScopedFakeClock clock;
+ MockRtpRtcp rtp;
+ PacketRouter packet_router;
+
+ EXPECT_CALL(rtp, SetREMBStatus(true)).Times(1);
+ packet_router.AddSendRtpModule(&rtp);
+
+ uint32_t bitrate_estimate = 456;
+ const std::vector<uint32_t> ssrcs = {1234};
+
+ ON_CALL(rtp, REMB()).WillByDefault(Return(true));
+ packet_router.OnReceiveBitrateChanged(ssrcs, bitrate_estimate);
+
+ // Call OnReceiveBitrateChanged twice to get a first estimate.
+ clock.AdvanceTime(rtc::TimeDelta::FromMilliseconds(1000));
+ EXPECT_CALL(rtp, SetREMBData(bitrate_estimate, ssrcs)).Times(1);
+ packet_router.OnReceiveBitrateChanged(ssrcs, bitrate_estimate);
+
+ // Lower the estimate with more than 3% to trigger a call to SetREMBData right
+ // away.
+ bitrate_estimate = bitrate_estimate - 100;
+ EXPECT_CALL(rtp, SetREMBData(bitrate_estimate, ssrcs)).Times(1);
+ packet_router.OnReceiveBitrateChanged(ssrcs, bitrate_estimate);
+
+ EXPECT_CALL(rtp, SetREMBStatus(false)).Times(1);
+ packet_router.RemoveSendRtpModule(&rtp);
+}
+
+TEST(PacketRouterRembTest, VerifyIncreasingAndDecreasing) {
+ rtc::ScopedFakeClock clock;
+ MockRtpRtcp rtp;
+ PacketRouter packet_router;
+ packet_router.AddSendRtpModule(&rtp);
+
+ uint32_t bitrate_estimate[] = {456, 789};
+ std::vector<uint32_t> ssrcs = {1234, 5678};
+
+ ON_CALL(rtp, REMB()).WillByDefault(Return(true));
+ packet_router.OnReceiveBitrateChanged(ssrcs, bitrate_estimate[0]);
+
+ // Call OnReceiveBitrateChanged twice to get a first estimate.
+ EXPECT_CALL(rtp, SetREMBData(bitrate_estimate[0], ssrcs)).Times(1);
+ clock.AdvanceTime(rtc::TimeDelta::FromMilliseconds(1000));
+ packet_router.OnReceiveBitrateChanged(ssrcs, bitrate_estimate[0]);
+
+ packet_router.OnReceiveBitrateChanged(ssrcs, bitrate_estimate[1] + 100);
+
+ // Lower the estimate to trigger a callback.
+ EXPECT_CALL(rtp, SetREMBData(bitrate_estimate[1], ssrcs)).Times(1);
+ packet_router.OnReceiveBitrateChanged(ssrcs, bitrate_estimate[1]);
+
+ packet_router.RemoveSendRtpModule(&rtp);
+}
+
+TEST(PacketRouterRembTest, NoRembForIncreasedBitrate) {
+ rtc::ScopedFakeClock clock;
+ MockRtpRtcp rtp;
+ PacketRouter packet_router;
+ packet_router.AddSendRtpModule(&rtp);
+
+ uint32_t bitrate_estimate = 456;
+ std::vector<uint32_t> ssrcs = {1234, 5678};
+
+ ON_CALL(rtp, REMB()).WillByDefault(Return(true));
+ packet_router.OnReceiveBitrateChanged(ssrcs, bitrate_estimate);
+
+ // Call OnReceiveBitrateChanged twice to get a first estimate.
+ EXPECT_CALL(rtp, SetREMBData(bitrate_estimate, ssrcs)).Times(1);
+ clock.AdvanceTime(rtc::TimeDelta::FromMilliseconds(1000));
+ packet_router.OnReceiveBitrateChanged(ssrcs, bitrate_estimate);
+
+ // Increased estimate shouldn't trigger a callback right away.
+ EXPECT_CALL(rtp, SetREMBData(_, _)).Times(0);
+ packet_router.OnReceiveBitrateChanged(ssrcs, bitrate_estimate + 1);
+
+ // Decreasing the estimate less than 3% shouldn't trigger a new callback.
+ EXPECT_CALL(rtp, SetREMBData(_, _)).Times(0);
+ int lower_estimate = bitrate_estimate * 98 / 100;
+ packet_router.OnReceiveBitrateChanged(ssrcs, lower_estimate);
+
+ packet_router.RemoveSendRtpModule(&rtp);
+}
+
+TEST(PacketRouterRembTest, ChangeSendRtpModule) {
+ rtc::ScopedFakeClock clock;
+ MockRtpRtcp rtp_send;
+ MockRtpRtcp rtp_recv;
+ PacketRouter packet_router;
+ packet_router.AddSendRtpModule(&rtp_send);
+ packet_router.AddReceiveRtpModule(&rtp_recv);
+
+ uint32_t bitrate_estimate = 456;
+ std::vector<uint32_t> ssrcs = {1234, 5678};
+
+ ON_CALL(rtp_send, REMB()).WillByDefault(Return(true));
+ packet_router.OnReceiveBitrateChanged(ssrcs, bitrate_estimate);
+
+ // Call OnReceiveBitrateChanged twice to get a first estimate.
+ clock.AdvanceTime(rtc::TimeDelta::FromMilliseconds(1000));
+ EXPECT_CALL(rtp_send, SetREMBData(bitrate_estimate, ssrcs)).Times(1);
+ packet_router.OnReceiveBitrateChanged(ssrcs, bitrate_estimate);
+
+ // Decrease estimate to trigger a REMB.
+ bitrate_estimate = bitrate_estimate - 100;
+ EXPECT_CALL(rtp_send, SetREMBData(bitrate_estimate, ssrcs)).Times(1);
+ packet_router.OnReceiveBitrateChanged(ssrcs, bitrate_estimate);
+
+ // Remove the sending module -> should get remb on the second module.
+ packet_router.RemoveSendRtpModule(&rtp_send);
+
+ ON_CALL(rtp_send, REMB()).WillByDefault(Return(false));
+ ON_CALL(rtp_recv, REMB()).WillByDefault(Return(true));
+
+ packet_router.OnReceiveBitrateChanged(ssrcs, bitrate_estimate);
+
+ bitrate_estimate = bitrate_estimate - 100;
+ EXPECT_CALL(rtp_recv, SetREMBData(bitrate_estimate, ssrcs)).Times(1);
+ packet_router.OnReceiveBitrateChanged(ssrcs, bitrate_estimate);
+
+ packet_router.RemoveReceiveRtpModule(&rtp_recv);
+}
+
+TEST(PacketRouterRembTest, OnlyOneRembForRepeatedOnReceiveBitrateChanged) {
+ rtc::ScopedFakeClock clock;
+ MockRtpRtcp rtp;
+ PacketRouter packet_router;
+ packet_router.AddSendRtpModule(&rtp);
+
+ uint32_t bitrate_estimate = 456;
+ const std::vector<uint32_t> ssrcs = {1234};
+
+ ON_CALL(rtp, REMB()).WillByDefault(Return(true));
+ packet_router.OnReceiveBitrateChanged(ssrcs, bitrate_estimate);
+
+ // Call OnReceiveBitrateChanged twice to get a first estimate.
+ clock.AdvanceTime(rtc::TimeDelta::FromMilliseconds(1000));
+ EXPECT_CALL(rtp, SetREMBData(_, _)).Times(1);
+ packet_router.OnReceiveBitrateChanged(ssrcs, bitrate_estimate);
+
+ // Lower the estimate, should trigger a call to SetREMBData right away.
+ bitrate_estimate = bitrate_estimate - 100;
+ EXPECT_CALL(rtp, SetREMBData(bitrate_estimate, ssrcs)).Times(1);
+ packet_router.OnReceiveBitrateChanged(ssrcs, bitrate_estimate);
+
+ // Call OnReceiveBitrateChanged again, this should not trigger a new callback.
+ EXPECT_CALL(rtp, SetREMBData(_, _)).Times(0);
+ packet_router.OnReceiveBitrateChanged(ssrcs, bitrate_estimate);
+ packet_router.RemoveSendRtpModule(&rtp);
+}
+
+// Only register receiving modules and make sure we fallback to trigger a REMB
+// packet on this one.
+TEST(PacketRouterRembTest, NoSendingRtpModule) {
+ rtc::ScopedFakeClock clock;
+ MockRtpRtcp rtp;
+ PacketRouter packet_router;
+
+ EXPECT_CALL(rtp, SetREMBStatus(true)).Times(1);
+ packet_router.AddReceiveRtpModule(&rtp);
+
+ uint32_t bitrate_estimate = 456;
+ const std::vector<uint32_t> ssrcs = {1234};
+
+ ON_CALL(rtp, REMB()).WillByDefault(Return(true));
+ packet_router.OnReceiveBitrateChanged(ssrcs, bitrate_estimate);
+
+ // Call OnReceiveBitrateChanged twice to get a first estimate.
+ clock.AdvanceTime(rtc::TimeDelta::FromMilliseconds(1000));
+ EXPECT_CALL(rtp, SetREMBData(bitrate_estimate, ssrcs)).Times(1);
+ packet_router.OnReceiveBitrateChanged(ssrcs, bitrate_estimate);
+
+ // Lower the estimate to trigger a new packet REMB packet.
+ EXPECT_CALL(rtp, SetREMBData(bitrate_estimate - 100, ssrcs)).Times(1);
+ packet_router.OnReceiveBitrateChanged(ssrcs, bitrate_estimate - 100);
+
+ EXPECT_CALL(rtp, SetREMBStatus(false)).Times(1);
+ packet_router.RemoveReceiveRtpModule(&rtp);
+}
+
} // namespace webrtc
« no previous file with comments | « webrtc/modules/pacing/packet_router.cc ('k') | webrtc/modules/remote_bitrate_estimator/remote_estimator_proxy.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698