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

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

Issue 1330973002: relnote: Refactor QuicAckFrame::missing_packets to support a change to a (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@Tidy_up_DLOG_messages_101773586
Patch Set: Created 5 years, 3 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
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"
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 141
142 QuicReceivedPacketManager::~QuicReceivedPacketManager() {} 142 QuicReceivedPacketManager::~QuicReceivedPacketManager() {}
143 143
144 void QuicReceivedPacketManager::RecordPacketReceived( 144 void QuicReceivedPacketManager::RecordPacketReceived(
145 QuicByteCount bytes, 145 QuicByteCount bytes,
146 const QuicPacketHeader& header, 146 const QuicPacketHeader& header,
147 QuicTime receipt_time) { 147 QuicTime receipt_time) {
148 QuicPacketNumber packet_number = header.packet_packet_number; 148 QuicPacketNumber packet_number = header.packet_packet_number;
149 DCHECK(IsAwaitingPacket(packet_number)); 149 DCHECK(IsAwaitingPacket(packet_number));
150 150
151 InsertMissingPacketsBetween(&ack_frame_, max(ack_frame_.largest_observed + 1, 151 // Adds the range of packet numbers from max(largest observed + 1, least
152 peer_least_packet_awaiting_ack_), 152 // awaiting ack) up to packet_number not including packet_number.
153 packet_number); 153 ack_frame_.missing_packets.Add(
154 max(ack_frame_.largest_observed + 1, peer_least_packet_awaiting_ack_),
155 packet_number);
154 156
155 if (ack_frame_.largest_observed > packet_number) { 157 if (ack_frame_.largest_observed > packet_number) {
156 // We've gotten one of the out of order packets - remove it from our 158 // We've gotten one of the out of order packets - remove it from our
157 // "missing packets" list. 159 // "missing packets" list.
158 DVLOG(1) << "Removing " << packet_number << " from missing list"; 160 DVLOG(1) << "Removing " << packet_number << " from missing list";
159 ack_frame_.missing_packets.erase(packet_number); 161 ack_frame_.missing_packets.Remove(packet_number);
160 162
161 // Record how out of order stats. 163 // Record how out of order stats.
162 ++stats_->packets_reordered; 164 ++stats_->packets_reordered;
163 stats_->max_sequence_reordering = 165 stats_->max_sequence_reordering =
164 max(stats_->max_sequence_reordering, 166 max(stats_->max_sequence_reordering,
165 ack_frame_.largest_observed - packet_number); 167 ack_frame_.largest_observed - packet_number);
166 int64 reordering_time_us = 168 int64 reordering_time_us =
167 receipt_time.Subtract(time_largest_observed_).ToMicroseconds(); 169 receipt_time.Subtract(time_largest_observed_).ToMicroseconds();
168 stats_->max_time_reordering_us = max(stats_->max_time_reordering_us, 170 stats_->max_time_reordering_us = max(stats_->max_time_reordering_us,
169 reordering_time_us); 171 reordering_time_us);
170 } 172 }
171 if (packet_number > ack_frame_.largest_observed) { 173 if (packet_number > ack_frame_.largest_observed) {
172 ack_frame_.largest_observed = packet_number; 174 ack_frame_.largest_observed = packet_number;
173 time_largest_observed_ = receipt_time; 175 time_largest_observed_ = receipt_time;
174 } 176 }
175 entropy_tracker_.RecordPacketEntropyHash(packet_number, header.entropy_hash); 177 entropy_tracker_.RecordPacketEntropyHash(packet_number, header.entropy_hash);
176 178
177 received_packet_times_.push_back(std::make_pair(packet_number, receipt_time)); 179 received_packet_times_.push_back(std::make_pair(packet_number, receipt_time));
178 180
179 ack_frame_.revived_packets.erase(packet_number); 181 ack_frame_.revived_packets.erase(packet_number);
180 } 182 }
181 183
182 void QuicReceivedPacketManager::RecordPacketRevived( 184 void QuicReceivedPacketManager::RecordPacketRevived(
183 QuicPacketNumber packet_number) { 185 QuicPacketNumber packet_number) {
184 LOG_IF(DFATAL, !IsAwaitingPacket(packet_number)); 186 LOG_IF(DFATAL, !IsAwaitingPacket(packet_number));
185 ack_frame_.revived_packets.insert(packet_number); 187 ack_frame_.revived_packets.insert(packet_number);
186 } 188 }
187 189
188 bool QuicReceivedPacketManager::IsMissing(QuicPacketNumber packet_number) { 190 bool QuicReceivedPacketManager::IsMissing(QuicPacketNumber packet_number) {
189 return ContainsKey(ack_frame_.missing_packets, packet_number); 191 return ack_frame_.missing_packets.Contains(packet_number);
190 } 192 }
191 193
192 bool QuicReceivedPacketManager::IsAwaitingPacket( 194 bool QuicReceivedPacketManager::IsAwaitingPacket(
193 QuicPacketNumber packet_number) { 195 QuicPacketNumber packet_number) {
194 return ::net::IsAwaitingPacket(ack_frame_, packet_number); 196 return ::net::IsAwaitingPacket(ack_frame_, packet_number);
195 } 197 }
196 198
197 namespace { 199 namespace {
198 struct isTooLarge { 200 struct isTooLarge {
199 explicit isTooLarge(QuicPacketNumber n) : largest_observed_(n) {} 201 explicit isTooLarge(QuicPacketNumber n) : largest_observed_(n) {}
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
234 QuicPacketEntropyHash QuicReceivedPacketManager::EntropyHash( 236 QuicPacketEntropyHash QuicReceivedPacketManager::EntropyHash(
235 QuicPacketNumber packet_number) const { 237 QuicPacketNumber packet_number) const {
236 return entropy_tracker_.EntropyHash(packet_number); 238 return entropy_tracker_.EntropyHash(packet_number);
237 } 239 }
238 240
239 bool QuicReceivedPacketManager::DontWaitForPacketsBefore( 241 bool QuicReceivedPacketManager::DontWaitForPacketsBefore(
240 QuicPacketNumber least_unacked) { 242 QuicPacketNumber least_unacked) {
241 ack_frame_.revived_packets.erase( 243 ack_frame_.revived_packets.erase(
242 ack_frame_.revived_packets.begin(), 244 ack_frame_.revived_packets.begin(),
243 ack_frame_.revived_packets.lower_bound(least_unacked)); 245 ack_frame_.revived_packets.lower_bound(least_unacked));
244 size_t missing_packets_count = ack_frame_.missing_packets.size(); 246 return ack_frame_.missing_packets.RemoveUpTo(least_unacked);
245 ack_frame_.missing_packets.erase(
246 ack_frame_.missing_packets.begin(),
247 ack_frame_.missing_packets.lower_bound(least_unacked));
248 return missing_packets_count != ack_frame_.missing_packets.size();
249 } 247 }
250 248
251 void QuicReceivedPacketManager::UpdatePacketInformationSentByPeer( 249 void QuicReceivedPacketManager::UpdatePacketInformationSentByPeer(
252 const QuicStopWaitingFrame& stop_waiting) { 250 const QuicStopWaitingFrame& stop_waiting) {
253 // ValidateAck() should fail if peer_least_packet_awaiting_ack_ shrinks. 251 // ValidateAck() should fail if peer_least_packet_awaiting_ack_ shrinks.
254 DCHECK_LE(peer_least_packet_awaiting_ack_, stop_waiting.least_unacked); 252 DCHECK_LE(peer_least_packet_awaiting_ack_, stop_waiting.least_unacked);
255 if (stop_waiting.least_unacked > peer_least_packet_awaiting_ack_) { 253 if (stop_waiting.least_unacked > peer_least_packet_awaiting_ack_) {
256 bool missed_packets = DontWaitForPacketsBefore(stop_waiting.least_unacked); 254 bool missed_packets = DontWaitForPacketsBefore(stop_waiting.least_unacked);
257 if (missed_packets) { 255 if (missed_packets) {
258 DVLOG(1) << "Updating entropy hashed since we missed packets"; 256 DVLOG(1) << "Updating entropy hashed since we missed packets";
259 // There were some missing packets that we won't ever get now. Recalculate 257 // There were some missing packets that we won't ever get now. Recalculate
260 // the received entropy hash. 258 // the received entropy hash.
261 entropy_tracker_.SetCumulativeEntropyUpTo(stop_waiting.least_unacked, 259 entropy_tracker_.SetCumulativeEntropyUpTo(stop_waiting.least_unacked,
262 stop_waiting.entropy_hash); 260 stop_waiting.entropy_hash);
263 } 261 }
264 peer_least_packet_awaiting_ack_ = stop_waiting.least_unacked; 262 peer_least_packet_awaiting_ack_ = stop_waiting.least_unacked;
265 } 263 }
266 DCHECK(ack_frame_.missing_packets.empty() || 264 DCHECK(ack_frame_.missing_packets.Empty() ||
267 *ack_frame_.missing_packets.begin() >= 265 ack_frame_.missing_packets.Min() >= peer_least_packet_awaiting_ack_);
268 peer_least_packet_awaiting_ack_);
269 } 266 }
270 267
271 bool QuicReceivedPacketManager::HasNewMissingPackets() const { 268 bool QuicReceivedPacketManager::HasNewMissingPackets() const {
272 return !ack_frame_.missing_packets.empty() && 269 return !ack_frame_.missing_packets.Empty() &&
273 (ack_frame_.largest_observed - 270 (ack_frame_.largest_observed - ack_frame_.missing_packets.Max()) <=
274 *ack_frame_.missing_packets.rbegin()) <= kMaxPacketsAfterNewMissing; 271 kMaxPacketsAfterNewMissing;
275 } 272 }
276 273
277 size_t QuicReceivedPacketManager::NumTrackedPackets() const { 274 size_t QuicReceivedPacketManager::NumTrackedPackets() const {
278 return entropy_tracker_.size(); 275 return entropy_tracker_.size();
279 } 276 }
280 277
281 } // namespace net 278 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698