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 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
168 DVLOG(1) << "Removing " << packet_number << " from missing list"; | 168 DVLOG(1) << "Removing " << packet_number << " from missing list"; |
169 ack_frame_.packets.Remove(packet_number); | 169 ack_frame_.packets.Remove(packet_number); |
170 } | 170 } |
171 | 171 |
172 // Record how out of order stats. | 172 // Record how out of order stats. |
173 ++stats_->packets_reordered; | 173 ++stats_->packets_reordered; |
174 stats_->max_sequence_reordering = | 174 stats_->max_sequence_reordering = |
175 max(stats_->max_sequence_reordering, | 175 max(stats_->max_sequence_reordering, |
176 ack_frame_.largest_observed - packet_number); | 176 ack_frame_.largest_observed - packet_number); |
177 int64_t reordering_time_us = | 177 int64_t reordering_time_us = |
178 receipt_time.Subtract(time_largest_observed_).ToMicroseconds(); | 178 (receipt_time - time_largest_observed_).ToMicroseconds(); |
179 stats_->max_time_reordering_us = | 179 stats_->max_time_reordering_us = |
180 max(stats_->max_time_reordering_us, reordering_time_us); | 180 max(stats_->max_time_reordering_us, reordering_time_us); |
181 } | 181 } |
182 if (packet_number > ack_frame_.largest_observed) { | 182 if (packet_number > ack_frame_.largest_observed) { |
183 ack_frame_.largest_observed = packet_number; | 183 ack_frame_.largest_observed = packet_number; |
184 time_largest_observed_ = receipt_time; | 184 time_largest_observed_ = receipt_time; |
185 } | 185 } |
186 if (ack_frame_.missing) { | 186 if (ack_frame_.missing) { |
187 entropy_tracker_.RecordPacketEntropyHash(packet_number, | 187 entropy_tracker_.RecordPacketEntropyHash(packet_number, |
188 header.entropy_hash); | 188 header.entropy_hash); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
224 ack_frame_updated_ = false; | 224 ack_frame_updated_ = false; |
225 if (ack_frame_.missing) { | 225 if (ack_frame_.missing) { |
226 ack_frame_.entropy_hash = EntropyHash(ack_frame_.largest_observed); | 226 ack_frame_.entropy_hash = EntropyHash(ack_frame_.largest_observed); |
227 } | 227 } |
228 | 228 |
229 if (time_largest_observed_ == QuicTime::Zero()) { | 229 if (time_largest_observed_ == QuicTime::Zero()) { |
230 // We have received no packets. | 230 // We have received no packets. |
231 ack_frame_.ack_delay_time = QuicTime::Delta::Infinite(); | 231 ack_frame_.ack_delay_time = QuicTime::Delta::Infinite(); |
232 } else { | 232 } else { |
233 // Ensure the delta is zero if approximate now is "in the past". | 233 // Ensure the delta is zero if approximate now is "in the past". |
234 ack_frame_.ack_delay_time = | 234 ack_frame_.ack_delay_time = approximate_now < time_largest_observed_ |
235 approximate_now < time_largest_observed_ | 235 ? QuicTime::Delta::Zero() |
236 ? QuicTime::Delta::Zero() | 236 : approximate_now - time_largest_observed_; |
237 : approximate_now.Subtract(time_largest_observed_); | |
238 } | 237 } |
239 | 238 |
240 // Clear all packet times if any are too far from largest observed. | 239 // Clear all packet times if any are too far from largest observed. |
241 // It's expected this is extremely rare. | 240 // It's expected this is extremely rare. |
242 for (PacketTimeVector::iterator it = ack_frame_.received_packet_times.begin(); | 241 for (PacketTimeVector::iterator it = ack_frame_.received_packet_times.begin(); |
243 it != ack_frame_.received_packet_times.end();) { | 242 it != ack_frame_.received_packet_times.end();) { |
244 if (ack_frame_.largest_observed - it->first >= | 243 if (ack_frame_.largest_observed - it->first >= |
245 numeric_limits<uint8_t>::max()) { | 244 numeric_limits<uint8_t>::max()) { |
246 it = ack_frame_.received_packet_times.erase(it); | 245 it = ack_frame_.received_packet_times.erase(it); |
247 } else { | 246 } else { |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
314 | 313 |
315 void QuicReceivedPacketManager::SetVersion(QuicVersion version) { | 314 void QuicReceivedPacketManager::SetVersion(QuicVersion version) { |
316 ack_frame_.missing = version <= QUIC_VERSION_33; | 315 ack_frame_.missing = version <= QUIC_VERSION_33; |
317 } | 316 } |
318 | 317 |
319 bool QuicReceivedPacketManager::ack_frame_updated() const { | 318 bool QuicReceivedPacketManager::ack_frame_updated() const { |
320 return ack_frame_updated_; | 319 return ack_frame_updated_; |
321 } | 320 } |
322 | 321 |
323 } // namespace net | 322 } // namespace net |
OLD | NEW |