diff --git a/src/proc/engine/dispatcher.hpp b/src/proc/engine/dispatcher.hpp index db358991e..d24df3a12 100644 --- a/src/proc/engine/dispatcher.hpp +++ b/src/proc/engine/dispatcher.hpp @@ -88,10 +88,14 @@ namespace engine { operator JobPlanningSequence() { + TimeAnchor nextPlanningAnchor = refPoint_.buildNextAnchor(); + TODO ("build the continuation job if necessary, wrap the sequence"); return JobPlanningSequence( - relativeFrameLocation(refPoint_), dispatcher_); + relativeFrameLocation(refPoint_), + nextPlanningAnchor.getStartFrame(), + dispatcher_); } }; diff --git a/src/proc/engine/job-planning.hpp b/src/proc/engine/job-planning.hpp index b4a48b39e..4dcfb61e2 100644 --- a/src/proc/engine/job-planning.hpp +++ b/src/proc/engine/job-planning.hpp @@ -286,6 +286,7 @@ namespace engine { { FrameLocator* locationGenerator_; FrameCoord currentLocation_; + int64_t stopFrame_; //////////////////////////////////////////TODO duplicated storage of a FrameCoord record //////////////////////////////////////////TODO nextEvaluation_ is only needed to initialise the "current" sequence @@ -310,9 +311,10 @@ namespace engine { typedef JobPlanning * pointer; - PlanningStepGenerator(FrameCoord startPoint, FrameLocator& locator) + PlanningStepGenerator(FrameCoord startPoint, int64_t stopPoint, FrameLocator& locator) : locationGenerator_(&locator) , currentLocation_(startPoint) + , stopFrame_(stopPoint) { } // default copyable @@ -323,7 +325,7 @@ namespace engine { friend bool checkPoint (PlanningStepGenerator const& gen) { - UNIMPLEMENTED ("determine planing chunk size"); /// return bool(seq.feed()); + return gen.currentLocation_.absoluteFrameNumber < gen.stopFrame_; } friend JobPlanning& @@ -381,10 +383,10 @@ namespace engine { { public: - JobPlanningSequence(engine::FrameCoord startPoint, FrameLocator& locator) + JobPlanningSequence(engine::FrameCoord startPoint, int64_t stopPoint, FrameLocator& locator) : ExpandedPlanningSequence( JobPlanningChunkStartPoint( - PlanningStepGenerator(startPoint,locator)) + PlanningStepGenerator(startPoint,stopPoint,locator)) >>= expandPrerequisites) // "flat map" (monad operation) { } diff --git a/src/proc/engine/time-anchor.hpp b/src/proc/engine/time-anchor.hpp index 4033e8941..75b0aae1b 100644 --- a/src/proc/engine/time-anchor.hpp +++ b/src/proc/engine/time-anchor.hpp @@ -159,6 +159,13 @@ namespace engine { } + /** @return the frame at which any job planning + * for this planning chunk will start */ + int64_t getStartFrame() const + { + return anchorPoint_; + } + Offset remainingRealTimeFor (FrameCoord plannedFrame)