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:
parent
6228c623b4
commit
661d768fad
12 changed files with 101 additions and 44 deletions
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
||||
|
||||
|
||||
|
|
@ -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
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
*/
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -75619,7 +75619,7 @@ Date:   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:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node COLOR="#338800" CREATED="1686878360841" ID="ID_26327492" MODIFIED="1686879600114" TEXT="fü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ß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:   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ätzliche Parameter nachträglich anreichern">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1686840535983" ID="ID_1083625373" MODIFIED="1686963837475" TEXT="zusätzliche Parameter nachträ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ö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:   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="⟹ (nominalTime, frameNr, portIDX)"/>
|
||||
<node COLOR="#338800" CREATED="1686963750830" ID="ID_1514275316" MODIFIED="1686963782233" TEXT="ä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:   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ürde erwarten">
|
||||
|
|
@ -75936,6 +75957,13 @@ Date:   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="�� 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">
|
||||
|
|
|
|||
Loading…
Reference in a new issue