Index: media/cast/transport/pacing/paced_sender_unittest.cc |
diff --git a/media/cast/transport/pacing/paced_sender_unittest.cc b/media/cast/transport/pacing/paced_sender_unittest.cc |
index e26032fa243e0f0b917ad3ee3921f4e73ce85825..8c078897d8bf28ac3b7dcfeb6f50aa85a5acd33b 100644 |
--- a/media/cast/transport/pacing/paced_sender_unittest.cc |
+++ b/media/cast/transport/pacing/paced_sender_unittest.cc |
@@ -72,12 +72,21 @@ class PacedSenderTest : public ::testing::Test { |
NOTREACHED(); |
} |
- PacketList CreatePacketList(size_t packet_size, |
- int num_of_packets_in_frame, |
- bool audio) { |
+ SendPacketVector CreateSendPacketVector(size_t packet_size, |
+ int num_of_packets_in_frame, |
+ bool audio) { |
DCHECK_GE(packet_size, 12u); |
- PacketList packets; |
+ SendPacketVector packets; |
+ base::TimeTicks frame_tick = testing_clock_.NowTicks(); |
+ // Advance the clock so that we don't get the same frame_tick |
+ // next time this function is called. |
+ testing_clock_.Advance(base::TimeDelta::FromMilliseconds(1)); |
for (int i = 0; i < num_of_packets_in_frame; ++i) { |
+ PacketKey key = PacedPacketSender::MakePacketKey( |
+ frame_tick, |
+ audio ? kAudioSsrc : kVideoSsrc, // ssrc |
+ i); |
+ |
PacketRef packet(new base::RefCountedData<Packet>); |
packet->data.resize(packet_size, kValue); |
// Write ssrc to packet so that it can be recognized as a |
@@ -86,7 +95,7 @@ class PacedSenderTest : public ::testing::Test { |
reinterpret_cast<char*>(&packet->data[8]), 4); |
bool success = writer.WriteU32(audio ? kAudioSsrc : kVideoSsrc); |
DCHECK(success); |
- packets.push_back(packet); |
+ packets.push_back(std::make_pair(key, packet)); |
} |
return packets; |
} |
@@ -117,7 +126,7 @@ class PacedSenderTest : public ::testing::Test { |
TEST_F(PacedSenderTest, PassThroughRtcp) { |
mock_transport_.AddExpectedSize(kSize1, 2); |
- PacketList packets = CreatePacketList(kSize1, 1, true); |
+ SendPacketVector packets = CreateSendPacketVector(kSize1, 1, true); |
EXPECT_TRUE(paced_sender_->SendPackets(packets)); |
EXPECT_TRUE(paced_sender_->ResendPackets(packets)); |
@@ -125,12 +134,15 @@ TEST_F(PacedSenderTest, PassThroughRtcp) { |
mock_transport_.AddExpectedSize(kSize2, 1); |
Packet tmp(kSize2, kValue); |
EXPECT_TRUE(paced_sender_->SendRtcpPacket( |
+ 1, |
new base::RefCountedData<Packet>(tmp))); |
} |
TEST_F(PacedSenderTest, BasicPace) { |
int num_of_packets = 27; |
- PacketList packets = CreatePacketList(kSize1, num_of_packets, false); |
+ SendPacketVector packets = CreateSendPacketVector(kSize1, |
+ num_of_packets, |
+ false); |
mock_transport_.AddExpectedSize(kSize1, 10); |
EXPECT_TRUE(paced_sender_->SendPackets(packets)); |
@@ -176,14 +188,14 @@ TEST_F(PacedSenderTest, PaceWithNack) { |
int num_of_packets_in_frame = 12; |
int num_of_packets_in_nack = 12; |
- PacketList first_frame_packets = |
- CreatePacketList(kSize1, num_of_packets_in_frame, false); |
+ SendPacketVector nack_packets = |
+ CreateSendPacketVector(kNackSize, num_of_packets_in_nack, false); |
- PacketList second_frame_packets = |
- CreatePacketList(kSize2, num_of_packets_in_frame, true); |
+ SendPacketVector first_frame_packets = |
+ CreateSendPacketVector(kSize1, num_of_packets_in_frame, false); |
- PacketList nack_packets = |
- CreatePacketList(kNackSize, num_of_packets_in_nack, false); |
+ SendPacketVector second_frame_packets = |
+ CreateSendPacketVector(kSize2, num_of_packets_in_frame, true); |
// Check that the first burst of the frame go out on the wire. |
mock_transport_.AddExpectedSize(kSize1, 10); |
@@ -207,7 +219,8 @@ TEST_F(PacedSenderTest, PaceWithNack) { |
task_runner_->RunTasks(); |
// End of NACK plus two packets from the oldest frame. |
- mock_transport_.AddExpectedSize(kNackSize, 4); |
+ // Note that two of the NACKs have been de-duped. |
+ mock_transport_.AddExpectedSize(kNackSize, 2); |
mock_transport_.AddExpectedSize(kSize1, 2); |
testing_clock_.Advance(timeout); |
task_runner_->RunTasks(); |
@@ -229,10 +242,11 @@ TEST_F(PacedSenderTest, PaceWithNack) { |
subscriber_.GetPacketEventsAndReset(&packet_events); |
int expected_video_network_event_count = num_of_packets_in_frame; |
int expected_video_retransmitted_event_count = 2 * num_of_packets_in_nack; |
+ expected_video_retransmitted_event_count -= 2; // 2 packets deduped |
int expected_audio_network_event_count = num_of_packets_in_frame; |
EXPECT_EQ(expected_video_network_event_count + |
- expected_video_retransmitted_event_count + |
- expected_audio_network_event_count, |
+ expected_video_retransmitted_event_count + |
+ expected_audio_network_event_count, |
static_cast<int>(packet_events.size())); |
int audio_network_event_count = 0; |
int video_network_event_count = 0; |
@@ -260,17 +274,17 @@ TEST_F(PacedSenderTest, PaceWith60fps) { |
// frames just as we sent the first packets in a frame. |
int num_of_packets_in_frame = 17; |
- PacketList first_frame_packets = |
- CreatePacketList(kSize1, num_of_packets_in_frame, false); |
+ SendPacketVector first_frame_packets = |
+ CreateSendPacketVector(kSize1, num_of_packets_in_frame, false); |
- PacketList second_frame_packets = |
- CreatePacketList(kSize2, num_of_packets_in_frame, false); |
+ SendPacketVector second_frame_packets = |
+ CreateSendPacketVector(kSize2, num_of_packets_in_frame, false); |
- PacketList third_frame_packets = |
- CreatePacketList(kSize3, num_of_packets_in_frame, false); |
+ SendPacketVector third_frame_packets = |
+ CreateSendPacketVector(kSize3, num_of_packets_in_frame, false); |
- PacketList fourth_frame_packets = |
- CreatePacketList(kSize4, num_of_packets_in_frame, false); |
+ SendPacketVector fourth_frame_packets = |
+ CreateSendPacketVector(kSize4, num_of_packets_in_frame, false); |
base::TimeDelta timeout_10ms = base::TimeDelta::FromMilliseconds(10); |