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|.