Chain-Load: implement invocation through JobFunctor

- use a ''special encoding'' to marshal the specific coordinates for this test setup
- use a fixed Frame-Grid to represent the ''time level''
- invoke hash calculation through a specialised JobFunctor subclass
This commit is contained in:
Fischlurch 2023-12-04 03:57:04 +01:00
parent 7d5242f604
commit 2e6712e816
3 changed files with 89 additions and 12 deletions

View file

@ -930,8 +930,7 @@ namespace test {
/** @test TODO setup for running a chain-load as scheduled task
* - running an isolated Node recalculation
* - dispatch of this recalculation packaged as render job
*
* @todo WIP 12/23 🔁 define implement
* @todo WIP 12/23 🔁 define 🔁 implement
*/
void
verify_scheduling_setup()
@ -975,10 +974,18 @@ namespace test {
CHECK (e.hash == 0);
job0.triggerJob();
// ◁───────────────────────────────────────────── Note: fail to invoke some predecessor....
job2.triggerJob();
job1.triggerJob();
job3.triggerJob();
CHECK (e.hash != 0x6A5924BA3389D7C);
e.hash = 0;
job1.triggerJob(); // recalculate missing part of the graph...
job3.triggerJob();
CHECK (e.hash == 0x6A5924BA3389D7C);
job3.triggerJob(); // Hash calculations are *not* idempotent
CHECK (e.hash != 0x6A5924BA3389D7C);
}
};

View file

