In quic, coalesce packet of higher encryption level with initial or handshake retransmission. protected by gfe2_reloadable_flag_quic_coalesced_packet_of_higher_space.
The goal of this change is to mitigate inflated RTT sample.
PiperOrigin-RevId: 321556627
Change-Id: I7fc8675bb0f05a48b6e81ed4aa9c04b42fb0690a
diff --git a/quic/core/quic_coalesced_packet.cc b/quic/core/quic_coalesced_packet.cc
index 3b22180..b92cf75 100644
--- a/quic/core/quic_coalesced_packet.cc
+++ b/quic/core/quic_coalesced_packet.cc
@@ -69,6 +69,7 @@
QUIC_CODE_COUNT(QUIC_SUCCESSFULLY_COALESCED_MULTIPLE_PACKETS);
}
length_ += packet.encrypted_length;
+ transmission_types_[packet.encryption_level] = packet.transmission_type;
if (packet.encryption_level == ENCRYPTION_INITIAL) {
// Save a copy of ENCRYPTION_INITIAL packet (excluding encrypted buffer, as
// the packet will be re-serialized later).
@@ -90,6 +91,9 @@
for (auto& packet : encrypted_buffers_) {
packet.clear();
}
+ for (size_t i = ENCRYPTION_INITIAL; i < NUM_ENCRYPTION_LEVELS; ++i) {
+ transmission_types_[i] = NOT_RETRANSMISSION;
+ }
initial_packet_ = nullptr;
}
@@ -118,6 +122,16 @@
(level == ENCRYPTION_INITIAL && initial_packet_ != nullptr);
}
+TransmissionType QuicCoalescedPacket::TransmissionTypeOfPacket(
+ EncryptionLevel level) const {
+ if (!ContainsPacketOfEncryptionLevel(level)) {
+ QUIC_BUG << "Coalesced packet does not contain packet of encryption level: "
+ << EncryptionLevelToString(level);
+ return NOT_RETRANSMISSION;
+ }
+ return transmission_types_[level];
+}
+
std::string QuicCoalescedPacket::ToString(size_t serialized_length) const {
// Total length and padding size.
std::string info = quiche::QuicheStrCat(