proxygen
folly::fibers::ExecutorLoopController Class Reference

#include <ExecutorLoopController.h>

Inheritance diagram for folly::fibers::ExecutorLoopController:
folly::fibers::LoopController

Public Member Functions

 ExecutorLoopController (folly::Executor *executor)
 
 ~ExecutorLoopController () override
 
- Public Member Functions inherited from folly::fibers::LoopController
virtual ~LoopController ()
 

Private Member Functions

void setFiberManager (fibers::FiberManager *fm) override
 
void schedule () override
 
void runLoop () override
 
void scheduleThreadSafe () override
 
void timedSchedule (std::function< void()> func, TimePoint time) override
 

Private Attributes

folly::Executorexecutor_
 
Executor::KeepAlive executorKeepAlive_
 
fibers::FiberManagerfm_ {nullptr}
 

Friends

class fibers::FiberManager
 

Additional Inherited Members

- Public Types inherited from folly::fibers::LoopController
typedef std::chrono::steady_clock Clock
 
typedef std::chrono::time_point< ClockTimePoint
 

Detailed Description

A fiber loop controller that works for arbitrary folly::Executor

Definition at line 31 of file ExecutorLoopController.h.

Constructor & Destructor Documentation

folly::fibers::ExecutorLoopController::ExecutorLoopController ( folly::Executor executor)
inlineexplicit

Definition at line 22 of file ExecutorLoopController-inl.h.

23  : executor_(executor) {}
folly::fibers::ExecutorLoopController::~ExecutorLoopController ( )
inlineoverride

Definition at line 25 of file ExecutorLoopController-inl.h.

25 {}

Member Function Documentation

void folly::fibers::ExecutorLoopController::runLoop ( )
inlineoverrideprivatevirtual

Run FiberManager loopUntilNoReadyImpl(). May have additional logic specific to a LoopController.

Implements folly::fibers::LoopController.

Definition at line 39 of file ExecutorLoopController-inl.h.

References executor_, executorKeepAlive_, fm_, folly::getKeepAliveToken(), folly::fibers::FiberManager::hasTasks(), folly::fibers::FiberManager::loopUntilNoReadyImpl(), and folly::Executor::KeepAlive< ExecutorT >::reset().

Referenced by schedule(), and scheduleThreadSafe().

39  {
40  if (!executorKeepAlive_) {
41  if (!fm_->hasTasks()) {
42  return;
43  }
45  }
47  if (!fm_->hasTasks()) {
49  }
50 }
Executor::KeepAlive< ExecutorT > getKeepAliveToken(ExecutorT *executor)
Definition: Executor.h:200
void folly::fibers::ExecutorLoopController::schedule ( )
inlineoverrideprivatevirtual

Called by FiberManager to schedule the loop function run at some point in the futufre.

Implements folly::fibers::LoopController.

Definition at line 31 of file ExecutorLoopController-inl.h.

References folly::Executor::add(), executor_, executorKeepAlive_, folly::getKeepAliveToken(), and runLoop().

31  {
32  // add() is thread-safe, so this isn't properly optimized for addTask()
33  if (!executorKeepAlive_) {
35  }
36  executor_->add([this]() { return runLoop(); });
37 }
virtual void add(Func)=0
Executor::KeepAlive< ExecutorT > getKeepAliveToken(ExecutorT *executor)
Definition: Executor.h:200
void folly::fibers::ExecutorLoopController::scheduleThreadSafe ( )
inlineoverrideprivatevirtual

Same as schedule(), but safe to call from any thread.

Implements folly::fibers::LoopController.

Definition at line 52 of file ExecutorLoopController-inl.h.

References folly::Executor::add(), executor_, fm_, folly::getKeepAliveToken(), runLoop(), and folly::fibers::FiberManager::shouldRunLoopRemote().

52  {
53  executor_->add(
54  [this, executorKeepAlive = getKeepAliveToken(executor_)]() mutable {
55  if (fm_->shouldRunLoopRemote()) {
56  return runLoop();
57  }
58  });
59 }
virtual void add(Func)=0
Executor::KeepAlive< ExecutorT > getKeepAliveToken(ExecutorT *executor)
Definition: Executor.h:200
void folly::fibers::ExecutorLoopController::setFiberManager ( fibers::FiberManager )
inlineoverrideprivatevirtual

Called by FiberManager to associate itself with the LoopController.

Implements folly::fibers::LoopController.

Definition at line 27 of file ExecutorLoopController-inl.h.

References fm_.

27  {
28  fm_ = fm;
29 }
void folly::fibers::ExecutorLoopController::timedSchedule ( std::function< void()>  func,
TimePoint  time 
)
inlineoverrideprivatevirtual

Called by FiberManager to schedule some function to be run at some time.

Implements folly::fibers::LoopController.

Definition at line 61 of file ExecutorLoopController-inl.h.

63  {
64  throw std::logic_error("Time schedule isn't supported by asyncio executor");
65 }

Friends And Related Function Documentation

friend class fibers::FiberManager
friend

Definition at line 47 of file ExecutorLoopController.h.

Member Data Documentation

folly::Executor* folly::fibers::ExecutorLoopController::executor_
private

Definition at line 37 of file ExecutorLoopController.h.

Referenced by runLoop(), schedule(), and scheduleThreadSafe().

Executor::KeepAlive folly::fibers::ExecutorLoopController::executorKeepAlive_
private

Definition at line 38 of file ExecutorLoopController.h.

Referenced by runLoop(), and schedule().

fibers::FiberManager* folly::fibers::ExecutorLoopController::fm_ {nullptr}
private

Definition at line 39 of file ExecutorLoopController.h.

Referenced by runLoop(), scheduleThreadSafe(), and setFiberManager().


The documentation for this class was generated from the following files: