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 <limits> | 7 #include <limits> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
128 AdvanceFirstGapAndGarbageCollectEntropyMap() { | 128 AdvanceFirstGapAndGarbageCollectEntropyMap() { |
129 while (!packets_entropy_.empty() && packets_entropy_.front().second) { | 129 while (!packets_entropy_.empty() && packets_entropy_.front().second) { |
130 ++first_gap_; | 130 ++first_gap_; |
131 packets_entropy_.pop_front(); | 131 packets_entropy_.pop_front(); |
132 } | 132 } |
133 } | 133 } |
134 | 134 |
135 QuicReceivedPacketManager::QuicReceivedPacketManager(QuicConnectionStats* stats) | 135 QuicReceivedPacketManager::QuicReceivedPacketManager(QuicConnectionStats* stats) |
136 : peer_least_packet_awaiting_ack_(0), | 136 : peer_least_packet_awaiting_ack_(0), |
137 time_largest_observed_(QuicTime::Zero()), | 137 time_largest_observed_(QuicTime::Zero()), |
138 receive_algorithm_(ReceiveAlgorithmInterface::Create()), | |
139 stats_(stats) { | 138 stats_(stats) { |
140 ack_frame_.largest_observed = 0; | 139 ack_frame_.largest_observed = 0; |
141 ack_frame_.entropy_hash = 0; | 140 ack_frame_.entropy_hash = 0; |
142 } | 141 } |
143 | 142 |
144 QuicReceivedPacketManager::~QuicReceivedPacketManager() {} | 143 QuicReceivedPacketManager::~QuicReceivedPacketManager() {} |
145 | 144 |
146 void QuicReceivedPacketManager::RecordPacketReceived( | 145 void QuicReceivedPacketManager::RecordPacketReceived( |
147 QuicByteCount bytes, | 146 QuicByteCount bytes, |
148 const QuicPacketHeader& header, | 147 const QuicPacketHeader& header, |
(...skipping 22 matching lines...) Expand all Loading... |
171 stats_->max_time_reordering_us = max(stats_->max_time_reordering_us, | 170 stats_->max_time_reordering_us = max(stats_->max_time_reordering_us, |
172 reordering_time_us); | 171 reordering_time_us); |
173 } | 172 } |
174 if (sequence_number > ack_frame_.largest_observed) { | 173 if (sequence_number > ack_frame_.largest_observed) { |
175 ack_frame_.largest_observed = sequence_number; | 174 ack_frame_.largest_observed = sequence_number; |
176 time_largest_observed_ = receipt_time; | 175 time_largest_observed_ = receipt_time; |
177 } | 176 } |
178 entropy_tracker_.RecordPacketEntropyHash(sequence_number, | 177 entropy_tracker_.RecordPacketEntropyHash(sequence_number, |
179 header.entropy_hash); | 178 header.entropy_hash); |
180 | 179 |
181 receive_algorithm_->RecordIncomingPacket( | |
182 bytes, sequence_number, receipt_time); | |
183 | |
184 received_packet_times_.push_back( | 180 received_packet_times_.push_back( |
185 std::make_pair(sequence_number, receipt_time)); | 181 std::make_pair(sequence_number, receipt_time)); |
186 | 182 |
187 ack_frame_.revived_packets.erase(sequence_number); | 183 ack_frame_.revived_packets.erase(sequence_number); |
188 } | 184 } |
189 | 185 |
190 void QuicReceivedPacketManager::RecordPacketRevived( | 186 void QuicReceivedPacketManager::RecordPacketRevived( |
191 QuicPacketSequenceNumber sequence_number) { | 187 QuicPacketSequenceNumber sequence_number) { |
192 LOG_IF(DFATAL, !IsAwaitingPacket(sequence_number)); | 188 LOG_IF(DFATAL, !IsAwaitingPacket(sequence_number)); |
193 ack_frame_.revived_packets.insert(sequence_number); | 189 ack_frame_.revived_packets.insert(sequence_number); |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
230 | 226 |
231 // Ensure the delta is zero if approximate now is "in the past". | 227 // Ensure the delta is zero if approximate now is "in the past". |
232 ack_frame->delta_time_largest_observed = | 228 ack_frame->delta_time_largest_observed = |
233 approximate_now < time_largest_observed_ ? | 229 approximate_now < time_largest_observed_ ? |
234 QuicTime::Delta::Zero() : | 230 QuicTime::Delta::Zero() : |
235 approximate_now.Subtract(time_largest_observed_); | 231 approximate_now.Subtract(time_largest_observed_); |
236 | 232 |
237 // Remove all packets that are too far from largest_observed to express. | 233 // Remove all packets that are too far from largest_observed to express. |
238 received_packet_times_.remove_if(isTooLarge(ack_frame_.largest_observed)); | 234 received_packet_times_.remove_if(isTooLarge(ack_frame_.largest_observed)); |
239 | 235 |
240 ack_frame->received_packet_times = received_packet_times_; | 236 ack_frame->received_packet_times.clear(); |
241 received_packet_times_.clear(); | 237 ack_frame->received_packet_times.swap(received_packet_times_); |
242 } | 238 } |
243 | 239 |
244 QuicPacketEntropyHash QuicReceivedPacketManager::EntropyHash( | 240 QuicPacketEntropyHash QuicReceivedPacketManager::EntropyHash( |
245 QuicPacketSequenceNumber sequence_number) const { | 241 QuicPacketSequenceNumber sequence_number) const { |
246 return entropy_tracker_.EntropyHash(sequence_number); | 242 return entropy_tracker_.EntropyHash(sequence_number); |
247 } | 243 } |
248 | 244 |
249 bool QuicReceivedPacketManager::DontWaitForPacketsBefore( | 245 bool QuicReceivedPacketManager::DontWaitForPacketsBefore( |
250 QuicPacketSequenceNumber least_unacked) { | 246 QuicPacketSequenceNumber least_unacked) { |
251 ack_frame_.revived_packets.erase( | 247 ack_frame_.revived_packets.erase( |
(...skipping 30 matching lines...) Expand all Loading... |
282 return !ack_frame_.missing_packets.empty() && | 278 return !ack_frame_.missing_packets.empty() && |
283 (ack_frame_.largest_observed - | 279 (ack_frame_.largest_observed - |
284 *ack_frame_.missing_packets.rbegin()) <= kMaxPacketsAfterNewMissing; | 280 *ack_frame_.missing_packets.rbegin()) <= kMaxPacketsAfterNewMissing; |
285 } | 281 } |
286 | 282 |
287 size_t QuicReceivedPacketManager::NumTrackedPackets() const { | 283 size_t QuicReceivedPacketManager::NumTrackedPackets() const { |
288 return entropy_tracker_.size(); | 284 return entropy_tracker_.size(); |
289 } | 285 } |
290 | 286 |
291 } // namespace net | 287 } // namespace net |
OLD | NEW |