Make QpackDecoderStreamSender buffer serialized instructions.

QpackEncoderStreamSender has already been modified the same way at cr/273553497.

This way Header Acknowledgement and Insert Count Increment emitted from a single
QpackDecoder::OnDecodingCompleted() call can be coalesced into a single write
without any copying.

gfe-relnote: n/a, change to QUIC v99-only code.  Protected by existing disabled gfe2_reloadable_flag_quic_enable_version_99.
PiperOrigin-RevId: 274280271
Change-Id: I8152636818ef2c0dbbd3b95355c5280cebcd04c6
diff --git a/quic/core/qpack/qpack_decoder_stream_sender.cc b/quic/core/qpack/qpack_decoder_stream_sender.cc
index 7f3f346..68e4d67 100644
--- a/quic/core/qpack/qpack_decoder_stream_sender.cc
+++ b/quic/core/qpack/qpack_decoder_stream_sender.cc
@@ -18,29 +18,32 @@
 void QpackDecoderStreamSender::SendInsertCountIncrement(uint64_t increment) {
   values_.varint = increment;
 
-  std::string output;
   instruction_encoder_.Encode(InsertCountIncrementInstruction(), values_,
-                              &output);
-  delegate_->WriteStreamData(output);
+                              &buffer_);
 }
 
 void QpackDecoderStreamSender::SendHeaderAcknowledgement(
     QuicStreamId stream_id) {
   values_.varint = stream_id;
 
-  std::string output;
   instruction_encoder_.Encode(HeaderAcknowledgementInstruction(), values_,
-                              &output);
-  delegate_->WriteStreamData(output);
+                              &buffer_);
 }
 
 void QpackDecoderStreamSender::SendStreamCancellation(QuicStreamId stream_id) {
   values_.varint = stream_id;
 
-  std::string output;
   instruction_encoder_.Encode(StreamCancellationInstruction(), values_,
-                              &output);
-  delegate_->WriteStreamData(output);
+                              &buffer_);
+}
+
+void QpackDecoderStreamSender::Flush() {
+  if (buffer_.empty()) {
+    return;
+  }
+
+  delegate_->WriteStreamData(buffer_);
+  buffer_.clear();
 }
 
 }  // namespace quic