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