Deprecate --gfe2_reloadable_flag_quic_use_inlining_send_buffer2
I was hoping to remove the non-inlining version of the SendBuffer, but apparently we use it in places other than QuicStream, so I have to switch those separately.
PiperOrigin-RevId: 834976772
diff --git a/quiche/common/quiche_feature_flags_list.h b/quiche/common/quiche_feature_flags_list.h
index 5746907..b1e1fd0 100755
--- a/quiche/common/quiche_feature_flags_list.h
+++ b/quiche/common/quiche_feature_flags_list.h
@@ -57,7 +57,6 @@
QUICHE_FLAG(bool, quiche_reloadable_flag_quic_test_peer_addr_change_after_normalize, false, false, "If true, QuicConnection::ProcessValidatedPacket will use normalized address to test peer address changes.")
QUICHE_FLAG(bool, quiche_reloadable_flag_quic_testonly_default_false, false, false, "A testonly reloadable flag that will always default to false.")
QUICHE_FLAG(bool, quiche_reloadable_flag_quic_testonly_default_true, true, true, "A testonly reloadable flag that will always default to true.")
-QUICHE_FLAG(bool, quiche_reloadable_flag_quic_use_inlining_send_buffer2, true, true, "Uses an inlining version of QuicSendStreamBuffer.")
QUICHE_FLAG(bool, quiche_reloadable_flag_quic_use_proof_source_get_cert_chains, false, true, "When true, quic::TlsServerHandshaker will use ProofSource::GetCertChains() instead of ProofSource::GetCertChain()")
QUICHE_FLAG(bool, quiche_reloadable_flag_quic_use_received_client_addresses_cache, true, true, "If true, use a LRU cache to record client addresses of packets received on server's original address.")
QUICHE_FLAG(bool, quiche_restart_flag_quic_dispatcher_close_connection_on_invalid_ack, false, false, "An invalid ack is an ack that the peer sent for a packet that was not sent by the dispatcher. If true, the dispatcher will close the connection if it receives an invalid ack.")
diff --git a/quiche/quic/core/quic_stream.cc b/quiche/quic/core/quic_stream.cc
index f265cca..d459ce4 100644
--- a/quiche/quic/core/quic_stream.cc
+++ b/quiche/quic/core/quic_stream.cc
@@ -129,17 +129,6 @@
return DefaultFlowControlWindow(version);
}
-std::unique_ptr<QuicStreamSendBufferBase> CreateSendBuffer(
- QuicSession* session) {
- quiche::QuicheBufferAllocator* allocator =
- session->connection()->helper()->GetStreamSendBufferAllocator();
- if (GetQuicReloadableFlag(quic_use_inlining_send_buffer2)) {
- QUIC_RELOADABLE_FLAG_COUNT(quic_use_inlining_send_buffer2);
- return std::make_unique<QuicStreamSendBufferInlining>(allocator);
- }
- return std::make_unique<QuicStreamSendBuffer>(allocator);
-}
-
} // namespace
PendingStream::PendingStream(QuicStreamId id, QuicSession* session)
@@ -418,7 +407,8 @@
stream_contributes_to_connection_flow_control_(true),
busy_counter_(0),
add_random_padding_after_fin_(false),
- send_buffer_(CreateSendBuffer(session)),
+ send_buffer_(
+ session->connection()->helper()->GetStreamSendBufferAllocator()),
buffered_data_threshold_(GetQuicFlag(quic_buffered_data_threshold)),
is_static_(is_static),
deadline_(QuicTime::Zero()),
@@ -449,7 +439,7 @@
QUIC_DVLOG(1)
<< ENDPOINT << "Stream " << id_
<< " gets destroyed while waiting for acks. stream_bytes_outstanding = "
- << send_buffer_->stream_bytes_outstanding()
+ << send_buffer_.stream_bytes_outstanding()
<< ", fin_outstanding: " << fin_outstanding_;
}
if (stream_delegate_ != nullptr && type_ != CRYPTO) {
@@ -709,7 +699,7 @@
!VersionIsIetfQuic(transport_version()) || type_ == READ_UNIDIRECTIONAL) {
return false;
}
- reliable_size_ = send_buffer_->stream_offset();
+ reliable_size_ = send_buffer_.stream_offset();
return true;
}
@@ -753,7 +743,7 @@
// Notionally ack unreliable, previously consumed data so that it's not
// retransmitted, and the buffer can free the memory.
QuicByteCount newly_acked;
- send_buffer_->OnStreamDataAcked(
+ send_buffer_.OnStreamDataAcked(
reliable_size_, stream_bytes_written() - reliable_size_, &newly_acked);
fin_outstanding_ = false; // Do not wait to close until FIN is acked.
fin_lost_ = false;
@@ -846,7 +836,7 @@
// Do not respect buffered data upper limit as WriteOrBufferData guarantees
// all data to be consumed.
if (!data.empty()) {
- QuicStreamOffset offset = send_buffer_->stream_offset();
+ QuicStreamOffset offset = send_buffer_.stream_offset();
if (kMaxStreamLength - offset < data.length()) {
QUIC_BUG(quic_bug_10586_4) << "Write too many data via stream " << id_;
OnUnrecoverableError(
@@ -854,7 +844,7 @@
absl::StrCat("Write too many data via stream ", id_));
return;
}
- send_buffer_->SaveStreamData(data);
+ send_buffer_.SaveStreamData(data);
OnDataBuffered(offset, data.length(), ack_listener);
}
if (!had_buffered_data && (HasBufferedData() || fin_buffered_)) {
@@ -949,10 +939,10 @@
consumed_data.fin_consumed = fin;
if (!span.empty()) {
// Buffer all data if buffered data size is below limit.
- QuicStreamOffset offset = send_buffer_->stream_offset();
- consumed_data.bytes_consumed = send_buffer_->SaveMemSliceSpan(span);
- if (offset > send_buffer_->stream_offset() ||
- kMaxStreamLength < send_buffer_->stream_offset()) {
+ QuicStreamOffset offset = send_buffer_.stream_offset();
+ consumed_data.bytes_consumed = send_buffer_.SaveMemSliceSpan(span);
+ if (offset > send_buffer_.stream_offset() ||
+ kMaxStreamLength < send_buffer_.stream_offset()) {
QUIC_BUG(quic_bug_10586_8) << "Write too many data via stream " << id_;
OnUnrecoverableError(
QUIC_STREAM_LENGTH_OVERFLOW,
@@ -973,13 +963,13 @@
}
bool QuicStream::HasPendingRetransmission() const {
- return send_buffer_->HasPendingRetransmission() || fin_lost_;
+ return send_buffer_.HasPendingRetransmission() || fin_lost_;
}
bool QuicStream::IsStreamFrameOutstanding(QuicStreamOffset offset,
QuicByteCount data_length,
bool fin) const {
- return send_buffer_->IsStreamDataOutstanding(offset, data_length) ||
+ return send_buffer_.IsStreamDataOutstanding(offset, data_length) ||
(fin && fin_outstanding_);
}
@@ -1073,8 +1063,8 @@
}
bool QuicStream::HasBufferedData() const {
- QUICHE_DCHECK_GE(send_buffer_->stream_offset(), stream_bytes_written());
- return (send_buffer_->stream_offset() > stream_bytes_written() &&
+ QUICHE_DCHECK_GE(send_buffer_.stream_offset(), stream_bytes_written());
+ return (send_buffer_.stream_offset() > stream_bytes_written() &&
(!rst_stream_at_sent_ || reliable_size_ > stream_bytes_written()));
}
@@ -1269,8 +1259,8 @@
<< "[" << offset << ", " << offset + data_length << "]"
<< " fin = " << fin_acked;
*newly_acked_length = 0;
- if (!send_buffer_->OnStreamDataAcked(offset, data_length,
- newly_acked_length)) {
+ if (!send_buffer_.OnStreamDataAcked(offset, data_length,
+ newly_acked_length)) {
OnUnrecoverableError(QUIC_INTERNAL_ERROR, "Trying to ack unsent data.");
return false;
}
@@ -1316,7 +1306,7 @@
void QuicStream::OnStreamFrameRetransmitted(QuicStreamOffset offset,
QuicByteCount data_length,
bool fin_retransmitted) {
- send_buffer_->OnStreamDataRetransmitted(offset, data_length);
+ send_buffer_.OnStreamDataRetransmitted(offset, data_length);
if (fin_retransmitted) {
fin_lost_ = false;
}
@@ -1328,7 +1318,7 @@
<< "[" << offset << ", " << offset + data_length << "]"
<< " fin = " << fin_lost;
if (data_length > 0) {
- send_buffer_->OnStreamDataLost(offset, data_length);
+ send_buffer_.OnStreamDataLost(offset, data_length);
}
if (fin_lost && fin_outstanding_) {
fin_lost_ = true;
@@ -1393,7 +1383,7 @@
bool QuicStream::IsWaitingForAcks() const {
return (!rst_sent_ || stream_error_.ok()) &&
- (send_buffer_->stream_bytes_outstanding() || fin_outstanding_);
+ (send_buffer_.stream_bytes_outstanding() || fin_outstanding_);
}
bool QuicStream::WriteStreamData(QuicStreamOffset offset,
@@ -1402,7 +1392,7 @@
QUICHE_DCHECK_LT(0u, data_length);
QUIC_DVLOG(2) << ENDPOINT << "Write stream " << id_ << " data from offset "
<< offset << " length " << data_length;
- return send_buffer_->WriteStreamData(offset, data_length, writer);
+ return send_buffer_.WriteStreamData(offset, data_length, writer);
}
void QuicStream::WriteBufferedData(EncryptionLevel level) {
@@ -1512,8 +1502,8 @@
}
uint64_t QuicStream::BufferedDataBytes() const {
- QUICHE_DCHECK_GE(send_buffer_->stream_offset(), stream_bytes_written());
- return send_buffer_->stream_offset() - stream_bytes_written();
+ QUICHE_DCHECK_GE(send_buffer_.stream_offset(), stream_bytes_written());
+ return send_buffer_.stream_offset() - stream_bytes_written();
}
bool QuicStream::CanWriteNewData() const {
@@ -1525,21 +1515,21 @@
}
uint64_t QuicStream::stream_bytes_written() const {
- return send_buffer_->stream_bytes_written();
+ return send_buffer_.stream_bytes_written();
}
const QuicIntervalSet<QuicStreamOffset>& QuicStream::bytes_acked() const {
- return send_buffer_->bytes_acked();
+ return send_buffer_.bytes_acked();
}
void QuicStream::OnStreamDataConsumed(QuicByteCount bytes_consumed) {
- send_buffer_->OnStreamDataConsumed(bytes_consumed);
+ send_buffer_.OnStreamDataConsumed(bytes_consumed);
}
void QuicStream::WritePendingRetransmission() {
while (HasPendingRetransmission()) {
QuicConsumedData consumed(0, false);
- if (!send_buffer_->HasPendingRetransmission()) {
+ if (!send_buffer_.HasPendingRetransmission()) {
QUIC_DVLOG(1) << ENDPOINT << "stream " << id_
<< " retransmits fin only frame.";
consumed = stream_delegate_->WritevData(
@@ -1552,7 +1542,7 @@
}
} else {
StreamPendingRetransmission pending =
- send_buffer_->NextPendingRetransmission();
+ send_buffer_.NextPendingRetransmission();
// Determine whether the lost fin can be bundled with the data.
const bool can_bundle_fin =
fin_lost_ &&
diff --git a/quiche/quic/core/quic_stream.h b/quiche/quic/core/quic_stream.h
index 0636b54..39276c3 100644
--- a/quiche/quic/core/quic_stream.h
+++ b/quiche/quic/core/quic_stream.h
@@ -36,6 +36,7 @@
#include "quiche/quic/core/quic_stream_priority.h"
#include "quiche/quic/core/quic_stream_send_buffer.h"
#include "quiche/quic/core/quic_stream_send_buffer_base.h"
+#include "quiche/quic/core/quic_stream_send_buffer_inlining.h"
#include "quiche/quic/core/quic_stream_sequencer.h"
#include "quiche/quic/core/quic_types.h"
#include "quiche/quic/core/session_notifier_interface.h"
@@ -528,9 +529,9 @@
const QuicIntervalSet<QuicStreamOffset>& bytes_acked() const;
- const QuicStreamSendBufferBase& send_buffer() const { return *send_buffer_; }
+ const QuicStreamSendBufferBase& send_buffer() const { return send_buffer_; }
- QuicStreamSendBufferBase& send_buffer() { return *send_buffer_; }
+ QuicStreamSendBufferBase& send_buffer() { return send_buffer_; }
// Called when the write side of the stream is closed, and all of the outgoing
// data has been acknowledged. This corresponds to the "Data Recvd" state of
@@ -649,7 +650,7 @@
// Send buffer of this stream. Send buffer is cleaned up when data gets acked
// or discarded.
- std::unique_ptr<QuicStreamSendBufferBase> send_buffer_;
+ QuicStreamSendBufferInlining send_buffer_;
// Latched value of quic_buffered_data_threshold.
const QuicByteCount buffered_data_threshold_;
diff --git a/quiche/quic/test_tools/quic_stream_peer.cc b/quiche/quic/test_tools/quic_stream_peer.cc
index cb42642..4ff801b 100644
--- a/quiche/quic/test_tools/quic_stream_peer.cc
+++ b/quiche/quic/test_tools/quic_stream_peer.cc
@@ -23,7 +23,7 @@
// static
void QuicStreamPeer::SetStreamBytesWritten(
QuicStreamOffset stream_bytes_written, QuicStream* stream) {
- stream->send_buffer_->SetStreamOffsetForTest(stream_bytes_written);
+ stream->send_buffer_.SetStreamOffsetForTest(stream_bytes_written);
}
// static