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

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

Issue 76723002: Land Recent QUIC Changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix compilation error Created 7 years, 1 month 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_reliable_client_stream_test.cc ('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 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 // If this packet has been retransmitted, information on those packets 85 // If this packet has been retransmitted, information on those packets
86 // will be discarded as well. 86 // will be discarded as well.
87 void DiscardUnackedPacket(QuicPacketSequenceNumber sequence_number); 87 void DiscardUnackedPacket(QuicPacketSequenceNumber sequence_number);
88 88
89 // Discards all information about fec packet |sequence_number|. 89 // Discards all information about fec packet |sequence_number|.
90 void DiscardFecPacket(QuicPacketSequenceNumber sequence_number); 90 void DiscardFecPacket(QuicPacketSequenceNumber sequence_number);
91 91
92 // Returns true if |sequence_number| is a retransmission of a packet. 92 // Returns true if |sequence_number| is a retransmission of a packet.
93 bool IsRetransmission(QuicPacketSequenceNumber sequence_number) const; 93 bool IsRetransmission(QuicPacketSequenceNumber sequence_number) const;
94 94
95 // Returns the number of times the data in the packet |sequence_number|
96 // has been transmitted.
97 size_t GetRetransmissionCount(
98 QuicPacketSequenceNumber sequence_number) const;
99
100 // Returns true if the non-FEC packet |sequence_number| is unacked. 95 // Returns true if the non-FEC packet |sequence_number| is unacked.
101 bool IsUnacked(QuicPacketSequenceNumber sequence_number) const; 96 bool IsUnacked(QuicPacketSequenceNumber sequence_number) const;
102 97
103 // Returns true if the FEC packet |sequence_number| is unacked. 98 // Returns true if the FEC packet |sequence_number| is unacked.
104 bool IsFecUnacked(QuicPacketSequenceNumber sequence_number) const; 99 bool IsFecUnacked(QuicPacketSequenceNumber sequence_number) const;
105 100
106 // Returns true if the unacked packet |sequence_number| has retransmittable 101 // Returns true if the unacked packet |sequence_number| has retransmittable
107 // frames. This will only return false if the packet has been acked, if a 102 // frames. This will only return false if the packet has been acked, if a
108 // previous transmission of this packet was ACK'd, or if this packet has been 103 // previous transmission of this packet was ACK'd, or if this packet has been
109 // retransmitted as with different sequence number. 104 // retransmitted as with different sequence number.
(...skipping 14 matching lines...) Expand all
124 119
125 // Retrieves the next pending retransmission. 120 // Retrieves the next pending retransmission.
126 PendingRetransmission NextPendingRetransmission(); 121 PendingRetransmission NextPendingRetransmission();
127 122
128 // Returns the time the fec packet was sent. 123 // Returns the time the fec packet was sent.
129 QuicTime GetFecSentTime(QuicPacketSequenceNumber sequence_number) const; 124 QuicTime GetFecSentTime(QuicPacketSequenceNumber sequence_number) const;
130 125
131 // Returns true if there are any unacked packets. 126 // Returns true if there are any unacked packets.
132 bool HasUnackedPackets() const; 127 bool HasUnackedPackets() const;
133 128
134 // Returns the number of unacked packets. 129 // Returns the number of unacked packets which have retransmittable frames.
135 size_t GetNumUnackedPackets() const; 130 size_t GetNumRetransmittablePackets() const;
136 131
137 // Returns true if there are any unacked FEC packets. 132 // Returns true if there are any unacked FEC packets.
138 bool HasUnackedFecPackets() const; 133 bool HasUnackedFecPackets() const;
139 134
140 // Returns the smallest sequence number of a sent packet which has not been 135 // Returns the smallest sequence number of a sent packet which has not been
141 // acked by the peer. Excludes any packets which have been retransmitted 136 // acked by the peer. Excludes any packets which have been retransmitted
142 // with a new sequence number. If all packets have been acked, returns the 137 // with a new sequence number. If all packets have been acked, returns the
143 // sequence number of the next packet that will be sent. 138 // sequence number of the next packet that will be sent.
144 QuicPacketSequenceNumber GetLeastUnackedSentPacket() const; 139 QuicPacketSequenceNumber GetLeastUnackedSentPacket() const;
145 140
146 // Returns the smallest sequence number of a sent fec packet which has not 141 // Returns the smallest sequence number of a sent fec packet which has not
147 // been acked by the peer. If all packets have been acked, returns the 142 // been acked by the peer. If all packets have been acked, returns the
148 // sequence number of the next packet that will be sent. 143 // sequence number of the next packet that will be sent.
149 QuicPacketSequenceNumber GetLeastUnackedFecPacket() const; 144 QuicPacketSequenceNumber GetLeastUnackedFecPacket() const;
150 145
151 // Returns the set of sequence numbers of all unacked packets. 146 // Returns the set of sequence numbers of all unacked packets.
152 SequenceNumberSet GetUnackedPackets() const; 147 SequenceNumberSet GetUnackedPackets() const;
153 148
154 // Returns true if |sequence_number| is a previous transmission of packet. 149 // Returns true if |sequence_number| is a previous transmission of packet.
155 bool IsPreviousTransmission(QuicPacketSequenceNumber sequence_number) const; 150 bool IsPreviousTransmission(QuicPacketSequenceNumber sequence_number) const;
156 151
157 private: 152 private:
158 struct RetransmissionInfo { 153 struct TransmissionInfo {
159 RetransmissionInfo() {} 154 TransmissionInfo() {}
160 explicit RetransmissionInfo(QuicPacketSequenceNumber sequence_number, 155 TransmissionInfo(RetransmittableFrames* retransmittable_frames,
161 QuicSequenceNumberLength sequence_number_length) 156 QuicSequenceNumberLength sequence_number_length)
162 : sequence_number(sequence_number), 157 : retransmittable_frames(retransmittable_frames),
163 sequence_number_length(sequence_number_length), 158 sequence_number_length(sequence_number_length) {
164 number_nacks(0),
165 number_retransmissions(0) {
166 } 159 }
167 160
168 QuicPacketSequenceNumber sequence_number; 161 RetransmittableFrames* retransmittable_frames;
169 QuicSequenceNumberLength sequence_number_length; 162 QuicSequenceNumberLength sequence_number_length;
170 size_t number_nacks;
171 // TODO(ianswett): I believe this is now obsolete, or could at least be
172 // changed to a bool.
173 size_t number_retransmissions;
174 }; 163 };
175 164
176 typedef linked_hash_map<QuicPacketSequenceNumber, 165 typedef linked_hash_map<QuicPacketSequenceNumber,
177 RetransmittableFrames*> UnackedPacketMap; 166 TransmissionInfo> UnackedPacketMap;
178 typedef linked_hash_map<QuicPacketSequenceNumber, 167 typedef linked_hash_map<QuicPacketSequenceNumber,
179 QuicTime> UnackedFecPacketMap; 168 QuicTime> UnackedFecPacketMap;
180 typedef linked_hash_map<QuicPacketSequenceNumber, 169 typedef linked_hash_map<QuicPacketSequenceNumber,
181 TransmissionType> PendingRetransmissionMap; 170 TransmissionType> PendingRetransmissionMap;
182 typedef base::hash_map<QuicPacketSequenceNumber, 171 typedef base::hash_map<QuicPacketSequenceNumber, size_t> NackMap;
183 RetransmissionInfo> RetransmissionMap;
184 typedef base::hash_map<QuicPacketSequenceNumber, SequenceNumberSet*> 172 typedef base::hash_map<QuicPacketSequenceNumber, SequenceNumberSet*>
185 PreviousTransmissionMap; 173 PreviousTransmissionMap;
186 174
187 // Process the incoming ack looking for newly ack'd data packets. 175 // Process the incoming ack looking for newly ack'd data packets.
188 void HandleAckForSentPackets(const ReceivedPacketInfo& received_info, 176 void HandleAckForSentPackets(const ReceivedPacketInfo& received_info,
189 bool is_truncated_ack); 177 bool is_truncated_ack);
190 178
191 // Process the incoming ack looking for newly ack'd FEC packets. 179 // Process the incoming ack looking for newly ack'd FEC packets.
192 void HandleAckForSentFecPackets(const ReceivedPacketInfo& received_info); 180 void HandleAckForSentFecPackets(const ReceivedPacketInfo& received_info);
193 181
(...skipping 27 matching lines...) Expand all
221 UnackedPacketMap unacked_packets_; 209 UnackedPacketMap unacked_packets_;
222 210
223 // Pending fec packets that have not been acked yet. These packets need to be 211 // Pending fec packets that have not been acked yet. These packets need to be
224 // cleared out of the cgst_window after a timeout since FEC packets are never 212 // cleared out of the cgst_window after a timeout since FEC packets are never
225 // retransmitted. 213 // retransmitted.
226 UnackedFecPacketMap unacked_fec_packets_; 214 UnackedFecPacketMap unacked_fec_packets_;
227 215
228 // Pending retransmissions which have not been packetized and sent yet. 216 // Pending retransmissions which have not been packetized and sent yet.
229 PendingRetransmissionMap pending_retransmissions_; 217 PendingRetransmissionMap pending_retransmissions_;
230 218
231 // Map from sequence number to the retransmission info for a packet. 219 // Map from sequence number to the number of nacks for the packet.
232 // This includes the retransmission timeout, and the NACK count. Only 220 // Only the most recent transmission of packets are present in this map.
233 // the new transmission of a packet will have entries in this map. 221 NackMap nack_map_;
234 RetransmissionMap retransmission_map_;
235 222
236 // Map from sequence number to set of all sequence number that this packet has 223 // Map from sequence number to set of all sequence number that this packet has
237 // been transmitted as. If a packet has not been retransmitted, it will not 224 // been transmitted as. If a packet has not been retransmitted, it will not
238 // have an entry in this map. If any transmission of a packet has been acked 225 // have an entry in this map. If any transmission of a packet has been acked
239 // it will not have an entry in this map. 226 // it will not have an entry in this map.
240 PreviousTransmissionMap previous_transmissions_map_; 227 PreviousTransmissionMap previous_transmissions_map_;
241 228
242 // Tracks if the connection was created by the server. 229 // Tracks if the connection was created by the server.
243 bool is_server_; 230 bool is_server_;
244 231
245 HelperInterface* helper_; 232 HelperInterface* helper_;
246 233
247 // An AckNotifier can register to be informed when ACKs have been received for 234 // An AckNotifier can register to be informed when ACKs have been received for
248 // all packets that a given block of data was sent in. The AckNotifierManager 235 // all packets that a given block of data was sent in. The AckNotifierManager
249 // maintains the currently active notifiers. 236 // maintains the currently active notifiers.
250 AckNotifierManager ack_notifier_manager_; 237 AckNotifierManager ack_notifier_manager_;
251 238
252 DISALLOW_COPY_AND_ASSIGN(QuicSentPacketManager); 239 DISALLOW_COPY_AND_ASSIGN(QuicSentPacketManager);
253 }; 240 };
254 241
255 } // namespace net 242 } // namespace net
256 243
257 #endif // NET_QUIC_QUIC_SENT_PACKET_MANAGER_H_ 244 #endif // NET_QUIC_QUIC_SENT_PACKET_MANAGER_H_
OLDNEW
« no previous file with comments | « net/quic/quic_reliable_client_stream_test.cc ('k') | net/quic/quic_sent_packet_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698