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

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

Issue 2491293002: Make FlexFEC packets paceable through RTPSender. (Closed)
Patch Set: Created 4 years, 1 month 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 d6796e788008971b6015f1e0a24759f4a3ea3dca..41d84b8303adee23f0dac7417ca9ee2c1e743f4c 100644
--- a/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc
+++ b/webrtc/modules/rtp_rtcp/source/rtp_sender_unittest.cc
@@ -495,9 +495,16 @@ TEST_F(RtpSenderTest, SendsPacketsWithTransportSequenceNumber) {
kRtpExtensionTransportSequenceNumber,
kTransportSequenceNumberExtensionId));
+ uint32_t ssrc = 0;
uint16_t seq_num = 0;
EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _))
- .Times(1).WillRepeatedly(testing::SaveArg<2>(&seq_num));
+ .Times(1)
+ .WillOnce(testing::Invoke([&ssrc, &seq_num](
+ RtpPacketSender::Priority arg0, uint32_t arg1, uint16_t arg2,
+ int64_t arg3, size_t arg4, bool arg5) {
+ ssrc = arg1;
+ seq_num = arg2;
+ }));
EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber())
.WillOnce(testing::Return(kTransportSequenceNumber));
EXPECT_CALL(send_packet_observer_,
@@ -511,7 +518,7 @@ TEST_F(RtpSenderTest, SendsPacketsWithTransportSequenceNumber) {
.Times(1);
SendGenericPayload();
- rtp_sender_->TimeToSendPacket(seq_num, fake_clock_.TimeInMilliseconds(),
+ rtp_sender_->TimeToSendPacket(ssrc, seq_num, fake_clock_.TimeInMilliseconds(),
false, kProbeClusterId);
const auto& packet = transport_.last_sent_packet();
@@ -522,8 +529,10 @@ TEST_F(RtpSenderTest, SendsPacketsWithTransportSequenceNumber) {
}
TEST_F(RtpSenderTest, TrafficSmoothingWithExtensions) {
+ uint32_t ssrc;
EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority,
- _, kSeqNum, _, _, _));
+ _, kSeqNum, _, _, _))
+ .WillOnce(testing::SaveArg<1>(&ssrc));
EXPECT_CALL(mock_rtc_event_log_,
LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _));
@@ -549,7 +558,7 @@ TEST_F(RtpSenderTest, TrafficSmoothingWithExtensions) {
const int kStoredTimeInMs = 100;
fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs);
- rtp_sender_->TimeToSendPacket(kSeqNum, capture_time_ms, false,
+ rtp_sender_->TimeToSendPacket(ssrc, kSeqNum, capture_time_ms, false,
PacketInfo::kNotAProbe);
// Process send bucket. Packet should now be sent.
@@ -567,8 +576,10 @@ TEST_F(RtpSenderTest, TrafficSmoothingWithExtensions) {
}
TEST_F(RtpSenderTest, TrafficSmoothingRetransmits) {
+ uint32_t ssrc;
EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority,
- _, kSeqNum, _, _, _));
+ _, kSeqNum, _, _, _))
+ .WillOnce(testing::SaveArg<1>(&ssrc));
EXPECT_CALL(mock_rtc_event_log_,
LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _));
@@ -600,7 +611,7 @@ TEST_F(RtpSenderTest, TrafficSmoothingRetransmits) {
EXPECT_EQ(static_cast<int>(packet_size), rtp_sender_->ReSendPacket(kSeqNum));
EXPECT_EQ(0, transport_.packets_sent());
- rtp_sender_->TimeToSendPacket(kSeqNum, capture_time_ms, false,
+ rtp_sender_->TimeToSendPacket(ssrc, kSeqNum, capture_time_ms, false,
PacketInfo::kNotAProbe);
// Process send bucket. Packet should now be sent.
@@ -620,9 +631,11 @@ TEST_F(RtpSenderTest, TrafficSmoothingRetransmits) {
// This test sends 1 regular video packet, then 4 padding packets, and then
// 1 more regular packet.
TEST_F(RtpSenderTest, SendPadding) {
+ uint32_t ssrc;
// Make all (non-padding) packets go to send queue.
EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kNormalPriority,
- _, kSeqNum, _, _, _));
+ _, kSeqNum, _, _, _))
+ .WillOnce(testing::SaveArg<1>(&ssrc));
EXPECT_CALL(mock_rtc_event_log_,
LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _))
.Times(1 + 4 + 1);
@@ -659,7 +672,7 @@ TEST_F(RtpSenderTest, SendPadding) {
const int kStoredTimeInMs = 100;
fake_clock_.AdvanceTimeMilliseconds(kStoredTimeInMs);
- rtp_sender_->TimeToSendPacket(seq_num++, capture_time_ms, false,
+ rtp_sender_->TimeToSendPacket(ssrc, seq_num++, capture_time_ms, false,
PacketInfo::kNotAProbe);
// Packet should now be sent. This test doesn't verify the regular video
// packet, since it is tested in another test.
@@ -710,7 +723,7 @@ TEST_F(RtpSenderTest, SendPadding) {
kAllowRetransmission,
RtpPacketSender::kNormalPriority));
- rtp_sender_->TimeToSendPacket(seq_num, capture_time_ms, false,
+ rtp_sender_->TimeToSendPacket(ssrc, seq_num, capture_time_ms, false,
PacketInfo::kNotAProbe);
// Process send bucket.
EXPECT_EQ(++total_packets_sent, transport_.packets_sent());
@@ -738,11 +751,14 @@ TEST_F(RtpSenderTest, OnSendPacketUpdated) {
.Times(1);
EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber())
.WillOnce(testing::Return(kTransportSequenceNumber));
- EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)).Times(1);
+ uint32_t ssrc;
+ EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _))
+ .Times(1)
+ .WillOnce(testing::SaveArg<1>(&ssrc));
SendGenericPayload(); // Packet passed to pacer.
const bool kIsRetransmit = false;
- rtp_sender_->TimeToSendPacket(kSeqNum, fake_clock_.TimeInMilliseconds(),
+ rtp_sender_->TimeToSendPacket(ssrc, kSeqNum, fake_clock_.TimeInMilliseconds(),
kIsRetransmit, PacketInfo::kNotAProbe);
EXPECT_EQ(1, transport_.packets_sent());
}
@@ -756,11 +772,14 @@ TEST_F(RtpSenderTest, OnSendPacketNotUpdatedForRetransmits) {
EXPECT_CALL(send_packet_observer_, OnSendPacket(_, _, _)).Times(0);
EXPECT_CALL(seq_num_allocator_, AllocateSequenceNumber())
.WillOnce(testing::Return(kTransportSequenceNumber));
- EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)).Times(1);
+ uint32_t ssrc;
+ EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _))
+ .Times(1)
+ .WillOnce(testing::SaveArg<1>(&ssrc));
SendGenericPayload(); // Packet passed to pacer.
const bool kIsRetransmit = true;
- rtp_sender_->TimeToSendPacket(kSeqNum, fake_clock_.TimeInMilliseconds(),
+ rtp_sender_->TimeToSendPacket(ssrc, kSeqNum, fake_clock_.TimeInMilliseconds(),
kIsRetransmit, PacketInfo::kNotAProbe);
EXPECT_EQ(1, transport_.packets_sent());
}
@@ -777,11 +796,14 @@ TEST_F(RtpSenderTest, OnSendPacketNotUpdatedWithoutSeqNumAllocator) {
rtp_sender_->SetStorePacketsStatus(true, 10);
EXPECT_CALL(send_packet_observer_, OnSendPacket(_, _, _)).Times(0);
- EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _)).Times(1);
+ uint32_t ssrc;
+ EXPECT_CALL(mock_paced_sender_, InsertPacket(_, _, _, _, _, _))
+ .Times(1)
+ .WillOnce(testing::SaveArg<1>(&ssrc));
SendGenericPayload(); // Packet passed to pacer.
const bool kIsRetransmit = false;
- rtp_sender_->TimeToSendPacket(kSeqNum, fake_clock_.TimeInMilliseconds(),
+ rtp_sender_->TimeToSendPacket(ssrc, kSeqNum, fake_clock_.TimeInMilliseconds(),
kIsRetransmit, PacketInfo::kNotAProbe);
EXPECT_EQ(1, transport_.packets_sent());
}
@@ -812,9 +834,11 @@ TEST_F(RtpSenderTest, SendRedundantPayloads) {
const size_t kPayloadSizes[kNumPayloadSizes] = {500, 550, 600, 650, 700,
750, 800, 850, 900, 950};
// Expect all packets go through the pacer.
+ uint32_t ssrc;
EXPECT_CALL(mock_paced_sender_,
InsertPacket(RtpPacketSender::kNormalPriority, _, _, _, _, _))
- .Times(kNumPayloadSizes);
+ .Times(kNumPayloadSizes)
+ .WillOnce(testing::SaveArg<1>(&ssrc));
EXPECT_CALL(mock_rtc_event_log_,
LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _))
.Times(kNumPayloadSizes);
@@ -824,7 +848,7 @@ TEST_F(RtpSenderTest, SendRedundantPayloads) {
int64_t capture_time_ms = fake_clock_.TimeInMilliseconds();
EXPECT_CALL(transport, SendRtp(_, _, _)).WillOnce(testing::Return(true));
SendPacket(capture_time_ms, kPayloadSizes[i]);
- rtp_sender_->TimeToSendPacket(seq_num++, capture_time_ms, false,
+ rtp_sender_->TimeToSendPacket(ssrc, seq_num++, capture_time_ms, false,
PacketInfo::kNotAProbe);
fake_clock_.AdvanceTimeMilliseconds(33);
}
@@ -926,25 +950,31 @@ TEST_F(RtpSenderTest, SendFlexfecPackets) {
params.fec_mask_type = kFecMaskRandom;
rtp_sender_->SetFecParameters(params, params);
- uint16_t media_seq_num;
- EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kLowPriority,
- kMediaSsrc, _, _, _, false))
- .WillOnce(testing::SaveArg<2>(&media_seq_num));
+ EXPECT_CALL(mock_paced_sender_,
+ InsertPacket(RtpPacketSender::kLowPriority, kMediaSsrc, kSeqNum,
+ _, _, false));
+ uint16_t flexfec_seq_num;
EXPECT_CALL(mock_paced_sender_, InsertPacket(RtpPacketSender::kLowPriority,
- kFlexfecSsrc, _, _, _, false));
+ kFlexfecSsrc, _, _, _, false))
+ .WillOnce(testing::SaveArg<2>(&flexfec_seq_num));
SendGenericPayload();
- // TODO(brandtr): Make these tests stricter when the FlexFEC packets are no
- // longer lost between PacedSender and RTPSender.
EXPECT_CALL(mock_rtc_event_log_,
LogRtpHeader(PacketDirection::kOutgoingPacket, _, _, _))
- .Times(testing::AtLeast(1));
+ .Times(2);
EXPECT_TRUE(rtp_sender_->TimeToSendPacket(
- media_seq_num, fake_clock_.TimeInMilliseconds(), false, 0));
- EXPECT_LE(1, transport_.packets_sent());
+ kMediaSsrc, kSeqNum, fake_clock_.TimeInMilliseconds(), false, 0));
+ EXPECT_TRUE(rtp_sender_->TimeToSendPacket(kFlexfecSsrc, flexfec_seq_num,
+ fake_clock_.TimeInMilliseconds(),
+ false, 0));
+ EXPECT_EQ(2, transport_.packets_sent());
const RtpPacketReceived& media_packet = transport_.sent_packets_[0];
EXPECT_EQ(kMediaPayloadType, media_packet.PayloadType());
- EXPECT_EQ(media_seq_num, media_packet.SequenceNumber());
+ EXPECT_EQ(kSeqNum, media_packet.SequenceNumber());
EXPECT_EQ(kMediaSsrc, media_packet.Ssrc());
+ const RtpPacketReceived& flexfec_packet = transport_.sent_packets_[1];
+ EXPECT_EQ(kFlexfecPayloadType, flexfec_packet.PayloadType());
+ EXPECT_EQ(flexfec_seq_num, flexfec_packet.SequenceNumber());
+ EXPECT_EQ(kFlexfecSsrc, flexfec_packet.Ssrc());
}
TEST_F(RtpSenderTestWithoutPacer, SendFlexfecPackets) {

Powered by Google App Engine
This is Rietveld 408576698