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_ack_notifier.cc

Issue 885443002: Roll Chrome into Mojo. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Rebase to ToT mojo 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_ack_notifier.h ('k') | net/quic/quic_ack_notifier_manager.h » ('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_ack_notifier.h" 5 #include "net/quic/quic_ack_notifier.h"
6 6
7 #include <set> 7 #include <set>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/stl_util.h" 10 #include "base/stl_util.h"
11 11
12 using base::hash_map; 12 using base::hash_map;
13 using std::make_pair; 13 using std::make_pair;
14 14
15 namespace net { 15 namespace net {
16 16
17 QuicAckNotifier::PacketInfo::PacketInfo() : packet_payload_size(0) {
18 }
19
20 QuicAckNotifier::PacketInfo::PacketInfo(int payload_size)
21 : packet_payload_size(payload_size) {
22 }
23
24 QuicAckNotifier::DelegateInterface::DelegateInterface() {} 17 QuicAckNotifier::DelegateInterface::DelegateInterface() {}
25 18
26 QuicAckNotifier::DelegateInterface::~DelegateInterface() {} 19 QuicAckNotifier::DelegateInterface::~DelegateInterface() {}
27 20
28 QuicAckNotifier::QuicAckNotifier(DelegateInterface* delegate) 21 QuicAckNotifier::QuicAckNotifier(DelegateInterface* delegate)
29 : delegate_(delegate), 22 : delegate_(delegate),
23 unacked_packets_(0),
30 retransmitted_packet_count_(0), 24 retransmitted_packet_count_(0),
31 retransmitted_byte_count_(0) { 25 retransmitted_byte_count_(0) {
32 DCHECK(delegate); 26 DCHECK(delegate);
33 } 27 }
34 28
35 QuicAckNotifier::~QuicAckNotifier() { 29 QuicAckNotifier::~QuicAckNotifier() {
36 } 30 }
37 31
38 void QuicAckNotifier::AddSequenceNumber( 32 void QuicAckNotifier::AddSequenceNumber(
39 const QuicPacketSequenceNumber& sequence_number, 33 const QuicPacketSequenceNumber& sequence_number,
40 int packet_payload_size) { 34 int packet_payload_size) {
41 sequence_numbers_.insert(make_pair(sequence_number, 35 ++unacked_packets_;
42 PacketInfo(packet_payload_size)));
43
44 DVLOG(1) << "AckNotifier waiting for packet: " << sequence_number; 36 DVLOG(1) << "AckNotifier waiting for packet: " << sequence_number;
45 } 37 }
46 38
47 bool QuicAckNotifier::OnAck(QuicPacketSequenceNumber sequence_number, 39 bool QuicAckNotifier::OnAck(QuicPacketSequenceNumber sequence_number,
48 QuicTime::Delta delta_largest_observed) { 40 QuicTime::Delta delta_largest_observed) {
49 DCHECK(ContainsKey(sequence_numbers_, sequence_number)); 41 if (unacked_packets_ <= 0) {
50 sequence_numbers_.erase(sequence_number); 42 LOG(DFATAL) << "Acked more packets than were tracked.";
43 return true;
44 }
45 --unacked_packets_;
51 if (IsEmpty()) { 46 if (IsEmpty()) {
52 // We have seen all the sequence numbers we were waiting for, trigger 47 // We have seen all the sequence numbers we were waiting for, trigger
53 // callback notification. 48 // callback notification.
54 delegate_->OnAckNotification(retransmitted_packet_count_, 49 delegate_->OnAckNotification(retransmitted_packet_count_,
55 retransmitted_byte_count_, 50 retransmitted_byte_count_,
56 delta_largest_observed); 51 delta_largest_observed);
57 return true; 52 return true;
58 } 53 }
59 return false; 54 return false;
60 } 55 }
61 56
62 void QuicAckNotifier::UpdateSequenceNumber( 57 void QuicAckNotifier::OnPacketRetransmitted(int packet_payload_size) {
63 QuicPacketSequenceNumber old_sequence_number,
64 QuicPacketSequenceNumber new_sequence_number) {
65 DCHECK(!ContainsKey(sequence_numbers_, new_sequence_number));
66
67 PacketInfo packet_info;
68 auto it = sequence_numbers_.find(old_sequence_number);
69 if (it != sequence_numbers_.end()) {
70 packet_info = it->second;
71 sequence_numbers_.erase(it);
72 } else {
73 DLOG(DFATAL) << "Old sequence number not found.";
74 }
75
76 ++retransmitted_packet_count_; 58 ++retransmitted_packet_count_;
77 retransmitted_byte_count_ += packet_info.packet_payload_size; 59 retransmitted_byte_count_ += packet_payload_size;
78 sequence_numbers_.insert(make_pair(new_sequence_number, packet_info));
79
80 DVLOG(1) << "AckNotifier waiting for packet: " << new_sequence_number
81 << " (retransmitted " << old_sequence_number << ").";
82 } 60 }
83 61
84 }; // namespace net 62 }; // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_ack_notifier.h ('k') | net/quic/quic_ack_notifier_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698