| 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 |