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/core/quic_sent_packet_manager.h" | 5 #include "net/quic/core/quic_sent_packet_manager.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 841 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
852 if (!unacked_packets_.HasMultipleInFlightPackets()) { | 852 if (!unacked_packets_.HasMultipleInFlightPackets()) { |
853 return std::max(2 * srtt, 1.5 * srtt + QuicTime::Delta::FromMilliseconds( | 853 return std::max(2 * srtt, 1.5 * srtt + QuicTime::Delta::FromMilliseconds( |
854 kMinRetransmissionTimeMs / 2)); | 854 kMinRetransmissionTimeMs / 2)); |
855 } | 855 } |
856 return QuicTime::Delta::FromMilliseconds( | 856 return QuicTime::Delta::FromMilliseconds( |
857 max(kMinTailLossProbeTimeoutMs, | 857 max(kMinTailLossProbeTimeoutMs, |
858 static_cast<int64_t>(2 * srtt.ToMilliseconds()))); | 858 static_cast<int64_t>(2 * srtt.ToMilliseconds()))); |
859 } | 859 } |
860 | 860 |
861 const QuicTime::Delta QuicSentPacketManager::GetRetransmissionDelay() const { | 861 const QuicTime::Delta QuicSentPacketManager::GetRetransmissionDelay() const { |
862 QuicTime::Delta retransmission_delay = send_algorithm_->RetransmissionDelay(); | 862 QuicTime::Delta retransmission_delay = QuicTime::Delta::Zero(); |
863 if (retransmission_delay.IsZero()) { | 863 if (rtt_stats_.smoothed_rtt().IsZero()) { |
864 // We are in the initial state, use default timeout values. | 864 // We are in the initial state, use default timeout values. |
865 retransmission_delay = | 865 retransmission_delay = |
866 QuicTime::Delta::FromMilliseconds(kDefaultRetransmissionTimeMs); | 866 QuicTime::Delta::FromMilliseconds(kDefaultRetransmissionTimeMs); |
867 } else if (retransmission_delay.ToMilliseconds() < kMinRetransmissionTimeMs) { | 867 } else { |
868 retransmission_delay = | 868 retransmission_delay = |
869 QuicTime::Delta::FromMilliseconds(kMinRetransmissionTimeMs); | 869 rtt_stats_.smoothed_rtt() + 4 * rtt_stats_.mean_deviation(); |
| 870 if (retransmission_delay.ToMilliseconds() < kMinRetransmissionTimeMs) { |
| 871 retransmission_delay = |
| 872 QuicTime::Delta::FromMilliseconds(kMinRetransmissionTimeMs); |
| 873 } |
870 } | 874 } |
871 | 875 |
872 // Calculate exponential back off. | 876 // Calculate exponential back off. |
873 retransmission_delay = | 877 retransmission_delay = |
874 retransmission_delay * | 878 retransmission_delay * |
875 (1 << min<size_t>(consecutive_rto_count_, kMaxRetransmissions)); | 879 (1 << min<size_t>(consecutive_rto_count_, kMaxRetransmissions)); |
876 | 880 |
877 if (retransmission_delay.ToMilliseconds() > kMaxRetransmissionTimeMs) { | 881 if (retransmission_delay.ToMilliseconds() > kMaxRetransmissionTimeMs) { |
878 return QuicTime::Delta::FromMilliseconds(kMaxRetransmissionTimeMs); | 882 return QuicTime::Delta::FromMilliseconds(kMaxRetransmissionTimeMs); |
879 } | 883 } |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
951 // Rtt and cwnd do not need to be reset when the peer address change is | 955 // Rtt and cwnd do not need to be reset when the peer address change is |
952 // considered to be caused by NATs. | 956 // considered to be caused by NATs. |
953 return; | 957 return; |
954 } | 958 } |
955 consecutive_rto_count_ = 0; | 959 consecutive_rto_count_ = 0; |
956 consecutive_tlp_count_ = 0; | 960 consecutive_tlp_count_ = 0; |
957 rtt_stats_.OnConnectionMigration(); | 961 rtt_stats_.OnConnectionMigration(); |
958 send_algorithm_->OnConnectionMigration(); | 962 send_algorithm_->OnConnectionMigration(); |
959 } | 963 } |
960 | 964 |
961 | |
962 void QuicSentPacketManager::SetDebugDelegate(DebugDelegate* debug_delegate) { | 965 void QuicSentPacketManager::SetDebugDelegate(DebugDelegate* debug_delegate) { |
963 debug_delegate_ = debug_delegate; | 966 debug_delegate_ = debug_delegate; |
964 } | 967 } |
965 | 968 |
966 QuicPacketNumber QuicSentPacketManager::GetLargestObserved(QuicPathId) const { | 969 QuicPacketNumber QuicSentPacketManager::GetLargestObserved(QuicPathId) const { |
967 return unacked_packets_.largest_observed(); | 970 return unacked_packets_.largest_observed(); |
968 } | 971 } |
969 | 972 |
970 QuicPacketNumber QuicSentPacketManager::GetLargestSentPacket(QuicPathId) const { | 973 QuicPacketNumber QuicSentPacketManager::GetLargestSentPacket(QuicPathId) const { |
971 return unacked_packets_.largest_sent_packet(); | 974 return unacked_packets_.largest_sent_packet(); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1003 | 1006 |
1004 void QuicSentPacketManager::RemoveObsoletePackets() { | 1007 void QuicSentPacketManager::RemoveObsoletePackets() { |
1005 unacked_packets_.RemoveObsoletePackets(); | 1008 unacked_packets_.RemoveObsoletePackets(); |
1006 } | 1009 } |
1007 | 1010 |
1008 void QuicSentPacketManager::OnApplicationLimited() { | 1011 void QuicSentPacketManager::OnApplicationLimited() { |
1009 send_algorithm_->OnApplicationLimited(unacked_packets_.bytes_in_flight()); | 1012 send_algorithm_->OnApplicationLimited(unacked_packets_.bytes_in_flight()); |
1010 } | 1013 } |
1011 | 1014 |
1012 } // namespace net | 1015 } // namespace net |
OLD | NEW |