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

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

Issue 157913003: Remove parity tracking in FEC groups as part of the migration to (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 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 | Annotate | Revision Log
« no previous file with comments | « net/quic/quic_packet_creator.h ('k') | no next file » | 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 "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "net/quic/crypto/quic_random.h" 9 #include "net/quic/crypto/quic_random.h"
10 #include "net/quic/quic_ack_notifier.h" 10 #include "net/quic/quic_ack_notifier.h"
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 308
309 bool QuicPacketCreator::AddSavedFrame(const QuicFrame& frame) { 309 bool QuicPacketCreator::AddSavedFrame(const QuicFrame& frame) {
310 return AddFrame(frame, true); 310 return AddFrame(frame, true);
311 } 311 }
312 312
313 SerializedPacket QuicPacketCreator::SerializePacket() { 313 SerializedPacket QuicPacketCreator::SerializePacket() {
314 if (queued_frames_.empty()) { 314 if (queued_frames_.empty()) {
315 LOG(DFATAL) << "Attempt to serialize empty packet"; 315 LOG(DFATAL) << "Attempt to serialize empty packet";
316 } 316 }
317 QuicPacketHeader header; 317 QuicPacketHeader header;
318 FillPacketHeader(fec_group_number_, false, false, &header); 318 FillPacketHeader(fec_group_number_, false, &header);
319 319
320 MaybeAddPadding(); 320 MaybeAddPadding();
321 321
322 size_t max_plaintext_size = 322 size_t max_plaintext_size =
323 framer_->GetMaxPlaintextSize(options_.max_packet_length); 323 framer_->GetMaxPlaintextSize(options_.max_packet_length);
324 DCHECK_GE(max_plaintext_size, packet_size_); 324 DCHECK_GE(max_plaintext_size, packet_size_);
325 // ACK and CONNECTION_CLOSE Frames will be truncated only if they're 325 // ACK and CONNECTION_CLOSE Frames will be truncated only if they're
326 // the first frame in the packet. If truncation is to occur, then 326 // the first frame in the packet. If truncation is to occur, then
327 // GetSerializedFrameLength will have returned all bytes free. 327 // GetSerializedFrameLength will have returned all bytes free.
328 bool possibly_truncated = 328 bool possibly_truncated =
(...skipping 15 matching lines...) Expand all
344 packet_size_ = 0; 344 packet_size_ = 0;
345 queued_frames_.clear(); 345 queued_frames_.clear();
346 serialized.retransmittable_frames = queued_retransmittable_frames_.release(); 346 serialized.retransmittable_frames = queued_retransmittable_frames_.release();
347 return serialized; 347 return serialized;
348 } 348 }
349 349
350 SerializedPacket QuicPacketCreator::SerializeFec() { 350 SerializedPacket QuicPacketCreator::SerializeFec() {
351 DCHECK_LT(0u, fec_group_->NumReceivedPackets()); 351 DCHECK_LT(0u, fec_group_->NumReceivedPackets());
352 DCHECK_EQ(0u, queued_frames_.size()); 352 DCHECK_EQ(0u, queued_frames_.size());
353 QuicPacketHeader header; 353 QuicPacketHeader header;
354 FillPacketHeader(fec_group_number_, true, 354 FillPacketHeader(fec_group_number_, true, &header);
355 fec_group_->entropy_parity(), &header);
356 QuicFecData fec_data; 355 QuicFecData fec_data;
357 fec_data.fec_group = fec_group_->min_protected_packet(); 356 fec_data.fec_group = fec_group_->min_protected_packet();
358 fec_data.redundancy = fec_group_->payload_parity(); 357 fec_data.redundancy = fec_group_->payload_parity();
359 SerializedPacket serialized = framer_->BuildFecPacket(header, fec_data); 358 SerializedPacket serialized = framer_->BuildFecPacket(header, fec_data);
360 fec_group_.reset(NULL); 359 fec_group_.reset(NULL);
361 fec_group_number_ = 0; 360 fec_group_number_ = 0;
362 packet_size_ = 0; 361 packet_size_ = 0;
363 if (!serialized.packet) { 362 if (!serialized.packet) {
364 LOG(DFATAL) << "Failed to serialize fec packet for group:" 363 LOG(DFATAL) << "Failed to serialize fec packet for group:"
365 << fec_data.fec_group; 364 << fec_data.fec_group;
(...skipping 19 matching lines...) Expand all
385 header.versions = supported_versions; 384 header.versions = supported_versions;
386 QuicEncryptedPacket* encrypted = 385 QuicEncryptedPacket* encrypted =
387 framer_->BuildVersionNegotiationPacket(header, supported_versions); 386 framer_->BuildVersionNegotiationPacket(header, supported_versions);
388 DCHECK(encrypted); 387 DCHECK(encrypted);
389 DCHECK_GE(options_.max_packet_length, encrypted->length()); 388 DCHECK_GE(options_.max_packet_length, encrypted->length());
390 return encrypted; 389 return encrypted;
391 } 390 }
392 391
393 void QuicPacketCreator::FillPacketHeader(QuicFecGroupNumber fec_group, 392 void QuicPacketCreator::FillPacketHeader(QuicFecGroupNumber fec_group,
394 bool fec_flag, 393 bool fec_flag,
395 bool fec_entropy_flag,
396 QuicPacketHeader* header) { 394 QuicPacketHeader* header) {
397 header->public_header.guid = guid_; 395 header->public_header.guid = guid_;
398 header->public_header.reset_flag = false; 396 header->public_header.reset_flag = false;
399 header->public_header.version_flag = send_version_in_packet_; 397 header->public_header.version_flag = send_version_in_packet_;
400 header->fec_flag = fec_flag; 398 header->fec_flag = fec_flag;
401 header->packet_sequence_number = ++sequence_number_; 399 header->packet_sequence_number = ++sequence_number_;
402 header->public_header.sequence_number_length = sequence_number_length_; 400 header->public_header.sequence_number_length = sequence_number_length_;
403 401 header->entropy_flag = random_bool_source_->RandBool();
404 bool entropy_flag;
405 if (fec_flag) {
406 // FEC packets don't have an entropy of their own. Entropy flag for FEC
407 // packets is the XOR of entropy of previous packets.
408 entropy_flag = fec_entropy_flag;
409 } else {
410 entropy_flag = random_bool_source_->RandBool();
411 }
412 header->entropy_flag = entropy_flag;
413 header->is_in_fec_group = fec_group == 0 ? NOT_IN_FEC_GROUP : IN_FEC_GROUP; 402 header->is_in_fec_group = fec_group == 0 ? NOT_IN_FEC_GROUP : IN_FEC_GROUP;
414 header->fec_group = fec_group; 403 header->fec_group = fec_group;
415 } 404 }
416 405
417 bool QuicPacketCreator::ShouldRetransmit(const QuicFrame& frame) { 406 bool QuicPacketCreator::ShouldRetransmit(const QuicFrame& frame) {
418 return frame.type != ACK_FRAME && frame.type != CONGESTION_FEEDBACK_FRAME && 407 return frame.type != ACK_FRAME && frame.type != CONGESTION_FEEDBACK_FRAME &&
419 frame.type != PADDING_FRAME; 408 frame.type != PADDING_FRAME;
420 } 409 }
421 410
422 bool QuicPacketCreator::AddFrame(const QuicFrame& frame, 411 bool QuicPacketCreator::AddFrame(const QuicFrame& frame,
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
472 if (!is_handshake) { 461 if (!is_handshake) {
473 return; 462 return;
474 } 463 }
475 464
476 QuicPaddingFrame padding; 465 QuicPaddingFrame padding;
477 bool success = AddFrame(QuicFrame(&padding), false); 466 bool success = AddFrame(QuicFrame(&padding), false);
478 DCHECK(success); 467 DCHECK(success);
479 } 468 }
480 469
481 } // namespace net 470 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_packet_creator.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698