| 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();
|
| }
|
|
|