Commit d1f8e411 authored by Dan Melnic's avatar Dan Melnic Committed by Facebook GitHub Bot

Avoid calling scheduleTimeout for a thread that is mostly busy

Summary: Avoid calling scheduleTimeout for a thread that is mostly busy

Reviewed By: yfeldblum

Differential Revision: D21531280

fbshipit-source-id: b89254ebc3662c951b3b181b3a2777afb9e3f4fe
parent ee1e6c7b
......@@ -38,24 +38,33 @@ class MemoryIdlerTimeout : public AsyncTimeout, public EventBase::LoopCallback {
explicit MemoryIdlerTimeout(EventBase* b) : AsyncTimeout(b), base_(b) {}
void timeoutExpired() noexcept override {
idled = true;
idled_ = true;
timerRunning_ = false;
}
void runLoopCallback() noexcept override {
if (idled) {
MemoryIdler::flushLocalMallocCaches();
MemoryIdler::unmapUnusedStack(MemoryIdler::kDefaultStackToRetain);
idled = false;
if (idled_) {
if (num_ == 0) {
MemoryIdler::flushLocalMallocCaches();
MemoryIdler::unmapUnusedStack(MemoryIdler::kDefaultStackToRetain);
}
idled_ = false;
num_ = 0;
} else {
std::chrono::steady_clock::duration idleTimeout =
MemoryIdler::defaultIdleTimeout.load(std::memory_order_acquire);
idleTimeout = MemoryIdler::getVariationTimeout(idleTimeout);
scheduleTimeout(static_cast<uint32_t>(
std::chrono::duration_cast<std::chrono::milliseconds>(idleTimeout)
.count()));
if (!timerRunning_) {
timerRunning_ = true;
std::chrono::steady_clock::duration idleTimeout =
MemoryIdler::defaultIdleTimeout.load(std::memory_order_acquire);
idleTimeout = MemoryIdler::getVariationTimeout(idleTimeout);
scheduleTimeout(static_cast<uint32_t>(
std::chrono::duration_cast<std::chrono::milliseconds>(idleTimeout)
.count()));
} else {
num_++;
}
}
// reschedule this callback for the next event loop.
......@@ -64,7 +73,9 @@ class MemoryIdlerTimeout : public AsyncTimeout, public EventBase::LoopCallback {
private:
EventBase* base_;
bool idled{false};
bool idled_{false};
bool timerRunning_{false};
size_t num_{0};
};
IOThreadPoolExecutor::IOThreadPoolExecutor(
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment