From 38778b046f058565bd4bae266f79c46cde806aa1 Mon Sep 17 00:00:00 2001 From: sprang Date: Tue, 29 Sep 2015 09:48:22 -0700 Subject: [PATCH] Add unit test for nack bandwidth constraint. BUG= Review URL: https://codereview.webrtc.org/1341743002 Cr-Commit-Position: refs/heads/master@{#10111} --- .../rtp_rtcp/source/rtp_sender_unittest.cc | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc b/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc index edcb84d90f..0403ce8a44 100644 --- a/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc +++ b/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc @@ -1348,6 +1348,35 @@ TEST_F(RtpSenderTest, BytesReportedCorrectly) { rtx_stats.transmitted.TotalBytes()); } +TEST_F(RtpSenderTest, RespectsNackBitrateLimit) { + const int32_t kPacketSize = 1400; + const int32_t kNumPackets = 30; + + rtp_sender_->SetStorePacketsStatus(true, kNumPackets); + // Set bitrate (in kbps) to fit kNumPackets รก kPacketSize bytes in one second. + rtp_sender_->SetTargetBitrate(kNumPackets * kPacketSize * 8); + const uint16_t kStartSequenceNumber = rtp_sender_->SequenceNumber(); + std::list sequence_numbers; + for (int32_t i = 0; i < kNumPackets; ++i) { + sequence_numbers.push_back(kStartSequenceNumber + i); + fake_clock_.AdvanceTimeMilliseconds(1); + SendPacket(fake_clock_.TimeInMilliseconds(), kPacketSize); + } + EXPECT_EQ(kNumPackets, transport_.packets_sent_); + + fake_clock_.AdvanceTimeMilliseconds(1000 - kNumPackets); + + // Resending should work - brings the bandwidth up to the limit. + // NACK bitrate is capped to the same bitrate as the encoder, since the max + // protection overhead is 50% (see MediaOptimization::SetTargetRates). + rtp_sender_->OnReceivedNACK(sequence_numbers, 0); + EXPECT_EQ(kNumPackets * 2, transport_.packets_sent_); + + // Resending should not work, bandwidth exceeded. + rtp_sender_->OnReceivedNACK(sequence_numbers, 0); + EXPECT_EQ(kNumPackets * 2, transport_.packets_sent_); +} + // Verify that all packets of a frame have CVO byte set. TEST_F(RtpSenderVideoTest, SendVideoWithCVO) { RTPVideoHeader hdr = {0};