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

Side by Side Diff: net/quic/quic_received_packet_manager.cc

Issue 935333002: Update from https://crrev.com/316786 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 10 months 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
« no previous file with comments | « net/quic/quic_received_packet_manager.h ('k') | net/quic/quic_received_packet_manager_test.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 #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"
11 #include "base/stl_util.h" 11 #include "base/stl_util.h"
12 #include "net/base/linked_hash_map.h" 12 #include "net/base/linked_hash_map.h"
13 #include "net/quic/crypto/crypto_protocol.h" 13 #include "net/quic/crypto/crypto_protocol.h"
14 #include "net/quic/quic_connection_stats.h" 14 #include "net/quic/quic_connection_stats.h"
15 15
16 using std::make_pair;
17 using std::max; 16 using std::max;
18 using std::min; 17 using std::min;
19 using std::numeric_limits; 18 using std::numeric_limits;
20 19
21 namespace net { 20 namespace net {
22 21
23 namespace { 22 namespace {
24 23
25 // The maximum number of packets to ack immediately after a missing packet for 24 // The maximum number of packets to ack immediately after a missing packet for
26 // fast retransmission to kick in at the sender. This limit is created to 25 // fast retransmission to kick in at the sender. This limit is created to
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 73
75 // Optimize the typical case of no gaps. 74 // Optimize the typical case of no gaps.
76 if (sequence_number == largest_observed_ + 1 && packets_entropy_.empty()) { 75 if (sequence_number == largest_observed_ + 1 && packets_entropy_.empty()) {
77 ++first_gap_; 76 ++first_gap_;
78 largest_observed_ = sequence_number; 77 largest_observed_ = sequence_number;
79 return; 78 return;
80 } 79 }
81 if (sequence_number > largest_observed_) { 80 if (sequence_number > largest_observed_) {
82 for (QuicPacketSequenceNumber i = 0; 81 for (QuicPacketSequenceNumber i = 0;
83 i < (sequence_number - largest_observed_ - 1); ++i) { 82 i < (sequence_number - largest_observed_ - 1); ++i) {
84 packets_entropy_.push_back(make_pair(0, false)); 83 packets_entropy_.push_back(std::make_pair(0, false));
85 } 84 }
86 packets_entropy_.push_back(make_pair(entropy_hash, true)); 85 packets_entropy_.push_back(std::make_pair(entropy_hash, true));
87 largest_observed_ = sequence_number; 86 largest_observed_ = sequence_number;
88 } else { 87 } else {
89 packets_entropy_[sequence_number - first_gap_] = 88 packets_entropy_[sequence_number - first_gap_] =
90 make_pair(entropy_hash, true); 89 std::make_pair(entropy_hash, true);
91 AdvanceFirstGapAndGarbageCollectEntropyMap(); 90 AdvanceFirstGapAndGarbageCollectEntropyMap();
92 } 91 }
93 92
94 DVLOG(2) << "setting cumulative received entropy hash to: " 93 DVLOG(2) << "setting cumulative received entropy hash to: "
95 << static_cast<int>(packets_entropy_hash_) 94 << static_cast<int>(packets_entropy_hash_)
96 << " updated with sequence number " << sequence_number 95 << " updated with sequence number " << sequence_number
97 << " entropy hash: " << static_cast<int>(entropy_hash); 96 << " entropy hash: " << static_cast<int>(entropy_hash);
98 } 97 }
99 98
100 void QuicReceivedPacketManager::EntropyTracker::SetCumulativeEntropyUpTo( 99 void QuicReceivedPacketManager::EntropyTracker::SetCumulativeEntropyUpTo(
(...skipping 27 matching lines...) Expand all
128 AdvanceFirstGapAndGarbageCollectEntropyMap() { 127 AdvanceFirstGapAndGarbageCollectEntropyMap() {
129 while (!packets_entropy_.empty() && packets_entropy_.front().second) { 128 while (!packets_entropy_.empty() && packets_entropy_.front().second) {
130 ++first_gap_; 129 ++first_gap_;
131 packets_entropy_.pop_front(); 130 packets_entropy_.pop_front();
132 } 131 }
133 } 132 }
134 133
135 QuicReceivedPacketManager::QuicReceivedPacketManager(QuicConnectionStats* stats) 134 QuicReceivedPacketManager::QuicReceivedPacketManager(QuicConnectionStats* stats)
136 : peer_least_packet_awaiting_ack_(0), 135 : peer_least_packet_awaiting_ack_(0),
137 time_largest_observed_(QuicTime::Zero()), 136 time_largest_observed_(QuicTime::Zero()),
138 receive_algorithm_(ReceiveAlgorithmInterface::Create()),
139 stats_(stats) { 137 stats_(stats) {
140 ack_frame_.largest_observed = 0; 138 ack_frame_.largest_observed = 0;
141 ack_frame_.entropy_hash = 0; 139 ack_frame_.entropy_hash = 0;
142 } 140 }
143 141
144 QuicReceivedPacketManager::~QuicReceivedPacketManager() {} 142 QuicReceivedPacketManager::~QuicReceivedPacketManager() {}
145 143
146 void QuicReceivedPacketManager::RecordPacketReceived( 144 void QuicReceivedPacketManager::RecordPacketReceived(
147 QuicByteCount bytes, 145 QuicByteCount bytes,
148 const QuicPacketHeader& header, 146 const QuicPacketHeader& header,
(...skipping 22 matching lines...) Expand all
171 stats_->max_time_reordering_us = max(stats_->max_time_reordering_us, 169 stats_->max_time_reordering_us = max(stats_->max_time_reordering_us,
172 reordering_time_us); 170 reordering_time_us);
173 } 171 }
174 if (sequence_number > ack_frame_.largest_observed) { 172 if (sequence_number > ack_frame_.largest_observed) {
175 ack_frame_.largest_observed = sequence_number; 173 ack_frame_.largest_observed = sequence_number;
176 time_largest_observed_ = receipt_time; 174 time_largest_observed_ = receipt_time;
177 } 175 }
178 entropy_tracker_.RecordPacketEntropyHash(sequence_number, 176 entropy_tracker_.RecordPacketEntropyHash(sequence_number,
179 header.entropy_hash); 177 header.entropy_hash);
180 178
181 receive_algorithm_->RecordIncomingPacket(
182 bytes, sequence_number, receipt_time);
183
184 received_packet_times_.push_back( 179 received_packet_times_.push_back(
185 std::make_pair(sequence_number, receipt_time)); 180 std::make_pair(sequence_number, receipt_time));
186 181
187 ack_frame_.revived_packets.erase(sequence_number); 182 ack_frame_.revived_packets.erase(sequence_number);
188 } 183 }
189 184
190 void QuicReceivedPacketManager::RecordPacketRevived( 185 void QuicReceivedPacketManager::RecordPacketRevived(
191 QuicPacketSequenceNumber sequence_number) { 186 QuicPacketSequenceNumber sequence_number) {
192 LOG_IF(DFATAL, !IsAwaitingPacket(sequence_number)); 187 LOG_IF(DFATAL, !IsAwaitingPacket(sequence_number));
193 ack_frame_.revived_packets.insert(sequence_number); 188 ack_frame_.revived_packets.insert(sequence_number);
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 225
231 // Ensure the delta is zero if approximate now is "in the past". 226 // Ensure the delta is zero if approximate now is "in the past".
232 ack_frame->delta_time_largest_observed = 227 ack_frame->delta_time_largest_observed =
233 approximate_now < time_largest_observed_ ? 228 approximate_now < time_largest_observed_ ?
234 QuicTime::Delta::Zero() : 229 QuicTime::Delta::Zero() :
235 approximate_now.Subtract(time_largest_observed_); 230 approximate_now.Subtract(time_largest_observed_);
236 231
237 // Remove all packets that are too far from largest_observed to express. 232 // Remove all packets that are too far from largest_observed to express.
238 received_packet_times_.remove_if(isTooLarge(ack_frame_.largest_observed)); 233 received_packet_times_.remove_if(isTooLarge(ack_frame_.largest_observed));
239 234
240 ack_frame->received_packet_times = received_packet_times_; 235 ack_frame->received_packet_times.clear();
241 received_packet_times_.clear(); 236 ack_frame->received_packet_times.swap(received_packet_times_);
242 } 237 }
243 238
244 QuicPacketEntropyHash QuicReceivedPacketManager::EntropyHash( 239 QuicPacketEntropyHash QuicReceivedPacketManager::EntropyHash(
245 QuicPacketSequenceNumber sequence_number) const { 240 QuicPacketSequenceNumber sequence_number) const {
246 return entropy_tracker_.EntropyHash(sequence_number); 241 return entropy_tracker_.EntropyHash(sequence_number);
247 } 242 }
248 243
249 bool QuicReceivedPacketManager::DontWaitForPacketsBefore( 244 bool QuicReceivedPacketManager::DontWaitForPacketsBefore(
250 QuicPacketSequenceNumber least_unacked) { 245 QuicPacketSequenceNumber least_unacked) {
251 ack_frame_.revived_packets.erase( 246 ack_frame_.revived_packets.erase(
(...skipping 30 matching lines...) Expand all
282 return !ack_frame_.missing_packets.empty() && 277 return !ack_frame_.missing_packets.empty() &&
283 (ack_frame_.largest_observed - 278 (ack_frame_.largest_observed -
284 *ack_frame_.missing_packets.rbegin()) <= kMaxPacketsAfterNewMissing; 279 *ack_frame_.missing_packets.rbegin()) <= kMaxPacketsAfterNewMissing;
285 } 280 }
286 281
287 size_t QuicReceivedPacketManager::NumTrackedPackets() const { 282 size_t QuicReceivedPacketManager::NumTrackedPackets() const {
288 return entropy_tracker_.size(); 283 return entropy_tracker_.size();
289 } 284 }
290 285
291 } // namespace net 286 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_received_packet_manager.h ('k') | net/quic/quic_received_packet_manager_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698