Use faster Huffman encoding for QPACK. Protected by FLAGS_quic_reloadable_flag_quic_use_fast_huffman_encoder. PiperOrigin-RevId: 336137775 Change-Id: If905e42444d1f4366b3022df1953b3caf12796a6
diff --git a/quic/core/qpack/qpack_instruction_encoder.cc b/quic/core/qpack/qpack_instruction_encoder.cc index ee02278..055edd7 100644 --- a/quic/core/qpack/qpack_instruction_encoder.cc +++ b/quic/core/qpack/qpack_instruction_encoder.cc
@@ -8,6 +8,7 @@ #include "net/third_party/quiche/src/http2/hpack/huffman/hpack_huffman_encoder.h" #include "net/third_party/quiche/src/http2/hpack/varint/hpack_varint_encoder.h" +#include "net/third_party/quiche/src/quic/platform/api/quic_flags.h" #include "net/third_party/quiche/src/quic/platform/api/quic_logging.h" #include "net/third_party/quiche/src/quic/platform/api/quic_string_utils.h" #include "net/third_party/quiche/src/common/platform/api/quiche_string_piece.h" @@ -19,7 +20,13 @@ string_length_(0), byte_(0), state_(State::kOpcode), - instruction_(nullptr) {} + instruction_(nullptr), + use_fast_huffman_encoder_( + GetQuicReloadableFlag(quic_use_fast_huffman_encoder)) { + if (use_fast_huffman_encoder_) { + QUIC_RELOADABLE_FLAG_COUNT(quic_use_fast_huffman_encoder); + } +} void QpackInstructionEncoder::Encode( const QpackInstructionWithValues& instruction_with_values, @@ -164,7 +171,11 @@ quiche::QuicheStringPiece string_to_write = (field_->type == QpackInstructionFieldType::kName) ? name : value; if (use_huffman_) { - http2::HuffmanEncode(string_to_write, string_length_, output); + if (use_fast_huffman_encoder_) { + http2::HuffmanEncodeFast(string_to_write, string_length_, output); + } else { + http2::HuffmanEncode(string_to_write, string_length_, output); + } } else { QuicStrAppend(output, string_to_write); }
diff --git a/quic/core/qpack/qpack_instruction_encoder.h b/quic/core/qpack/qpack_instruction_encoder.h index 867b179..e3ae6c7 100644 --- a/quic/core/qpack/qpack_instruction_encoder.h +++ b/quic/core/qpack/qpack_instruction_encoder.h
@@ -78,6 +78,9 @@ // Field currently being decoded. QpackInstructionFields::const_iterator field_; + + // Latched value of gfe2_reloadable_flag_quic_use_fast_huffman_encoder. + const bool use_fast_huffman_encoder_; }; } // namespace quic