![]() |
Lumiera 0.pre.04~rc.1
»edit your freedom«
|
#include "steam/engine/dispatcher.hpp"
Internal abstraction: a service within the engine for translating a logical calculation stream (corresponding to a PlayProcess) into a sequence of individual RenderJob entries for calculations and data access.
The actual implementation of this service is tied to the low-level-model, i.e. the render nodes network. The Dispatcher service is used to implement the CalcStreams during playback and rendering; there will be a continuous, chunk-wise proceeding evaluation and planning of new jobs, which can then be handed over to the Scheduler for time-bound activation.
the asynchronous and ongoing nature of the render process mandates to avoid a central instance for operating this planning process. Instead, together with each chunk of planned jobs we generate a continuation job, which – on activation – will pick up the planning of the next chunk. The Dispatcher interface was shaped especially to support this process, with a local PlanningPipeline for use within the RenderDrive incorporated into each CalcStream. All the complexities of actually planning the jobs are hidden within this pipeline, which, for the purpose of dispatching a series of jobs just looks like a sequence of job descriptors
Definition at line 81 of file dispatcher.hpp.
Classes | |
| struct | PipeFrameTick |
| Job-planning Step-1: establish a sequence of frame start times. More... | |
| struct | PipelineBuilder |
| A Builder wrapper, allowing to build a Job-planning pipeline step by step, while supplying contextual information from the CalcStream. More... | |
| struct | PlanningPipeline |
| A complete job-planning pipeline: this »Lumiera Forward Iterator« drives the actual job-planning process on-demand. More... | |
Public Member Functions | |
| virtual | ~Dispatcher () |
| this is an interface | |
| PipelineBuilder< PipeFrameTick > | forCalcStream (Timings timings) |
| Start a builder sequence to assemble a job-planning pipeline, backed by this Dispatcher. | |
| virtual size_t | resolveModelPort (ModelPort)=0 |
| translate a generic ModelPort spec into the specific index number applicable at the Timeline referred-to by this Dispatcher | |
| virtual JobTicket & | getJobTicketFor (size_t portIDX, TimeValue nominalTime)=0 |
| Core Dispatcher operation: locate the appropriate Segment and retrieve/derive a »blueprint« for render job generation. | |
| Job | createJobFor (size_t portIDX, TimeValue nominalTime) |
| Convenience shortcut for tests: JobTicket ⟼ Job. | |
Additional Inherited Members | |
Private Member Functions inherited from NonCopyable | |
| ~NonCopyable ()=default | |
| NonCopyable ()=default | |
| NonCopyable (NonCopyable const &)=delete | |
| NonCopyable & | operator= (NonCopyable const &)=delete |
|
virtual |
this is an interface
Definition at line 28 of file dispatcher.cpp.
|
inline |
Start a builder sequence to assemble a job-planning pipeline, backed by this Dispatcher.
| timings | the frame-grid and further specs to use for a specific CalcStream |
Definition at line 344 of file dispatcher.hpp.
Referenced by JobPlanningPipeline_test::accessTopLevelJobTicket(), and JobPlanningPipeline_test::buildBaseTickGenerator().
Here is the caller graph for this function:
|
pure virtual |
translate a generic ModelPort spec into the specific index number applicable at the Timeline referred-to by this Dispatcher
| error::Logic | if the given ModelPort is not associated |
Implemented in MockDispatcher, and DispatchTable.
Core Dispatcher operation: locate the appropriate Segment and retrieve/derive a »blueprint« for render job generation.
| portIDX | index-number for a ModelPort as resolved |
| nominalTime | time of the frame to calculate, relative to Timeline origin |
Implemented in MockDispatcher, and DispatchTable.
Referenced by Dispatcher::createJobFor(), and Dispatcher::PipelineBuilder< SRC >::pullFrom().
Here is the caller graph for this function:Convenience shortcut for tests: JobTicket ⟼ Job.
Definition at line 350 of file dispatcher.hpp.
References JobTicket::createJobFor(), and Dispatcher::getJobTicketFor().
Referenced by JobPlanningPipeline_test::demonstrateScaffolding(), and MockSupport_test::verify_MockDispatcherSetup().
Here is the call graph for this function:
Here is the caller graph for this function:
Inheritance diagram for Dispatcher:
Collaboration diagram for Dispatcher: