1
0
mirror of https://github.com/facebookincubator/mvfst.git synced 2025-07-29 03:41:11 +03:00

Correct comparison with default

Summary:
Comparing (operator<) for default PriorityQueue::Priority vs HTTPPriorityQueue::Priority was not correctly using the default HTTP priority - instead it would interpret 0xffffffff as u=7, i=1, which is the lowest priority.  Also constructing or assigning HTTPPriorityQueue::Priority from PriorityQueue::Priority was suboptimal.

1) Make order a uint32_t.  From HTTPPriorityFunctions, it looks like we could only set this to a max of 2^31-1 anyways.
2) Add an 'uninitialized' bit to HTTPPriority.  Since the default is 1 initialized in the base class, only fully initialized HTTPPriority will return true for `isInitializedFast`
3) Implement new constructor and assignment operator
4) Return a static default uint64 for uninitialized priority in `toUnit64`, this fixes `operator<`
5) Streamline `operator==`

Reviewed By: hanidamlaj

Differential Revision: D73685997

fbshipit-source-id: 5c6cd2404d6506f661aa29983c5ded3cf913758c
This commit is contained in:
Alan Frindell
2025-06-23 09:30:16 -07:00
committed by Facebook GitHub Bot
parent 9dc06860fd
commit 82512448e6
3 changed files with 84 additions and 26 deletions

View File

@ -17,17 +17,27 @@ namespace quic {
/*implicit*/ HTTPPriorityQueue::Priority::Priority(
const PriorityQueue::Priority& basePriority)
: PriorityQueue::Priority(basePriority) {
if (!isInitialized()) {
if (!isInitializedFast()) {
getFields() = kDefaultPriority;
}
}
HTTPPriorityQueue::Priority& HTTPPriorityQueue::Priority::operator=(
const PriorityQueue::Priority& basePriority) {
PriorityQueue::Priority::operator=(basePriority);
if (!isInitializedFast()) {
getFields() = kDefaultPriority;
}
return *this;
}
HTTPPriorityQueue::Priority::Priority(uint8_t u, bool i, OrderId o) {
auto& fields = getFields();
fields.urgency = u;
fields.incremental = i;
fields.order = (i ? 0 : o);
fields.paused = false;
fields.uninitialized = false;
}
PriorityQueue::PriorityLogFields HTTPPriorityQueue::toLogFields(