Index: webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc |
diff --git a/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc b/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc |
index f0b6411af2711ffc3d2d39c446774268e5ecebec..dd5f0e0b22761b4aea34dbbcfa33e342746b016d 100644 |
--- a/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc |
+++ b/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc |
@@ -114,6 +114,9 @@ class MockRtpPacketSender : public RtpPacketSender { |
int64_t capture_time_ms, |
size_t bytes, |
bool retransmission)); |
+ |
+ MOCK_METHOD1(AllocateRetransmissionBitrate, bool(size_t bytes)); |
+ MOCK_METHOD0(CurrentRetransmissionBitrate, int(void)); |
}; |
class MockTransportSequenceNumberAllocator |
@@ -811,6 +814,8 @@ TEST_F(RtpSenderTest, TrafficSmoothingRetransmits) { |
EXPECT_EQ(0, transport_.packets_sent_); |
+ EXPECT_CALL(mock_paced_sender_, AllocateRetransmissionBitrate(rtp_length)) |
+ .WillOnce(testing::Return(true)); |
EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority, |
_, kSeqNum, _, _, _)); |
@@ -1213,30 +1218,39 @@ TEST_F(RtpSenderTest, FrameCountCallbacks) { |
TEST_F(RtpSenderTest, BitrateCallbacks) { |
class TestCallback : public BitrateStatisticsObserver { |
public: |
- TestCallback() : BitrateStatisticsObserver(), num_calls_(0), ssrc_(0) {} |
+ TestCallback() |
+ : BitrateStatisticsObserver(), |
+ num_calls_(0), |
+ ssrc_(0), |
+ total_bitrate_(0), |
+ retransmit_bitrate_(0) {} |
virtual ~TestCallback() {} |
- void Notify(const BitrateStatistics& total_stats, |
- const BitrateStatistics& retransmit_stats, |
+ void Notify(uint32_t total_bitrate, |
+ uint32_t retransmit_bitrate, |
uint32_t ssrc) override { |
++num_calls_; |
ssrc_ = ssrc; |
- total_stats_ = total_stats; |
- retransmit_stats_ = retransmit_stats; |
+ total_bitrate_ = total_bitrate; |
+ retransmit_bitrate_ = retransmit_bitrate; |
} |
uint32_t num_calls_; |
uint32_t ssrc_; |
- BitrateStatistics total_stats_; |
- BitrateStatistics retransmit_stats_; |
+ uint32_t total_bitrate_; |
+ uint32_t retransmit_bitrate_; |
} callback; |
rtp_sender_.reset(new RTPSender(false, &fake_clock_, &transport_, nullptr, |
nullptr, nullptr, &callback, nullptr, nullptr, |
nullptr, nullptr)); |
- // Simulate kNumPackets sent with kPacketInterval ms intervals. |
- const uint32_t kNumPackets = 15; |
+ // Simulate kNumPackets sent with kPacketInterval ms intervals, with the |
+ // number of packets selected so that we fill (but don't overflow) the one |
+ // second averaging window. |
+ const uint32_t kWindowSizeMs = 1000; |
const uint32_t kPacketInterval = 20; |
+ const uint32_t kNumPackets = |
+ (kWindowSizeMs - kPacketInterval) / kPacketInterval; |
// Overhead = 12 bytes RTP header + 1 byte generic header. |
const uint32_t kPacketOverhead = 13; |
@@ -1250,7 +1264,6 @@ TEST_F(RtpSenderTest, BitrateCallbacks) { |
// Initial process call so we get a new time window. |
rtp_sender_->ProcessBitrate(); |
- uint64_t start_time = fake_clock_.CurrentNtpInMilliseconds(); |
// Send a few frames. |
for (uint32_t i = 0; i < kNumPackets; ++i) { |
@@ -1262,17 +1275,18 @@ TEST_F(RtpSenderTest, BitrateCallbacks) { |
rtp_sender_->ProcessBitrate(); |
- const uint32_t expected_packet_rate = 1000 / kPacketInterval; |
- |
// We get one call for every stats updated, thus two calls since both the |
// stream stats and the retransmit stats are updated once. |
EXPECT_EQ(2u, callback.num_calls_); |
EXPECT_EQ(ssrc, callback.ssrc_); |
- EXPECT_EQ(start_time + (kNumPackets * kPacketInterval), |
- callback.total_stats_.timestamp_ms); |
- EXPECT_EQ(expected_packet_rate, callback.total_stats_.packet_rate); |
- EXPECT_EQ((kPacketOverhead + sizeof(payload)) * 8 * expected_packet_rate, |
- callback.total_stats_.bitrate_bps); |
+ const uint32_t kTotalPacketSize = kPacketOverhead + sizeof(payload); |
+ // Bitrate measured over delta between last and first timestamp, plus one. |
+ const uint32_t kExpectedWindowMs = kNumPackets * kPacketInterval + 1; |
+ const uint32_t kExpectedBitsAccumulated = kTotalPacketSize * kNumPackets * 8; |
+ const uint32_t KexpectedRateBps = |
+ (kExpectedBitsAccumulated * 1000 + (kExpectedWindowMs / 2)) / |
+ kExpectedWindowMs; |
+ EXPECT_EQ(KexpectedRateBps, callback.total_bitrate_); |
rtp_sender_.reset(); |
} |