| 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 #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 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 197 | 197 |
| 198 | 198 |
| 199 private: | 199 private: |
| 200 friend class test::QuicConnectionPeer; | 200 friend class test::QuicConnectionPeer; |
| 201 friend class test::QuicSentPacketManagerPeer; | 201 friend class test::QuicSentPacketManagerPeer; |
| 202 | 202 |
| 203 struct TransmissionInfo { | 203 struct TransmissionInfo { |
| 204 TransmissionInfo() | 204 TransmissionInfo() |
| 205 : retransmittable_frames(NULL), | 205 : retransmittable_frames(NULL), |
| 206 sequence_number_length(PACKET_1BYTE_SEQUENCE_NUMBER), | 206 sequence_number_length(PACKET_1BYTE_SEQUENCE_NUMBER), |
| 207 sent_time(QuicTime::Zero()) { } | 207 sent_time(QuicTime::Zero()), |
| 208 previous_transmissions(NULL) { } |
| 208 TransmissionInfo(RetransmittableFrames* retransmittable_frames, | 209 TransmissionInfo(RetransmittableFrames* retransmittable_frames, |
| 209 QuicSequenceNumberLength sequence_number_length) | 210 QuicSequenceNumberLength sequence_number_length) |
| 210 : retransmittable_frames(retransmittable_frames), | 211 : retransmittable_frames(retransmittable_frames), |
| 211 sequence_number_length(sequence_number_length), | 212 sequence_number_length(sequence_number_length), |
| 212 sent_time(QuicTime::Zero()) { | 213 sent_time(QuicTime::Zero()), |
| 214 previous_transmissions(NULL) { |
| 213 } | 215 } |
| 214 | 216 |
| 215 RetransmittableFrames* retransmittable_frames; | 217 RetransmittableFrames* retransmittable_frames; |
| 216 QuicSequenceNumberLength sequence_number_length; | 218 QuicSequenceNumberLength sequence_number_length; |
| 217 // Zero when the packet is serialized, non-zero once it's sent. | 219 // Zero when the packet is serialized, non-zero once it's sent. |
| 218 QuicTime sent_time; | 220 QuicTime sent_time; |
| 221 // Stores all previous transmissions if the packet has been retransmitted, |
| 222 // and is NULL otherwise. |
| 223 SequenceNumberSet* previous_transmissions; |
| 219 }; | 224 }; |
| 220 | 225 |
| 221 typedef linked_hash_map<QuicPacketSequenceNumber, | 226 typedef linked_hash_map<QuicPacketSequenceNumber, |
| 222 TransmissionInfo> UnackedPacketMap; | 227 TransmissionInfo> UnackedPacketMap; |
| 223 typedef linked_hash_map<QuicPacketSequenceNumber, | 228 typedef linked_hash_map<QuicPacketSequenceNumber, |
| 224 TransmissionType> PendingRetransmissionMap; | 229 TransmissionType> PendingRetransmissionMap; |
| 225 typedef base::hash_map<QuicPacketSequenceNumber, SequenceNumberSet*> | 230 typedef base::hash_map<QuicPacketSequenceNumber, SequenceNumberSet*> |
| 226 PreviousTransmissionMap; | 231 PreviousTransmissionMap; |
| 227 | 232 |
| 228 // Process the incoming ack looking for newly ack'd data packets. | 233 // Process the incoming ack looking for newly ack'd data packets. |
| (...skipping 16 matching lines...) Expand all Loading... |
| 245 // retransmissions. Returns false if there are no retransmittable frames for | 250 // retransmissions. Returns false if there are no retransmittable frames for |
| 246 // |sequence_number| and true if it will be retransmitted. | 251 // |sequence_number| and true if it will be retransmitted. |
| 247 bool MarkForRetransmission(QuicPacketSequenceNumber sequence_number, | 252 bool MarkForRetransmission(QuicPacketSequenceNumber sequence_number, |
| 248 TransmissionType transmission_type); | 253 TransmissionType transmission_type); |
| 249 | 254 |
| 250 // Returns the length of the serialized sequence number for | 255 // Returns the length of the serialized sequence number for |
| 251 // the packet |sequence_number|. | 256 // the packet |sequence_number|. |
| 252 QuicSequenceNumberLength GetSequenceNumberLength( | 257 QuicSequenceNumberLength GetSequenceNumberLength( |
| 253 QuicPacketSequenceNumber sequence_number) const; | 258 QuicPacketSequenceNumber sequence_number) const; |
| 254 | 259 |
| 255 // Returns the sequence number of the packet that |sequence_number| was | |
| 256 // most recently transmitted as. | |
| 257 QuicPacketSequenceNumber GetMostRecentTransmission( | |
| 258 QuicPacketSequenceNumber sequence_number) const; | |
| 259 | |
| 260 // Clears up to |num_to_clear| previous transmissions in order to make room | 260 // Clears up to |num_to_clear| previous transmissions in order to make room |
| 261 // in the ack frame for new acks. | 261 // in the ack frame for new acks. |
| 262 void ClearPreviousRetransmissions(size_t num_to_clear); | 262 void ClearPreviousRetransmissions(size_t num_to_clear); |
| 263 | 263 |
| 264 void CleanupPacketHistory(); | 264 void CleanupPacketHistory(); |
| 265 | 265 |
| 266 // Newly serialized retransmittable and fec packets are added to this map, | 266 // Newly serialized retransmittable and fec packets are added to this map, |
| 267 // which contains owning pointers to any contained frames. If a packet is | 267 // which contains owning pointers to any contained frames. If a packet is |
| 268 // retransmitted, this map will contain entries for both the old and the new | 268 // retransmitted, this map will contain entries for both the old and the new |
| 269 // packet. The old packet's retransmittable frames entry will be NULL, while | 269 // packet. The old packet's retransmittable frames entry will be NULL, while |
| 270 // the new packet's entry will contain the frames to retransmit. | 270 // the new packet's entry will contain the frames to retransmit. |
| 271 // If the old packet is acked before the new packet, then the old entry will | 271 // If the old packet is acked before the new packet, then the old entry will |
| 272 // be removed from the map and the new entry's retransmittable frames will be | 272 // be removed from the map and the new entry's retransmittable frames will be |
| 273 // set to NULL. | 273 // set to NULL. |
| 274 UnackedPacketMap unacked_packets_; | 274 UnackedPacketMap unacked_packets_; |
| 275 | 275 |
| 276 // Pending retransmissions which have not been packetized and sent yet. | 276 // Pending retransmissions which have not been packetized and sent yet. |
| 277 PendingRetransmissionMap pending_retransmissions_; | 277 PendingRetransmissionMap pending_retransmissions_; |
| 278 | 278 |
| 279 // Map from sequence number to set of all sequence number that this packet has | |
| 280 // been transmitted as. If a packet has not been retransmitted, it will not | |
| 281 // have an entry in this map. If any transmission of a packet has been acked | |
| 282 // it will not have an entry in this map. | |
| 283 PreviousTransmissionMap previous_transmissions_map_; | |
| 284 | |
| 285 // Tracks if the connection was created by the server. | 279 // Tracks if the connection was created by the server. |
| 286 bool is_server_; | 280 bool is_server_; |
| 287 | 281 |
| 288 HelperInterface* helper_; | 282 HelperInterface* helper_; |
| 289 | 283 |
| 290 // An AckNotifier can register to be informed when ACKs have been received for | 284 // An AckNotifier can register to be informed when ACKs have been received for |
| 291 // all packets that a given block of data was sent in. The AckNotifierManager | 285 // all packets that a given block of data was sent in. The AckNotifierManager |
| 292 // maintains the currently active notifiers. | 286 // maintains the currently active notifiers. |
| 293 AckNotifierManager ack_notifier_manager_; | 287 AckNotifierManager ack_notifier_manager_; |
| 294 | 288 |
| 295 const QuicClock* clock_; | 289 const QuicClock* clock_; |
| 296 scoped_ptr<SendAlgorithmInterface> send_algorithm_; | 290 scoped_ptr<SendAlgorithmInterface> send_algorithm_; |
| 297 // Tracks the send time, size, and nack count of sent packets. Packets are | 291 // Tracks the send time, size, and nack count of sent packets. Packets are |
| 298 // removed after 5 seconds and they've been removed from pending_packets_. | 292 // removed after 5 seconds and they've been removed from pending_packets_. |
| 299 SendAlgorithmInterface::SentPacketsMap packet_history_map_; | 293 SendAlgorithmInterface::SentPacketsMap packet_history_map_; |
| 300 // Packets that are outstanding and have not been abandoned or lost. | 294 // Packets that are outstanding and have not been abandoned or lost. |
| 301 SequenceNumberSet pending_packets_; | 295 SequenceNumberSet pending_packets_; |
| 302 QuicTime::Delta rtt_sample_; // RTT estimate from the most recent ACK. | 296 QuicTime::Delta rtt_sample_; // RTT estimate from the most recent ACK. |
| 303 // Number of times the RTO timer has fired in a row without receiving an ack. | 297 // Number of times the RTO timer has fired in a row without receiving an ack. |
| 304 size_t consecutive_rto_count_; | 298 size_t consecutive_rto_count_; |
| 305 bool using_pacing_; | 299 bool using_pacing_; |
| 306 | 300 |
| 307 DISALLOW_COPY_AND_ASSIGN(QuicSentPacketManager); | 301 DISALLOW_COPY_AND_ASSIGN(QuicSentPacketManager); |
| 308 }; | 302 }; |
| 309 | 303 |
| 310 } // namespace net | 304 } // namespace net |
| 311 | 305 |
| 312 #endif // NET_QUIC_QUIC_SENT_PACKET_MANAGER_H_ | 306 #endif // NET_QUIC_QUIC_SENT_PACKET_MANAGER_H_ |
| OLD | NEW |