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

Side by Side Diff: net/quic/core/frames/quic_ack_frame.cc

Issue 2547583002: Landing Recent QUIC changes until Fri Nov 18 23:21:04 2016 +0000 (Closed)
Patch Set: Remove explicit HTTP/2 enum usage Created 4 years 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/core/frames/quic_ack_frame.h ('k') | net/quic/core/frames/quic_blocked_frame.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "net/quic/core/frames/quic_ack_frame.h"
6
7 #include "net/quic/core/quic_constants.h"
8
9 using std::ostream;
10
11 namespace net {
12
13 bool IsAwaitingPacket(const QuicAckFrame& ack_frame,
14 QuicPacketNumber packet_number,
15 QuicPacketNumber peer_least_packet_awaiting_ack) {
16 return packet_number >= peer_least_packet_awaiting_ack &&
17 !ack_frame.packets.Contains(packet_number);
18 }
19
20 QuicAckFrame::QuicAckFrame()
21 : largest_observed(0),
22 ack_delay_time(QuicTime::Delta::Infinite()),
23 path_id(kDefaultPathId) {}
24
25 QuicAckFrame::QuicAckFrame(const QuicAckFrame& other) = default;
26
27 QuicAckFrame::~QuicAckFrame() {}
28
29 ostream& operator<<(std::ostream& os, const QuicAckFrame& ack_frame) {
30 os << "{ largest_observed: " << ack_frame.largest_observed
31 << ", ack_delay_time: " << ack_frame.ack_delay_time.ToMicroseconds()
32 << ", packets: [ " << ack_frame.packets << " ]"
33 << ", received_packets: [ ";
34 for (const std::pair<QuicPacketNumber, QuicTime>& p :
35 ack_frame.received_packet_times) {
36 os << p.first << " at " << p.second.ToDebuggingValue() << " ";
37 }
38 os << " ] }\n";
39 return os;
40 }
41
42 PacketNumberQueue::PacketNumberQueue() = default;
43 PacketNumberQueue::PacketNumberQueue(const PacketNumberQueue& other) = default;
44 PacketNumberQueue::PacketNumberQueue(PacketNumberQueue&& other) = default;
45 PacketNumberQueue::~PacketNumberQueue() {}
46
47 PacketNumberQueue& PacketNumberQueue::operator=(
48 const PacketNumberQueue& other) = default;
49 PacketNumberQueue& PacketNumberQueue::operator=(PacketNumberQueue&& other) =
50 default;
51
52 void PacketNumberQueue::Add(QuicPacketNumber packet_number) {
53 packet_number_intervals_.Add(packet_number, packet_number + 1);
54 }
55
56 void PacketNumberQueue::Add(QuicPacketNumber lower, QuicPacketNumber higher) {
57 packet_number_intervals_.Add(lower, higher);
58 }
59
60 void PacketNumberQueue::Remove(QuicPacketNumber packet_number) {
61 packet_number_intervals_.Difference(packet_number, packet_number + 1);
62 }
63
64 void PacketNumberQueue::Remove(QuicPacketNumber lower,
65 QuicPacketNumber higher) {
66 packet_number_intervals_.Difference(lower, higher);
67 }
68
69 bool PacketNumberQueue::RemoveUpTo(QuicPacketNumber higher) {
70 if (Empty()) {
71 return false;
72 }
73 const QuicPacketNumber old_min = Min();
74 packet_number_intervals_.Difference(0, higher);
75 return Empty() || old_min != Min();
76 }
77
78 void PacketNumberQueue::Complement() {
79 if (Empty()) {
80 return;
81 }
82 packet_number_intervals_.Complement(Min(), Max() + 1);
83 }
84
85 bool PacketNumberQueue::Contains(QuicPacketNumber packet_number) const {
86 return packet_number_intervals_.Contains(packet_number);
87 }
88
89 bool PacketNumberQueue::Empty() const {
90 return packet_number_intervals_.Empty();
91 }
92
93 QuicPacketNumber PacketNumberQueue::Min() const {
94 DCHECK(!Empty());
95 return packet_number_intervals_.begin()->min();
96 }
97
98 QuicPacketNumber PacketNumberQueue::Max() const {
99 DCHECK(!Empty());
100 return packet_number_intervals_.rbegin()->max() - 1;
101 }
102
103 size_t PacketNumberQueue::NumPacketsSlow() const {
104 size_t num_packets = 0;
105 for (const auto& interval : packet_number_intervals_) {
106 num_packets += interval.Length();
107 }
108 return num_packets;
109 }
110
111 size_t PacketNumberQueue::NumIntervals() const {
112 return packet_number_intervals_.Size();
113 }
114
115 QuicPacketNumber PacketNumberQueue::LastIntervalLength() const {
116 DCHECK(!Empty());
117 return packet_number_intervals_.rbegin()->Length();
118 }
119
120 PacketNumberQueue::const_iterator PacketNumberQueue::lower_bound(
121 QuicPacketNumber packet_number) const {
122 // lower_bound returns the first interval that contains |packet_number| or the
123 // first interval after |packet_number|.
124 auto itr = packet_number_intervals_.Find(packet_number);
125 if (itr != packet_number_intervals_.end()) {
126 return itr;
127 }
128 for (itr = packet_number_intervals_.begin();
129 itr != packet_number_intervals_.end(); ++itr) {
130 if (packet_number < itr->min()) {
131 return itr;
132 }
133 }
134 return packet_number_intervals_.end();
135 }
136
137 PacketNumberQueue::const_iterator PacketNumberQueue::begin() const {
138 return packet_number_intervals_.begin();
139 }
140
141 PacketNumberQueue::const_iterator PacketNumberQueue::end() const {
142 return packet_number_intervals_.end();
143 }
144
145 PacketNumberQueue::const_reverse_iterator PacketNumberQueue::rbegin() const {
146 return packet_number_intervals_.rbegin();
147 }
148
149 PacketNumberQueue::const_reverse_iterator PacketNumberQueue::rend() const {
150 return packet_number_intervals_.rend();
151 }
152
153 ostream& operator<<(ostream& os, const PacketNumberQueue& q) {
154 for (const Interval<QuicPacketNumber>& interval : q) {
155 for (QuicPacketNumber packet_number = interval.min();
156 packet_number < interval.max(); ++packet_number) {
157 os << packet_number << " ";
158 }
159 }
160 return os;
161 }
162
163 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/core/frames/quic_ack_frame.h ('k') | net/quic/core/frames/quic_blocked_frame.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698