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 |