diff --git a/emper/strategies/AbstractWorkStealingScheduler.cpp b/emper/strategies/AbstractWorkStealingScheduler.cpp index 47a89a7a78b6973250895fc550986dfdde044e68..7cd422d56c0fe7b84267e8d01f4c2a10327f3d1f 100644 --- a/emper/strategies/AbstractWorkStealingScheduler.cpp +++ b/emper/strategies/AbstractWorkStealingScheduler.cpp @@ -284,3 +284,11 @@ auto AbstractWorkStealingScheduler::nextFiberResultFromMpscQueueOrWorkStealing() return nextFiberResultViaWorkStealing(); } + +auto AbstractWorkStealingScheduler::pushBottom(AbstractFiber& fiber) -> bool { + auto pushed = queue.pushBottom(&fiber); + if (pushed) [[likely]] { + onNewWork<CallerEnvironment::EMPER>(emper::FiberHint{emper::FiberSource::local}); + } + return pushed; +} diff --git a/emper/strategies/AbstractWorkStealingScheduler.hpp b/emper/strategies/AbstractWorkStealingScheduler.hpp index f6006cb241c7959c30b9b8ce653f15e54fca6ab7..35f808937305384e206aefbf1de1704712e6e07c 100644 --- a/emper/strategies/AbstractWorkStealingScheduler.hpp +++ b/emper/strategies/AbstractWorkStealingScheduler.hpp @@ -5,10 +5,7 @@ #include <cstddef> // for size_t #include <optional> -#include "CallerEnvironment.hpp" #include "Fiber.hpp" -#include "FiberHint.hpp" -#include "FiberSource.hpp" #include "Scheduler.hpp" #include "emper-common.h" #include "lib/adt/MpscQueue.hpp" @@ -48,11 +45,7 @@ class AbstractWorkStealingScheduler : public Scheduler { auto nextFiberResultViaWorkStealing() -> std::optional<NextFiberResult>; auto nextFiberResultFromMpscQueueOrWorkStealing() -> std::optional<NextFiberResult>; - auto pushBottom(AbstractFiber& fiber) -> bool override { - bool res = queue.pushBottom(&fiber); - onNewWork<CallerEnvironment::EMPER>(emper::FiberHint{emper::FiberSource::local}); - return res; - } + auto pushBottom(AbstractFiber& fiber) -> bool override; auto popBottom() -> AbstractFiber* override { AbstractFiber* fiber;