Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(10)

Side by Side Diff: net/quic/quic_sent_packet_manager.cc

Issue 138273004: Reset QUIC's retransmission counters whenever a new packet is acked (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | net/quic/quic_sent_packet_manager_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/logging.h" 7 #include "base/logging.h"
8 #include "base/stl_util.h" 8 #include "base/stl_util.h"
9 #include "net/quic/congestion_control/pacing_sender.h" 9 #include "net/quic/congestion_control/pacing_sender.h"
10 #include "net/quic/quic_ack_notifier_manager.h" 10 #include "net/quic/quic_ack_notifier_manager.h"
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
174 } 174 }
175 previous_transmissions->insert(new_sequence_number); 175 previous_transmissions->insert(new_sequence_number);
176 unacked_packets_[new_sequence_number].previous_transmissions = 176 unacked_packets_[new_sequence_number].previous_transmissions =
177 previous_transmissions; 177 previous_transmissions;
178 178
179 DCHECK(HasRetransmittableFrames(new_sequence_number)); 179 DCHECK(HasRetransmittableFrames(new_sequence_number));
180 } 180 }
181 181
182 bool QuicSentPacketManager::OnIncomingAck( 182 bool QuicSentPacketManager::OnIncomingAck(
183 const ReceivedPacketInfo& received_info, QuicTime ack_receive_time) { 183 const ReceivedPacketInfo& received_info, QuicTime ack_receive_time) {
184 // Determine if the least unacked sequence number is being acked. 184 // We rely on delta_time_largest_observed to compute an RTT estimate, so
185 QuicPacketSequenceNumber least_unacked_sent_before = 185 // we only update rtt when the largest observed gets acked.
186 GetLeastUnackedSentPacket(); 186 bool largest_observed_acked =
187 // TODO(ianswett): Consider a non-TCP metric for determining the connection 187 ContainsKey(unacked_packets_, received_info.largest_observed);
188 // is making progress, since QUIC has out of order delivery.
189 bool new_least_unacked = !IsAwaitingPacket(received_info,
190 least_unacked_sent_before);
191
192 MaybeUpdateRTT(received_info, ack_receive_time); 188 MaybeUpdateRTT(received_info, ack_receive_time);
193 HandleAckForSentPackets(received_info); 189 HandleAckForSentPackets(received_info);
194 MaybeRetransmitOnAckFrame(received_info, ack_receive_time); 190 MaybeRetransmitOnAckFrame(received_info, ack_receive_time);
195 191
196 if (new_least_unacked) { 192 // Anytime we are making forward progress and have a new RTT estimate, reset
193 // the backoff counters.
194 if (largest_observed_acked) {
197 // Reset all retransmit counters any time a new packet is acked. 195 // Reset all retransmit counters any time a new packet is acked.
198 consecutive_rto_count_ = 0; 196 consecutive_rto_count_ = 0;
199 consecutive_tlp_count_ = 0; 197 consecutive_tlp_count_ = 0;
200 consecutive_crypto_retransmission_count_ = 0; 198 consecutive_crypto_retransmission_count_ = 0;
201 } 199 }
202 200
203 // Always reset the retransmission alarm when an ack comes in, since we now 201 // Always reset the retransmission alarm when an ack comes in, since we now
204 // have a better estimate of the current rtt than when it was set. 202 // have a better estimate of the current rtt than when it was set.
205 return true; 203 return true;
206 } 204 }
(...skipping 790 matching lines...) Expand 10 before | Expand all | Expand 10 after
997 } 995 }
998 previous_transmissions->erase(sequence_number); 996 previous_transmissions->erase(sequence_number);
999 if (previous_transmissions->size() == 1) { 997 if (previous_transmissions->size() == 1) {
1000 QuicPacketSequenceNumber current = *previous_transmissions->begin(); 998 QuicPacketSequenceNumber current = *previous_transmissions->begin();
1001 unacked_packets_[current].previous_transmissions = NULL; 999 unacked_packets_[current].previous_transmissions = NULL;
1002 delete previous_transmissions; 1000 delete previous_transmissions;
1003 } 1001 }
1004 } 1002 }
1005 1003
1006 } // namespace net 1004 } // namespace net
OLDNEW
« no previous file with comments | « no previous file | net/quic/quic_sent_packet_manager_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698