Use new SendBuffer everywhere in the codebase.

Test-only uses are directly switched to the new implementation; the other uses are flag-protected.

Also add "Old" suffix to the old implementation to make sure I covered all references.

Protected by FLAGS_quic_reloadable_flag_quic_use_inlining_send_buffer_everywhere.

PiperOrigin-RevId: 840820884
diff --git a/quiche/common/quiche_feature_flags_list.h b/quiche/common/quiche_feature_flags_list.h
index a34aa63..372ed84 100755
--- a/quiche/common/quiche_feature_flags_list.h
+++ b/quiche/common/quiche_feature_flags_list.h
@@ -60,6 +60,7 @@
 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_buffer_everywhere, false, false, "Use QuicStreamSendBufferInlining consistently everywhere in the codebase.")
 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_reloadable_flag_reset_content_length_status_when_removing_content_length_header, false, false, "If true, the content_length_status field in balsa_headers will always be reset when the Content-Length header is removed, no matter if the Transfer-Encoding header is chuncked or not.")
diff --git a/quiche/quic/core/quic_buffered_packet_store.cc b/quiche/quic/core/quic_buffered_packet_store.cc
index ba8e00c..45173d8 100644
--- a/quiche/quic/core/quic_buffered_packet_store.cc
+++ b/quiche/quic/core/quic_buffered_packet_store.cc
@@ -27,6 +27,8 @@
 #include "quiche/quic/core/quic_packet_creator.h"
 #include "quiche/quic/core/quic_packet_number.h"
 #include "quiche/quic/core/quic_packets.h"
+#include "quiche/quic/core/quic_stream_send_buffer.h"
+#include "quiche/quic/core/quic_stream_send_buffer_inlining.h"
 #include "quiche/quic/core/quic_time.h"
 #include "quiche/quic/core/quic_types.h"
 #include "quiche/quic/core/quic_versions.h"
@@ -622,4 +624,16 @@
   return true;
 }
 
+static std::unique_ptr<QuicStreamSendBufferBase> CreateSendBuffer(
+    quiche::QuicheBufferAllocator* allocator) {
+  if (GetQuicReloadableFlag(quic_use_inlining_send_buffer_everywhere)) {
+    QUIC_RELOADABLE_FLAG_COUNT_N(quic_use_inlining_send_buffer_everywhere, 2,
+                                 2);
+    return std::make_unique<QuicStreamSendBufferInlining>(allocator);
+  }
+  return std::make_unique<QuicStreamSendBufferOld>(allocator);
+}
+
+PacketCollector::PacketCollector(quiche::QuicheBufferAllocator* allocator)
+    : send_buffer_(CreateSendBuffer(allocator)) {}
 }  // namespace quic
diff --git a/quiche/quic/core/quic_buffered_packet_store.h b/quiche/quic/core/quic_buffered_packet_store.h
index 28b9355..3e6a208 100644
--- a/quiche/quic/core/quic_buffered_packet_store.h
+++ b/quiche/quic/core/quic_buffered_packet_store.h
@@ -29,6 +29,7 @@
 #include "quiche/quic/core/quic_packets.h"
 #include "quiche/quic/core/quic_stream_frame_data_producer.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_time.h"
 #include "quiche/quic/core/quic_types.h"
 #include "quiche/quic/core/quic_versions.h"
