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

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

Issue 1417683003: Fix the semantics of QuicFecGroup::ProtectsPacketsBefore into IsWaitingForPacketBefore. Certain ed… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@105435253
Patch Set: Created 5 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
« no previous file with comments | « net/quic/quic_fec_group.h ('k') | net/quic/quic_fec_group_interface.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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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_fec_group.h" 5 #include "net/quic/quic_fec_group.h"
6 6
7 #include <limits> 7 #include <limits>
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 decrypted_payload[i] = payload_parity_[i]; 111 decrypted_payload[i] = payload_parity_[i];
112 } 112 }
113 113
114 header->packet_number = missing; 114 header->packet_number = missing;
115 header->entropy_flag = false; // Unknown entropy. 115 header->entropy_flag = false; // Unknown entropy.
116 116
117 received_packets_.insert(missing); 117 received_packets_.insert(missing);
118 return payload_parity_len_; 118 return payload_parity_len_;
119 } 119 }
120 120
121 bool QuicFecGroup::ProtectsPacketsBefore(QuicPacketNumber num) const { 121 bool QuicFecGroup::IsWaitingForPacketBefore(QuicPacketNumber num) const {
122 if (has_received_fec_packet()) { 122 // Entire range is larger than the threshold.
123 return max_protected_packet_ < num; 123 if (min_protected_packet_ >= num) {
124 return false;
124 } 125 }
125 // Since we might not yet have received the FEC packet, we must check 126
126 // the packets we have received. 127 // Entire range is smaller than the threshold.
127 return *received_packets_.begin() < num; 128 if (received_packets_.size() > 0 ? *received_packets_.rbegin() + 1 < num
129 : min_protected_packet_ < num) {
130 return true;
131 }
132
133 // Range spans the threshold so look for a missing packet below the threshold.
134 QuicPacketNumber target = min_protected_packet_;
135 for (QuicPacketNumber packet : received_packets_) {
136 if (target++ != packet) {
137 return true;
138 }
139 if (target >= num) {
140 return false;
141 }
142 }
143
144 // No missing packets below the threshold.
145 return false;
128 } 146 }
129 147
130 bool QuicFecGroup::UpdateParity(StringPiece payload) { 148 bool QuicFecGroup::UpdateParity(StringPiece payload) {
131 DCHECK_GE(kMaxPacketSize, payload.size()); 149 DCHECK_GE(kMaxPacketSize, payload.size());
132 if (payload.size() > kMaxPacketSize) { 150 if (payload.size() > kMaxPacketSize) {
133 DLOG(ERROR) << "Illegal payload size: " << payload.size(); 151 DLOG(ERROR) << "Illegal payload size: " << payload.size();
134 return false; 152 return false;
135 } 153 }
136 if (payload_parity_len_ < payload.size()) { 154 if (payload_parity_len_ < payload.size()) {
137 payload_parity_len_ = payload.size(); 155 payload_parity_len_ = payload.size();
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 188
171 QuicPacketCount QuicFecGroup::NumReceivedPackets() const { 189 QuicPacketCount QuicFecGroup::NumReceivedPackets() const {
172 return received_packets_.size(); 190 return received_packets_.size();
173 } 191 }
174 192
175 EncryptionLevel QuicFecGroup::EffectiveEncryptionLevel() const { 193 EncryptionLevel QuicFecGroup::EffectiveEncryptionLevel() const {
176 return effective_encryption_level_; 194 return effective_encryption_level_;
177 } 195 }
178 196
179 } // namespace net 197 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_fec_group.h ('k') | net/quic/quic_fec_group_interface.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698