@ -117,6 +117,7 @@ namespace test {
// using std::function;
// using lib::time::TimeValue;
using lib::time::Time;
using lib::time::FrameRate;
// using lib::time::FSecs;
// using lib::time::Offset;
// using lib::meta::RebindVariadic;
@ -1014,8 +1015,18 @@ namespace test {
{
using Node = typename TestChainLoad<maxFan>::Node;
Node* startNode_;
static lib::time::Grid&
testGrid() ///< Meyer's Singleton : a fixed 1fps quantiser
{
static lib::time::FixedFrameQuantiser gridOne{FrameRate::STEP};
return gridOne;
}
public:
RandomChainCalcFunctor(Node& startNode)
: startNode_{&startNode}
{ }
@ -1024,19 +1035,26 @@ namespace test {
void
invokeJobOperation (JobParameter param) override
{
UNIMPLEMENTED ("unpack parameters and dispatch into TestChainLoad-Node");
size_t nodeIdx = decodeNodeID (param.invoKey);
size_t level = decodeLevel (TimeValue{param.nominalTime});
Node& target = startNode_[nodeIdx];
ASSERT (target.level == level);
// invoke the »media calculation«
target.calculate();
}
string diagnostic() const override
{
return "ChainCalc-TODoh";
return _Fmt{"ChainCalc(w:%d)▶%s"}
% maxFan
% util::showAddr(startNode_);
}
/** package the node-index to invoke.
* @note per convention for this test, this info will be
* packaged into the lower word of the InvocationInstanceID
*/
static auto
static InvocationInstanceID
encodeNodeID (size_t idx)
{
InvocationInstanceID invoKey;
@ -1044,10 +1062,22 @@ namespace test {
return invoKey;
};
static size_t
decodeNodeID (InvocationInstanceID invoKey)
{
return size_t(invoKey.code.w1);
};
static Time
encodeLevel (size_t level)
{
UNIMPLEMENTED ("setup a FixedFrameQuantiser with 1FPS");
return Time{testGrid().timeOf (FrameCnt(level))};
}
static size_t
decodeLevel (TimeValue nominalTime)
{
return testGrid().gridPoint (nominalTime);
}
};

View file

@ -96465,6 +96465,18 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="button_ok"/>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1701661921354" ID="ID_1422491771" MODIFIED="1701662010544" TEXT="verify_scheduling_setup">
<icon BUILTIN="pencil"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1701661961030" ID="ID_1398320014" MODIFIED="1701661985334" TEXT="Zweck: die Bauelemente verifzieren (nicht das Scheduling)">
<icon BUILTIN="yes"/>
</node>
<node COLOR="#338800" CREATED="1701661987502" ID="ID_1253231042" MODIFIED="1701662008665" TEXT="einige Nodes direkt definieren und aufrufen; hash pr&#xfc;fen">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1701661924827" ID="ID_483928960" MODIFIED="1701662007131" TEXT="Aufruf der gleichen Nodes durch den RandomChainCalcFunctor">
<icon BUILTIN="button_ok"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1701017861080" ID="ID_797249846" MODIFIED="1701017874112" TEXT="nur begrenzte Verifikation">
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
@ -100440,7 +100452,9 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1701491105567" ID="ID_2955492" MODIFIED="1701491137114" TEXT="man &#xfc;bergibt direkt einen Pointer darauf"/>
<node CREATED="1701491172165" ID="ID_1453790989" MODIFIED="1701491203414" TEXT="die Level-Nummer wird direkt in die nominelle Zeit codiert">
<node CREATED="1701491207249" ID="ID_227520102" MODIFIED="1701491214620" TEXT="wie ist im Grunde egal">
<node CREATED="1701644765955" ID="ID_207437696" MODIFIED="1701644774457" TEXT="verwende eine FixedFrameQuantiser"/>
<node CREATED="1701644765955" ID="ID_207437696" MODIFIED="1701661834624" TEXT="verwende eine FixedFrameQuantiser">
<arrowlink COLOR="#74bda6" DESTINATION="ID_561235182" ENDARROW="Default" ENDINCLINATION="1286;0;" ID="Arrow_ID_794806390" STARTARROW="None" STARTINCLINATION="403;33;"/>
</node>
<node CREATED="1701644775597" ID="ID_1517631819" MODIFIED="1701644789319" TEXT="mit einer Frame-Rate &#x2254; 1"/>
<node CREATED="1701644790211" ID="ID_859085781" MODIFIED="1701644813586" TEXT="komplett per Helper-Funktionen verbergen"/>
</node>
@ -100597,7 +100611,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1701630922141" ID="ID_887329209" MODIFIED="1701630929224" TEXT="explizitie Vorbereitung m&#xf6;glich"/>
<node CREATED="1701634155541" ID="ID_237095519" MODIFIED="1701634175327" TEXT="daf&#xfc;r m&#xf6;glichst generisch und klar"/>
</node>
<node CREATED="1701653204166" ID="ID_1263178085" MODIFIED="1701653207746" TEXT="Typen einrichten">
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1701653204166" ID="ID_1263178085" MODIFIED="1701661760657" TEXT="Typen einrichten">
<icon BUILTIN="pencil"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1701653208718" FOLDED="true" ID="ID_1927337889" MODIFIED="1701659244968" TEXT="Problem: TestChainLoad hat zu viele Template-Parameter">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1701653222644" ID="ID_1426060278" MODIFIED="1701653291333">
@ -100808,12 +100823,37 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node COLOR="#338800" CREATED="1701661755565" ID="ID_91855144" MODIFIED="1701661758314" TEXT="RandomChainCalcFunctor">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1701493082582" ID="ID_1894179968" MODIFIED="1701493117170" TEXT="Dispatcher-Job implementieren">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1701662028749" ID="ID_1982023018" MODIFIED="1701662069143" TEXT="RandomChainPlanFunctor">
<arrowlink COLOR="#546bbc" DESTINATION="ID_114421309" ENDARROW="Default" ENDINCLINATION="-34;-130;" ID="Arrow_ID_234763232" STARTARROW="None" STARTINCLINATION="-98;10;"/>
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1701493075903" ID="ID_114421309" MODIFIED="1701493117170" TEXT="Meta-Job implementieren">
</node>
</node>
<node COLOR="#338800" CREATED="1701493082582" ID="ID_1894179968" MODIFIED="1701661794782" TEXT="Dispatcher-Job implementieren">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1701661796628" ID="ID_561235182" MODIFIED="1701661828350" TEXT="verwendet einen FixedFrameQuantiser (Meyer&apos;s Singleton)">
<linktarget COLOR="#74bda6" DESTINATION="ID_561235182" ENDARROW="Default" ENDINCLINATION="1286;0;" ID="Arrow_ID_794806390" SOURCE="ID_207437696" STARTARROW="None" STARTINCLINATION="403;33;"/>
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1701661843606" ID="ID_1165776090" MODIFIED="1701661867438" TEXT="encode/decode der Parameter">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1701661851117" ID="ID_1957261792" MODIFIED="1701661868488" TEXT="Node per brachialer Pointer-Arrithmetik finden">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1701661869122" ID="ID_1870540819" MODIFIED="1701661888529" TEXT="Verifikation: Level-Nummer mu&#xdf; matchen">
<icon BUILTIN="button_ok"/>
<icon BUILTIN="messagebox_warning"/>
</node>
<node COLOR="#338800" CREATED="1701661893229" ID="ID_1152296001" LINK="#ID_483928960" MODIFIED="1701661942707" TEXT="Aufruf funktioniert im Test">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1701493075903" ID="ID_114421309" MODIFIED="1701662062918" TEXT="Meta-Job implementieren">
<linktarget COLOR="#546bbc" DESTINATION="ID_114421309" ENDARROW="Default" ENDINCLINATION="-34;-130;" ID="Arrow_ID_234763232" SOURCE="ID_1982023018" STARTARROW="None" STARTINCLINATION="-98;10;"/>
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1701493107387" ID="ID_1826192324" MODIFIED="1701493117170" TEXT="Aufruf-front-End">