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/quic_received_packet_manager.h" | 5 #include "net/quic/quic_received_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/base/linked_hash_map.h" | 9 #include "net/base/linked_hash_map.h" |
10 #include "net/quic/quic_connection_stats.h" | 10 #include "net/quic/quic_connection_stats.h" |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
122 break; | 122 break; |
123 } | 123 } |
124 packets_entropy_.erase(it); | 124 packets_entropy_.erase(it); |
125 ++first_gap_; | 125 ++first_gap_; |
126 } | 126 } |
127 } | 127 } |
128 | 128 |
129 QuicReceivedPacketManager::QuicReceivedPacketManager( | 129 QuicReceivedPacketManager::QuicReceivedPacketManager( |
130 CongestionFeedbackType congestion_type, | 130 CongestionFeedbackType congestion_type, |
131 QuicConnectionStats* stats) | 131 QuicConnectionStats* stats) |
132 : peer_largest_observed_packet_(0), | 132 : peer_least_packet_awaiting_ack_(0), |
133 least_packet_awaited_by_peer_(1), | |
134 peer_least_packet_awaiting_ack_(0), | |
135 time_largest_observed_(QuicTime::Zero()), | 133 time_largest_observed_(QuicTime::Zero()), |
136 receive_algorithm_(ReceiveAlgorithmInterface::Create(congestion_type)), | 134 receive_algorithm_(ReceiveAlgorithmInterface::Create(congestion_type)), |
137 stats_(stats) { | 135 stats_(stats) { |
138 ack_frame_.largest_observed = 0; | 136 ack_frame_.largest_observed = 0; |
139 ack_frame_.entropy_hash = 0; | 137 ack_frame_.entropy_hash = 0; |
140 } | 138 } |
141 | 139 |
142 QuicReceivedPacketManager::~QuicReceivedPacketManager() {} | 140 QuicReceivedPacketManager::~QuicReceivedPacketManager() {} |
143 | 141 |
144 void QuicReceivedPacketManager::RecordPacketReceived( | 142 void QuicReceivedPacketManager::RecordPacketReceived( |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
222 bool QuicReceivedPacketManager::GenerateCongestionFeedback( | 220 bool QuicReceivedPacketManager::GenerateCongestionFeedback( |
223 QuicCongestionFeedbackFrame* feedback) { | 221 QuicCongestionFeedbackFrame* feedback) { |
224 return receive_algorithm_->GenerateCongestionFeedback(feedback); | 222 return receive_algorithm_->GenerateCongestionFeedback(feedback); |
225 } | 223 } |
226 | 224 |
227 QuicPacketEntropyHash QuicReceivedPacketManager::EntropyHash( | 225 QuicPacketEntropyHash QuicReceivedPacketManager::EntropyHash( |
228 QuicPacketSequenceNumber sequence_number) const { | 226 QuicPacketSequenceNumber sequence_number) const { |
229 return entropy_tracker_.EntropyHash(sequence_number); | 227 return entropy_tracker_.EntropyHash(sequence_number); |
230 } | 228 } |
231 | 229 |
232 void QuicReceivedPacketManager::UpdatePacketInformationReceivedByPeer( | |
233 const QuicAckFrame& ack_frame) { | |
234 // ValidateAck should fail if largest_observed ever shrinks. | |
235 DCHECK_LE(peer_largest_observed_packet_, ack_frame.largest_observed); | |
236 peer_largest_observed_packet_ = ack_frame.largest_observed; | |
237 | |
238 if (ack_frame.missing_packets.empty()) { | |
239 least_packet_awaited_by_peer_ = peer_largest_observed_packet_ + 1; | |
240 } else { | |
241 least_packet_awaited_by_peer_ = *(ack_frame.missing_packets.begin()); | |
242 } | |
243 } | |
244 | |
245 bool QuicReceivedPacketManager::DontWaitForPacketsBefore( | 230 bool QuicReceivedPacketManager::DontWaitForPacketsBefore( |
246 QuicPacketSequenceNumber least_unacked) { | 231 QuicPacketSequenceNumber least_unacked) { |
247 ack_frame_.revived_packets.erase( | 232 ack_frame_.revived_packets.erase( |
248 ack_frame_.revived_packets.begin(), | 233 ack_frame_.revived_packets.begin(), |
249 ack_frame_.revived_packets.lower_bound(least_unacked)); | 234 ack_frame_.revived_packets.lower_bound(least_unacked)); |
250 size_t missing_packets_count = ack_frame_.missing_packets.size(); | 235 size_t missing_packets_count = ack_frame_.missing_packets.size(); |
251 ack_frame_.missing_packets.erase( | 236 ack_frame_.missing_packets.erase( |
252 ack_frame_.missing_packets.begin(), | 237 ack_frame_.missing_packets.begin(), |
253 ack_frame_.missing_packets.lower_bound(least_unacked)); | 238 ack_frame_.missing_packets.lower_bound(least_unacked)); |
254 return missing_packets_count != ack_frame_.missing_packets.size(); | 239 return missing_packets_count != ack_frame_.missing_packets.size(); |
(...skipping 23 matching lines...) Expand all Loading... |
278 return !ack_frame_.missing_packets.empty(); | 263 return !ack_frame_.missing_packets.empty(); |
279 } | 264 } |
280 | 265 |
281 bool QuicReceivedPacketManager::HasNewMissingPackets() { | 266 bool QuicReceivedPacketManager::HasNewMissingPackets() { |
282 return HasMissingPackets() && | 267 return HasMissingPackets() && |
283 (ack_frame_.largest_observed - | 268 (ack_frame_.largest_observed - |
284 *ack_frame_.missing_packets.rbegin()) <= kMaxPacketsAfterNewMissing; | 269 *ack_frame_.missing_packets.rbegin()) <= kMaxPacketsAfterNewMissing; |
285 } | 270 } |
286 | 271 |
287 } // namespace net | 272 } // namespace net |
OLD | NEW |