@@ -347,8 +348,7 @@
     : public QuicPacketCreator::DelegateInterface,
       public QuicStreamFrameDataProducer {
  public:
-  explicit PacketCollector(quiche::QuicheBufferAllocator* allocator)
-      : send_buffer_(allocator) {}
+  explicit PacketCollector(quiche::QuicheBufferAllocator* allocator);
   ~PacketCollector() override = default;
 
   // QuicPacketCreator::DelegateInterface methods:
@@ -394,7 +394,7 @@
                                         QuicStreamOffset offset,
                                         QuicByteCount data_length,
                                         QuicDataWriter* writer) override {
-    if (send_buffer_.WriteStreamData(offset, data_length, writer)) {
+    if (send_buffer_->WriteStreamData(offset, data_length, writer)) {
       return WRITE_SUCCESS;
     }
     return WRITE_FAILED;
@@ -402,7 +402,7 @@
   bool WriteCryptoData(EncryptionLevel /*level*/, QuicStreamOffset offset,
                        QuicByteCount data_length,
                        QuicDataWriter* writer) override {
-    return send_buffer_.WriteStreamData(offset, data_length, writer);
+    return send_buffer_->WriteStreamData(offset, data_length, writer);
   }
 
   std::vector<std::unique_ptr<QuicEncryptedPacket>>* packets() {
@@ -413,7 +413,7 @@
   std::vector<std::unique_ptr<QuicEncryptedPacket>> packets_;
   // This is only needed until the packets are encrypted. Once packets are
   // encrypted, the stream data is no longer required.
-  QuicStreamSendBuffer send_buffer_;
+  const std::unique_ptr<QuicStreamSendBufferBase> send_buffer_;
 };
 
 }  // namespace quic
diff --git a/quiche/quic/core/quic_crypto_stream.cc b/quiche/quic/core/quic_crypto_stream.cc
index 328b156..181a056 100644
--- a/quiche/quic/core/quic_crypto_stream.cc
+++ b/quiche/quic/core/quic_crypto_stream.cc
@@ -5,7 +5,7 @@
 #include "quiche/quic/core/quic_crypto_stream.h"
 
 #include <algorithm>
-#include <optional>
+#include <memory>
 #include <string>
 
 #include "absl/strings/str_cat.h"
@@ -15,11 +15,15 @@
 #include "quiche/quic/core/quic_connection.h"
 #include "quiche/quic/core/quic_error_codes.h"
 #include "quiche/quic/core/quic_session.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_types.h"
 #include "quiche/quic/core/quic_utils.h"
 #include "quiche/quic/platform/api/quic_flag_utils.h"
 #include "quiche/quic/platform/api/quic_flags.h"
 #include "quiche/quic/platform/api/quic_logging.h"
+#include "quiche/common/quiche_buffer_allocator.h"
 
 namespace quic {
 
@@ -141,8 +145,8 @@
     return;
   }
   const bool had_buffered_data = HasBufferedCryptoFrames();
-  QuicStreamSendBuffer* send_buffer =
-      &substreams_[QuicUtils::GetPacketNumberSpace(level)].send_buffer;
+  QuicStreamSendBufferBase* send_buffer =
+      substreams_[QuicUtils::GetPacketNumberSpace(level)].send_buffer.get();
   QuicStreamOffset offset = send_buffer->stream_offset();
 
   // Ensure this data does not cause the send buffer for this encryption level
@@ -195,8 +199,8 @@
                                           QuicTime::Delta /*ack_delay_time*/) {
   QuicByteCount newly_acked_length = 0;
   if (!substreams_[QuicUtils::GetPacketNumberSpace(frame.level)]
-           .send_buffer.OnStreamDataAcked(frame.offset, frame.data_length,
-                                          &newly_acked_length)) {
+           .send_buffer->OnStreamDataAcked(frame.offset, frame.data_length,
+                                           &newly_acked_length)) {
     OnUnrecoverableError(QUIC_INTERNAL_ERROR,
                          "Trying to ack unsent crypto data.");
     return false;
@@ -223,8 +227,8 @@
     }
     return;
   }
-  QuicStreamSendBuffer* send_buffer =
-      &substreams_[QuicUtils::GetPacketNumberSpace(level)].send_buffer;
+  QuicStreamSendBufferBase* send_buffer =
+      substreams_[QuicUtils::GetPacketNumberSpace(level)].send_buffer.get();
   // TODO(nharper): Consider adding a Clear() method to QuicStreamSendBuffer
   // to replace the following code.
   QuicIntervalSet<QuicStreamOffset> to_ack = send_buffer->bytes_acked();
