Scheduler: setup to verify the work-Function
...first steps to get anything to run with the Scheduler constructed thus far ...can now - enqueue - getWork -> invoke
This commit is contained in:
parent
a180d38ed9
commit
7da88b772f
5 changed files with 119 additions and 15 deletions
|
|
@ -205,7 +205,8 @@ namespace gear {
|
|||
auto horizon = classifyTimeHorizon (Offset{head - now});
|
||||
return horizon > SPINTIME
|
||||
and not tendedNext(head)? TENDNEXT
|
||||
: horizon;
|
||||
: horizon==IDLEWAIT ? WORKTIME
|
||||
: horizon;
|
||||
}
|
||||
|
||||
/** decide how this thread's capacity shall be used
|
||||
|
|
|
|||
|
|
@ -50,6 +50,7 @@
|
|||
#include "vault/gear/scheduler-invocation.hpp"
|
||||
#include "vault/gear/load-controller.hpp"
|
||||
#include "vault/gear/engine-observer.hpp"
|
||||
#include "vault/real-clock.hpp"
|
||||
//#include "lib/symbol.hpp"
|
||||
#include "lib/nocopy.hpp"
|
||||
//#include "lib/util.hpp"
|
||||
|
|
@ -69,6 +70,10 @@ namespace gear {
|
|||
using lib::time::Offset;
|
||||
using lib::time::Duration;
|
||||
|
||||
namespace test { // declared friend for test access
|
||||
class SchedulerService_test;
|
||||
}
|
||||
|
||||
namespace { // Scheduler default config
|
||||
|
||||
const auto IDLE_WAIT = 20ms; ///< sleep-recheck cycle for workers deemed _idle_
|
||||
|
|
@ -226,6 +231,10 @@ namespace gear {
|
|||
|
||||
/** @internal expose a binding for Activity execution */
|
||||
class ExecutionCtx;
|
||||
|
||||
|
||||
/** open private backdoor for tests */
|
||||
friend class test::SchedulerService_test;
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -284,10 +293,11 @@ namespace gear {
|
|||
return POLL_WAIT_DELAY;
|
||||
}
|
||||
|
||||
/** access high-resolution-clock, rounded to µ-Ticks */
|
||||
Time
|
||||
getSchedTime()
|
||||
{
|
||||
UNIMPLEMENTED ("access scheduler Time");
|
||||
return RealClock::now();
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -191,9 +191,9 @@ namespace test {
|
|||
|
||||
// but after marking `next` as tended, capacity can be directed elsewhere
|
||||
lctrl.tendNext (next);
|
||||
CHECK (Capacity::IDLEWAIT == lctrl.markOutgoingCapacity (next, ut ));
|
||||
CHECK (Capacity::WORKTIME == lctrl.markOutgoingCapacity (next, ut ));
|
||||
|
||||
CHECK (Capacity::IDLEWAIT == lctrl.markOutgoingCapacity (next, t1 ));
|
||||
CHECK (Capacity::WORKTIME == lctrl.markOutgoingCapacity (next, t1 ));
|
||||
CHECK (Capacity::WORKTIME == lctrl.markOutgoingCapacity (next, t2 ));
|
||||
CHECK (Capacity::NEARTIME == lctrl.markOutgoingCapacity (next, t3 ));
|
||||
CHECK (Capacity::SPINTIME == lctrl.markOutgoingCapacity (next, t4 ));
|
||||
|
|
|
|||
|
|
@ -26,9 +26,10 @@
|
|||
|
||||
|
||||
#include "lib/test/run.hpp"
|
||||
#include "activity-detector.hpp"
|
||||
#include "vault/gear/scheduler.hpp"
|
||||
//#include "lib/time/timevalue.hpp"
|
||||
//#include "lib/format-cout.hpp"
|
||||
#include "lib/time/timevalue.hpp"
|
||||
#include "lib/format-cout.hpp"
|
||||
//#include "lib/util.hpp"
|
||||
|
||||
//#include <utility>
|
||||
|
|
@ -44,7 +45,7 @@ namespace test {
|
|||
|
||||
// using lib::time::FrameRate;
|
||||
// using lib::time::Offset;
|
||||
// using lib::time::Time;
|
||||
using lib::time::Time;
|
||||
|
||||
|
||||
|
||||
|
|
@ -64,8 +65,8 @@ namespace test {
|
|||
run (Arg)
|
||||
{
|
||||
simpleUsage();
|
||||
invokeWorkFunction();
|
||||
walkingDeadline();
|
||||
setupLalup();
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -82,13 +83,29 @@ namespace test {
|
|||
|
||||
|
||||
|
||||
/** @test TODO
|
||||
/** @test TODO verify visible behaviour of the work-pulling function
|
||||
* @todo WIP 10/23 🔁 define ⟶ implement
|
||||
*/
|
||||
void
|
||||
walkingDeadline()
|
||||
invokeWorkFunction()
|
||||
{
|
||||
UNIMPLEMENTED ("walking Deadline");
|
||||
BlockFlowAlloc bFlow;
|
||||
EngineObserver watch;
|
||||
Scheduler scheduler{bFlow, watch};
|
||||
|
||||
ActivityDetector detector;
|
||||
Activity& probe = detector.buildActivationProbe ("testProbe");
|
||||
|
||||
// this test class is declared friend to get a backdoor to Scheduler internals...
|
||||
auto& schedCtx = Scheduler::ExecutionCtx::from(scheduler);
|
||||
Time now = schedCtx.getSchedTime();
|
||||
schedCtx.post (now, &probe, schedCtx);
|
||||
|
||||
CHECK (activity::WAIT == scheduler.getWork());
|
||||
|
||||
cout << detector.showLog()<<endl; // HINT: use this for investigation...
|
||||
CHECK (detector.verifyInvocation("testProbe"));
|
||||
////////////////////////////////////////////////////////////////////////////////////TODO need a way to get the actual time passed to the Probe
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -97,8 +114,9 @@ namespace test {
|
|||
* @todo WIP 10/23 🔁 define ⟶ implement
|
||||
*/
|
||||
void
|
||||
setupLalup()
|
||||
walkingDeadline()
|
||||
{
|
||||
UNIMPLEMENTED ("walking Deadline");
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -82224,10 +82224,11 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698004014170" ID="ID_359097355" MODIFIED="1698203266998" TEXT="Test">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1698203252783" ID="ID_161810851" MODIFIED="1698203272445" TEXT="was kann man hier sinnvoll testen?">
|
||||
<node COLOR="#435e98" CREATED="1698203252783" ID="ID_161810851" MODIFIED="1698240150155" TEXT="was kann man hier sinnvoll testen?">
|
||||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1698203283579" ID="ID_1136913463" MODIFIED="1698203292977" TEXT="der Code macht bereits sleep-Waits"/>
|
||||
<node CREATED="1698203293530" ID="ID_507890192" MODIFIED="1698203303180" TEXT="andererseits kann man ihn noch direkt aufrufen"/>
|
||||
<node CREATED="1698240055257" ID="ID_1418857353" MODIFIED="1698240100349" TEXT="⟹ Queue bestücken und aufrufen — Zeit messen"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -83115,6 +83116,23 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<node CREATED="1698078223097" ID="ID_597306541" MODIFIED="1698078227054" TEXT="Schlafen">
|
||||
<icon BUILTIN="full-5"/>
|
||||
<node COLOR="#435e98" CREATED="1698244765564" FOLDED="true" HGAP="50" ID="ID_28419292" MODIFIED="1698245094135" TEXT="modifiziert auf Redistribution" VSHIFT="10">
|
||||
<arrowlink COLOR="#758fa6" DESTINATION="ID_1016395299" ENDARROW="Default" ENDINCLINATION="302;-22;" ID="Arrow_ID_1135387860" STARTARROW="None" STARTINCLINATION="246;369;"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1698244795607" HGAP="25" ID="ID_928488277" MODIFIED="1698244961675" VSHIFT="16">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head/>
|
||||
<body>
|
||||
<p>
|
||||
wichtig falls der Scheduler <i>leer fällt</i>
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
<node CREATED="1698244829665" ID="ID_142654598" MODIFIED="1698244842453" TEXT="sonst könnte es passieren, daß alle Idler in einem Cluster sitzen"/>
|
||||
<node CREATED="1698244843729" ID="ID_1518532327" MODIFIED="1698244910572" TEXT="und der nächste Termin versäumt würde um höchstens [SLEEP_HORIZON - WORK_HORIZON]"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1698019164588" ID="ID_1369255451" MODIFIED="1698019165160" TEXT="incomingCapacity">
|
||||
|
|
@ -88084,12 +88102,18 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
<node CREATED="1698073016039" ID="ID_1742616307" MODIFIED="1698073017507" TEXT="Fälle">
|
||||
<node COLOR="#338800" CREATED="1698073017869" ID="ID_916925082" MODIFIED="1698073034749" TEXT="classifyTimings">
|
||||
<node COLOR="#338800" CREATED="1698073017869" ID="ID_916925082" MODIFIED="1698243342884" TEXT="classifyHorizon">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1698073022938" ID="ID_1539653684" MODIFIED="1698073034749" TEXT="tendNextActivity">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1698243350367" ID="ID_997422004" MODIFIED="1698243362335" TEXT="classifyCapacity">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1698243357550" ID="ID_458370410" MODIFIED="1698243362335" TEXT="scatteredReCheck">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1688336835085" ID="ID_1753236898" MODIFIED="1697732777759" TEXT="SchedulerService_test">
|
||||
|
|
@ -88104,13 +88128,58 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<arrowlink COLOR="#ff1924" DESTINATION="ID_996573918" ENDARROW="Default" ENDINCLINATION="-817;60;" ID="Arrow_ID_226641198" STARTARROW="None" STARTINCLINATION="-848;-40;"/>
|
||||
<icon BUILTIN="hourglass"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697484506891" ID="ID_1292738036" MODIFIED="1697484528227" TEXT="den kompletten Work-Funktor durchspielen">
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1697484506891" ID="ID_1292738036" MODIFIED="1698247370951" TEXT="den kompletten Work-Funktor durchspielen">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node CREATED="1698243387222" ID="ID_1151484757" MODIFIED="1698243397453" TEXT="und zwar direkten Aufruf, ohne WorkForce"/>
|
||||
<node CREATED="1698243399946" ID="ID_525069730" MODIFIED="1698243412341" TEXT="es kann zu Sleeps kommen"/>
|
||||
<node CREATED="1698243426549" ID="ID_1975979569" MODIFIED="1698243431240" TEXT="das bedeutet: Zeitmessung"/>
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1698243664309" ID="ID_654541946" MODIFIED="1698243687277" TEXT="was kann man sinnvollerweise prüfen?">
|
||||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1698243697817" ID="ID_83311166" MODIFIED="1698243708627" TEXT="eine eingespiele Activity wird aufgerufen"/>
|
||||
<node CREATED="1698243756225" ID="ID_489965107" MODIFIED="1698243775440" TEXT="was fällig ist, wird sofort aufgerufen"/>
|
||||
<node CREATED="1698243881573" ID="ID_1520192624" MODIFIED="1698243892539" TEXT="es wird genau eine scheduled Activity aufgerufen"/>
|
||||
<node CREATED="1698243927930" ID="ID_1326757783" MODIFIED="1698243935709" TEXT="die Zeit wird in etwa eingehalten"/>
|
||||
<node CREATED="1698243794737" ID="ID_1290805695" MODIFIED="1698243800463" TEXT="das Delay-Regime">
|
||||
<node CREATED="1698243828655" ID="ID_763249245" MODIFIED="1698243855201" TEXT="Abstand davor ⟶ delay"/>
|
||||
<node CREATED="1698243897342" ID="ID_1722957398" MODIFIED="1698243904507" TEXT="Abstand danch ⟶ delay"/>
|
||||
<node CREATED="1698243973380" ID="ID_664100190" MODIFIED="1698244000012" TEXT="tendedNext ⟶ re-Fokussiert"/>
|
||||
<node CREATED="1698245002134" ID="ID_1016395299" MODIFIED="1698245069840" TEXT="nichts danach ⟶ re-Distribution">
|
||||
<linktarget COLOR="#758fa6" DESTINATION="ID_1016395299" ENDARROW="Default" ENDINCLINATION="302;-22;" ID="Arrow_ID_1135387860" SOURCE="ID_28419292" STARTARROW="None" STARTINCLINATION="246;369;"/>
|
||||
</node>
|
||||
<node CREATED="1698245073987" ID="ID_1953896637" MODIFIED="1698247362748" TEXT="leer ⟶ Schlaf">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1698245511656" ID="ID_1594716553" MODIFIED="1698245548777" TEXT="Scaffolding">
|
||||
<node CREATED="1698245550915" ID="ID_1897821225" MODIFIED="1698245557078" TEXT="verwende ActivityDetector"/>
|
||||
<node CREATED="1698245558169" ID="ID_1427917719" MODIFIED="1698245570820" TEXT="aber Problem: an die aktuelle Aufruzeit kommen"/>
|
||||
<node COLOR="#5b280f" CREATED="1698245571408" ID="ID_1935211976" MODIFIED="1698245821927" TEXT="Activity::TICK und den execution-Ctx riggen">
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
<node CREATED="1698245823278" ID="ID_1225266983" MODIFIED="1698245858822" TEXT="geht nicht ... diese Hintertür ist ZU">
|
||||
<icon BUILTIN="stop-sign"/>
|
||||
</node>
|
||||
<node CREATED="1698245835997" ID="ID_43172566" MODIFIED="1698245856760" TEXT="wir haben hier einen fest auf den Scheduler verdrahteten ExecutionCtx">
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1698246249997" ID="ID_221908219" MODIFIED="1698246271187" TEXT="muß mir die now-Zeit in ActivityProbe speichern">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1698246275186" ID="ID_389803917" MODIFIED="1698246286348" TEXT="bei jedem Aufruf im Objekt speichern"/>
|
||||
<node CREATED="1698246286912" ID="ID_1611070007" MODIFIED="1698246292046" TEXT="Zugriffs-Funktion schaffen"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697473158929" ID="ID_1723058065" MODIFIED="1697484548083" TEXT="vollständiger Ende-zu-Ende Test incl. WorkForce">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1698245695072" ID="ID_546920051" MODIFIED="1698245698507" TEXT="Test-Setup">
|
||||
<node CREATED="1698245550915" ID="ID_460908396" MODIFIED="1698245557078" TEXT="verwende ActivityDetector"/>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1698245705360" ID="ID_1236877119" MODIFIED="1698245892414" TEXT="brauche Hintereingang (für direkt gegebene Activities)">
|
||||
<icon BUILTIN="pencil"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1697758391611" ID="ID_124711923" MODIFIED="1697758397083" TEXT="Fälle">
|
||||
<node CREATED="1697758425500" ID="ID_1450418166" MODIFIED="1697758430911" TEXT="simpleUsage">
|
||||
<node CREATED="1697758440737" ID="ID_1211803424" MODIFIED="1697758454084" TEXT="zeigt hier vor allem was man braucht"/>
|
||||
|
|
@ -88118,6 +88187,12 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1698247388556" ID="ID_1402046356" MODIFIED="1698247391396" TEXT="invokeWorkFunction">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#338800" CREATED="1698247394051" ID="ID_198829622" MODIFIED="1698247420009" TEXT="kann einfachen Aufruf einer vorher eingespielten Activity belegen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1697755558855" ID="ID_278365674" MODIFIED="1697741858009" TEXT="SchedulerStress_test">
|
||||
|
|
|
|||
Loading…
Reference in a new issue