Change QpackHeaderTable::observer_ type and swap RegisterObserver() argument order.
No functional change, prework for fixing a crasher. The motivation for moving
away from std::priority is that it does not allow deletion of random elements.
gfe-relnote: n/a, change to QUIC v99-only code. Protected by existing disabled gfe2_reloadable_flag_quic_enable_version_99.
PiperOrigin-RevId: 272559408
Change-Id: I3f18909201e218627eee3638249aea007b317cd1
diff --git a/quic/core/qpack/qpack_header_table.cc b/quic/core/qpack/qpack_header_table.cc
index bb28f72..30f15a5 100644
--- a/quic/core/qpack/qpack_header_table.cc
+++ b/quic/core/qpack/qpack_header_table.cc
@@ -131,10 +131,13 @@
}
// Notify and deregister observers whose threshold is met, if any.
- while (!observers_.empty() &&
- observers_.top().required_insert_count <= inserted_entry_count()) {
- Observer* observer = observers_.top().observer;
- observers_.pop();
+ while (!observers_.empty()) {
+ auto it = observers_.begin();
+ if (it->first > inserted_entry_count()) {
+ break;
+ }
+ Observer* observer = it->second;
+ observers_.erase(it);
observer->OnInsertCountReachedThreshold();
}
@@ -188,10 +191,10 @@
max_entries_ = maximum_dynamic_table_capacity / 32;
}
-void QpackHeaderTable::RegisterObserver(Observer* observer,
- uint64_t required_insert_count) {
+void QpackHeaderTable::RegisterObserver(uint64_t required_insert_count,
+ Observer* observer) {
DCHECK_GT(required_insert_count, 0u);
- observers_.push({observer, required_insert_count});
+ observers_.insert({required_insert_count, observer});
}
uint64_t QpackHeaderTable::draining_index(float draining_fraction) const {
@@ -219,11 +222,6 @@
return it->InsertionIndex();
}
-bool QpackHeaderTable::ObserverWithThreshold::operator>(
- const ObserverWithThreshold& other) const {
- return required_insert_count > other.required_insert_count;
-}
-
void QpackHeaderTable::EvictDownToCurrentCapacity() {
while (dynamic_table_size_ > dynamic_table_capacity_) {
DCHECK(!dynamic_entries_.empty());