X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=folly%2Fexperimental%2FFunctionScheduler.cpp;h=6727ca35f8ab8e6ee0ad378a10e0f3dd8aeece0d;hb=9276f2a5646a94eda765c92b171b98c499313213;hp=d648ce2645181fc1816e25d588f5eaf4f52f9777;hpb=13c58db990deb957dc178b48cf77c0c9aeb3876d;p=folly.git diff --git a/folly/experimental/FunctionScheduler.cpp b/folly/experimental/FunctionScheduler.cpp index d648ce26..6727ca35 100644 --- a/folly/experimental/FunctionScheduler.cpp +++ b/folly/experimental/FunctionScheduler.cpp @@ -92,46 +92,44 @@ FunctionScheduler::~FunctionScheduler() { shutdown(); } -void FunctionScheduler::addFunction(const std::function& cb, +void FunctionScheduler::addFunction(Function&& cb, milliseconds interval, StringPiece nameID, milliseconds startDelay) { addFunctionGenericDistribution( - cb, - IntervalDistributionFunc(ConstIntervalFunctor(interval)), + std::move(cb), + ConstIntervalFunctor(interval), nameID.str(), to(interval.count(), "ms"), startDelay); } -void FunctionScheduler::addFunction(const std::function& cb, +void FunctionScheduler::addFunction(Function&& cb, milliseconds interval, const LatencyDistribution& latencyDistr, StringPiece nameID, milliseconds startDelay) { if (latencyDistr.isPoisson) { addFunctionGenericDistribution( - cb, - IntervalDistributionFunc( - PoissonDistributionFunctor(latencyDistr.poissonMean)), + std::move(cb), + PoissonDistributionFunctor(latencyDistr.poissonMean), nameID.str(), to(latencyDistr.poissonMean, "ms (Poisson mean)"), startDelay); } else { - addFunction(cb, interval, nameID, startDelay); + addFunction(std::move(cb), interval, nameID, startDelay); } } void FunctionScheduler::addFunctionUniformDistribution( - const std::function& cb, + Function&& cb, milliseconds minInterval, milliseconds maxInterval, StringPiece nameID, milliseconds startDelay) { addFunctionGenericDistribution( - cb, - IntervalDistributionFunc( - UniformDistributionFunctor(minInterval, maxInterval)), + std::move(cb), + UniformDistributionFunctor(minInterval, maxInterval), nameID.str(), to( "[", minInterval.count(), " , ", maxInterval.count(), "] ms"), @@ -139,8 +137,8 @@ void FunctionScheduler::addFunctionUniformDistribution( } void FunctionScheduler::addFunctionGenericDistribution( - const std::function& cb, - const IntervalDistributionFunc& intervalFunc, + Function&& cb, + IntervalDistributionFunc&& intervalFunc, const std::string& nameID, const std::string& intervalDescr, milliseconds startDelay) { @@ -173,7 +171,13 @@ void FunctionScheduler::addFunctionGenericDistribution( } addFunctionToHeap( - l, RepeatFunc(cb, intervalFunc, nameID, intervalDescr, startDelay)); + l, + RepeatFunc( + std::move(cb), + std::move(intervalFunc), + nameID, + intervalDescr, + startDelay)); } bool FunctionScheduler::cancelFunction(StringPiece nameID) { @@ -219,6 +223,7 @@ void FunctionScheduler::cancelFunction(const std::unique_lock& l, void FunctionScheduler::cancelAllFunctions() { std::unique_lock l(mutex_); functions_.clear(); + currentFunction_ = nullptr; } bool FunctionScheduler::resetFunctionTimer(StringPiece nameID) {