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