|
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) |
Public Member Functions inherited from folly::HHWheelTimer::Callback | |
| 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 | |
Protected Member Functions inherited from folly::HHWheelTimer::Callback | |
| 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().