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

Unified Diff: webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc

Issue 2061423003: Refactor NACK bitrate allocation (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Fixed data race Created 4 years, 6 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/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();
}

Powered by Google App Engine
This is Rietveld 408576698