| 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 "base/stl_util.h" | 7 #include "base/stl_util.h" |
| 8 #include "net/quic/quic_flags.h" | 8 #include "net/quic/quic_flags.h" |
| 9 #include "net/quic/test_tools/quic_config_peer.h" | 9 #include "net/quic/test_tools/quic_config_peer.h" |
| 10 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h" | 10 #include "net/quic/test_tools/quic_sent_packet_manager_peer.h" |
| (...skipping 1007 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1018 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); | 1018 manager_.OnIncomingAck(ack_frame, clock_.ApproximateNow()); |
| 1019 VerifyUnackedPackets(nullptr, 0); | 1019 VerifyUnackedPackets(nullptr, 0); |
| 1020 VerifyRetransmittablePackets(nullptr, 0); | 1020 VerifyRetransmittablePackets(nullptr, 0); |
| 1021 } | 1021 } |
| 1022 | 1022 |
| 1023 TEST_F(QuicSentPacketManagerTest, ResetRecentMinRTTWithEmptyWindow) { | 1023 TEST_F(QuicSentPacketManagerTest, ResetRecentMinRTTWithEmptyWindow) { |
| 1024 QuicTime::Delta min_rtt = QuicTime::Delta::FromMilliseconds(50); | 1024 QuicTime::Delta min_rtt = QuicTime::Delta::FromMilliseconds(50); |
| 1025 QuicSentPacketManagerPeer::GetRttStats(&manager_)->UpdateRtt( | 1025 QuicSentPacketManagerPeer::GetRttStats(&manager_)->UpdateRtt( |
| 1026 min_rtt, QuicTime::Delta::Zero(), QuicTime::Zero()); | 1026 min_rtt, QuicTime::Delta::Zero(), QuicTime::Zero()); |
| 1027 EXPECT_EQ(min_rtt, | 1027 EXPECT_EQ(min_rtt, |
| 1028 QuicSentPacketManagerPeer::GetRttStats(&manager_)->MinRtt()); | 1028 QuicSentPacketManagerPeer::GetRttStats(&manager_)->min_rtt()); |
| 1029 EXPECT_EQ(min_rtt, | 1029 EXPECT_EQ(min_rtt, |
| 1030 QuicSentPacketManagerPeer::GetRttStats( | 1030 QuicSentPacketManagerPeer::GetRttStats( |
| 1031 &manager_)->recent_min_rtt()); | 1031 &manager_)->recent_min_rtt()); |
| 1032 | 1032 |
| 1033 // Send two packets with no prior bytes in flight. | 1033 // Send two packets with no prior bytes in flight. |
| 1034 SendDataPacket(1); | 1034 SendDataPacket(1); |
| 1035 SendDataPacket(2); | 1035 SendDataPacket(2); |
| 1036 | 1036 |
| 1037 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(100)); | 1037 clock_.AdvanceTime(QuicTime::Delta::FromMilliseconds(100)); |
| 1038 // Ack two packets with 100ms RTT observations. | 1038 // Ack two packets with 100ms RTT observations. |
| 1039 QuicAckFrame ack_frame; | 1039 QuicAckFrame ack_frame; |
| 1040 ack_frame.delta_time_largest_observed = QuicTime::Delta::Zero(); | 1040 ack_frame.delta_time_largest_observed = QuicTime::Delta::Zero(); |
| 1041 ack_frame.largest_observed = 1; | 1041 ack_frame.largest_observed = 1; |
| 1042 ExpectAck(1); | 1042 ExpectAck(1); |
| 1043 manager_.OnIncomingAck(ack_frame, clock_.Now()); | 1043 manager_.OnIncomingAck(ack_frame, clock_.Now()); |
| 1044 | 1044 |
| 1045 // First ack does not change recent min rtt. | 1045 // First ack does not change recent min rtt. |
| 1046 EXPECT_EQ(min_rtt, | 1046 EXPECT_EQ(min_rtt, |
| 1047 QuicSentPacketManagerPeer::GetRttStats( | 1047 QuicSentPacketManagerPeer::GetRttStats( |
| 1048 &manager_)->recent_min_rtt()); | 1048 &manager_)->recent_min_rtt()); |
| 1049 | 1049 |
| 1050 ack_frame.largest_observed = 2; | 1050 ack_frame.largest_observed = 2; |
| 1051 ExpectAck(2); | 1051 ExpectAck(2); |
| 1052 manager_.OnIncomingAck(ack_frame, clock_.Now()); | 1052 manager_.OnIncomingAck(ack_frame, clock_.Now()); |
| 1053 | 1053 |
| 1054 EXPECT_EQ(min_rtt, | 1054 EXPECT_EQ(min_rtt, |
| 1055 QuicSentPacketManagerPeer::GetRttStats(&manager_)->MinRtt()); | 1055 QuicSentPacketManagerPeer::GetRttStats(&manager_)->min_rtt()); |
| 1056 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(100), | 1056 EXPECT_EQ(QuicTime::Delta::FromMilliseconds(100), |
| 1057 QuicSentPacketManagerPeer::GetRttStats( | 1057 QuicSentPacketManagerPeer::GetRttStats( |
| 1058 &manager_)->recent_min_rtt()); | 1058 &manager_)->recent_min_rtt()); |
| 1059 } | 1059 } |
| 1060 | 1060 |
| 1061 TEST_F(QuicSentPacketManagerTest, RetransmissionTimeout) { | 1061 TEST_F(QuicSentPacketManagerTest, RetransmissionTimeout) { |
| 1062 // Send 100 packets and then ensure all are abandoned when the RTO fires. | 1062 // Send 100 packets and then ensure all are abandoned when the RTO fires. |
| 1063 const size_t kNumSentPackets = 100; | 1063 const size_t kNumSentPackets = 100; |
| 1064 for (size_t i = 1; i <= kNumSentPackets; ++i) { | 1064 for (size_t i = 1; i <= kNumSentPackets; ++i) { |
| 1065 SendDataPacket(i); | 1065 SendDataPacket(i); |
| 1066 } | 1066 } |
| 1067 | 1067 |
| 1068 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); | 1068 EXPECT_CALL(*send_algorithm_, OnRetransmissionTimeout(true)); |
| 1069 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 1069 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); |
| 1070 EXPECT_FALSE(manager_.MaybeRetransmitTailLossProbe()); | 1070 EXPECT_FALSE(manager_.MaybeRetransmitTailLossProbe()); |
| 1071 manager_.OnRetransmissionTimeout(); | 1071 manager_.OnRetransmissionTimeout(); |
| 1072 } | 1072 } |
| 1073 | 1073 |
| 1074 TEST_F(QuicSentPacketManagerTest, GetTransmissionTime) { | 1074 TEST_F(QuicSentPacketManagerTest, GetTransmissionTime) { |
| 1075 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); | 1075 EXPECT_EQ(QuicTime::Zero(), manager_.GetRetransmissionTime()); |
| 1076 } | 1076 } |
| 1077 | 1077 |
| 1078 TEST_F(QuicSentPacketManagerTest, GetTransmissionTimeCryptoHandshake) { | 1078 TEST_F(QuicSentPacketManagerTest, GetTransmissionTimeCryptoHandshake) { |
| 1079 SendCryptoPacket(1); | 1079 SendCryptoPacket(1); |
| 1080 | 1080 |
| 1081 // Check the min. | 1081 // Check the min. |
| 1082 QuicSentPacketManagerPeer::GetRttStats(&manager_)->set_initial_rtt_us( | 1082 RttStats* rtt_stats = QuicSentPacketManagerPeer::GetRttStats(&manager_); |
| 1083 1 * base::Time::kMicrosecondsPerMillisecond); | 1083 rtt_stats->set_initial_rtt_us(1 * base::Time::kMicrosecondsPerMillisecond); |
| 1084 EXPECT_EQ(clock_.Now().Add(QuicTime::Delta::FromMilliseconds(10)), | 1084 EXPECT_EQ(clock_.Now().Add(QuicTime::Delta::FromMilliseconds(10)), |
| 1085 manager_.GetRetransmissionTime()); | 1085 manager_.GetRetransmissionTime()); |
| 1086 | 1086 |
| 1087 // Test with a standard smoothed RTT. | 1087 // Test with a standard smoothed RTT. |
| 1088 QuicSentPacketManagerPeer::GetRttStats(&manager_)->set_initial_rtt_us( | 1088 rtt_stats->set_initial_rtt_us(100 * base::Time::kMicrosecondsPerMillisecond); |
| 1089 100 * base::Time::kMicrosecondsPerMillisecond); | |
| 1090 | 1089 |
| 1091 QuicTime::Delta srtt = manager_.GetRttStats()->SmoothedRtt(); | 1090 QuicTime::Delta srtt = |
| 1091 QuicTime::Delta::FromMicroseconds(rtt_stats->initial_rtt_us()); |
| 1092 QuicTime expected_time = clock_.Now().Add(srtt.Multiply(1.5)); | 1092 QuicTime expected_time = clock_.Now().Add(srtt.Multiply(1.5)); |
| 1093 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); | 1093 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); |
| 1094 | 1094 |
| 1095 // Retransmit the packet by invoking the retransmission timeout. | 1095 // Retransmit the packet by invoking the retransmission timeout. |
| 1096 clock_.AdvanceTime(srtt.Multiply(1.5)); | 1096 clock_.AdvanceTime(srtt.Multiply(1.5)); |
| 1097 manager_.OnRetransmissionTimeout(); | 1097 manager_.OnRetransmissionTimeout(); |
| 1098 RetransmitNextPacket(2); | 1098 RetransmitNextPacket(2); |
| 1099 | 1099 |
| 1100 // The retransmission time should now be twice as far in the future. | 1100 // The retransmission time should now be twice as far in the future. |
| 1101 expected_time = clock_.Now().Add(srtt.Multiply(2).Multiply(1.5)); | 1101 expected_time = clock_.Now().Add(srtt.Multiply(2).Multiply(1.5)); |
| 1102 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); | 1102 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); |
| 1103 } | 1103 } |
| 1104 | 1104 |
| 1105 TEST_F(QuicSentPacketManagerTest, GetTransmissionTimeTailLossProbe) { | 1105 TEST_F(QuicSentPacketManagerTest, GetTransmissionTimeTailLossProbe) { |
| 1106 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); | 1106 QuicSentPacketManagerPeer::SetMaxTailLossProbes(&manager_, 2); |
| 1107 SendDataPacket(1); | 1107 SendDataPacket(1); |
| 1108 SendDataPacket(2); | 1108 SendDataPacket(2); |
| 1109 | 1109 |
| 1110 // Check the min. | 1110 // Check the min. |
| 1111 QuicSentPacketManagerPeer::GetRttStats(&manager_)->set_initial_rtt_us( | 1111 RttStats* rtt_stats = QuicSentPacketManagerPeer::GetRttStats(&manager_); |
| 1112 1 * base::Time::kMicrosecondsPerMillisecond); | 1112 rtt_stats->set_initial_rtt_us(1 * base::Time::kMicrosecondsPerMillisecond); |
| 1113 EXPECT_EQ(clock_.Now().Add(QuicTime::Delta::FromMilliseconds(10)), | 1113 EXPECT_EQ(clock_.Now().Add(QuicTime::Delta::FromMilliseconds(10)), |
| 1114 manager_.GetRetransmissionTime()); | 1114 manager_.GetRetransmissionTime()); |
| 1115 | 1115 |
| 1116 // Test with a standard smoothed RTT. | 1116 // Test with a standard smoothed RTT. |
| 1117 QuicSentPacketManagerPeer::GetRttStats(&manager_)->set_initial_rtt_us( | 1117 rtt_stats->set_initial_rtt_us(100 * base::Time::kMicrosecondsPerMillisecond); |
| 1118 100 * base::Time::kMicrosecondsPerMillisecond); | 1118 QuicTime::Delta srtt = |
| 1119 QuicTime::Delta srtt = manager_.GetRttStats()->SmoothedRtt(); | 1119 QuicTime::Delta::FromMicroseconds(rtt_stats->initial_rtt_us()); |
| 1120 QuicTime::Delta expected_tlp_delay = srtt.Multiply(2); | 1120 QuicTime::Delta expected_tlp_delay = srtt.Multiply(2); |
| 1121 QuicTime expected_time = clock_.Now().Add(expected_tlp_delay); | 1121 QuicTime expected_time = clock_.Now().Add(expected_tlp_delay); |
| 1122 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); | 1122 EXPECT_EQ(expected_time, manager_.GetRetransmissionTime()); |
| 1123 | 1123 |
| 1124 // Retransmit the packet by invoking the retransmission timeout. | 1124 // Retransmit the packet by invoking the retransmission timeout. |
| 1125 clock_.AdvanceTime(expected_tlp_delay); | 1125 clock_.AdvanceTime(expected_tlp_delay); |
| 1126 manager_.OnRetransmissionTimeout(); | 1126 manager_.OnRetransmissionTimeout(); |
| 1127 EXPECT_EQ(QuicTime::Delta::Zero(), | 1127 EXPECT_EQ(QuicTime::Delta::Zero(), |
| 1128 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | 1128 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); |
| 1129 EXPECT_FALSE(manager_.HasPendingRetransmissions()); | 1129 EXPECT_FALSE(manager_.HasPendingRetransmissions()); |
| (...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1413 manager_.OnPacketSent(&packet, 0, clock_.Now(), 1024, | 1413 manager_.OnPacketSent(&packet, 0, clock_.Now(), 1024, |
| 1414 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); | 1414 NOT_RETRANSMISSION, HAS_RETRANSMITTABLE_DATA); |
| 1415 } | 1415 } |
| 1416 EXPECT_EQ(QuicTime::Delta::Infinite(), | 1416 EXPECT_EQ(QuicTime::Delta::Infinite(), |
| 1417 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); | 1417 manager_.TimeUntilSend(clock_.Now(), HAS_RETRANSMITTABLE_DATA)); |
| 1418 } | 1418 } |
| 1419 | 1419 |
| 1420 TEST_F(QuicSentPacketManagerTest, UseInitialRoundTripTimeToSend) { | 1420 TEST_F(QuicSentPacketManagerTest, UseInitialRoundTripTimeToSend) { |
| 1421 uint32 initial_rtt_us = 325000; | 1421 uint32 initial_rtt_us = 325000; |
| 1422 EXPECT_NE(initial_rtt_us, | 1422 EXPECT_NE(initial_rtt_us, |
| 1423 manager_.GetRttStats()->SmoothedRtt().ToMicroseconds()); | 1423 manager_.GetRttStats()->smoothed_rtt().ToMicroseconds()); |
| 1424 | 1424 |
| 1425 QuicConfig config; | 1425 QuicConfig config; |
| 1426 config.SetInitialRoundTripTimeUsToSend(initial_rtt_us); | 1426 config.SetInitialRoundTripTimeUsToSend(initial_rtt_us); |
| 1427 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); | 1427 EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)); |
| 1428 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); | 1428 EXPECT_CALL(*network_change_visitor_, OnCongestionWindowChange()); |
| 1429 manager_.SetFromConfig(config); | 1429 manager_.SetFromConfig(config); |
| 1430 | 1430 |
| 1431 EXPECT_EQ(initial_rtt_us, | 1431 EXPECT_EQ(0, manager_.GetRttStats()->smoothed_rtt().ToMicroseconds()); |
| 1432 manager_.GetRttStats()->SmoothedRtt().ToMicroseconds()); | 1432 EXPECT_EQ(initial_rtt_us, manager_.GetRttStats()->initial_rtt_us()); |
| 1433 } | 1433 } |
| 1434 | 1434 |
| 1435 } // namespace | 1435 } // namespace |
| 1436 } // namespace test | 1436 } // namespace test |
| 1437 } // namespace net | 1437 } // namespace net |
| OLD | NEW |