Change HeaderBlocksForStream from QuicDeque to std::list. QuicDeque is std::deque in Google3 and base::circular_deque with initial capacity of 3, neither of which easy on memory compared to std::list when they only store a single element most of the time. gfe-relnote: n/a, change to QUIC v99-only code. Protected by existing disabled gfe2_reloadable_flag_quic_enable_version_99. PiperOrigin-RevId: 260965695 Change-Id: I9e1ea94c5bd4ed84eb245b85406794a828cb3f39
diff --git a/quic/core/qpack/qpack_blocking_manager.h b/quic/core/qpack/qpack_blocking_manager.h index 3834d92..00669af 100644 --- a/quic/core/qpack/qpack_blocking_manager.h +++ b/quic/core/qpack/qpack_blocking_manager.h
@@ -56,7 +56,12 @@ static uint64_t RequiredInsertCount(const IndexSet& indices); private: - using HeaderBlocksForStream = QuicDeque<IndexSet>; + // A stream typically has only one header block, except for the rare cases of + // 1xx responses, trailers, or push promises. Even if there are multiple + // header blocks sent on a single stream, they might not be blocked at the + // same time. Use std::list instead of QuicDeque because it has lower memory + // footprint when holding few elements. + using HeaderBlocksForStream = std::list<IndexSet>; using HeaderBlocks = QuicUnorderedMap<QuicStreamId, HeaderBlocksForStream>; // Increase or decrease the reference count for each index in |indices|.