From 661d768fad28b19e74d9fddcea964af36be06ea1 Mon Sep 17 00:00:00 2001 From: Ichthyostega Date: Sat, 17 Jun 2023 03:10:57 +0200 Subject: [PATCH] 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 --- src/lib/time/timecode.cpp | 8 +-- src/steam/engine/dispatcher.hpp | 2 +- src/steam/engine/frame-coord.hpp | 6 ++ tests/47engine.tests | 8 ++- ...est.cpp => job-planning-pipeline-test.cpp} | 10 +-- tests/core/steam/engine/job-planning-test.cpp | 39 +++++++++--- tests/core/steam/engine/mock-dispatcher.hpp | 2 +- tests/core/steam/engine/mock-support-test.cpp | 2 +- .../steam/fixture/fixture-segment-test.cpp | 2 +- .../fixture/node-graph-attachment-test.cpp | 2 +- .../core/steam/play/dummy-builder-context.hpp | 2 +- wiki/thinkPad.ichthyo.mm | 62 ++++++++++++++----- 12 files changed, 101 insertions(+), 44 deletions(-) rename tests/core/steam/engine/{job-planning-setup-test.cpp => job-planning-pipeline-test.cpp} (97%) diff --git a/src/lib/time/timecode.cpp b/src/lib/time/timecode.cpp index a1f4ebee6..4279e79aa 100644 --- a/src/lib/time/timecode.cpp +++ b/src/lib/time/timecode.cpp @@ -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); } diff --git a/src/steam/engine/dispatcher.hpp b/src/steam/engine/dispatcher.hpp index b071115bc..f6180f762 100644 --- a/src/steam/engine/dispatcher.hpp +++ b/src/steam/engine/dispatcher.hpp @@ -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) }; diff --git a/src/steam/engine/frame-coord.hpp b/src/steam/engine/frame-coord.hpp index 4fb26b250..7f2895ab9 100644 --- a/src/steam/engine/frame-coord.hpp +++ b/src/steam/engine/frame-coord.hpp @@ -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 }; diff --git a/tests/47engine.tests b/tests/47engine.tests index c3114e15d..aed9f01ec 100644 --- a/tests/47engine.tests +++ b/tests/47engine.tests @@ -49,12 +49,16 @@ return: 0 END -PLANNED "Setup for render job planning" JobPlanningSetup_test < @@ -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"); diff --git a/tests/core/steam/engine/job-planning-test.cpp b/tests/core/steam/engine/job-planning-test.cpp index ac8762763..b5d6d8afa 100644 --- a/tests/core/steam/engine/job-planning-test.cpp +++ b/tests/core/steam/engine/job-planning-test.cpp @@ -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) < nominalTime ?? - cout << plan.determineDeadline(timings) < - + @@ -75762,8 +75762,17 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
- + + + + + + + + + +
@@ -75807,27 +75816,27 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
- - + + - - + + - - - + + + - - + + @@ -75841,9 +75850,21 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
- - - + + + + + + + + + + + + + + + @@ -75924,9 +75945,9 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
- - - + + + @@ -75936,6 +75957,13 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
+ + + + + + +