Job-Planning: frame number now additionally required in FrameCoord

...which was the reason why the test failed;
the calculation works as expected


PS: rename JobPlanningSetup_test to JobPlanningPipeline_test
This commit is contained in:
Fischlurch 2023-06-17 03:10:57 +02:00
parent 6228c623b4
commit 661d768fad
12 changed files with 101 additions and 44 deletions

View file

@ -155,16 +155,16 @@ namespace time {
* by quantising the given time value
*/
void
Frames::rebuild (FrameNr& framecnt, QuantR quantiser, TimeValue const& rawTime)
Frames::rebuild (FrameNr& frameNr, QuantR quantiser, TimeValue const& rawTime)
{
framecnt.setValueRaw (quantiser.gridPoint (rawTime));
frameNr.setValueRaw (quantiser.gridPoint (rawTime));
}
/** calculate the time point denoted by this frame count */
TimeValue
Frames::evaluate (FrameNr const& framecnt, QuantR quantiser)
Frames::evaluate (FrameNr const& frameNr, QuantR quantiser)
{
return quantiser.timeOf (framecnt);
return quantiser.timeOf (frameNr);
}

View file

@ -289,7 +289,7 @@ namespace engine {
SRC::transform(
[portIDX](PipeFrameTick& core) -> TicketDepend
{
FrameCoord frame{core.currPoint, portIDX};
FrameCoord frame{core.currPoint, core.frameNr, portIDX};
return {nullptr
,& core.dispatcher->getJobTicketFor(frame)
};

View file

@ -86,6 +86,12 @@ namespace engine {
, modelPortIDX{portIDX}
{ }
FrameCoord (TimeValue nominalTime, FrameCnt frameNr, size_t portIDX =0)
: absoluteNominalTime{nominalTime}
, absoluteFrameNumber{frameNr}
, modelPortIDX{portIDX}
{ }
// using default copy operations
};

View file

@ -49,12 +49,16 @@ return: 0
END
PLANNED "Setup for render job planning" JobPlanningSetup_test <<END
PLANNED "Render job planning calculation" JobPlanning_test <<END
out-lit: Frame #5 @ ∆200ms
out-lit: real-time-origin : 0:05:00.000
out-lit: total latency : ≺52ms≻
out-lit: deadline : 0:05:00.148
return: 0
END
PLANNED "Render job planning calculation" JobPlanning_test <<END
PLANNED "Render job planning pipeline setup" JobPlanningPipeline_test <<END
return: 0
END

View file

@ -1,5 +1,5 @@
/*
JobPlanningSetup(Test) - structure and setup of the job-planning pipeline
JobPlanningPipeline(Test) - structure and setup of the job-planning pipeline
Copyright (C) Lumiera.org
2023, Hermann Vosseler <Ichthyostega@web.de>
@ -20,8 +20,8 @@
* *****************************************************/
/** @file job-planning-setup-test.cpp
** unit test \ref CalcStream_test
/** @file job-planning-pipeline-test.cpp
** unit test \ref JobPlanningPipeline_test
*/
@ -89,7 +89,7 @@ namespace test {
* @see CalcStream
* @see RenderDriveS
*/
class JobPlanningSetup_test : public Test
class JobPlanningPipeline_test : public Test
{
virtual void
@ -274,7 +274,7 @@ namespace test {
/** Register this test class... */
LAUNCHER (JobPlanningSetup_test, "unit engine");
LAUNCHER (JobPlanningPipeline_test, "unit engine");

View file

@ -60,11 +60,11 @@ namespace test {
using lib::time::FrameRate;
// using lib::time::Duration;
// using lib::time::Offset;
using lib::time::Offset;
// using lib::time::TimeVar;
// using lib::time::Time;
using lib::time::Time;
// using mobject::ModelPort;
// using play::Timings;
using play::Timings;
namespace { // used internally
@ -95,7 +95,7 @@ namespace test {
{
virtual void
run (Arg)
run (Arg)
{
simpleUsage();
calculateDeadline();
@ -135,20 +135,39 @@ namespace test {
play::Timings timings (FrameRate::PAL, Time{0,0,5});
auto [port,sink] = dispatcher.getDummyConnection(1);
FrameCnt frameNr{5};
Time nominalTime{200,0};
size_t portIDX = dispatcher.resolveModelPort (port);
FrameCoord frame{nominalTime, portIDX};
FrameCoord frame{nominalTime, frameNr, portIDX};
JobTicket& ticket = dispatcher.getJobTicketFor(frame);
JobPlanning plan{frame,ticket,sink};
// the following calculations are expected to happen....
Duration latency = ticket.getExpectedRuntime()
+ timings.currentEngineLatency()
+ timings.outputLatency;
Offset nominalOffset (timings.getFrameStartAt(0), timings.getFrameStartAt(frameNr));
Time expectedDeadline{timings.scheduledDelivery + nominalOffset - latency};
cout << util::_Fmt{"Frame #%d @ %s\n"
"real-time-origin : %s\n"
"total latency : %s\n"
"deadline : %s"}
% frameNr % nominalOffset
% timings.scheduledDelivery
% latency
% plan.determineDeadline(timings)
<< endl;
CHECK (plan.determineDeadline(timings) == expectedDeadline);
CHECK (timings.scheduledDelivery == Time(0,0,5) );
CHECK (timings.playbackUrgency == play::TIMEBOUND);
// But when switching form "timebound" to "best effort"...
timings.playbackUrgency = play::ASAP;
cout << plan.determineDeadline(timings) <<endl;
CHECK (Time::ANYTIME == plan.determineDeadline (timings));
timings.playbackUrgency = play::TIMEBOUND;
////////TODO where to set the anchor point realTime <-> nominalTime ??
cout << plan.determineDeadline(timings) <<endl;
// ... no deadline is calculated at all
}

View file

@ -137,7 +137,7 @@ namespace test {
* created by JobTicket::createJobFor(FrameCoord) will be wired
* with the MockJob functor and can thus be related back to
* the test specification setup.
* @see JobPlanningSetup_test
* @see JobPlanningPipeline_test
* @see DispatcherInterface_test
*/
class MockJobTicket

View file

@ -54,7 +54,7 @@ namespace test {
* - a mocked JobTicket, generating mock render jobs
* - configurable test setup for a mocked Segmentation datastructure
* - configurable setup of a complete frame Dispatcher
* @see JobPlanningSetup_test
* @see JobPlanningPipeline_test
* @see Dispatcher
* @see vault::engine::Job
* @see steam::fixture::Segmentation

View file

@ -55,7 +55,7 @@ namespace test {
* - construction of a mocked Segment
* - on-demand allocation of a JobTicket for a ModelPort(index)
* @see steam::fixture::Segment
* @see JobPlanningSetup_test
* @see JobPlanningPipeline_test
* @see MockSupport_test
*/
class FixtureSegment_test : public Test

View file

@ -51,7 +51,7 @@ namespace test {
* - composition of the NodeGraphAttachment including prerequisites
* - generation of a complete setup of fake ExitNodes from a test spec.
* @see steam::fixture::Segment
* @see JobPlanningSetup_test
* @see JobPlanningPipeline_test
* @see MockSupport_test
*/
class NodeGraphAttachment_test : public Test

View file

@ -39,7 +39,7 @@
** @todo this was invented in 2012 -- but development of the player subsystem stalled thereafter.
**
** @see mock-dispatcher.hpp
** @see JobPlanningSetup_test
** @see JobPlanningPipeline_test
*/

View file

@ -75619,7 +75619,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1685052033040" MODIFIED="1685052033040" TEXT="TimeVar absoluteNominalTime;"/>
<node CREATED="1685052033041" MODIFIED="1685052033041" TEXT="FrameCnt absoluteFrameNumber;"/>
<node COLOR="#5b280f" CREATED="1685052033041" ID="ID_414066208" MODIFIED="1686841366213" TEXT="TimeVar absoluteRealDeadline;">
<linktarget COLOR="#be68bf" DESTINATION="ID_414066208" ENDARROW="Default" ENDINCLINATION="736;59;" ID="Arrow_ID_1765709992" SOURCE="ID_889938405" STARTARROW="None" STARTINCLINATION="185;-30;"/>
<linktarget COLOR="#688dbf" DESTINATION="ID_414066208" ENDARROW="Default" ENDINCLINATION="736;59;" ID="Arrow_ID_1765709992" SOURCE="ID_889938405" STARTARROW="None" STARTINCLINATION="185;-30;"/>
<icon BUILTIN="button_cancel"/>
</node>
<node CREATED="1685052033041" ID="ID_784744470" MODIFIED="1686841193971" TEXT="size_t modelPortIDX"/>
@ -75762,8 +75762,17 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node COLOR="#338800" CREATED="1686878360841" ID="ID_26327492" MODIFIED="1686879600114" TEXT="f&#xfc;r Deadline eigentlich nur bei TIMEBOUND">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1686879601311" ID="ID_1446511354" MODIFIED="1686879625110" TEXT="Frage: wo wird nun der Anker zur wall-clock-Time etabliert?">
<node COLOR="#435e98" CREATED="1686879601311" ID="ID_1446511354" MODIFIED="1686963909785" TEXT="Frage: wo wird nun der Anker zur wall-clock-Time etabliert?">
<icon BUILTIN="help"/>
<node CREATED="1686963864527" ID="ID_1675965203" MODIFIED="1686963907132" TEXT="liegt nun in den Timings">
<icon BUILTIN="idea"/>
</node>
<node CREATED="1686963873774" ID="ID_1368816821" MODIFIED="1686963903814" TEXT="wird also au&#xdf;erhalb der Dispatcher-Pipeline verwaltet">
<icon BUILTIN="forward"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1686963884292" ID="ID_713008551" MODIFIED="1686963926980" TEXT="dann wohl im CalcStream">
<icon BUILTIN="yes"/>
</node>
</node>
</node>
</node>
@ -75807,27 +75816,27 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1686840512979" ID="ID_1663666286" MODIFIED="1686840517104" TEXT="buildJob">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1686840512979" ID="ID_1663666286" MODIFIED="1686963839430" TEXT="buildJob">
<icon BUILTIN="button_ok"/>
<node CREATED="1686840520442" ID="ID_91633433" MODIFIED="1686840534807" TEXT="eigentliche Implementierung an das JobTicket delegiert">
<icon BUILTIN="idea"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1686840535983" ID="ID_1083625373" MODIFIED="1686840617280" TEXT="zus&#xe4;tzliche Parameter nachtr&#xe4;glich anreichern">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1686840535983" ID="ID_1083625373" MODIFIED="1686963837475" TEXT="zus&#xe4;tzliche Parameter nachtr&#xe4;glich anreichern">
<icon BUILTIN="hourglass"/>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1686841321049" ID="ID_1620874793" MODIFIED="1686841334925" TEXT="Einsicht: Deadline wird hier gar nicht ben&#xf6;tigt">
<icon BUILTIN="idea"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1686841336620" ID="ID_889938405" MODIFIED="1686841376164" TEXT="Konsequenz: kann aus FrameCoord entfernt werden">
<arrowlink COLOR="#be68bf" DESTINATION="ID_414066208" ENDARROW="Default" ENDINCLINATION="736;59;" ID="Arrow_ID_1765709992" STARTARROW="None" STARTINCLINATION="185;-30;"/>
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1686841336620" ID="ID_889938405" MODIFIED="1686963825447" TEXT="Konsequenz: kann aus FrameCoord entfernt werden">
<arrowlink COLOR="#688dbf" DESTINATION="ID_414066208" ENDARROW="Default" ENDINCLINATION="736;59;" ID="Arrow_ID_1765709992" STARTARROW="None" STARTINCLINATION="185;-30;"/>
<icon BUILTIN="button_ok"/>
</node>
<node CREATED="1686841400731" ID="ID_873313888" MODIFIED="1686841424007" TEXT="die Bedeutung von FrameCoord reduziert sich auf die Planning-Pipeline">
<icon BUILTIN="yes"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1686873234880" ID="ID_1662721717" MODIFIED="1686873239870" TEXT="determineDeadline">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1686873234880" ID="ID_1662721717" MODIFIED="1686963805749" TEXT="determineDeadline">
<icon BUILTIN="button_ok"/>
<node CREATED="1686874949274" ID="ID_355623699" MODIFIED="1686875277005">
<richcontent TYPE="NODE"><html>
<head>
@ -75841,9 +75850,21 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</html></richcontent>
<icon BUILTIN="info"/>
</node>
<node CREATED="1686876114974" ID="ID_914514510" MODIFIED="1686876118761" TEXT="Argument: Timings"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1686878317271" ID="ID_1008817240" MODIFIED="1686878338708" TEXT="auch die FrameNr nun stets in den FrameCoord notwendig">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1686876114974" ID="ID_914514510" MODIFIED="1686963803996" TEXT="Argument: Timings">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1686878317271" ID="ID_1008817240" MODIFIED="1686964036173" TEXT="auch die FrameNr nun stets in den FrameCoord notwendig">
<linktarget COLOR="#a9b4c1" DESTINATION="ID_1008817240" ENDARROW="Default" ENDINCLINATION="305;14;" ID="Arrow_ID_1123194112" SOURCE="ID_1015776153" STARTARROW="None" STARTINCLINATION="438;-16;"/>
<icon BUILTIN="button_ok"/>
<node COLOR="#435e98" CREATED="1686960694336" HGAP="37" ID="ID_942074087" MODIFIED="1686963795512" TEXT="passenden ctor definieren..." VSHIFT="-4">
<node CREATED="1686960711741" ID="ID_198926017" MODIFIED="1686961091454" TEXT="Nutzungs-Konstext: Dispatcher-Pipeline">
<icon BUILTIN="info"/>
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1686961051933" ID="ID_614235198" MODIFIED="1686963790897" TEXT="&#x27f9; (nominalTime, frameNr, portIDX)"/>
<node COLOR="#338800" CREATED="1686963750830" ID="ID_1514275316" MODIFIED="1686963782233" TEXT="&#xe4;ndern in Dispatcher::PipelineBuilder::pullFrom(port)">
<icon BUILTIN="button_ok"/>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1686875085793" ID="ID_922531661" MODIFIED="1686875092431" TEXT="determineLeeway">
@ -75924,9 +75945,9 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node COLOR="#338800" CREATED="1686793496442" ID="ID_1934790434" MODIFIED="1686873178829" TEXT="simpleUsage">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1686793496443" ID="ID_1476053415" MODIFIED="1686793514422" TEXT="calculateDeadline">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1686880606987" ID="ID_1127724242" MODIFIED="1686880645005" TEXT="TIMEBOUND - Berechnung wohl nicht korrekt">
<node COLOR="#338800" CREATED="1686793496443" ID="ID_1476053415" MODIFIED="1686964042077" TEXT="calculateDeadline">
<icon BUILTIN="button_ok"/>
<node COLOR="#435e98" CREATED="1686880606987" ID="ID_1127724242" MODIFIED="1686964025478" TEXT="TIMEBOUND - Berechnung wohl nicht korrekt">
<icon BUILTIN="broken-line"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1686880632623" ID="ID_1121171298" MODIFIED="1686880760729" TEXT="Deadline = 0:04:59.908"/>
<node CREATED="1686880647956" ID="ID_1076439422" MODIFIED="1686880753302" TEXT="w&#xfc;rde erwarten">
@ -75936,6 +75957,13 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1686880702989" ID="ID_462263183" MODIFIED="1686880715360" TEXT="nominalTime = 200ms"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1686880716476" ID="ID_1325275413" MODIFIED="1686880748644" TEXT="&#xd83e;&#xdc32; 5h +200ms - 52ms"/>
</node>
<node COLOR="#435e98" CREATED="1686960633094" ID="ID_1015776153" MODIFIED="1686964036173" TEXT="ganz banal: FrameNummer in den FrameCoord nicht gesetzt">
<arrowlink DESTINATION="ID_1008817240" ENDARROW="Default" ENDINCLINATION="305;14;" ID="Arrow_ID_1123194112" STARTARROW="None" STARTINCLINATION="438;-16;"/>
<icon BUILTIN="idea"/>
</node>
</node>
<node COLOR="#338800" CREATED="1686964045025" ID="ID_1229789651" MODIFIED="1686964056421" TEXT="im Test explizit nachrechnen zur Dokumentation">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1686793496443" ID="ID_1152978912" MODIFIED="1686793511894" TEXT="setupDependentJob">