| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/quic/quic_sent_packet_manager.h" | 5 #include "net/quic/quic_sent_packet_manager.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 | 8 |
| 9 #include "base/stl_util.h" | 9 #include "base/stl_util.h" |
| 10 #include "net/quic/quic_flags.h" | 10 #include "net/quic/quic_flags.h" |
| (...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 206 PendingRetransmission next_retransmission = | 206 PendingRetransmission next_retransmission = |
| 207 manager_.NextPendingRetransmission(); | 207 manager_.NextPendingRetransmission(); |
| 208 EXPECT_EQ(old_packet_number, next_retransmission.packet_number); | 208 EXPECT_EQ(old_packet_number, next_retransmission.packet_number); |
| 209 EXPECT_EQ(transmission_type, next_retransmission.transmission_type); | 209 EXPECT_EQ(transmission_type, next_retransmission.transmission_type); |
| 210 | 210 |
| 211 EXPECT_CALL(*send_algorithm_, | 211 EXPECT_CALL(*send_algorithm_, |
| 212 OnPacketSent(_, BytesInFlight(), new_packet_number, | 212 OnPacketSent(_, BytesInFlight(), new_packet_number, |
| 213 kDefaultLength, HAS_RETRANSMITTABLE_DATA)) | 213 kDefaultLength, HAS_RETRANSMITTABLE_DATA)) |
| 214 .WillOnce(Return(true)); | 214 .WillOnce(Return(true)); |
| 215 SerializedPacket packet(CreatePacket(new_packet_number, false)); | 215 SerializedPacket packet(CreatePacket(new_packet_number, false)); |
| 216 manager_.OnPacketSent(&packet, old_packet_number, clock_.Now(), | 216 manager_.OnPacketSent(&packet, packet.path_id, old_packet_number, |
| 217 transmission_type, HAS_RETRANSMITTABLE_DATA); | 217 clock_.Now(), transmission_type, |
| 218 HAS_RETRANSMITTABLE_DATA); |
| 218 EXPECT_TRUE(QuicSentPacketManagerPeer::IsRetransmission(&manager_, | 219 EXPECT_TRUE(QuicSentPacketManagerPeer::IsRetransmission(&manager_, |
| 219 new_packet_number)); | 220 new_packet_number)); |
| 220 } | 221 } |
| 221 | 222 |
| 222 SerializedPacket CreateDataPacket(QuicPacketNumber packet_number) { | 223 SerializedPacket CreateDataPacket(QuicPacketNumber packet_number) { |
| 223 return CreatePacket(packet_number, true); | 224 return CreatePacket(packet_number, true); |
| 224 } | 225 } |
| 225 | 226 |
| 226 SerializedPacket CreatePacket(QuicPacketNumber packet_number, | 227 SerializedPacket CreatePacket(QuicPacketNumber packet_number, |
| 227 bool retransmittable) { | 228 bool retransmittable) { |
| 228 SerializedPacket packet(kDefaultPathId, packet_number, | 229 SerializedPacket packet(kDefaultPathId, packet_number, |
| 229 PACKET_6BYTE_PACKET_NUMBER, nullptr, kDefaultLength, | 230 PACKET_6BYTE_PACKET_NUMBER, nullptr, kDefaultLength, |
| 230 0u, false, false); | 231 0u, false, false); |
| 231 if (retransmittable) { | 232 if (retransmittable) { |
| 232 packet.retransmittable_frames.push_back( | 233 packet.retransmittable_frames.push_back( |
| 233 QuicFrame(new QuicStreamFrame(kStreamId, false, 0, StringPiece()))); | 234 QuicFrame(new QuicStreamFrame(kStreamId, false, 0, StringPiece()))); |
| 234 } | 235 } |
| 235 return packet; | 236 return packet; |
| 236 } | 237 } |
| 237 | 238 |
| 238 void SendDataPacket(QuicPacketNumber packet_number) { | 239 void SendDataPacket(QuicPacketNumber packet_number) { |
| 239 EXPECT_CALL(*send_algorithm_, | 240 EXPECT_CALL(*send_algorithm_, |
| 240 OnPacketSent(_, BytesInFlight(), packet_number, _, _)) | 241 OnPacketSent(_, BytesInFlight(), packet_number, _, _)) |
| 241 .Times(1) | 242 .Times(1) |
| 242 .WillOnce(Return(true)); | 243 .WillOnce(Return(true)); |
| 243 SerializedPacket packet(CreateDataPacket(packet_number)); | 244 SerializedPacket packet(CreateDataPacket(packet_number)); |
| 244 manager_.OnPacketSent(&packet, 0, clock_.Now(), NOT_RETRANSMISSION, | 245 manager_.OnPacketSent(&packet, kInvalidPathId, 0, clock_.Now(), |
| 245 HAS_RETRANSMITTABLE_DATA); | 246 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); |
| 246 } | 247 } |
| 247 | 248 |
| 248 void SendCryptoPacket(QuicPacketNumber packet_number) { | 249 void SendCryptoPacket(QuicPacketNumber packet_number) { |
| 249 EXPECT_CALL(*send_algorithm_, | 250 EXPECT_CALL(*send_algorithm_, |
| 250 OnPacketSent(_, BytesInFlight(), packet_number, kDefaultLength, | 251 OnPacketSent(_, BytesInFlight(), packet_number, kDefaultLength, |
| 251 HAS_RETRANSMITTABLE_DATA)) | 252 HAS_RETRANSMITTABLE_DATA)) |
| 252 .Times(1) | 253 .Times(1) |
| 253 .WillOnce(Return(true)); | 254 .WillOnce(Return(true)); |
| 254 SerializedPacket packet(CreateDataPacket(packet_number)); | 255 SerializedPacket packet(CreateDataPacket(packet_number)); |
| 255 packet.retransmittable_frames.push_back( | 256 packet.retransmittable_frames.push_back( |
| 256 QuicFrame(new QuicStreamFrame(1, false, 0, StringPiece()))); | 257 QuicFrame(new QuicStreamFrame(1, false, 0, StringPiece()))); |
| 257 packet.has_crypto_handshake = IS_HANDSHAKE; | 258 packet.has_crypto_handshake = IS_HANDSHAKE; |
| 258 manager_.OnPacketSent(&packet, 0, clock_.Now(), NOT_RETRANSMISSION, | 259 manager_.OnPacketSent(&packet, kInvalidPathId, 0, clock_.Now(), |
| 259 HAS_RETRANSMITTABLE_DATA); | 260 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); |
| 260 } | 261 } |
| 261 | 262 |
| 262 void SendAckPacket(QuicPacketNumber packet_number) { | 263 void SendAckPacket(QuicPacketNumber packet_number) { |
| 263 EXPECT_CALL(*send_algorithm_, | 264 EXPECT_CALL(*send_algorithm_, |
| 264 OnPacketSent(_, BytesInFlight(), packet_number, kDefaultLength, | 265 OnPacketSent(_, BytesInFlight(), packet_number, kDefaultLength, |
| 265 NO_RETRANSMITTABLE_DATA)) | 266 NO_RETRANSMITTABLE_DATA)) |
| 266 .Times(1) | 267 .Times(1) |
| 267 .WillOnce(Return(false)); | 268 .WillOnce(Return(false)); |
| 268 SerializedPacket packet(CreatePacket(packet_number, false)); | 269 SerializedPacket packet(CreatePacket(packet_number, false)); |
| 269 manager_.OnPacketSent(&packet, 0, clock_.Now(), NOT_RETRANSMISSION, | 270 manager_.OnPacketSent(&packet, kInvalidPathId, 0, clock_.Now(), |
| 270 NO_RETRANSMITTABLE_DATA); | 271 NOT_RETRANSMISSION, NO_RETRANSMITTABLE_DATA); |
| 271 } | 272 } |
| 272 | 273 |
| 273 // Based on QuicConnection's WritePendingRetransmissions. | 274 // Based on QuicConnection's WritePendingRetransmissions. |
| 274 void RetransmitNextPacket(QuicPacketNumber retransmission_packet_number) { | 275 void RetransmitNextPacket(QuicPacketNumber retransmission_packet_number) { |
| 275 EXPECT_TRUE(manager_.HasPendingRetransmissions()); | 276 EXPECT_TRUE(manager_.HasPendingRetransmissions()); |
| 276 EXPECT_CALL(*send_algorithm_, | 277 EXPECT_CALL(*send_algorithm_, |
| 277 OnPacketSent(_, _, retransmission_packet_number, kDefaultLength, | 278 OnPacketSent(_, _, retransmission_packet_number, kDefaultLength, |
| 278 HAS_RETRANSMITTABLE_DATA)) | 279 HAS_RETRANSMITTABLE_DATA)) |
| 279 .Times(1) | 280 .Times(1) |
| 280 .WillOnce(Return(true)); | 281 .WillOnce(Return(true)); |
| 281 const PendingRetransmission pending = manager_.NextPendingRetransmission(); | 282 const PendingRetransmission pending = manager_.NextPendingRetransmission(); |
| 282 SerializedPacket packet(CreatePacket(retransmission_packet_number, false)); | 283 SerializedPacket packet(CreatePacket(retransmission_packet_number, false)); |
| 283 manager_.OnPacketSent(&packet, pending.packet_number, clock_.Now(), | 284 manager_.OnPacketSent(&packet, pending.path_id, pending.packet_number, |
| 284 pending.transmission_type, HAS_RETRANSMITTABLE_DATA); | 285 clock_.Now(), pending.transmission_type, |
| 286 HAS_RETRANSMITTABLE_DATA); |
| 285 } | 287 } |
| 286 | 288 |
| 287 // Initialize a frame acknowledging all packets up to largest_observed. | 289 // Initialize a frame acknowledging all packets up to largest_observed. |
| 288 const QuicAckFrame InitAckFrame(QuicPacketNumber largest_observed) { | 290 const QuicAckFrame InitAckFrame(QuicPacketNumber largest_observed) { |
| 289 QuicAckFrame frame(MakeAckFrame(largest_observed)); | 291 QuicAckFrame frame(MakeAckFrame(largest_observed)); |
| 290 frame.missing = GetParam().missing; | 292 frame.missing = GetParam().missing; |
| 291 if (!GetParam().missing) { | 293 if (!GetParam().missing) { |
| 292 if (largest_observed > 0) { | 294 if (largest_observed > 0) { |
| 293 frame.packets.Add(1, largest_observed + 1); | 295 frame.packets.Add(1, largest_observed + 1); |
| 294 } | 296 } |
| (...skipping 1299 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1594 for (QuicPacketNumber i = 1; i <= 16; ++i) { | 1596 for (QuicPacketNumber i = 1; i <= 16; ++i) { |
| 1595 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) | 1597 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) |
| 1596 .WillOnce(Return(QuicTime::Delta::Zero())); | 1598 .WillOnce(Return(QuicTime::Delta::Zero())); |
| 1597 EXPECT_EQ(QuicTime::Delta::Zero(), | 1599 EXPECT_EQ(QuicTime::Delta::Zero(), |
| 1598 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | 1600 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); |
| 1599 EXPECT_CALL(*send_algorithm_, | 1601 EXPECT_CALL(*send_algorithm_, |
| 1600 OnPacketSent(_, BytesInFlight(), i, kDefaultLength, | 1602 OnPacketSent(_, BytesInFlight(), i, kDefaultLength, |
| 1601 HAS_RETRANSMITTABLE_DATA)) | 1603 HAS_RETRANSMITTABLE_DATA)) |
| 1602 .WillOnce(Return(true)); | 1604 .WillOnce(Return(true)); |
| 1603 SerializedPacket packet(CreatePacket(i, true)); | 1605 SerializedPacket packet(CreatePacket(i, true)); |
| 1604 manager_.OnPacketSent(&packet, 0, clock_.Now(), NOT_RETRANSMISSION, | 1606 manager_.OnPacketSent(&packet, kInvalidPathId, 0, clock_.Now(), |
| 1605 HAS_RETRANSMITTABLE_DATA); | 1607 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); |
| 1606 } | 1608 } |
| 1607 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) | 1609 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) |
| 1608 .WillOnce(Return(QuicTime::Delta::Infinite())); | 1610 .WillOnce(Return(QuicTime::Delta::Infinite())); |
| 1609 EXPECT_EQ(QuicTime::Delta::Infinite(), | 1611 EXPECT_EQ(QuicTime::Delta::Infinite(), |
| 1610 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | 1612 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); |
| 1611 } | 1613 } |
| 1612 | 1614 |
| 1613 TEST_P(QuicSentPacketManagerTest, ReceiveWindowLimited) { | 1615 TEST_P(QuicSentPacketManagerTest, ReceiveWindowLimited) { |
| 1614 EXPECT_EQ(kDefaultSocketReceiveBuffer, | 1616 EXPECT_EQ(kDefaultSocketReceiveBuffer, |
| 1615 QuicSentPacketManagerPeer::GetReceiveWindow(&manager_)); | 1617 QuicSentPacketManagerPeer::GetReceiveWindow(&manager_)); |
| 1616 | 1618 |
| 1617 // Ensure the smaller send window only allows 256 * 0.95 packets to be sent. | 1619 // Ensure the smaller send window only allows 256 * 0.95 packets to be sent. |
| 1618 for (QuicPacketNumber i = 1; i <= 244; ++i) { | 1620 for (QuicPacketNumber i = 1; i <= 244; ++i) { |
| 1619 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) | 1621 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) |
| 1620 .WillOnce(Return(QuicTime::Delta::Zero())); | 1622 .WillOnce(Return(QuicTime::Delta::Zero())); |
| 1621 EXPECT_EQ(QuicTime::Delta::Zero(), | 1623 EXPECT_EQ(QuicTime::Delta::Zero(), |
| 1622 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | 1624 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); |
| 1623 EXPECT_CALL(*send_algorithm_, | 1625 EXPECT_CALL(*send_algorithm_, |
| 1624 OnPacketSent(_, BytesInFlight(), i, kDefaultLength, | 1626 OnPacketSent(_, BytesInFlight(), i, kDefaultLength, |
| 1625 HAS_RETRANSMITTABLE_DATA)) | 1627 HAS_RETRANSMITTABLE_DATA)) |
| 1626 .WillOnce(Return(true)); | 1628 .WillOnce(Return(true)); |
| 1627 SerializedPacket packet(CreatePacket(i, true)); | 1629 SerializedPacket packet(CreatePacket(i, true)); |
| 1628 manager_.OnPacketSent(&packet, 0, clock_.Now(), NOT_RETRANSMISSION, | 1630 manager_.OnPacketSent(&packet, kInvalidPathId, 0, clock_.Now(), |
| 1629 HAS_RETRANSMITTABLE_DATA); | 1631 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); |
| 1630 } | 1632 } |
| 1631 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) | 1633 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)) |
| 1632 .WillOnce(Return(QuicTime::Delta::Infinite())); | 1634 .WillOnce(Return(QuicTime::Delta::Infinite())); |
| 1633 EXPECT_EQ(QuicTime::Delta::Infinite(), | 1635 EXPECT_EQ(QuicTime::Delta::Infinite(), |
| 1634 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | 1636 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); |
| 1635 } | 1637 } |
| 1636 | 1638 |
| 1637 TEST_P(QuicSentPacketManagerTest, UseInitialRoundTripTimeToSend) { | 1639 TEST_P(QuicSentPacketManagerTest, UseInitialRoundTripTimeToSend) { |
| 1638 uint32_t initial_rtt_us = 325000; | 1640 uint32_t initial_rtt_us = 325000; |
| 1639 EXPECT_NE(initial_rtt_us, | 1641 EXPECT_NE(initial_rtt_us, |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1714 manager_.OnConnectionMigration(PORT_CHANGE); | 1716 manager_.OnConnectionMigration(PORT_CHANGE); |
| 1715 | 1717 |
| 1716 EXPECT_EQ(2 * default_init_rtt, rtt_stats->initial_rtt_us()); | 1718 EXPECT_EQ(2 * default_init_rtt, rtt_stats->initial_rtt_us()); |
| 1717 EXPECT_EQ(1u, manager_.consecutive_rto_count()); | 1719 EXPECT_EQ(1u, manager_.consecutive_rto_count()); |
| 1718 EXPECT_EQ(2u, manager_.consecutive_tlp_count()); | 1720 EXPECT_EQ(2u, manager_.consecutive_tlp_count()); |
| 1719 } | 1721 } |
| 1720 | 1722 |
| 1721 } // namespace | 1723 } // namespace |
| 1722 } // namespace test | 1724 } // namespace test |
| 1723 } // namespace net | 1725 } // namespace net |
| OLD | NEW |