proxygen
|
Classes | |
struct | IdHash |
struct | IdNodeEqual |
struct | PendingNode |
Public Types | |
using | PendingList = std::deque< PendingNode > |
Public Member Functions | |
Node (HTTP2PriorityQueue &queue, Node *inParent, HTTPCodec::StreamID id, uint8_t weight, HTTPTransaction *txn) | |
~Node () override | |
void | setPermanent () |
Node * | getParent () const |
HTTPCodec::StreamID | getID () const |
HTTPCodec::StreamID | parentID () const |
HTTPTransaction * | getTransaction () const |
void | clearTransaction () |
Node * | emplaceNode (std::unique_ptr< Node > node, bool exclusive) |
void | removeFromTree () |
void | signalPendingEgress () |
void | clearPendingEgress () |
uint16_t | getWeight () const |
void | updateWeight (uint8_t weight) |
Node * | reparent (Node *newParent, bool exclusive) |
bool | isDescendantOf (Node *node) const |
bool | isEnqueued () const override |
bool | inEgressTree () const |
double | getRelativeWeight () const |
double | getRelativeEnqueuedWeight () const |
bool | iterate (const std::function< bool(HTTPCodec::StreamID, HTTPTransaction *, double)> &fn, const std::function< bool()> &stopFn, bool all) |
bool | visitBFS (double relativeParentWeight, const std::function< bool(HTTP2PriorityQueue &queue, HTTPCodec::StreamID, HTTPTransaction *, double)> &fn, bool all, PendingList &pendingNodes, bool enqueuedChildren) |
void | updateEnqueuedWeight (bool activeNodes) |
void | dropPriorityNodes () |
void | convertVirtualNode (HTTPTransaction *txn) |
uint64_t | calculateDepth (bool includeVirtual=true) const override |
void | flattenSubtree () |
void | flattenSubtreeDFS (Node *subtreeRoot) |
![]() | |
Callback ()=default | |
virtual | ~Callback () |
virtual void | callbackCanceled () noexcept |
void | cancelTimeout () |
bool | isScheduled () const |
std::chrono::milliseconds | getTimeRemaining () |
Static Public Member Functions | |
static void | addChildToNewSubtreeRoot (std::unique_ptr< Node > child, Node *subtreeRoot) |
Static Public Attributes | |
static const uint16_t | kDefaultWeight = 16 |
Private Member Functions | |
Node * | addChild (std::unique_ptr< Node > child) |
void | addChildren (std::list< std::unique_ptr< Node >> &&children) |
std::unique_ptr< Node > | detachChild (Node *node) |
void | addEnqueuedChild (HTTP2PriorityQueue::Node *node) |
void | removeEnqueuedChild (HTTP2PriorityQueue::Node *node) |
void | timeoutExpired () noexceptoverride |
void | refreshTimeout () |
Static Private Member Functions | |
static void | propagatePendingEgressSignal (Node *node) |
static void | propagatePendingEgressClear (Node *node) |
Private Attributes | |
HTTP2PriorityQueue & | queue_ |
Node * | parent_ {nullptr} |
HTTPCodec::StreamID | id_ {0} |
uint16_t | weight_ {kDefaultWeight} |
HTTPTransaction * | txn_ {nullptr} |
bool | isPermanent_ {false} |
bool | enqueued_ {false} |
uint64_t | totalEnqueuedWeightCheck_ {0} |
uint64_t | totalEnqueuedWeight_ {0} |
uint64_t | totalChildWeight_ {0} |
std::list< std::unique_ptr< Node > > | children_ |
std::list< std::unique_ptr< Node > >::iterator | self_ |
folly::IntrusiveListHook | enqueuedHook_ |
folly::IntrusiveList< Node,&Node::enqueuedHook_ > | enqueuedChildren_ |
Friends | |
bool | operator== (const Node &lhs, const Node &rhs) |
std::size_t | hash_value (const Node &node) |
Additional Inherited Members | |
![]() | |
virtual std::chrono::steady_clock::time_point | getCurTime () |
Definition at line 196 of file HTTP2PriorityQueue.h.
using proxygen::HTTP2PriorityQueue::Node::PendingList = std::deque<PendingNode> |
Definition at line 336 of file HTTP2PriorityQueue.h.
proxygen::HTTP2PriorityQueue::Node::Node | ( | HTTP2PriorityQueue & | queue, |
HTTP2PriorityQueue::Node * | inParent, | ||
HTTPCodec::StreamID | id, | ||
uint8_t | weight, | ||
HTTPTransaction * | txn | ||
) |
Definition at line 21 of file HTTP2PriorityQueue.cpp.
References id_, proxygen::HTTP2PriorityQueue::nodes_, and queue_.
|
override |
Definition at line 35 of file HTTP2PriorityQueue.cpp.
References proxygen::HTTP2PriorityQueue::numVirtualNodes_, queue_, and txn_.
|
private |
Definition at line 91 of file HTTP2PriorityQueue.cpp.
References folly::HHWheelTimer::Callback::cancelTimeout(), children_, id_, folly::gen::move, self_, and totalChildWeight_.
Referenced by addChildren(), and emplaceNode().
|
private |
Definition at line 67 of file HTTP2PriorityQueue.cpp.
References addChild(), addEnqueuedChild(), child, inEgressTree(), folly::gen::move, propagatePendingEgressSignal(), folly::f14::swap(), totalEnqueuedWeight_, and uint64_t.
Referenced by removeFromTree().
|
static |
Definition at line 417 of file HTTP2PriorityQueue.cpp.
References children_, kDefaultWeight, folly::gen::move, and self_.
Referenced by flattenSubtree(), and flattenSubtreeDFS().
|
private |
Definition at line 160 of file HTTP2PriorityQueue.cpp.
References enqueuedChildren_, and enqueuedHook_.
Referenced by addChildren(), and propagatePendingEgressSignal().
|
override |
Definition at line 365 of file HTTP2PriorityQueue.cpp.
References getParent(), txn_, and uint64_t.
Referenced by proxygen::HTTP2PriorityQueue::updatePriority().
void proxygen::HTTP2PriorityQueue::Node::clearPendingEgress | ( | ) |
Definition at line 195 of file HTTP2PriorityQueue.cpp.
References enqueued_, and propagatePendingEgressClear().
Referenced by proxygen::HTTP2PriorityQueue::removeTransaction().
|
inline |
Definition at line 256 of file HTTP2PriorityQueue.h.
References proxygen::HTTP2PriorityQueueBase::clearPendingEgress(), and proxygen::HTTP2PriorityQueueBase::signalPendingEgress().
Referenced by proxygen::HTTP2PriorityQueue::removeTransaction().
void proxygen::HTTP2PriorityQueue::Node::convertVirtualNode | ( | HTTPTransaction * | txn | ) |
Definition at line 355 of file HTTP2PriorityQueue.cpp.
References folly::HHWheelTimer::Callback::cancelTimeout(), isPermanent_, proxygen::HTTP2PriorityQueue::numVirtualNodes_, queue_, txn_, and uint64_t.
Referenced by proxygen::HTTP2PriorityQueue::addTransaction().
|
private |
Definition at line 103 of file HTTP2PriorityQueue.cpp.
References children_, isEnqueued(), isPermanent_, folly::gen::move, parent_, queue_, proxygen::HTTP2PriorityQueue::scheduleNodeExpiration(), self_, totalChildWeight_, txn_, and weight_.
Referenced by removeFromTree(), and reparent().
void proxygen::HTTP2PriorityQueue::Node::dropPriorityNodes | ( | ) |
Definition at line 344 of file HTTP2PriorityQueue.cpp.
References child, children_, isPermanent_, removeFromTree(), and txn_.
Referenced by proxygen::HTTP2PriorityQueue::detachThreadLocals().
HTTP2PriorityQueue::Node * proxygen::HTTP2PriorityQueue::Node::emplaceNode | ( | std::unique_ptr< Node > | node, |
bool | exclusive | ||
) |
Definition at line 43 of file HTTP2PriorityQueue.cpp.
References addChild(), children_, id_, inEgressTree(), folly::gen::move, propagatePendingEgressClear(), folly::f14::swap(), totalChildWeight_, totalEnqueuedWeight_, and totalEnqueuedWeightCheck_.
Referenced by reparent().
void proxygen::HTTP2PriorityQueue::Node::flattenSubtree | ( | ) |
Definition at line 378 of file HTTP2PriorityQueue.cpp.
References addChildToNewSubtreeRoot(), child, children_, for_each(), folly::gen::move, folly::f14::swap(), totalChildWeight_, totalEnqueuedWeight_, and totalEnqueuedWeightCheck_.
Referenced by proxygen::HTTP2PriorityQueue::rebuildTree().
void proxygen::HTTP2PriorityQueue::Node::flattenSubtreeDFS | ( | Node * | subtreeRoot | ) |
Definition at line 409 of file HTTP2PriorityQueue.cpp.
References addChildToNewSubtreeRoot(), child, children_, and folly::gen::move.
|
inline |
Definition at line 241 of file HTTP2PriorityQueue.h.
Referenced by proxygen::HTTP2PriorityQueue::addTransaction(), proxygen::HTTP2PriorityQueue::removeTransaction(), proxygen::HTTP2PriorityQueue::scheduleNodeExpiration(), and proxygen::HTTP2PriorityQueue::updatePriority().
|
inline |
Definition at line 237 of file HTTP2PriorityQueue.h.
Referenced by calculateDepth(), and proxygen::HTTP2PriorityQueue::updatePriority().
|
inline |
Definition at line 301 of file HTTP2PriorityQueue.h.
Referenced by visitBFS().
|
inline |
Definition at line 293 of file HTTP2PriorityQueue.h.
Referenced by iterate().
|
inline |
Definition at line 252 of file HTTP2PriorityQueue.h.
|
inline |
|
inline |
Definition at line 289 of file HTTP2PriorityQueue.h.
References proxygen::HTTP2PriorityQueueBase::BaseNode::isEnqueued().
Referenced by addChildren(), emplaceNode(), propagatePendingEgressClear(), propagatePendingEgressSignal(), removeFromTree(), reparent(), and updateWeight().
bool proxygen::HTTP2PriorityQueue::Node::isDescendantOf | ( | HTTP2PriorityQueue::Node * | node | ) | const |
Definition at line 145 of file HTTP2PriorityQueue.cpp.
Referenced by proxygen::HTTP2PriorityQueue::updatePriority().
|
inlineoverride |
Definition at line 283 of file HTTP2PriorityQueue.h.
Referenced by detachChild(), iterate(), removeFromTree(), proxygen::HTTP2PriorityQueue::removeTransaction(), updateEnqueuedWeight(), and visitBFS().
bool proxygen::HTTP2PriorityQueue::Node::iterate | ( | const std::function< bool(HTTPCodec::StreamID, HTTPTransaction *, double)> & | fn, |
const std::function< bool()> & | stopFn, | ||
bool | all | ||
) |
Definition at line 261 of file HTTP2PriorityQueue.cpp.
References child, children_, getRelativeWeight(), id_, isEnqueued(), parent_, stop(), totalEnqueuedWeight_, totalEnqueuedWeightCheck_, and txn_.
|
inline |
Definition at line 245 of file HTTP2PriorityQueue.h.
Referenced by proxygen::HTTP2PriorityQueue::updatePriority().
|
staticprivate |
Definition at line 202 of file HTTP2PriorityQueue.cpp.
References inEgressTree(), parent, parent_, removeEnqueuedChild(), stop(), totalEnqueuedWeight_, and weight_.
Referenced by clearPendingEgress(), emplaceNode(), removeFromTree(), and reparent().
|
staticprivate |
Definition at line 178 of file HTTP2PriorityQueue.cpp.
References addEnqueuedChild(), inEgressTree(), parent, parent_, stop(), totalEnqueuedWeight_, and weight_.
Referenced by addChildren(), reparent(), and signalPendingEgress().
|
inlineprivate |
Definition at line 380 of file HTTP2PriorityQueue.h.
Referenced by updateWeight().
|
private |
Definition at line 166 of file HTTP2PriorityQueue.cpp.
References enqueuedChildren_, and enqueuedHook_.
Referenced by propagatePendingEgressClear().
void proxygen::HTTP2PriorityQueue::Node::removeFromTree | ( | ) |
Definition at line 233 of file HTTP2PriorityQueue.cpp.
References addChildren(), child, children_, detachChild(), inEgressTree(), isEnqueued(), max, folly::gen::move, parent_, propagatePendingEgressClear(), totalChildWeight_, totalEnqueuedWeight_, uint64_t, uint8_t, and weight_.
Referenced by dropPriorityNodes(), and proxygen::HTTP2PriorityQueue::removeTransaction().
HTTP2PriorityQueue::Node * proxygen::HTTP2PriorityQueue::Node::reparent | ( | HTTP2PriorityQueue::Node * | newParent, |
bool | exclusive | ||
) |
Definition at line 117 of file HTTP2PriorityQueue.cpp.
References detachChild(), emplaceNode(), enqueued_, inEgressTree(), folly::gen::move, parent_, propagatePendingEgressClear(), propagatePendingEgressSignal(), totalEnqueuedWeight_, and uint64_t.
Referenced by proxygen::HTTP2PriorityQueue::updatePriority().
|
inline |
Definition at line 233 of file HTTP2PriorityQueue.h.
void proxygen::HTTP2PriorityQueue::Node::signalPendingEgress | ( | ) |
Definition at line 172 of file HTTP2PriorityQueue.cpp.
References enqueued_, and propagatePendingEgressSignal().
|
inlineoverrideprivatevirtualnoexcept |
timeoutExpired() is invoked when the timeout has expired.
Implements folly::HHWheelTimer::Callback.
Definition at line 373 of file HTTP2PriorityQueue.h.
void proxygen::HTTP2PriorityQueue::Node::updateEnqueuedWeight | ( | bool | activeNodes | ) |
Definition at line 325 of file HTTP2PriorityQueue.cpp.
References child, children_, enqueuedHook_, isEnqueued(), parent_, totalChildWeight_, totalEnqueuedWeightCheck_, and weight_.
Referenced by proxygen::HTTP2PriorityQueue::iterateBFS(), proxygen::HTTP2PriorityQueue::nextEgress(), and proxygen::HTTP2PriorityQueue::updateEnqueuedWeight().
void proxygen::HTTP2PriorityQueue::Node::updateWeight | ( | uint8_t | weight | ) |
Definition at line 221 of file HTTP2PriorityQueue.cpp.
References inEgressTree(), int16_t, parent_, refreshTimeout(), totalChildWeight_, totalEnqueuedWeight_, and weight_.
Referenced by proxygen::HTTP2PriorityQueue::updatePriority().
bool proxygen::HTTP2PriorityQueue::Node::visitBFS | ( | double | relativeParentWeight, |
const std::function< bool(HTTP2PriorityQueue &queue, HTTPCodec::StreamID, HTTPTransaction *, double)> & | fn, | ||
bool | all, | ||
PendingList & | pendingNodes, | ||
bool | enqueuedChildren | ||
) |
Definition at line 285 of file HTTP2PriorityQueue.cpp.
References child, children_, enqueuedChildren_, getRelativeEnqueuedWeight(), id_, folly::pushmi::invoke, isEnqueued(), parent_, queue_, totalEnqueuedWeight_, totalEnqueuedWeightCheck_, and txn_.
Referenced by proxygen::HTTP2PriorityQueue::iterateBFS(), and proxygen::HTTP2PriorityQueue::nextEgress().
|
friend |
Definition at line 229 of file HTTP2PriorityQueue.h.
Definition at line 226 of file HTTP2PriorityQueue.h.
|
private |
Definition at line 398 of file HTTP2PriorityQueue.h.
Referenced by addChild(), addChildToNewSubtreeRoot(), detachChild(), dropPriorityNodes(), emplaceNode(), flattenSubtree(), flattenSubtreeDFS(), iterate(), removeFromTree(), updateEnqueuedWeight(), and visitBFS().
|
private |
Definition at line 392 of file HTTP2PriorityQueue.h.
Referenced by clearPendingEgress(), reparent(), and signalPendingEgress().
|
private |
Definition at line 404 of file HTTP2PriorityQueue.h.
Referenced by addEnqueuedChild(), removeEnqueuedChild(), and visitBFS().
|
private |
Definition at line 403 of file HTTP2PriorityQueue.h.
Referenced by addEnqueuedChild(), removeEnqueuedChild(), and updateEnqueuedWeight().
|
private |
Definition at line 388 of file HTTP2PriorityQueue.h.
Referenced by addChild(), emplaceNode(), isDescendantOf(), iterate(), Node(), proxygen::HTTP2PriorityQueue::Node::IdNodeEqual::operator()(), and visitBFS().
|
private |
Definition at line 391 of file HTTP2PriorityQueue.h.
Referenced by convertVirtualNode(), detachChild(), and dropPriorityNodes().
|
static |
Definition at line 201 of file HTTP2PriorityQueue.h.
Referenced by addChildToNewSubtreeRoot().
Definition at line 387 of file HTTP2PriorityQueue.h.
Referenced by detachChild(), isDescendantOf(), iterate(), propagatePendingEgressClear(), propagatePendingEgressSignal(), removeFromTree(), reparent(), updateEnqueuedWeight(), updateWeight(), and visitBFS().
|
private |
Definition at line 386 of file HTTP2PriorityQueue.h.
Referenced by convertVirtualNode(), detachChild(), Node(), visitBFS(), and ~Node().
|
private |
Definition at line 399 of file HTTP2PriorityQueue.h.
Referenced by addChild(), addChildToNewSubtreeRoot(), and detachChild().
|
private |
Definition at line 397 of file HTTP2PriorityQueue.h.
Referenced by addChild(), detachChild(), emplaceNode(), flattenSubtree(), removeFromTree(), updateEnqueuedWeight(), and updateWeight().
|
private |
Definition at line 396 of file HTTP2PriorityQueue.h.
Referenced by addChildren(), emplaceNode(), flattenSubtree(), iterate(), propagatePendingEgressClear(), propagatePendingEgressSignal(), removeFromTree(), reparent(), updateWeight(), and visitBFS().
|
private |
Definition at line 394 of file HTTP2PriorityQueue.h.
Referenced by emplaceNode(), flattenSubtree(), iterate(), updateEnqueuedWeight(), and visitBFS().
|
private |
Definition at line 390 of file HTTP2PriorityQueue.h.
Referenced by calculateDepth(), convertVirtualNode(), detachChild(), dropPriorityNodes(), iterate(), visitBFS(), and ~Node().
|
private |
Definition at line 389 of file HTTP2PriorityQueue.h.
Referenced by detachChild(), propagatePendingEgressClear(), propagatePendingEgressSignal(), removeFromTree(), updateEnqueuedWeight(), and updateWeight().