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

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

Issue 1782143003: Remove FEC code from receive path. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@115997404
Patch Set: Created 4 years, 9 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_packet_creator.h ('k') | net/quic/quic_packet_creator_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 (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_packet_creator.h" 5 #include "net/quic/quic_packet_creator.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/macros.h" 10 #include "base/macros.h"
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
162 return false; 162 return false;
163 } 163 }
164 if (needs_padding) { 164 if (needs_padding) {
165 packet_.needs_padding = true; 165 packet_.needs_padding = true;
166 } 166 }
167 return true; 167 return true;
168 } 168 }
169 169
170 bool QuicPacketCreator::HasRoomForStreamFrame(QuicStreamId id, 170 bool QuicPacketCreator::HasRoomForStreamFrame(QuicStreamId id,
171 QuicStreamOffset offset) { 171 QuicStreamOffset offset) {
172 return BytesFree() > 172 return BytesFree() > QuicFramer::GetMinStreamFrameSize(id, offset, true);
173 QuicFramer::GetMinStreamFrameSize(id, offset, true, NOT_IN_FEC_GROUP);
174 } 173 }
175 174
176 // static 175 // static
177 size_t QuicPacketCreator::StreamFramePacketOverhead( 176 size_t QuicPacketCreator::StreamFramePacketOverhead(
178 QuicConnectionIdLength connection_id_length, 177 QuicConnectionIdLength connection_id_length,
179 bool include_version, 178 bool include_version,
180 bool include_path_id, 179 bool include_path_id,
181 QuicPacketNumberLength packet_number_length, 180 QuicPacketNumberLength packet_number_length,
182 QuicStreamOffset offset, 181 QuicStreamOffset offset) {
183 InFecGroup is_in_fec_group) {
184 return GetPacketHeaderSize(connection_id_length, include_version, 182 return GetPacketHeaderSize(connection_id_length, include_version,
185 include_path_id, packet_number_length, 183 include_path_id, packet_number_length) +
186 is_in_fec_group) +
187 // Assumes this is a stream with a single lone packet. 184 // Assumes this is a stream with a single lone packet.
188 QuicFramer::GetMinStreamFrameSize(1u, offset, true, is_in_fec_group); 185 QuicFramer::GetMinStreamFrameSize(1u, offset, true);
189 } 186 }
190 187
191 size_t QuicPacketCreator::CreateStreamFrame(QuicStreamId id, 188 size_t QuicPacketCreator::CreateStreamFrame(QuicStreamId id,
192 QuicIOVector iov, 189 QuicIOVector iov,
193 size_t iov_offset, 190 size_t iov_offset,
194 QuicStreamOffset offset, 191 QuicStreamOffset offset,
195 bool fin, 192 bool fin,
196 QuicFrame* frame) { 193 QuicFrame* frame) {
197 DCHECK_GT(max_packet_length_, 194 DCHECK_GT(max_packet_length_,
198 StreamFramePacketOverhead( 195 StreamFramePacketOverhead(connection_id_length_, kIncludeVersion,
199 connection_id_length_, kIncludeVersion, kIncludePathId, 196 kIncludePathId,
200 PACKET_6BYTE_PACKET_NUMBER, offset, IN_FEC_GROUP)); 197 PACKET_6BYTE_PACKET_NUMBER, offset));
201 198
202 MaybeUpdatePacketNumberLength(); 199 MaybeUpdatePacketNumberLength();
203 200
204 LOG_IF(DFATAL, !HasRoomForStreamFrame(id, offset)) 201 LOG_IF(DFATAL, !HasRoomForStreamFrame(id, offset))
205 << "No room for Stream frame, BytesFree: " << BytesFree() 202 << "No room for Stream frame, BytesFree: " << BytesFree()
206 << " MinStreamFrameSize: " 203 << " MinStreamFrameSize: "
207 << QuicFramer::GetMinStreamFrameSize(id, offset, true, NOT_IN_FEC_GROUP); 204 << QuicFramer::GetMinStreamFrameSize(id, offset, true);
208 205
209 if (iov_offset == iov.total_length) { 206 if (iov_offset == iov.total_length) {
210 QUIC_BUG_IF(!fin) << "Creating a stream frame with no data or fin."; 207 QUIC_BUG_IF(!fin) << "Creating a stream frame with no data or fin.";
211 // Create a new packet for the fin, if necessary. 208 // Create a new packet for the fin, if necessary.
212 *frame = QuicFrame(new QuicStreamFrame(id, true, offset, StringPiece())); 209 *frame = QuicFrame(new QuicStreamFrame(id, true, offset, StringPiece()));
213 return 0; 210 return 0;
214 } 211 }
215 212
216 const size_t data_size = iov.total_length - iov_offset; 213 const size_t data_size = iov.total_length - iov_offset;
217 size_t min_frame_size = QuicFramer::GetMinStreamFrameSize( 214 size_t min_frame_size = QuicFramer::GetMinStreamFrameSize(
218 id, offset, /* last_frame_in_packet= */ true, NOT_IN_FEC_GROUP); 215 id, offset, /* last_frame_in_packet= */ true);
219 size_t bytes_consumed = min<size_t>(BytesFree() - min_frame_size, data_size); 216 size_t bytes_consumed = min<size_t>(BytesFree() - min_frame_size, data_size);
220 217
221 bool set_fin = fin && bytes_consumed == data_size; // Last frame. 218 bool set_fin = fin && bytes_consumed == data_size; // Last frame.
222 UniqueStreamBuffer buffer = 219 UniqueStreamBuffer buffer =
223 NewStreamBuffer(buffer_allocator_, bytes_consumed); 220 NewStreamBuffer(buffer_allocator_, bytes_consumed);
224 CopyToBuffer(iov, iov_offset, bytes_consumed, buffer.get()); 221 CopyToBuffer(iov, iov_offset, bytes_consumed, buffer.get());
225 *frame = QuicFrame(new QuicStreamFrame(id, set_fin, offset, bytes_consumed, 222 *frame = QuicFrame(new QuicStreamFrame(id, set_fin, offset, bytes_consumed,
226 std::move(buffer))); 223 std::move(buffer)));
227 return bytes_consumed; 224 return bytes_consumed;
228 } 225 }
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
385 } 382 }
386 383
387 size_t QuicPacketCreator::PacketSize() { 384 size_t QuicPacketCreator::PacketSize() {
388 if (!queued_frames_.empty()) { 385 if (!queued_frames_.empty()) {
389 return packet_size_; 386 return packet_size_;
390 } 387 }
391 // Update packet number length on packet boundary. 388 // Update packet number length on packet boundary.
392 packet_.packet_number_length = next_packet_number_length_; 389 packet_.packet_number_length = next_packet_number_length_;
393 packet_size_ = GetPacketHeaderSize( 390 packet_size_ = GetPacketHeaderSize(
394 connection_id_length_, send_version_in_packet_, send_path_id_in_packet_, 391 connection_id_length_, send_version_in_packet_, send_path_id_in_packet_,
395 packet_.packet_number_length, NOT_IN_FEC_GROUP); 392 packet_.packet_number_length);
396 return packet_size_; 393 return packet_size_;
397 } 394 }
398 395
399 bool QuicPacketCreator::AddSavedFrame(const QuicFrame& frame) { 396 bool QuicPacketCreator::AddSavedFrame(const QuicFrame& frame) {
400 return AddFrame(frame, /*save_retransmittable_frames=*/true); 397 return AddFrame(frame, /*save_retransmittable_frames=*/true);
401 } 398 }
402 399
403 bool QuicPacketCreator::AddPaddedSavedFrame(const QuicFrame& frame) { 400 bool QuicPacketCreator::AddPaddedSavedFrame(const QuicFrame& frame) {
404 if (AddFrame(frame, /*save_retransmittable_frames=*/true)) { 401 if (AddFrame(frame, /*save_retransmittable_frames=*/true)) {
405 packet_.needs_padding = true; 402 packet_.needs_padding = true;
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
521 frame.stream_frame->stream_id != kCryptoStreamId && 518 frame.stream_frame->stream_id != kCryptoStreamId &&
522 packet_.encryption_level == ENCRYPTION_NONE) { 519 packet_.encryption_level == ENCRYPTION_NONE) {
523 QUIC_BUG << "Cannot send stream data without encryption."; 520 QUIC_BUG << "Cannot send stream data without encryption.";
524 delegate_->OnUnrecoverableError(QUIC_UNENCRYPTED_STREAM_DATA, 521 delegate_->OnUnrecoverableError(QUIC_UNENCRYPTED_STREAM_DATA,
525 ConnectionCloseSource::FROM_SELF); 522 ConnectionCloseSource::FROM_SELF);
526 return false; 523 return false;
527 } 524 }
528 MaybeUpdatePacketNumberLength(); 525 MaybeUpdatePacketNumberLength();
529 526
530 size_t frame_len = framer_->GetSerializedFrameLength( 527 size_t frame_len = framer_->GetSerializedFrameLength(
531 frame, BytesFree(), queued_frames_.empty(), true, NOT_IN_FEC_GROUP, 528 frame, BytesFree(), queued_frames_.empty(), true,
532 packet_.packet_number_length); 529 packet_.packet_number_length);
533 if (frame_len == 0) { 530 if (frame_len == 0) {
534 // Current open packet is full. 531 // Current open packet is full.
535 Flush(); 532 Flush();
536 return false; 533 return false;
537 } 534 }
538 DCHECK_LT(0u, packet_size_); 535 DCHECK_LT(0u, packet_size_);
539 packet_size_ += ExpansionOnNewFrame() + frame_len; 536 packet_size_ += ExpansionOnNewFrame() + frame_len;
540 537
541 if (save_retransmittable_frames && ShouldRetransmit(frame)) { 538 if (save_retransmittable_frames && ShouldRetransmit(frame)) {
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
599 packet_.packet_number = it == multipath_packet_number_.end() ? 0 : it->second; 596 packet_.packet_number = it == multipath_packet_number_.end() ? 0 : it->second;
600 packet_.path_id = path_id; 597 packet_.path_id = path_id;
601 DCHECK(packet_.path_id != kInvalidPathId); 598 DCHECK(packet_.path_id != kInvalidPathId);
602 // Send path in packet if current path is not the default path. 599 // Send path in packet if current path is not the default path.
603 send_path_id_in_packet_ = packet_.path_id != kDefaultPathId ? true : false; 600 send_path_id_in_packet_ = packet_.path_id != kDefaultPathId ? true : false;
604 // Switching path needs to update packet number length. 601 // Switching path needs to update packet number length.
605 UpdatePacketNumberLength(least_packet_awaited_by_peer, max_packets_in_flight); 602 UpdatePacketNumberLength(least_packet_awaited_by_peer, max_packets_in_flight);
606 } 603 }
607 604
608 } // namespace net 605 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_packet_creator.h ('k') | net/quic/quic_packet_creator_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698