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

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

Issue 1666553002: Make QUIC's SerializedPacket contain QuicFrames, rather than a pointer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@113205205
Patch Set: Created 4 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_connection_test.cc ('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 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 next_packet_number_length_(PACKET_1BYTE_PACKET_NUMBER), 95 next_packet_number_length_(PACKET_1BYTE_PACKET_NUMBER),
96 max_packet_length_(0), 96 max_packet_length_(0),
97 connection_id_length_(PACKET_8BYTE_CONNECTION_ID), 97 connection_id_length_(PACKET_8BYTE_CONNECTION_ID),
98 packet_size_(0), 98 packet_size_(0),
99 connection_id_(connection_id), 99 connection_id_(connection_id),
100 packet_(kDefaultPathId, 100 packet_(kDefaultPathId,
101 0, 101 0,
102 next_packet_number_length_, 102 next_packet_number_length_,
103 nullptr, 103 nullptr,
104 0, 104 0,
105 nullptr,
106 false, 105 false,
107 false), 106 false),
108 should_fec_protect_next_packet_(false), 107 should_fec_protect_next_packet_(false),
109 fec_protect_(false), 108 fec_protect_(false),
110 max_packets_per_fec_group_(kDefaultMaxPacketsPerFecGroup), 109 max_packets_per_fec_group_(kDefaultMaxPacketsPerFecGroup),
111 fec_send_policy_(FEC_ANY_TRIGGER), 110 fec_send_policy_(FEC_ANY_TRIGGER),
112 fec_timeout_(QuicTime::Delta::Zero()), 111 fec_timeout_(QuicTime::Delta::Zero()),
113 rtt_multiplier_for_fec_timeout_(kRttMultiplierForFecTimeout) { 112 rtt_multiplier_for_fec_timeout_(kRttMultiplierForFecTimeout) {
114 SetMaxPacketLength(kDefaultMaxPacketSize); 113 SetMaxPacketLength(kDefaultMaxPacketSize);
115 } 114 }
116 115
117 QuicPacketCreator::~QuicPacketCreator() { 116 QuicPacketCreator::~QuicPacketCreator() {
118 if (packet_.retransmittable_frames != nullptr) { 117 QuicUtils::DeleteFrames(&packet_.retransmittable_frames);
119 QuicUtils::DeleteFrames(packet_.retransmittable_frames);
120 delete packet_.retransmittable_frames;
121 }
122 if (packet_.packet != nullptr) { 118 if (packet_.packet != nullptr) {
123 delete packet_.packet; 119 delete packet_.packet;
124 } 120 }
125 } 121 }
126 122
127 void QuicPacketCreator::OnBuiltFecProtectedPayload( 123 void QuicPacketCreator::OnBuiltFecProtectedPayload(
128 const QuicPacketHeader& header, 124 const QuicPacketHeader& header,
129 StringPiece payload) { 125 StringPiece payload) {
130 if (fec_group_.get() != nullptr) { 126 if (fec_group_.get() != nullptr) {
131 DCHECK_NE(0u, header.fec_group); 127 DCHECK_NE(0u, header.fec_group);
(...skipping 368 matching lines...) Expand 10 before | Expand all | Expand 10 after
500 496
501 void QuicPacketCreator::ClearPacket() { 497 void QuicPacketCreator::ClearPacket() {
502 packet_.has_ack = false; 498 packet_.has_ack = false;
503 packet_.has_stop_waiting = false; 499 packet_.has_stop_waiting = false;
504 packet_.has_crypto_handshake = NOT_HANDSHAKE; 500 packet_.has_crypto_handshake = NOT_HANDSHAKE;
505 packet_.needs_padding = false; 501 packet_.needs_padding = false;
506 packet_.is_fec_packet = false; 502 packet_.is_fec_packet = false;
507 packet_.original_packet_number = 0; 503 packet_.original_packet_number = 0;
508 packet_.transmission_type = NOT_RETRANSMISSION; 504 packet_.transmission_type = NOT_RETRANSMISSION;
509 packet_.packet = nullptr; 505 packet_.packet = nullptr;
510 packet_.retransmittable_frames = nullptr; 506 DCHECK(packet_.retransmittable_frames.empty());
511 packet_.listeners.clear(); 507 packet_.listeners.clear();
512 } 508 }
513 509
514 bool QuicPacketCreator::HasPendingFrames() const { 510 bool QuicPacketCreator::HasPendingFrames() const {
515 return !queued_frames_.empty(); 511 return !queued_frames_.empty();
516 } 512 }
517 513
518 bool QuicPacketCreator::HasPendingRetransmittableFrames() const { 514 bool QuicPacketCreator::HasPendingRetransmittableFrames() const {
519 return packet_.retransmittable_frames != nullptr && 515 return !packet_.retransmittable_frames.empty();
520 !packet_.retransmittable_frames->empty();
521 } 516 }
522 517
523 size_t QuicPacketCreator::ExpansionOnNewFrame() const { 518 size_t QuicPacketCreator::ExpansionOnNewFrame() const {
524 // If packet is FEC protected, there's no expansion. 519 // If packet is FEC protected, there's no expansion.
525 if (fec_protect_) { 520 if (fec_protect_) {
526 return 0; 521 return 0;
527 } 522 }
528 // If the last frame in the packet is a stream frame, then it will expand to 523 // If the last frame in the packet is a stream frame, then it will expand to
529 // include the stream_length field when a new frame is added. 524 // include the stream_length field when a new frame is added.
530 bool has_trailing_stream_frame = 525 bool has_trailing_stream_frame =
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
675 QuicEncryptedPacket* encrypted = QuicFramer::BuildVersionNegotiationPacket( 670 QuicEncryptedPacket* encrypted = QuicFramer::BuildVersionNegotiationPacket(
676 connection_id_, supported_versions); 671 connection_id_, supported_versions);
677 DCHECK(encrypted); 672 DCHECK(encrypted);
678 DCHECK_GE(max_packet_length_, encrypted->length()); 673 DCHECK_GE(max_packet_length_, encrypted->length());
679 return encrypted; 674 return encrypted;
680 } 675 }
681 676
682 // TODO(jri): Make this a public method of framer? 677 // TODO(jri): Make this a public method of framer?
683 SerializedPacket QuicPacketCreator::NoPacket() { 678 SerializedPacket QuicPacketCreator::NoPacket() {
684 return SerializedPacket(kInvalidPathId, 0, PACKET_1BYTE_PACKET_NUMBER, 679 return SerializedPacket(kInvalidPathId, 0, PACKET_1BYTE_PACKET_NUMBER,
685 nullptr, 0, nullptr, false, false); 680 nullptr, 0, false, false);
686 } 681 }
687 682
688 void QuicPacketCreator::FillPacketHeader(QuicFecGroupNumber fec_group, 683 void QuicPacketCreator::FillPacketHeader(QuicFecGroupNumber fec_group,
689 bool fec_flag, 684 bool fec_flag,
690 QuicPacketHeader* header) { 685 QuicPacketHeader* header) {
691 header->public_header.connection_id = connection_id_; 686 header->public_header.connection_id = connection_id_;
692 header->public_header.connection_id_length = connection_id_length_; 687 header->public_header.connection_id_length = connection_id_length_;
693 header->public_header.multipath_flag = send_path_id_in_packet_; 688 header->public_header.multipath_flag = send_path_id_in_packet_;
694 header->public_header.reset_flag = false; 689 header->public_header.reset_flag = false;
695 header->public_header.version_flag = send_version_in_packet_; 690 header->public_header.version_flag = send_version_in_packet_;
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
731 packet_.packet_number_length); 726 packet_.packet_number_length);
732 if (frame_len == 0) { 727 if (frame_len == 0) {
733 // Current open packet is full. 728 // Current open packet is full.
734 Flush(); 729 Flush();
735 return false; 730 return false;
736 } 731 }
737 DCHECK_LT(0u, packet_size_); 732 DCHECK_LT(0u, packet_size_);
738 packet_size_ += ExpansionOnNewFrame() + frame_len; 733 packet_size_ += ExpansionOnNewFrame() + frame_len;
739 734
740 if (save_retransmittable_frames && ShouldRetransmit(frame)) { 735 if (save_retransmittable_frames && ShouldRetransmit(frame)) {
741 if (packet_.retransmittable_frames == nullptr) { 736 if (packet_.retransmittable_frames.empty()) {
742 packet_.retransmittable_frames = new QuicFrames(); 737 packet_.retransmittable_frames.reserve(2);
743 packet_.retransmittable_frames->reserve(2);
744 } 738 }
745 packet_.retransmittable_frames->push_back(frame); 739 packet_.retransmittable_frames.push_back(frame);
746 queued_frames_.push_back(frame); 740 queued_frames_.push_back(frame);
747 if (frame.type == STREAM_FRAME && 741 if (frame.type == STREAM_FRAME &&
748 frame.stream_frame->stream_id == kCryptoStreamId) { 742 frame.stream_frame->stream_id == kCryptoStreamId) {
749 packet_.has_crypto_handshake = IS_HANDSHAKE; 743 packet_.has_crypto_handshake = IS_HANDSHAKE;
750 } 744 }
751 } else { 745 } else {
752 queued_frames_.push_back(frame); 746 queued_frames_.push_back(frame);
753 } 747 }
754 748
755 if (frame.type == ACK_FRAME) { 749 if (frame.type == ACK_FRAME) {
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
861 packet_.packet_number = it == multipath_packet_number_.end() ? 0 : it->second; 855 packet_.packet_number = it == multipath_packet_number_.end() ? 0 : it->second;
862 packet_.path_id = path_id; 856 packet_.path_id = path_id;
863 DCHECK(packet_.path_id != kInvalidPathId); 857 DCHECK(packet_.path_id != kInvalidPathId);
864 // Send path in packet if current path is not the default path. 858 // Send path in packet if current path is not the default path.
865 send_path_id_in_packet_ = packet_.path_id != kDefaultPathId ? true : false; 859 send_path_id_in_packet_ = packet_.path_id != kDefaultPathId ? true : false;
866 // Switching path needs to update packet number length. 860 // Switching path needs to update packet number length.
867 UpdatePacketNumberLength(least_packet_awaited_by_peer, max_packets_in_flight); 861 UpdatePacketNumberLength(least_packet_awaited_by_peer, max_packets_in_flight);
868 } 862 }
869 863
870 } // namespace net 864 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_connection_test.cc ('k') | net/quic/quic_packet_creator_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698