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

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

Issue 127633002: Land Recent QUIC Changes. (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 | « net/quic/quic_packet_writer.h ('k') | net/quic/quic_sent_packet_manager.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 #ifndef NET_QUIC_QUIC_SENT_PACKET_MANAGER_H_ 5 #ifndef NET_QUIC_QUIC_SENT_PACKET_MANAGER_H_
6 #define NET_QUIC_QUIC_SENT_PACKET_MANAGER_H_ 6 #define NET_QUIC_QUIC_SENT_PACKET_MANAGER_H_
7 7
8 #include <deque> 8 #include <deque>
9 #include <list> 9 #include <list>
10 #include <map> 10 #include <map>
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 RTO_MODE, 199 RTO_MODE,
200 TLP_MODE, 200 TLP_MODE,
201 HANDSHAKE_MODE, 201 HANDSHAKE_MODE,
202 }; 202 };
203 203
204 struct TransmissionInfo { 204 struct TransmissionInfo {
205 TransmissionInfo() 205 TransmissionInfo()
206 : retransmittable_frames(NULL), 206 : retransmittable_frames(NULL),
207 sequence_number_length(PACKET_1BYTE_SEQUENCE_NUMBER), 207 sequence_number_length(PACKET_1BYTE_SEQUENCE_NUMBER),
208 sent_time(QuicTime::Zero()), 208 sent_time(QuicTime::Zero()),
209 previous_transmissions(NULL) { } 209 previous_transmissions(NULL),
210 pending(false) { }
210 TransmissionInfo(RetransmittableFrames* retransmittable_frames, 211 TransmissionInfo(RetransmittableFrames* retransmittable_frames,
211 QuicSequenceNumberLength sequence_number_length) 212 QuicSequenceNumberLength sequence_number_length)
212 : retransmittable_frames(retransmittable_frames), 213 : retransmittable_frames(retransmittable_frames),
213 sequence_number_length(sequence_number_length), 214 sequence_number_length(sequence_number_length),
214 sent_time(QuicTime::Zero()), 215 sent_time(QuicTime::Zero()),
215 previous_transmissions(NULL) { 216 previous_transmissions(NULL),
217 pending(false) {
216 } 218 }
217 219
218 RetransmittableFrames* retransmittable_frames; 220 RetransmittableFrames* retransmittable_frames;
219 QuicSequenceNumberLength sequence_number_length; 221 QuicSequenceNumberLength sequence_number_length;
220 // Zero when the packet is serialized, non-zero once it's sent. 222 // Zero when the packet is serialized, non-zero once it's sent.
221 QuicTime sent_time; 223 QuicTime sent_time;
222 // Stores all previous transmissions if the packet has been retransmitted, 224 // Stores all previous transmissions if the packet has been retransmitted,
223 // and is NULL otherwise. 225 // and is NULL otherwise.
224 SequenceNumberSet* previous_transmissions; 226 SequenceNumberSet* previous_transmissions;
227 // Pending packets have not been abandoned or lost.
228 bool pending;
225 }; 229 };
226 230
227 typedef linked_hash_map<QuicPacketSequenceNumber, 231 typedef linked_hash_map<QuicPacketSequenceNumber,
228 TransmissionInfo> UnackedPacketMap; 232 TransmissionInfo> UnackedPacketMap;
229 typedef linked_hash_map<QuicPacketSequenceNumber, 233 typedef linked_hash_map<QuicPacketSequenceNumber,
230 TransmissionType> PendingRetransmissionMap; 234 TransmissionType> PendingRetransmissionMap;
231 235
232 static bool HasCryptoHandshake(const TransmissionInfo& transmission_info); 236 static bool HasCryptoHandshake(const TransmissionInfo& transmission_info);
233 237
238 // Returns true if there are unacked packets that are pending.
239 bool HasPendingPackets() const;
240
234 // Process the incoming ack looking for newly ack'd data packets. 241 // Process the incoming ack looking for newly ack'd data packets.
235 void HandleAckForSentPackets(const ReceivedPacketInfo& received_info); 242 void HandleAckForSentPackets(const ReceivedPacketInfo& received_info);
236 243
237 // Called when a packet is timed out, such as an RTO. Removes the bytes from 244 // Called when a packet is timed out, such as an RTO. Removes the bytes from
238 // the congestion manager, but does not change the congestion window size. 245 // the congestion manager, but does not change the congestion window size.
239 virtual void OnPacketAbandoned(QuicPacketSequenceNumber sequence_number); 246 virtual void OnPacketAbandoned(UnackedPacketMap::iterator it);
240 247
241 // Returns the current retransmission mode. 248 // Returns the current retransmission mode.
242 RetransmissionTimeoutMode GetRetransmissionMode() const; 249 RetransmissionTimeoutMode GetRetransmissionMode() const;
243 250
244 // Retransmits all crypto stream packets. 251 // Retransmits all crypto stream packets.
245 void RetransmitCryptoPackets(); 252 void RetransmitCryptoPackets();
246 253
247 // Retransmits the oldest pending packet. 254 // Retransmits the oldest pending packet.
248 void RetransmitOldestPacket(); 255 void RetransmitOldestPacket();
249 256
(...skipping 27 matching lines...) Expand all
277 284
278 // Removes entries from the unacked packet map. 285 // Removes entries from the unacked packet map.
279 void DiscardPacket(QuicPacketSequenceNumber sequence_number); 286 void DiscardPacket(QuicPacketSequenceNumber sequence_number);
280 287
281 // Request that |sequence_number| be retransmitted after the other pending 288 // Request that |sequence_number| be retransmitted after the other pending
282 // retransmissions. Does not add it to the retransmissions if it's already 289 // retransmissions. Does not add it to the retransmissions if it's already
283 // a pending retransmission. 290 // a pending retransmission.
284 void MarkForRetransmission(QuicPacketSequenceNumber sequence_number, 291 void MarkForRetransmission(QuicPacketSequenceNumber sequence_number,
285 TransmissionType transmission_type); 292 TransmissionType transmission_type);
286 293
287 // Returns the length of the serialized sequence number for
288 // the packet |sequence_number|.
289 QuicSequenceNumberLength GetSequenceNumberLength(
290 QuicPacketSequenceNumber sequence_number) const;
291
292 // Clears up to |num_to_clear| previous transmissions in order to make room 294 // Clears up to |num_to_clear| previous transmissions in order to make room
293 // in the ack frame for new acks. 295 // in the ack frame for new acks.
294 void ClearPreviousRetransmissions(size_t num_to_clear); 296 void ClearPreviousRetransmissions(size_t num_to_clear);
295 297
296 void CleanupPacketHistory(); 298 void CleanupPacketHistory();
297 299
298 // Removes |sequence_number| as a previous transmission of any other packets. 300 // Removes |sequence_number| as a previous transmission of any other packets.
299 void RemovePreviousTransmission(QuicPacketSequenceNumber sequence_number); 301 void RemovePreviousTransmission(QuicPacketSequenceNumber sequence_number);
300 302
301 // Newly serialized retransmittable and fec packets are added to this map, 303 // Newly serialized retransmittable and fec packets are added to this map,
(...skipping 17 matching lines...) Expand all
319 // An AckNotifier can register to be informed when ACKs have been received for 321 // An AckNotifier can register to be informed when ACKs have been received for
320 // all packets that a given block of data was sent in. The AckNotifierManager 322 // all packets that a given block of data was sent in. The AckNotifierManager
321 // maintains the currently active notifiers. 323 // maintains the currently active notifiers.
322 AckNotifierManager ack_notifier_manager_; 324 AckNotifierManager ack_notifier_manager_;
323 325
324 const QuicClock* clock_; 326 const QuicClock* clock_;
325 scoped_ptr<SendAlgorithmInterface> send_algorithm_; 327 scoped_ptr<SendAlgorithmInterface> send_algorithm_;
326 // Tracks the send time, size, and nack count of sent packets. Packets are 328 // Tracks the send time, size, and nack count of sent packets. Packets are
327 // removed after 5 seconds and they've been removed from pending_packets_. 329 // removed after 5 seconds and they've been removed from pending_packets_.
328 SendAlgorithmInterface::SentPacketsMap packet_history_map_; 330 SendAlgorithmInterface::SentPacketsMap packet_history_map_;
329 // Packets that are outstanding and have not been abandoned or lost.
330 SequenceNumberSet pending_packets_;
331 QuicTime::Delta rtt_sample_; // RTT estimate from the most recent ACK. 331 QuicTime::Delta rtt_sample_; // RTT estimate from the most recent ACK.
332 // Number of outstanding crypto handshake packets. 332 // Number of outstanding crypto handshake packets.
333 size_t pending_crypto_packet_count_; 333 size_t pending_crypto_packet_count_;
334 // Number of times the RTO timer has fired in a row without receiving an ack. 334 // Number of times the RTO timer has fired in a row without receiving an ack.
335 size_t consecutive_rto_count_; 335 size_t consecutive_rto_count_;
336 // Number of times the tail loss probe has been sent. 336 // Number of times the tail loss probe has been sent.
337 size_t consecutive_tlp_count_; 337 size_t consecutive_tlp_count_;
338 // Number of times the crypto handshake has been retransmitted. 338 // Number of times the crypto handshake has been retransmitted.
339 size_t consecutive_crypto_retransmission_count_; 339 size_t consecutive_crypto_retransmission_count_;
340 // Maximum number of tail loss probes to send before firing an RTO. 340 // Maximum number of tail loss probes to send before firing an RTO.
341 size_t max_tail_loss_probes_; 341 size_t max_tail_loss_probes_;
342 bool using_pacing_; 342 bool using_pacing_;
343 343
344 DISALLOW_COPY_AND_ASSIGN(QuicSentPacketManager); 344 DISALLOW_COPY_AND_ASSIGN(QuicSentPacketManager);
345 }; 345 };
346 346
347 } // namespace net 347 } // namespace net
348 348
349 #endif // NET_QUIC_QUIC_SENT_PACKET_MANAGER_H_ 349 #endif // NET_QUIC_QUIC_SENT_PACKET_MANAGER_H_
OLDNEW
« no previous file with comments | « net/quic/quic_packet_writer.h ('k') | net/quic/quic_sent_packet_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698