#include <folly/executors/FunctionScheduler.h>
#include <random>
#include <glog/logging.h>
#include <folly/Conv.h>
#include <folly/Random.h>
#include <folly/String.h>
#include <folly/system/ThreadName.h>
microseconds;
steady_clock;
namespace folly {
namespace {
struct ConsistentDelayFunctor { … };
struct ConstIntervalFunctor { … };
struct PoissonDistributionFunctor { … };
struct UniformDistributionFunctor { … };
}
FunctionScheduler::FunctionScheduler() = default;
FunctionScheduler::~FunctionScheduler() { … }
void FunctionScheduler::addFunction(
Function<void()>&& cb,
microseconds interval,
StringPiece nameID,
microseconds startDelay) { … }
void FunctionScheduler::addFunction(
Function<void()>&& cb,
microseconds interval,
const LatencyDistribution& latencyDistr,
StringPiece nameID,
microseconds startDelay) { … }
void FunctionScheduler::addFunctionOnce(
Function<void()>&& cb, StringPiece nameID, microseconds startDelay) { … }
void FunctionScheduler::addFunctionUniformDistribution(
Function<void()>&& cb,
microseconds minInterval,
microseconds maxInterval,
StringPiece nameID,
microseconds startDelay) { … }
void FunctionScheduler::addFunctionConsistentDelay(
Function<void()>&& cb,
microseconds interval,
StringPiece nameID,
microseconds startDelay) { … }
void FunctionScheduler::addFunctionGenericDistribution(
Function<void()>&& cb,
IntervalDistributionFunc&& intervalFunc,
const std::string& nameID,
const std::string& intervalDescr,
microseconds startDelay) { … }
void FunctionScheduler::addFunctionGenericNextRunTimeFunctor(
Function<void()>&& cb,
NextRunTimeFunc&& fn,
const std::string& nameID,
const std::string& intervalDescr,
microseconds startDelay) { … }
template <typename RepeatFuncNextRunTimeFunc>
void FunctionScheduler::addFunctionToHeapChecked(
Function<void()>&& cb,
RepeatFuncNextRunTimeFunc&& fn,
const std::string& nameID,
const std::string& intervalDescr,
microseconds startDelay,
bool runOnce) { … }
void FunctionScheduler::addFunctionInternal(
Function<void()>&& cb,
NextRunTimeFunc&& fn,
const std::string& nameID,
const std::string& intervalDescr,
microseconds startDelay,
bool runOnce) { … }
void FunctionScheduler::addFunctionInternal(
Function<void()>&& cb,
IntervalDistributionFunc&& fn,
const std::string& nameID,
const std::string& intervalDescr,
microseconds startDelay,
bool runOnce) { … }
bool FunctionScheduler::cancelFunctionWithLock(
std::unique_lock<std::mutex>& lock, StringPiece nameID) { … }
bool FunctionScheduler::cancelFunction(StringPiece nameID) { … }
bool FunctionScheduler::cancelFunctionAndWait(StringPiece nameID) { … }
void FunctionScheduler::cancelFunction(
const std::unique_lock<std::mutex>& l, RepeatFunc* it) { … }
bool FunctionScheduler::cancelAllFunctionsWithLock(
std::unique_lock<std::mutex>& lock) { … }
void FunctionScheduler::cancelAllFunctions() { … }
void FunctionScheduler::cancelAllFunctionsAndWait() { … }
bool FunctionScheduler::resetFunctionTimer(StringPiece nameID) { … }
bool FunctionScheduler::start() { … }
bool FunctionScheduler::shutdown() { … }
void FunctionScheduler::run() { … }
void FunctionScheduler::runOneFunction(
std::unique_lock<std::mutex>& lock, steady_clock::time_point now) { … }
void FunctionScheduler::addFunctionToHeap(
const std::unique_lock<std::mutex>& lock,
std::unique_ptr<RepeatFunc> func) { … }
void FunctionScheduler::setThreadName(StringPiece threadName) { … }
}