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

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

Issue 76723002: Land Recent QUIC Changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix compilation error Created 7 years, 1 month 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 | Annotate | Revision Log
« no previous file with comments | « net/quic/quic_protocol.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 "base/logging.h" 7 #include "base/logging.h"
8 #include "net/base/linked_hash_map.h" 8 #include "net/base/linked_hash_map.h"
9 9
10 using std::make_pair; 10 using std::make_pair;
11 using std::max; 11 using std::max;
12 using std::min; 12 using std::min;
13 13
14 namespace net { 14 namespace net {
15 15
16 QuicReceivedPacketManager::QuicReceivedPacketManager() 16 QuicReceivedPacketManager::QuicReceivedPacketManager()
17 : packets_entropy_hash_(0), 17 : packets_entropy_hash_(0),
18 largest_sequence_number_(0), 18 largest_sequence_number_(0),
19 peer_largest_observed_packet_(0), 19 peer_largest_observed_packet_(0),
20 least_packet_awaited_by_peer_(1), 20 least_packet_awaited_by_peer_(1),
21 peer_least_packet_awaiting_ack_(0), 21 peer_least_packet_awaiting_ack_(0),
22 time_largest_observed_(QuicTime::Zero()) { 22 time_largest_observed_(QuicTime::Zero()) {
23 received_info_.largest_observed = 0; 23 received_info_.largest_observed = 0;
24 received_info_.entropy_hash = 0; 24 received_info_.entropy_hash = 0;
25 } 25 }
26 26
27 QuicReceivedPacketManager::~QuicReceivedPacketManager() {} 27 QuicReceivedPacketManager::~QuicReceivedPacketManager() {}
28 28
29 void QuicReceivedPacketManager::RecordPacketReceived( 29 void QuicReceivedPacketManager::RecordPacketReceived(
30 const QuicPacketHeader& header, QuicTime receipt_time) { 30 const QuicPacketHeader& header,
31 QuicTime receipt_time) {
31 QuicPacketSequenceNumber sequence_number = header.packet_sequence_number; 32 QuicPacketSequenceNumber sequence_number = header.packet_sequence_number;
32 DCHECK(IsAwaitingPacket(sequence_number)); 33 DCHECK(IsAwaitingPacket(sequence_number));
33 34
34 InsertMissingPacketsBetween( 35 InsertMissingPacketsBetween(
35 &received_info_, 36 &received_info_,
36 max(received_info_.largest_observed + 1, peer_least_packet_awaiting_ack_), 37 max(received_info_.largest_observed + 1, peer_least_packet_awaiting_ack_),
37 header.packet_sequence_number); 38 header.packet_sequence_number);
38 39
39 if (received_info_.largest_observed > header.packet_sequence_number) { 40 if (received_info_.largest_observed > header.packet_sequence_number) {
40 // We've gotten one of the out of order packets - remove it from our 41 // We've gotten one of the out of order packets - remove it from our
41 // "missing packets" list. 42 // "missing packets" list.
42 DVLOG(1) << "Removing " << sequence_number << " from missing list"; 43 DVLOG(1) << "Removing " << sequence_number << " from missing list";
43 received_info_.missing_packets.erase(sequence_number); 44 received_info_.missing_packets.erase(sequence_number);
44 } 45 }
45 if (header.packet_sequence_number > received_info_.largest_observed) { 46 if (header.packet_sequence_number > received_info_.largest_observed) {
46 received_info_.largest_observed = header.packet_sequence_number; 47 received_info_.largest_observed = header.packet_sequence_number;
47 time_largest_observed_ = receipt_time; 48 time_largest_observed_ = receipt_time;
48 } 49 }
49 RecordPacketEntropyHash(sequence_number, header.entropy_hash); 50 RecordPacketEntropyHash(sequence_number, header.entropy_hash);
50 } 51 }
51 52
52 bool QuicReceivedPacketManager::IsAwaitingPacket( 53 bool QuicReceivedPacketManager::IsAwaitingPacket(
53 QuicPacketSequenceNumber sequence_number) { 54 QuicPacketSequenceNumber sequence_number) {
54 return ::net::IsAwaitingPacket(received_info_, sequence_number); 55 return ::net::IsAwaitingPacket(received_info_, sequence_number);
55 } 56 }
56 57
57 void QuicReceivedPacketManager::UpdateReceivedPacketInfo( 58 void QuicReceivedPacketManager::UpdateReceivedPacketInfo(
58 ReceivedPacketInfo* received_info, QuicTime approximate_now) { 59 ReceivedPacketInfo* received_info,
60 QuicTime approximate_now) {
59 *received_info = received_info_; 61 *received_info = received_info_;
60 received_info->entropy_hash = EntropyHash(received_info_.largest_observed); 62 received_info->entropy_hash = EntropyHash(received_info_.largest_observed);
63
61 if (time_largest_observed_ == QuicTime::Zero()) { 64 if (time_largest_observed_ == QuicTime::Zero()) {
62 // We have not received any new higher sequence numbers since we sent our 65 // We have received no packets.
63 // last ACK.
64 received_info->delta_time_largest_observed = QuicTime::Delta::Infinite(); 66 received_info->delta_time_largest_observed = QuicTime::Delta::Infinite();
65 } else { 67 return;
66 received_info->delta_time_largest_observed = 68 }
67 approximate_now.Subtract(time_largest_observed_);
68 69
69 time_largest_observed_ = QuicTime::Zero(); 70 if (approximate_now < time_largest_observed_) {
71 // Approximate now may well be "in the past".
72 received_info->delta_time_largest_observed = QuicTime::Delta::Zero();
73 return;
70 } 74 }
75
76 received_info->delta_time_largest_observed =
77 approximate_now.Subtract(time_largest_observed_);
71 } 78 }
72 79
73 void QuicReceivedPacketManager::RecordPacketEntropyHash( 80 void QuicReceivedPacketManager::RecordPacketEntropyHash(
74 QuicPacketSequenceNumber sequence_number, 81 QuicPacketSequenceNumber sequence_number,
75 QuicPacketEntropyHash entropy_hash) { 82 QuicPacketEntropyHash entropy_hash) {
76 if (sequence_number < largest_sequence_number_) { 83 if (sequence_number < largest_sequence_number_) {
77 DLOG(INFO) << "Ignoring received packet entropy for sequence_number:" 84 DLOG(INFO) << "Ignoring received packet entropy for sequence_number:"
78 << sequence_number << " less than largest_peer_sequence_number:" 85 << sequence_number << " less than largest_peer_sequence_number:"
79 << largest_sequence_number_; 86 << largest_sequence_number_;
80 return; 87 return;
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 DCHECK(received_info_.missing_packets.empty() || 192 DCHECK(received_info_.missing_packets.empty() ||
186 *received_info_.missing_packets.begin() >= 193 *received_info_.missing_packets.begin() >=
187 peer_least_packet_awaiting_ack_); 194 peer_least_packet_awaiting_ack_);
188 } 195 }
189 196
190 size_t QuicReceivedPacketManager::GetNumMissingPackets() { 197 size_t QuicReceivedPacketManager::GetNumMissingPackets() {
191 return received_info_.missing_packets.size(); 198 return received_info_.missing_packets.size();
192 } 199 }
193 200
194 } // namespace net 201 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_protocol.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