@@ -253,7 +257,7 @@
     return false;
   }
   for (const auto& substream : substreams_) {
-    if (substream.send_buffer.HasPendingRetransmission()) {
+    if (substream.send_buffer->HasPendingRetransmission()) {
       return true;
     }
   }
@@ -266,8 +270,8 @@
       << "Versions less than 47 don't write CRYPTO frames";
   for (uint8_t i = INITIAL_DATA; i <= APPLICATION_DATA; ++i) {
     auto packet_number_space = static_cast<PacketNumberSpace>(i);
-    QuicStreamSendBuffer* send_buffer =
-        &substreams_[packet_number_space].send_buffer;
+    QuicStreamSendBufferBase* send_buffer =
+        substreams_[packet_number_space].send_buffer.get();
     while (send_buffer->HasPendingRetransmission()) {
       auto pending = send_buffer->NextPendingRetransmission();
       size_t bytes_consumed = stream_delegate()->SendCryptoData(
@@ -382,7 +386,7 @@
 
 uint64_t QuicCryptoStream::BytesSentOnLevel(EncryptionLevel level) const {
   return substreams_[QuicUtils::GetPacketNumberSpace(level)]
-      .send_buffer.stream_bytes_written();
+      .send_buffer->stream_bytes_written();
 }
 
 bool QuicCryptoStream::WriteCryptoFrame(EncryptionLevel level,
@@ -393,7 +397,7 @@
               !VersionIsIetfQuic(session()->transport_version()))
       << "Versions less than 47 don't write CRYPTO frames (2)";
   return substreams_[QuicUtils::GetPacketNumberSpace(level)]
-      .send_buffer.WriteStreamData(offset, data_length, writer);
+      .send_buffer->WriteStreamData(offset, data_length, writer);
 }
 
 void QuicCryptoStream::OnCryptoFrameLost(QuicCryptoFrame* crypto_frame) {
@@ -401,8 +405,8 @@
               !VersionIsIetfQuic(session()->transport_version()))
       << "Versions less than 47 don't lose CRYPTO frames";
   substreams_[QuicUtils::GetPacketNumberSpace(crypto_frame->level)]
-      .send_buffer.OnStreamDataLost(crypto_frame->offset,
-                                    crypto_frame->data_length);
+      .send_buffer->OnStreamDataLost(crypto_frame->offset,
+                                     crypto_frame->data_length);
 }
 
 bool QuicCryptoStream::RetransmitData(QuicCryptoFrame* crypto_frame,
@@ -412,9 +416,9 @@
       << "Versions less than 47 don't retransmit CRYPTO frames";
   QuicIntervalSet<QuicStreamOffset> retransmission(
       crypto_frame->offset, crypto_frame->offset + crypto_frame->data_length);
-  QuicStreamSendBuffer* send_buffer =
-      &substreams_[QuicUtils::GetPacketNumberSpace(crypto_frame->level)]
-           .send_buffer;
+  QuicStreamSendBufferBase* send_buffer =
+      substreams_[QuicUtils::GetPacketNumberSpace(crypto_frame->level)]
+          .send_buffer.get();
   retransmission.Difference(send_buffer->bytes_acked());
   if (retransmission.Empty()) {
     return true;
@@ -443,8 +447,8 @@
       << "Versions less than 47 don't use CRYPTO frames";
   for (uint8_t i = INITIAL_DATA; i <= APPLICATION_DATA; ++i) {
     auto packet_number_space = static_cast<PacketNumberSpace>(i);
-    QuicStreamSendBuffer* send_buffer =
-        &substreams_[packet_number_space].send_buffer;
+    QuicStreamSendBufferBase* send_buffer =
+        substreams_[packet_number_space].send_buffer.get();
     const size_t data_length =
         send_buffer->stream_offset() - send_buffer->stream_bytes_written();
     if (data_length == 0) {
@@ -467,7 +471,7 @@
               !VersionIsIetfQuic(session()->transport_version()))
       << "Versions less than 47 don't use CRYPTO frames";
   for (const CryptoSubstream& substream : substreams_) {
-    const QuicStreamSendBuffer& send_buffer = substream.send_buffer;
+    const QuicStreamSendBufferBase& send_buffer = *substream.send_buffer;
     QUICHE_DCHECK_GE(send_buffer.stream_offset(),
                      send_buffer.stream_bytes_written());
     if (send_buffer.stream_offset() > send_buffer.stream_bytes_written()) {
@@ -489,7 +493,7 @@
     return false;
   }
   return substreams_[QuicUtils::GetPacketNumberSpace(level)]
-      .send_buffer.IsStreamDataOutstanding(offset, length);
+      .send_buffer->IsStreamDataOutstanding(offset, length);
 }
 
 bool QuicCryptoStream::IsWaitingForAcks() const {
@@ -497,20 +501,29 @@
     return QuicStream::IsWaitingForAcks();
   }
   for (const CryptoSubstream& substream : substreams_) {
-    if (substream.send_buffer.stream_bytes_outstanding()) {
+    if (substream.send_buffer->stream_bytes_outstanding()) {
       return true;
     }
   }
   return false;
 }
 
+static std::unique_ptr<QuicStreamSendBufferBase> CreateSendBuffer(
+    QuicSession* session) {
+  quiche::QuicheBufferAllocator* allocator =
+      session->connection()->helper()->GetStreamSendBufferAllocator();
+  if (GetQuicReloadableFlag(quic_use_inlining_send_buffer_everywhere)) {
+    QUIC_RELOADABLE_FLAG_COUNT_N(quic_use_inlining_send_buffer_everywhere, 1,
+                                 2);
+    return std::make_unique<QuicStreamSendBufferInlining>(allocator);
+  }
+  return std::make_unique<QuicStreamSendBufferOld>(allocator);
+}
+
 QuicCryptoStream::CryptoSubstream::CryptoSubstream(
     QuicCryptoStream* crypto_stream)
     : sequencer(crypto_stream),
-      send_buffer(crypto_stream->session()
-                      ->connection()
-                      ->helper()
-                      ->GetStreamSendBufferAllocator()) {}
+      send_buffer(CreateSendBuffer(crypto_stream->session())) {}
 
 #undef ENDPOINT  // undef for jumbo builds
 }  // namespace quic
diff --git a/quiche/quic/core/quic_crypto_stream.h b/quiche/quic/core/quic_crypto_stream.h
index 191aa57..cf294a8 100644
--- a/quiche/quic/core/quic_crypto_stream.h
+++ b/quiche/quic/core/quic_crypto_stream.h
@@ -7,6 +7,7 @@
 
 #include <array>
 #include <cstddef>
+#include <memory>
 #include <string>
 
 #include "absl/strings/string_view.h"
@@ -17,6 +18,7 @@
 #include "quiche/quic/core/quic_config.h"
 #include "quiche/quic/core/quic_packets.h"
 #include "quiche/quic/core/quic_stream.h"
+#include "quiche/quic/core/quic_stream_send_buffer_base.h"
 #include "quiche/quic/core/quic_types.h"
 #include "quiche/quic/platform/api/quic_export.h"
 
@@ -263,7 +265,7 @@
     CryptoSubstream(QuicCryptoStream* crypto_stream);
 
     QuicStreamSequencer sequencer;
-    QuicStreamSendBuffer send_buffer;
+    const std::unique_ptr<QuicStreamSendBufferBase> send_buffer;
   };
 
   // Consumed data according to encryption levels.
diff --git a/quiche/quic/core/quic_stream_send_buffer.cc b/quiche/quic/core/quic_stream_send_buffer.cc
index a1b9779..32c5e35 100644
--- a/quiche/quic/core/quic_stream_send_buffer.cc
+++ b/quiche/quic/core/quic_stream_send_buffer.cc
@@ -49,11 +49,11 @@
   return QuicInterval<uint64_t>(offset, offset + length);
 }
 
-QuicStreamSendBuffer::QuicStreamSendBuffer(
+QuicStreamSendBufferOld::QuicStreamSendBufferOld(
     quiche::QuicheBufferAllocator* allocator)
     : allocator_(allocator) {}
 
-void QuicStreamSendBuffer::SaveStreamData(absl::string_view data) {
+void QuicStreamSendBufferOld::SaveStreamData(absl::string_view data) {
   QUIC_DVLOG(2) << "Save stream data offset " << stream_offset_ << " length "
                 << data.length();
   QUICHE_DCHECK(!data.empty());
@@ -72,7 +72,7 @@
   }
 }
 
-void QuicStreamSendBuffer::SaveMemSlice(quiche::QuicheMemSlice slice) {
+void QuicStreamSendBufferOld::SaveMemSlice(quiche::QuicheMemSlice slice) {
   QUIC_DVLOG(2) << "Save slice offset " << stream_offset_ << " length "
                 << slice.length();
   if (slice.empty()) {
@@ -85,7 +85,7 @@
   stream_offset_ += length;
 }
 
-QuicByteCount QuicStreamSendBuffer::SaveMemSliceSpan(
+QuicByteCount QuicStreamSendBufferOld::SaveMemSliceSpan(
     absl::Span<quiche::QuicheMemSlice> span) {
   QuicByteCount total = 0;
   for (quiche::QuicheMemSlice& slice : span) {
@@ -99,9 +99,9 @@
   return total;
 }
 
-bool QuicStreamSendBuffer::WriteStreamData(QuicStreamOffset offset,
-                                           QuicByteCount data_length,
-                                           QuicDataWriter* writer) {
+bool QuicStreamSendBufferOld::WriteStreamData(QuicStreamOffset offset,
+                                              QuicByteCount data_length,
+                                              QuicDataWriter* writer) {
   // The iterator returned from |interval_deque_| will automatically advance
   // the internal write index for the QuicIntervalDeque. The incrementing is
   // done in operator++.
@@ -126,8 +126,8 @@
   return data_length == 0;
 }
 
-bool QuicStreamSendBuffer::FreeMemSlices(QuicStreamOffset start,
-                                         QuicStreamOffset end) {
+bool QuicStreamSendBufferOld::FreeMemSlices(QuicStreamOffset start,
+                                            QuicStreamOffset end) {
   auto it = interval_deque_.DataBegin();
   if (it == interval_deque_.DataEnd() || it->slice.empty()) {
     QUIC_BUG(quic_bug_10853_4)
@@ -161,21 +161,22 @@
   return true;
 }
 
-void QuicStreamSendBuffer::CleanUpBufferedSlices() {
+void QuicStreamSendBufferOld::CleanUpBufferedSlices() {
   while (!interval_deque_.Empty() &&
          interval_deque_.DataBegin()->slice.empty()) {
     interval_deque_.PopFront();
   }
 }
 
-size_t QuicStreamSendBuffer::size() const { return interval_deque_.Size(); }
+size_t QuicStreamSendBufferOld::size() const { return interval_deque_.Size(); }
 
-void QuicStreamSendBuffer::SetStreamOffsetForTest(QuicStreamOffset new_offset) {
+void QuicStreamSendBufferOld::SetStreamOffsetForTest(
+    QuicStreamOffset new_offset) {
   QuicStreamSendBufferBase::SetStreamOffsetForTest(new_offset);
   stream_offset_ = new_offset;
 }
 
-absl::string_view QuicStreamSendBuffer::LatestWriteForTest() {
+absl::string_view QuicStreamSendBufferOld::LatestWriteForTest() {
   absl::string_view last_slice = "";
   for (auto it = interval_deque_.DataBegin(); it != interval_deque_.DataEnd();
        ++it) {
@@ -184,7 +185,7 @@
   return last_slice;
 }
 
-QuicByteCount QuicStreamSendBuffer::TotalDataBufferedForTest() {
+QuicByteCount QuicStreamSendBufferOld::TotalDataBufferedForTest() {
   QuicByteCount length = 0;
   for (auto slice = interval_deque_.DataBegin();
        slice != interval_deque_.DataEnd(); ++slice) {
diff --git a/quiche/quic/core/quic_stream_send_buffer.h b/quiche/quic/core/quic_stream_send_buffer.h
index 85caec6..e21277a 100644
--- a/quiche/quic/core/quic_stream_send_buffer.h
+++ b/quiche/quic/core/quic_stream_send_buffer.h
@@ -55,9 +55,9 @@
 // it cannot be written after it is marked as acked. Stream data can be written
 // out-of-order within those bounds, but note that in-order wites are O(1)
 // whereas out-of-order writes are O(log(n)), see QuicIntervalDeque for details.
-class QUICHE_EXPORT QuicStreamSendBuffer : public QuicStreamSendBufferBase {
+class QUICHE_EXPORT QuicStreamSendBufferOld : public QuicStreamSendBufferBase {
  public:
-  explicit QuicStreamSendBuffer(quiche::QuicheBufferAllocator* allocator);
+  explicit QuicStreamSendBufferOld(quiche::QuicheBufferAllocator* allocator);
 
   // Save |data| to send buffer.
   void SaveStreamData(absl::string_view data) override;
diff --git a/quiche/quic/core/quic_stream_send_buffer_test.cc b/quiche/quic/core/quic_stream_send_buffer_test.cc
index c44f1c1..059bca6 100644
--- a/quiche/quic/core/quic_stream_send_buffer_test.cc
+++ b/quiche/quic/core/quic_stream_send_buffer_test.cc
@@ -35,7 +35,7 @@
 // gone.
 class QuicStreamSendBufferPeer {
  public:
-  static int32_t write_index(QuicStreamSendBuffer* send_buffer) {
+  static int32_t write_index(QuicStreamSendBufferOld* send_buffer) {
     return QuicIntervalDequePeer::GetCachedIndex(&send_buffer->interval_deque_);
   }
 };
@@ -98,7 +98,7 @@
   std::unique_ptr<QuicStreamSendBufferBase> CreateBuffer() {
     switch (GetParam()) {
       case SendBufferType::kDefault:
-        return std::make_unique<QuicStreamSendBuffer>(&allocator_);
+        return std::make_unique<QuicStreamSendBufferOld>(&allocator_);
       case SendBufferType::kInlining:
         return std::make_unique<QuicStreamSendBufferInlining>(&allocator_);
     }
@@ -175,14 +175,16 @@
   QuicDataWriter writer(6000, buf, quiche::HOST_BYTE_ORDER);
   // Write more than one slice.
   if (GetParam() == SendBufferType::kDefault) {
-    EXPECT_EQ(0, QuicStreamSendBufferPeer::write_index(
-                     static_cast<QuicStreamSendBuffer*>(send_buffer_.get())));
+    EXPECT_EQ(0,
+              QuicStreamSendBufferPeer::write_index(
+                  static_cast<QuicStreamSendBufferOld*>(send_buffer_.get())));
   }
   ASSERT_TRUE(send_buffer_->WriteStreamData(0, 1024, &writer));
   EXPECT_EQ(copy1, absl::string_view(buf, 1024));
   if (GetParam() == SendBufferType::kDefault) {
-    EXPECT_EQ(1, QuicStreamSendBufferPeer::write_index(
-                     static_cast<QuicStreamSendBuffer*>(send_buffer_.get())));
+    EXPECT_EQ(1,
+              QuicStreamSendBufferPeer::write_index(
+                  static_cast<QuicStreamSendBufferOld*>(send_buffer_.get())));
   }
 
   // Retransmit the first frame and also send new data.
diff --git a/quiche/quic/test_tools/simple_data_producer.cc b/quiche/quic/test_tools/simple_data_producer.cc
index 30e4646..3337c3e 100644
--- a/quiche/quic/test_tools/simple_data_producer.cc
+++ b/quiche/quic/test_tools/simple_data_producer.cc
@@ -10,6 +10,7 @@
 
 #include "absl/strings/string_view.h"
 #include "quiche/quic/core/quic_data_writer.h"
+#include "quiche/quic/core/quic_stream_send_buffer_inlining.h"
 #include "quiche/quic/platform/api/quic_bug_tracker.h"
 #include "quiche/quic/platform/api/quic_flags.h"
 
@@ -27,7 +28,8 @@
     return;
   }
   if (!send_buffer_map_.contains(id)) {
-    send_buffer_map_[id] = std::make_unique<QuicStreamSendBuffer>(&allocator_);
+    send_buffer_map_[id] =
+        std::make_unique<QuicStreamSendBufferInlining>(&allocator_);
   }
   send_buffer_map_[id]->SaveStreamData(data);
 }
diff --git a/quiche/quic/test_tools/simple_data_producer.h b/quiche/quic/test_tools/simple_data_producer.h
index 96952d7..1d70a57 100644
--- a/quiche/quic/test_tools/simple_data_producer.h
+++ b/quiche/quic/test_tools/simple_data_producer.h
@@ -9,6 +9,7 @@
 #include "absl/strings/string_view.h"
 #include "quiche/quic/core/quic_stream_frame_data_producer.h"
 #include "quiche/quic/core/quic_stream_send_buffer.h"
+#include "quiche/quic/core/quic_stream_send_buffer_inlining.h"
 #include "quiche/common/simple_buffer_allocator.h"
 
 namespace quic {
@@ -41,7 +42,8 @@
 
  private:
   using SendBufferMap =
-      absl::flat_hash_map<QuicStreamId, std::unique_ptr<QuicStreamSendBuffer>>;
+      absl::flat_hash_map<QuicStreamId,
+                          std::unique_ptr<QuicStreamSendBufferInlining>>;
 
   using CryptoBufferMap =
       absl::flat_hash_map<std::pair<EncryptionLevel, QuicStreamOffset>,