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:
committed by
Facebook GitHub Bot
parent
9dc06860fd
commit
82512448e6
@ -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(
|
||||
|
Reference in New Issue
Block a user