Add a QUIC protocol flag to enable or disable defer_send_in_response_to_packets in GFE and uStreamer.
Protected by FLAGS_quic_reloadable_flag_quic_dont_defer_sending.
PiperOrigin-RevId: 346802811
Change-Id: I178794f3cc4ee6b2ac5570c9c8be400bc4abdd4f
diff --git a/quic/core/crypto/crypto_protocol.h b/quic/core/crypto/crypto_protocol.h
index 9b09027..d0420cc 100644
--- a/quic/core/crypto/crypto_protocol.h
+++ b/quic/core/crypto/crypto_protocol.h
@@ -270,6 +270,9 @@
const QuicTag kNCMR = TAG('N', 'C', 'M', 'R'); // Do not attempt connection
// migration.
+// Allows disabling defer_send_in_response_to_packets in QuicConnection.
+const QuicTag kDFER = TAG('D', 'F', 'E', 'R'); // Do not defer sending.
+
// Disable Pacing offload option.
const QuicTag kNPCO = TAG('N', 'P', 'C', 'O'); // No pacing offload.
diff --git a/quic/core/quic_connection.cc b/quic/core/quic_connection.cc
index 8f1fd4b..9c49fef 100644
--- a/quic/core/quic_connection.cc
+++ b/quic/core/quic_connection.cc
@@ -672,6 +672,11 @@
if (config.HasClientSentConnectionOption(kEACK, perspective_)) {
bundle_retransmittable_with_pto_ack_ = true;
}
+ if (GetQuicReloadableFlag(quic_dont_defer_sending) &&
+ config.HasClientSentConnectionOption(kDFER, perspective_)) {
+ QUIC_RELOADABLE_FLAG_COUNT(quic_dont_defer_sending);
+ defer_send_in_response_to_packets_ = false;
+ }
if (config.HasReceivedMaxPacketSize()) {
peer_max_packet_size_ = config.ReceivedMaxPacketSize();
MaybeUpdatePacketCreatorMaxPacketLengthAndPadding();
diff --git a/quic/core/quic_flags_list.h b/quic/core/quic_flags_list.h
index d5f27e6..28082aa 100644
--- a/quic/core/quic_flags_list.h
+++ b/quic/core/quic_flags_list.h
@@ -33,6 +33,7 @@
QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_discard_initial_packet_with_key_dropped, true)
QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_do_not_clip_received_error_code, true)
QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_donot_reset_ideal_next_packet_send_time, false)
+QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_dont_defer_sending, false)
QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_enable_mtu_discovery_at_server, false)
QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_enable_server_on_wire_ping, false)
QUIC_FLAG(FLAGS_quic_reloadable_flag_quic_enable_token_based_address_validation, false)
diff --git a/quic/core/quic_protocol_flags_list.h b/quic/core/quic_protocol_flags_list.h
index b9d0a2d..14ed8cd 100644
--- a/quic/core/quic_protocol_flags_list.h
+++ b/quic/core/quic_protocol_flags_list.h
@@ -243,4 +243,9 @@
"If true, QUIC server will disable TLS resumption by not "
"issuing or processing session tickets.")
+QUIC_PROTOCOL_FLAG(bool,
+ quic_defer_send_in_response,
+ true,
+ "If true, QUIC servers will defer sending in response to "
+ "incoming packets by default.")
#endif