From 1e543ecc66c65c9ba74d7d879fe7822da68f6686 Mon Sep 17 00:00:00 2001 From: rch <rch@chromium.org> Date: Sun, 29 Mar 2015 00:04:40 -0700 Subject: Land Recent QUIC Changes until 03/27/2015 Add comment for QuicFramer::AppendPacketHeader. Correct/improve DLOG output. Clean up problems found by clang_tidy. Merge internal change: 89724433 https://codereview.chromium.org/1047493003/ Fixed header ordering, missing override/explicit keywords. Nothing to see here. Merge internal change: 89622231 https://codereview.chromium.org/1047493002/ Always build a QuicSecureConfigUpdater at startup. Merge internal change: 89604435 https://codereview.chromium.org/1047483002/ Remove the using_pacing argument from QuicSentPacketManager::SetFromConfig because it's always true. Merge internal change: 89599305 https://codereview.chromium.org/1048493002/ Pass QuicCryptoServerConfig by pointer instead of reference. QuicCryptoServerStream was storing const reference to the config, which makes the interface bug-prone because it's not clear for the caller that the config must outlive the stream. Merge internal change: 89542072 https://codereview.chromium.org/1048483002/ Cache the value of GetMaxPlaintextSize in QuicPacketCreator. No functional change. Saves 0.68% in GFE QUIC loadtests. Merge internal change: 89532959 https://codereview.chromium.org/1046523002/ Remove thread race conditions in two tests. No change to production code. Merge internal change: 89510581 https://codereview.chromium.org/1047453003/ Remove QuicFramer::encrypter, because it's a test-only method. Merge internal change: 89499341 https://codereview.chromium.org/1046513002/ Review URL: https://codereview.chromium.org/1037403004 Cr-Commit-Position: refs/heads/master@{#322716} --- net/quic/quic_packet_creator.cc | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) (limited to 'net/quic/quic_packet_creator.cc') diff --git a/net/quic/quic_packet_creator.cc b/net/quic/quic_packet_creator.cc index 3d6b794..6fcc901 100644 --- a/net/quic/quic_packet_creator.cc +++ b/net/quic/quic_packet_creator.cc @@ -76,12 +76,12 @@ QuicPacketCreator::QuicPacketCreator(QuicConnectionId connection_id, should_fec_protect_(false), fec_group_number_(0), send_version_in_packet_(framer->perspective() == Perspective::IS_CLIENT), - max_packet_length_(kDefaultMaxPacketSize), max_packets_per_fec_group_(kDefaultMaxPacketsPerFecGroup), connection_id_length_(PACKET_8BYTE_CONNECTION_ID), next_sequence_number_length_(PACKET_1BYTE_SEQUENCE_NUMBER), sequence_number_length_(next_sequence_number_length_), packet_size_(0) { + SetMaxPacketLength(kDefaultMaxPacketSize); framer_->set_fec_builder(this); } @@ -96,6 +96,19 @@ void QuicPacketCreator::OnBuiltFecProtectedPayload( } } +void QuicPacketCreator::SetEncrypter(EncryptionLevel level, + QuicEncrypter* encrypter) { + framer_->SetEncrypter(level, encrypter); + max_plaintext_size_ = framer_->GetMaxPlaintextSize(max_packet_length_); +} + +void QuicPacketCreator::SetMaxPacketLength(QuicByteCount length) { + // |max_packet_length_| should not be changed mid-packet or mid-FEC group. + DCHECK(fec_group_.get() == nullptr && queued_frames_.empty()); + max_packet_length_ = length; + max_plaintext_size_ = framer_->GetMaxPlaintextSize(max_packet_length_); +} + void QuicPacketCreator::set_max_packets_per_fec_group( size_t max_packets_per_fec_group) { max_packets_per_fec_group_ = max(kLowestMaxPacketsPerFecGroup, @@ -329,11 +342,9 @@ size_t QuicPacketCreator::ExpansionOnNewFrame() const { } size_t QuicPacketCreator::BytesFree() const { - const size_t max_plaintext_size = - framer_->GetMaxPlaintextSize(max_packet_length_); - DCHECK_GE(max_plaintext_size, PacketSize()); - return max_plaintext_size - min(max_plaintext_size, PacketSize() - + ExpansionOnNewFrame()); + DCHECK_GE(max_plaintext_size_, PacketSize()); + return max_plaintext_size_ - min(max_plaintext_size_, PacketSize() + + ExpansionOnNewFrame()); } size_t QuicPacketCreator::PacketSize() const { @@ -363,14 +374,12 @@ SerializedPacket QuicPacketCreator::SerializePacket() { MaybeAddPadding(); - size_t max_plaintext_size = - framer_->GetMaxPlaintextSize(max_packet_length_); - DCHECK_GE(max_plaintext_size, packet_size_); + DCHECK_GE(max_plaintext_size_, packet_size_); // ACK Frames will be truncated due to length only if they're the only frame - // in the packet, and if packet_size_ was set to max_plaintext_size. If + // in the packet, and if packet_size_ was set to max_plaintext_size_. If // truncation due to length occurred, then GetSerializedFrameLength will have // returned all bytes free. - bool possibly_truncated_by_length = packet_size_ == max_plaintext_size && + bool possibly_truncated_by_length = packet_size_ == max_plaintext_size_ && queued_frames_.size() == 1 && queued_frames_.back().type == ACK_FRAME; char buffer[kMaxPacketSize]; -- cgit v1.1