From ad75343665355cda333a5d86e0ccae4d0c1813bf Mon Sep 17 00:00:00 2001
From: Florian Schmaus <flow@cs.fau.de>
Date: Tue, 22 Feb 2022 19:22:16 +0100
Subject: [PATCH] [AbstractWorkStealingScheduler] Move pushBottom() in module

Also rename 'res' to 'pushed' and only notify about new work if there
was work pushed.
---
 emper/strategies/AbstractWorkStealingScheduler.cpp | 8 ++++++++
 emper/strategies/AbstractWorkStealingScheduler.hpp | 9 +--------
 2 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/emper/strategies/AbstractWorkStealingScheduler.cpp b/emper/strategies/AbstractWorkStealingScheduler.cpp
index 47a89a7a..7cd422d5 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 f6006cb2..35f80893 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;
-- 
GitLab