Update language in QpackDecoder. Compressed field sections (formerly known as header blocks) consist of "representations", not "instructions". Also see https://github.com/quicwg/base-drafts/pull/2942#discussion_r335222617. PiperOrigin-RevId: 363015914 Change-Id: Ic113565211cc5234be9832e76c7cf025242b7a4f
diff --git a/quic/core/qpack/qpack_encoder.cc b/quic/core/qpack/qpack_encoder.cc index de42996..5e61ee7 100644 --- a/quic/core/qpack/qpack_encoder.cc +++ b/quic/core/qpack/qpack_encoder.cc
@@ -44,7 +44,7 @@ QpackEncoder::~QpackEncoder() {} // static -QpackInstructionWithValues QpackEncoder::EncodeIndexedHeaderField( +QpackEncoder::Representation QpackEncoder::EncodeIndexedHeaderField( bool is_static, uint64_t index, QpackBlockingManager::IndexSet* referred_indices) { @@ -52,11 +52,11 @@ if (!is_static) { referred_indices->insert(index); } - return QpackInstructionWithValues::IndexedHeaderField(is_static, index); + return Representation::IndexedHeaderField(is_static, index); } // static -QpackInstructionWithValues +QpackEncoder::Representation QpackEncoder::EncodeLiteralHeaderFieldWithNameReference( bool is_static, uint64_t index, @@ -66,18 +66,18 @@ if (!is_static) { referred_indices->insert(index); } - return QpackInstructionWithValues::LiteralHeaderFieldNameReference( - is_static, index, value); + return Representation::LiteralHeaderFieldNameReference(is_static, index, + value); } // static -QpackInstructionWithValues QpackEncoder::EncodeLiteralHeaderField( +QpackEncoder::Representation QpackEncoder::EncodeLiteralHeaderField( absl::string_view name, absl::string_view value) { - return QpackInstructionWithValues::LiteralHeaderField(name, value); + return Representation::LiteralHeaderField(name, value); } -QpackEncoder::Instructions QpackEncoder::FirstPassEncode( +QpackEncoder::Representations QpackEncoder::FirstPassEncode( QuicStreamId stream_id, const spdy::Http2HeaderBlock& header_list, QpackBlockingManager::IndexSet* referred_indices, @@ -87,8 +87,8 @@ const QuicByteCount initial_encoder_stream_buffered_byte_count = encoder_stream_sender_.BufferedByteCount(); - Instructions instructions; - instructions.reserve(header_list.size()); + Representations representations; + representations.reserve(header_list.size()); // The index of the oldest entry that must not be evicted. uint64_t smallest_blocking_index = @@ -125,7 +125,7 @@ case QpackHeaderTable::MatchType::kNameAndValue: if (is_static) { // Refer to entry directly. - instructions.push_back( + representations.push_back( EncodeIndexedHeaderField(is_static, index, referred_indices)); break; @@ -136,7 +136,7 @@ if (!blocking_allowed && index >= known_received_count) { blocked_stream_limit_exhausted = true; } else { - instructions.push_back( + representations.push_back( EncodeIndexedHeaderField(is_static, index, referred_indices)); smallest_blocking_index = std::min(smallest_blocking_index, index); header_table_.set_dynamic_table_entry_referenced(); @@ -157,7 +157,7 @@ QpackAbsoluteIndexToEncoderStreamRelativeIndex( index, header_table_.inserted_entry_count())); uint64_t new_index = header_table_.InsertEntry(name, value); - instructions.push_back(EncodeIndexedHeaderField( + representations.push_back(EncodeIndexedHeaderField( is_static, new_index, referred_indices)); smallest_blocking_index = std::min(smallest_blocking_index, index); header_table_.set_dynamic_table_entry_referenced(); @@ -171,7 +171,7 @@ // exists. // TODO(b/112770235): Use static entry name with literal value if // dynamic entry exists but cannot be used. - instructions.push_back(EncodeLiteralHeaderField(name, value)); + representations.push_back(EncodeLiteralHeaderField(name, value)); break; @@ -185,7 +185,7 @@ encoder_stream_sender_.SendInsertWithNameReference(is_static, index, value); uint64_t new_index = header_table_.InsertEntry(name, value); - instructions.push_back(EncodeIndexedHeaderField( + representations.push_back(EncodeIndexedHeaderField( /* is_static = */ false, new_index, referred_indices)); smallest_blocking_index = std::min<uint64_t>(smallest_blocking_index, new_index); @@ -194,7 +194,7 @@ } // Emit literal field with name reference. - instructions.push_back(EncodeLiteralHeaderFieldWithNameReference( + representations.push_back(EncodeLiteralHeaderFieldWithNameReference( is_static, index, value, referred_indices)); break; @@ -214,7 +214,7 @@ index, header_table_.inserted_entry_count()), value); uint64_t new_index = header_table_.InsertEntry(name, value); - instructions.push_back( + representations.push_back( EncodeIndexedHeaderField(is_static, new_index, referred_indices)); smallest_blocking_index = std::min(smallest_blocking_index, index); header_table_.set_dynamic_table_entry_referenced(); @@ -225,7 +225,7 @@ if ((blocking_allowed || index < known_received_count) && index >= draining_index) { // If allowed, refer to entry name directly, with literal value. - instructions.push_back(EncodeLiteralHeaderFieldWithNameReference( + representations.push_back(EncodeLiteralHeaderFieldWithNameReference( is_static, index, value, referred_indices)); smallest_blocking_index = std::min(smallest_blocking_index, index); header_table_.set_dynamic_table_entry_referenced(); @@ -238,7 +238,7 @@ // exists. // TODO(b/112770235): Use static entry name with literal value if // dynamic entry exists but cannot be used. - instructions.push_back(EncodeLiteralHeaderField(name, value)); + representations.push_back(EncodeLiteralHeaderField(name, value)); break; @@ -253,7 +253,7 @@ } else { encoder_stream_sender_.SendInsertWithoutNameReference(name, value); uint64_t new_index = header_table_.InsertEntry(name, value); - instructions.push_back(EncodeIndexedHeaderField( + representations.push_back(EncodeIndexedHeaderField( /* is_static = */ false, new_index, referred_indices)); smallest_blocking_index = std::min<uint64_t>(smallest_blocking_index, new_index); @@ -265,7 +265,7 @@ // TODO(b/112770235): Consider also adding to dynamic table to improve // compression ratio for subsequent header blocks with peers that do not // allow any blocked streams. - instructions.push_back(EncodeLiteralHeaderField(name, value)); + representations.push_back(EncodeLiteralHeaderField(name, value)); break; } @@ -320,34 +320,34 @@ "prevent referencing unacknowledged dynamic table entries."); } - return instructions; + return representations; } std::string QpackEncoder::SecondPassEncode( - QpackEncoder::Instructions instructions, + QpackEncoder::Representations representations, uint64_t required_insert_count) const { QpackInstructionEncoder instruction_encoder; std::string encoded_headers; // Header block prefix. instruction_encoder.Encode( - QpackInstructionWithValues::Prefix(QpackEncodeRequiredInsertCount( + Representation::Prefix(QpackEncodeRequiredInsertCount( required_insert_count, header_table_.max_entries())), &encoded_headers); const uint64_t base = required_insert_count; - for (auto& instruction : instructions) { + for (auto& representation : representations) { // Dynamic table references must be transformed from absolute to relative // indices. - if ((instruction.instruction() == QpackIndexedHeaderFieldInstruction() || - instruction.instruction() == + if ((representation.instruction() == QpackIndexedHeaderFieldInstruction() || + representation.instruction() == QpackLiteralHeaderFieldNameReferenceInstruction()) && - !instruction.s_bit()) { - instruction.set_varint(QpackAbsoluteIndexToRequestStreamRelativeIndex( - instruction.varint(), base)); + !representation.s_bit()) { + representation.set_varint(QpackAbsoluteIndexToRequestStreamRelativeIndex( + representation.varint(), base)); } - instruction_encoder.Encode(instruction, &encoded_headers); + instruction_encoder.Encode(representation, &encoded_headers); } return encoded_headers; @@ -361,8 +361,8 @@ // that it can be passed to QpackBlockingManager. QpackBlockingManager::IndexSet referred_indices; - // First pass: encode into |instructions|. - Instructions instructions = + // First pass: encode into |representations|. + Representations representations = FirstPassEncode(stream_id, header_list, &referred_indices, encoder_stream_sent_byte_count); @@ -375,7 +375,7 @@ } // Second pass. - return SecondPassEncode(std::move(instructions), required_insert_count); + return SecondPassEncode(std::move(representations), required_insert_count); } bool QpackEncoder::SetMaximumDynamicTableCapacity(
diff --git a/quic/core/qpack/qpack_encoder.h b/quic/core/qpack/qpack_encoder.h index 3d95f6e..9d02441 100644 --- a/quic/core/qpack/qpack_encoder.h +++ b/quic/core/qpack/qpack_encoder.h
@@ -105,27 +105,27 @@ private: friend class test::QpackEncoderPeer; - using Instructions = std::vector<QpackInstructionWithValues>; + using Representation = QpackInstructionWithValues; + using Representations = std::vector<Representation>; - // Generate indexed header field instruction + // Generate indexed header field representation // and optionally update |*referred_indices|. - static QpackInstructionWithValues EncodeIndexedHeaderField( + static Representation EncodeIndexedHeaderField( bool is_static, uint64_t index, QpackBlockingManager::IndexSet* referred_indices); - // Generate literal header field with name reference instruction + // Generate literal header field with name reference representation // and optionally update |*referred_indices|. - static QpackInstructionWithValues EncodeLiteralHeaderFieldWithNameReference( + static Representation EncodeLiteralHeaderFieldWithNameReference( bool is_static, uint64_t index, absl::string_view value, QpackBlockingManager::IndexSet* referred_indices); - // Generate literal header field instruction. - static QpackInstructionWithValues EncodeLiteralHeaderField( - absl::string_view name, - absl::string_view value); + // Generate literal header field representation. + static Representation EncodeLiteralHeaderField(absl::string_view name, + absl::string_view value); // Performs first pass of two-pass encoding: represent each header field in // |*header_list| as a reference to an existing entry, the name of an existing @@ -136,17 +136,18 @@ // sets |*encoder_stream_sent_byte_count| to the number of bytes sent on the // encoder stream to insert dynamic table entries. Returns list of header // field representations, with all dynamic table entries referred to with - // absolute indices. Returned Instructions object may have + // absolute indices. Returned representation objects may have // absl::string_views pointing to strings owned by |*header_list|. - Instructions FirstPassEncode(QuicStreamId stream_id, - const spdy::Http2HeaderBlock& header_list, - QpackBlockingManager::IndexSet* referred_indices, - QuicByteCount* encoder_stream_sent_byte_count); + Representations FirstPassEncode( + QuicStreamId stream_id, + const spdy::Http2HeaderBlock& header_list, + QpackBlockingManager::IndexSet* referred_indices, + QuicByteCount* encoder_stream_sent_byte_count); // Performs second pass of two-pass encoding: serializes representations // generated in first pass, transforming absolute indices of dynamic table // entries to relative indices. - std::string SecondPassEncode(Instructions instructions, + std::string SecondPassEncode(Representations representations, uint64_t required_insert_count) const; DecoderStreamErrorDelegate* const decoder_stream_error_delegate_;