Job-Planning: verify and complete the build-up of mock structures (see #1294)
The prototypical setup of data structures and test support components is largely complete by now — with the exception of the `MockDispatcher`, which will be completed while moving to the next steps pertaining the setup of a frame dispatch pipeline. * the existing `DummyJob` was augmented to allow verification of association between Job and `JobTicket` * the existing implementation of `JobTicket` was verified and augmented to allow coverage of the whole usage cycle * a `MockJobTicket` was implemented on top, which can be generated from a symbolical test specification (rather than from the real Fixture data structure) * a complete `MockSegmentation` was developed, allowing to establish all the aforementioned data structures without an actual backing Render Engine. Moreover, `MockSegmentation` can be generated from the aforementioned symbolic test specification. * as part of this work, an algorithm to split an existing Segmentation and to splice in new segments was developed and verified
This commit is contained in:
parent
4f37b0412c
commit
e33689e5d6
9 changed files with 406 additions and 158 deletions
|
|
@ -21,11 +21,11 @@
|
|||
*/
|
||||
|
||||
|
||||
/** @file splite-splice.cpp
|
||||
/** @file splite-splice.hpp
|
||||
** Generic algorithm to splice a new segment into a seamless segmentation of intervals.
|
||||
** Here _"segmentation"_ denotes a partitioning of an ordered axis into a seamless sequence
|
||||
** of intervals (here called "segment"). The axis is based on some _ordering type,_ like e.g.
|
||||
** int (natural numbers) or lib::time::Time values, and the axis is assumed cover a complete
|
||||
** `int` (natural numbers) or lib::time::Time values, and the axis is assumed to cover a complete
|
||||
** domain. The intervals / segments are defined by start and end point, where the start point
|
||||
** is inclusive, yet the end point is exclusive (the next ordered point after the interval).
|
||||
**
|
||||
|
|
@ -93,7 +93,7 @@ namespace lib {
|
|||
namespace error = lumiera::error;
|
||||
|
||||
|
||||
namespace splitsplice {/// Implementation of [»SplitSplice« algorithm](\ref splite-splice.cpp)
|
||||
namespace splitsplice {/// Implementation of [»SplitSplice« algorithm](\ref splite-splice.hpp)
|
||||
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -78,7 +78,7 @@ namespace fixture {
|
|||
*
|
||||
* @todo 1/2012 Just a Placeholder. The real thing is not yet implemented.
|
||||
* @todo 4/2023 now about to bootstrap into the implementation structure step by step (WIP)
|
||||
* @see http://lumiera.org/wiki/renderengine.html#Fixture
|
||||
* @see https://lumiera.org/wiki/renderengine.html#Fixture
|
||||
*/
|
||||
class Segmentation
|
||||
: util::NonCopyable
|
||||
|
|
|
|||
|
|
@ -63,6 +63,7 @@ namespace test {
|
|||
* @todo WIP-WIP-WIP 4/2023
|
||||
*
|
||||
* @see DispatcherInterface_test
|
||||
* @see MockSupport_test
|
||||
* @see Dispatcher
|
||||
* @see CalcStream
|
||||
* @see RenderDriveS
|
||||
|
|
@ -71,7 +72,7 @@ namespace test {
|
|||
{
|
||||
|
||||
virtual void
|
||||
run (Arg)
|
||||
run (Arg)
|
||||
{
|
||||
demonstrateScaffolding();
|
||||
UNIMPLEMENTED ("shape the interface of the job-planning pipeline");
|
||||
|
|
@ -88,33 +89,46 @@ namespace test {
|
|||
{
|
||||
Time nominalTime = lib::test::randTime();
|
||||
int additionalKey = rand() % 5000;
|
||||
Job mockJob = DummyJob::build (nominalTime, additionalKey);
|
||||
CHECK (mockJob.getNominalTime() == nominalTime);
|
||||
CHECK (not DummyJob::was_invoked (mockJob));
|
||||
|
||||
Job mockJob = DummyJob::build (nominalTime, additionalKey);
|
||||
mockJob.triggerJob();
|
||||
CHECK ( DummyJob::was_invoked (mockJob));
|
||||
CHECK (DummyJob::was_invoked (mockJob));
|
||||
CHECK (RealClock::wasRecently (DummyJob::invocationTime (mockJob)));
|
||||
CHECK (nominalTime == DummyJob::invocationNominalTime (mockJob) );
|
||||
CHECK (additionalKey == DummyJob::invocationAdditionalKey(mockJob));
|
||||
|
||||
Time prevInvocation = DummyJob::invocationTime (mockJob);
|
||||
mockJob.triggerJob();
|
||||
CHECK (prevInvocation < DummyJob::invocationTime (mockJob)); // invoked again, recorded new invocation time
|
||||
CHECK (nominalTime == DummyJob::invocationNominalTime (mockJob) ); // all other Job parameter recorded again unaltered
|
||||
CHECK (additionalKey == DummyJob::invocationAdditionalKey(mockJob));
|
||||
// Build a simple Segment at [10s ... 20s[
|
||||
MockSegmentation mockSegs{MakeRec()
|
||||
.attrib ("start", Time{0,10} // start time (inclusive) of the Segment at 10sec
|
||||
,"after", Time{0,20} // the Segment ends *before* 20sec
|
||||
,"mark", 123) // marker-ID 123 (can be verified from Job invocation)
|
||||
.scope(MakeRec() // this JobTicket also defines a prerequisite ticket
|
||||
.attrib("mark",555) // using a differen marker-ID 555
|
||||
.genNode()
|
||||
)
|
||||
.genNode()};
|
||||
fixture::Segment const& seg = mockSegs[Time{0,15}]; // access anywhere 10s <= t < 20s
|
||||
JobTicket const& ticket = seg.jobTicket(); // get the master-JobTicket from this segment
|
||||
JobTicket const& prereq = *(ticket.getPrerequisites()); // pull a prerequisite JobTicket
|
||||
|
||||
MockJobTicket mockTick;
|
||||
CHECK (mockTick.discoverPrerequisites().empty());
|
||||
FrameCoord coord; // Frame coordinates for invocation (placeholder)
|
||||
Job jobP = prereq.createJobFor(coord); // create an instance of the prerequisites for this coordinates
|
||||
Job jobM = ticket.createJobFor(coord); // ...and an instance of the master job for the same coordinates
|
||||
CHECK (MockJobTicket::isAssociated (jobP, prereq));
|
||||
CHECK (MockJobTicket::isAssociated (jobM, ticket));
|
||||
CHECK (not MockJobTicket::isAssociated (jobP, ticket));
|
||||
CHECK (not MockJobTicket::isAssociated (jobM, prereq));
|
||||
|
||||
MockSegmentation mockSeg;
|
||||
UNIMPLEMENTED ("how to mock and fake");
|
||||
/////////////////////////////////////////////////////////////////////////////TODO: extract from DispatcherInterface_test
|
||||
/////////////////////////////////////////////////////////////////////////////TODO: design a job-ticket-mock
|
||||
/////////////////////////////////////////////////////////////////////////////TODO: create a scheme for mock-jobs
|
||||
jobP.triggerJob();
|
||||
jobM.triggerJob();
|
||||
CHECK (123 == DummyJob::invocationAdditionalKey (jobM)); // verify each job was invoked and linked to the correct spec,
|
||||
CHECK (555 == DummyJob::invocationAdditionalKey (jobP)); // indicating that in practice it will activate the proper render node
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////TODO: extract Dispatcher-Mock from DispatcherInterface_test
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** @test use the Dispatcher interface (mocked) to generate a frame »beat«
|
||||
* @remark this is the foundation to generate top-level frame render jobs
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
DISPATCHER-MOCK.hpp - test scaffolding to verify render job planning and dispatch
|
||||
MOCK-DISPATCHER.hpp - test scaffolding to verify render job planning and dispatch
|
||||
|
||||
Copyright (C) Lumiera.org
|
||||
2023, Hermann Vosseler <Ichthyostega@web.de>
|
||||
|
|
@ -20,71 +20,59 @@
|
|||
|
||||
*/
|
||||
|
||||
/** @file testframe.hpp
|
||||
** Unit test helper to generate fake test data frames
|
||||
/** @file mock-dispatcher.hpp
|
||||
** Mock data structures to support implementation testing of render job
|
||||
** planning and frame dispatch. Together with dummy-job.hpp, this provides
|
||||
** a specifically rigged test setup, allowing to investigate and verify
|
||||
** designated functionality in isolation, without backing by the actual
|
||||
** render engine implementation.
|
||||
** - the MockDispatcherTable emulates the frame dispatch from the Fixture
|
||||
** - MockSegmentation is a mocked variant of the »Segmentation« datastructure,
|
||||
** which forms the backbone of the Fixture and is the top-level attachment
|
||||
** point for the »low-level-Model« (the render nodes network)
|
||||
** - MockJobTicket is a builder / adapter on top of the actual steam::engine::JobTicket,
|
||||
** allowing to generate a complete rigged MockSegmentation setup from a generic
|
||||
** test specification written as nested lib::diff::GenNode elements. From this
|
||||
** setup, »mock jobs« can be generated, which use the DummyJob functor and
|
||||
** just record any invocation without performing actual work.
|
||||
** @remark in spring 2023, this setup was created as a means to define and
|
||||
** then build the actual implementation of frame dispatch and scheduling.
|
||||
** @see MockSupport_test
|
||||
*/
|
||||
|
||||
|
||||
#ifndef STEAM_ENGINE_TEST_DISPATCHER_MOCK_H
|
||||
#define STEAM_ENGINE_TEST_DISPATCHER_MOCK_H
|
||||
#ifndef STEAM_ENGINE_TEST_MOCK_DISPATCHER_H
|
||||
#define STEAM_ENGINE_TEST_MOCK_DISPATCHER_H
|
||||
|
||||
|
||||
////#include "steam/engine/procnode.hpp"
|
||||
//#include "steam/play/dummy-play-connection.hpp"
|
||||
#include "lib/test/test-helper.hpp"
|
||||
#include "steam/fixture/segmentation.hpp"
|
||||
#include "steam/mobject/model-port.hpp"
|
||||
#include "steam/engine/dispatcher.hpp"
|
||||
#include "steam/engine/job-ticket.hpp"
|
||||
//#include "steam/play/timings.hpp"
|
||||
#include "lib/time/timevalue.hpp"
|
||||
////#include "lib/time/timequant.hpp"
|
||||
////#include "lib/format-cout.hpp"
|
||||
#include "lib/diff/gen-node.hpp"
|
||||
#include "lib/depend.hpp"
|
||||
#include "lib/linked-elements.hpp"
|
||||
#include "lib/itertools.hpp"
|
||||
//#include "lib/iter-tree-explorer.hpp"
|
||||
//#include "lib/util-coll.hpp"
|
||||
#include "vault/real-clock.hpp"
|
||||
#include "lib/test/test-helper.hpp"
|
||||
#include "vault/engine/job.h"
|
||||
#include "vault/engine/dummy-job.hpp"
|
||||
#include "lib/util.hpp"
|
||||
#include "vault/real-clock.hpp"
|
||||
#include "lib/time/timevalue.hpp"
|
||||
#include "lib/diff/gen-node.hpp"
|
||||
#include "lib/linked-elements.hpp"
|
||||
#include "lib/itertools.hpp"
|
||||
#include "lib/depend.hpp"
|
||||
|
||||
//#include <functional>
|
||||
//#include <vector>
|
||||
#include <tuple>
|
||||
#include <list>
|
||||
//#include <deque>
|
||||
|
||||
//using test::Test;
|
||||
//using util::isnil;
|
||||
//using util::last;
|
||||
//using std::vector;
|
||||
//using std::function;
|
||||
//using std::rand;
|
||||
|
||||
//#include <cstdlib>
|
||||
//#include <stdint.h>
|
||||
|
||||
|
||||
namespace steam {
|
||||
namespace engine {
|
||||
namespace test {
|
||||
|
||||
using std::make_tuple;
|
||||
using lib::diff::GenNode;
|
||||
using lib::diff::MakeRec;
|
||||
// using lib::time::FrameRate;
|
||||
// using lib::time::Duration;
|
||||
// using lib::time::Offset;
|
||||
// using lib::time::TimeVar;
|
||||
using lib::time::TimeValue;
|
||||
using lib::time::Time;
|
||||
// using mobject::ModelPort;
|
||||
// using play::Timings;
|
||||
using lib::HashVal;
|
||||
using std::make_tuple;
|
||||
// using std::deque;
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1294 : organisation of namespaces / includes??
|
||||
using fixture::Segmentation;
|
||||
|
||||
|
|
@ -138,10 +126,13 @@ namespace test {
|
|||
|
||||
/// @deprecated this setup is confusing and dangerous (instance identity is ambiguous)
|
||||
lib::Depend<MockDispatcherTable> mockDispatcher;
|
||||
#if false /////////////////////////////////////////////////////////////////////////////////////////////////////////////UNIMPLEMENTED :: TICKET #1221
|
||||
#endif /////////////////////////////////////////////////////////////////////////////////////////////////////////////UNIMPLEMENTED :: TICKET #1221
|
||||
|
||||
|
||||
|
||||
|
||||
/* ===== specify a mock JobTicket setup for tests ===== */
|
||||
|
||||
template<class IT>
|
||||
inline auto
|
||||
|
|
@ -162,20 +153,24 @@ namespace test {
|
|||
|
||||
}//(End)internal test helpers....
|
||||
|
||||
#if false /////////////////////////////////////////////////////////////////////////////////////////////////////////////UNIMPLEMENTED :: TICKET #1221
|
||||
#endif /////////////////////////////////////////////////////////////////////////////////////////////////////////////UNIMPLEMENTED :: TICKET #1221
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Mock for...
|
||||
*
|
||||
* Mock setup for a JobTicket to generate DummyJob invocations.
|
||||
* Implemented as subclass, it provides a specification DSL for tests,
|
||||
* and is able to probe some otherwise opaque internals of JobTicket.
|
||||
* Beyond that, MockJobTicket has the same storage size; and behaves
|
||||
* like the regular JobTicket after construction -- but any Job
|
||||
* created by JobTicket::createJobFor(FrameCoord) will be wired
|
||||
* with the DummyJob functor and can thus be related back to
|
||||
* the test specification setup.
|
||||
* @see JobPlanningSetup_test
|
||||
* @see DispatcherInterface_test
|
||||
*
|
||||
*/
|
||||
class MockJobTicket
|
||||
: public JobTicket
|
||||
{
|
||||
|
||||
public:
|
||||
MockJobTicket()
|
||||
: JobTicket{defineSimpleSpec()}
|
||||
|
|
@ -190,12 +185,34 @@ namespace test {
|
|||
: JobTicket{defineSpec (seed, std::forward<IT> (prereq))}
|
||||
{ }
|
||||
|
||||
/* ===== Diagnostics ===== */
|
||||
|
||||
bool verify_associated (Job const&) const;
|
||||
static bool isAssociated (Job const&, JobTicket const&);
|
||||
private:
|
||||
};
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Mock setup for a complete Segmentation to emulate the structure
|
||||
* of the actual fixture, without the need of building a low-level Model.
|
||||
* MockSegmentation instances can be instantiated directly within the
|
||||
* test, by passing a test specification in »GenNode« notation to the
|
||||
* constructor. This specification defines the segments to create
|
||||
* and allows to associate a marker number, which can later be
|
||||
* verified from the actual DummyJob invocation.
|
||||
* - the ctor accepts a sequence of GenNode elements,
|
||||
* each corresponding to a segment to created
|
||||
* - optionally, attributes "start" and "after" can be defined
|
||||
* to provide the lib::time::Time values of segment start/end
|
||||
* - in addition, optionally a "mark" attribute can be defined;
|
||||
* the given integer number will be "hidden" in the job instance
|
||||
* hash, and can be [verified](\ref DummyJob::invocationAdditionalKey)
|
||||
* - the _scope_ of each top-level GenNode may hold a sequence of
|
||||
* nested nodes corresponding to _prerequisite_ JobTicket instances
|
||||
* - these can in turn hold further nested prerequisites, and so on
|
||||
* @see MockSetup_test::verify_MockSegmentation
|
||||
*/
|
||||
class MockSegmentation
|
||||
: public Segmentation
|
||||
{
|
||||
|
|
@ -222,7 +239,9 @@ namespace test {
|
|||
}
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
private: /* ======== Implementation: build mock JobTickes from test specification ==== */
|
||||
|
||||
HashVal
|
||||
buildSeed (GenNode const& spec)
|
||||
{
|
||||
|
|
@ -236,7 +255,7 @@ namespace test {
|
|||
return lib::transformIterator (spec.getChildren()
|
||||
,[this](GenNode const& childSpec) -> JobTicket&
|
||||
{
|
||||
return buildTicketFromSpec (childSpec);
|
||||
return buildTicketFromSpec (childSpec);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
@ -250,9 +269,10 @@ namespace test {
|
|||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* verify the given job instance was actually generated from this JobTicket.
|
||||
* @remark this test support function actually relies on some specific rigging,
|
||||
* @remark this test support function relies on some specific rigging,
|
||||
* which typically is prepared by setup of a MockJobTicket.
|
||||
*/
|
||||
inline bool
|
||||
|
|
@ -273,12 +293,11 @@ namespace test {
|
|||
*/
|
||||
inline bool
|
||||
MockJobTicket::isAssociated (Job const& job, JobTicket const& ticket)
|
||||
{ // should work always, since storage is the same
|
||||
{ // should work always, since storage is the same
|
||||
MockJobTicket const& backdoor = static_cast<MockJobTicket const&> (ticket);
|
||||
return backdoor.verify_associated (job);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}}} // namespace steam::engine::test
|
||||
#endif /*STEAM_ENGINE_TEST_DISPATCHER_MOCK_H*/
|
||||
#endif /*STEAM_ENGINE_TEST_MOCK_DISPATCHER_H*/
|
||||
|
|
|
|||
|
|
@ -146,8 +146,14 @@ namespace test {
|
|||
}
|
||||
|
||||
|
||||
|
||||
/** @test document and verify usage of a complete mocked Segmentation
|
||||
* to back frame dispatch
|
||||
* - default constructed: empty Segmentation
|
||||
* - cover the whole axis with one segment
|
||||
* - partition axis and verify the association of generated jobs
|
||||
* - a fully defined segment within an otherwise empty axis
|
||||
* - complex partitioning (using the »split-splice« mechanism
|
||||
*/
|
||||
void
|
||||
verify_MockSegmentation()
|
||||
|
|
@ -155,6 +161,7 @@ namespace test {
|
|||
FrameCoord coord;
|
||||
Time someTime = lib::test::randTime();
|
||||
coord.absoluteNominalTime = someTime;
|
||||
//
|
||||
//-----------------------------------------------------------------/// Empty default Segmentation
|
||||
{
|
||||
MockSegmentation mockSeg;
|
||||
|
|
@ -185,6 +192,7 @@ namespace test {
|
|||
{
|
||||
// Marker to verify the job calls back into the right segment
|
||||
int marker = rand() % 1000;
|
||||
//
|
||||
// Build a Segmentation partitioned at 10s
|
||||
MockSegmentation mockSegs{MakeRec()
|
||||
.attrib ("start", Time{0,10}
|
||||
|
|
|
|||
|
|
@ -21,7 +21,20 @@
|
|||
* *****************************************************/
|
||||
|
||||
/** @file dummy-job.cpp
|
||||
** Implementation of a dummy render job for unit tests
|
||||
** Implementation of a dummy render job for unit tests.
|
||||
** Based on using a specifically rigged DummyClosure as JobFunctor,
|
||||
** where the actual Job invocation does nothing other than storing
|
||||
** the invocation mark and parameters into a invocationLog_ table.
|
||||
** Together with the likewise specifically rigged steam::engine::test::MockJobTicket,
|
||||
** the invocation hash can be marked, which allows to prove after the invocation
|
||||
** that a given Segment or JobTicket actually generated a specific Job, which was
|
||||
** then invoked with specific parameters.
|
||||
**
|
||||
** # Usage front-end
|
||||
**
|
||||
** The static functions in vault::engine::DummyJob allow to
|
||||
** - build such a mock job, possibly with random (or well defined) parameters
|
||||
** - when passing back this job instance, verify invocation and extract data
|
||||
*/
|
||||
|
||||
|
||||
|
|
@ -58,9 +71,9 @@ namespace engine {
|
|||
/**
|
||||
* test dummy jobs are backed by this closure.
|
||||
* DummyJob invocations are recorded in a hashtable
|
||||
* @note as of 9/2013, we use a very simplistic implementation,
|
||||
* @note as of 5/2023, we use a simplistic map-based implementation,
|
||||
* causing a consecutive invocation of the same job instance
|
||||
* to overwrite the previous log entry.
|
||||
* with identical JobParameter to overwrite the previous log entry.
|
||||
*/
|
||||
class DummyClosure
|
||||
: public JobClosure
|
||||
|
|
@ -96,7 +109,7 @@ namespace engine {
|
|||
/**
|
||||
* Generate a specifically marked invocationKey for use in unit-tests.
|
||||
* @remark in the actual implementation, this function generates a distinct
|
||||
* base hash do tag specific processing provided by this JobFunctor;
|
||||
* base hash to tag specific processing provided by this JobFunctor;
|
||||
* the seed usually factors in the media stream format; on invocation
|
||||
* the nominal frame time will additionally be hashed in. Yet for
|
||||
* unit testing, we typically use this dummy JobFunctor and it is
|
||||
|
|
@ -164,7 +177,7 @@ namespace engine {
|
|||
|
||||
|
||||
|
||||
/** actual instance of the test dummy job operation */
|
||||
/** actual instance of the test dummy job functor */
|
||||
DummyClosure dummyClosure;
|
||||
|
||||
}// (End)Implementation details
|
||||
|
|
@ -242,7 +255,6 @@ namespace engine {
|
|||
{
|
||||
return dummyClosure;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}} // namespace vault::engine
|
||||
|
|
|
|||
|
|
@ -21,7 +21,19 @@
|
|||
*/
|
||||
|
||||
/** @file dummy-job.hpp
|
||||
** Unit test helper to generate dummy render jobs
|
||||
** Unit test helper to generate dummy render jobs.
|
||||
** Render Jobs generated from this setup will not actually perform
|
||||
** any action, other than recording this invocation and the used
|
||||
** parameters into a map table managed behind the scenes. Using
|
||||
** the provided query function, it is possible to probe for such
|
||||
** an invocation and to extract the recorded parameter data.
|
||||
**
|
||||
** This setup is used both for stand-alone tests, which just require
|
||||
** "some job", but also as part of a complete hierarchy of mocked
|
||||
** data structures related to frame job dispatch and invocation
|
||||
** @see mock-dispatcher.hpp
|
||||
** @see MockSupport_test
|
||||
**
|
||||
*/
|
||||
|
||||
|
||||
|
|
@ -58,6 +70,5 @@ namespace engine {
|
|||
static JobClosure& getFunctor();
|
||||
};
|
||||
|
||||
|
||||
}} // namespace vault::engine
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -2530,10 +2530,10 @@ Additionally, they may be used for resource management purposes by embedding a r
|
|||
#* one OpenGL Dataframe could contain raw texture data (but I am lacking expertise for this topic)
|
||||
</pre>
|
||||
</div>
|
||||
<div title="FrameDispatcher" modifier="Ichthyostega" created="201105222330" modified="202305111243" tags="def Rendering" changecount="20">
|
||||
<div title="FrameDispatcher" modifier="Ichthyostega" created="201105222330" modified="202305231941" tags="def Rendering" changecount="21">
|
||||
<pre>An entity within the RenderEngine, responsible for translating a logical [[calculation stream|CalcStream]] (corresponding to a PlayProcess) into a sequence of individual RenderJob entries, which can then be handed over to the [[Scheduler]]. Performing this operation involves a special application of [[time quantisation|TimeQuant]]: after establishing a suitable starting point, a typically contiguous series of frame numbers need to be generated, together with the time coordinates for each of those frames.
|
||||
|
||||
The dispatcher works together with the job ticket(s) and the scheduler; actually these are the //core abstractions//&nbsp; the process of ''job planning'' relies on. While the actual scheduler implementation lives within the Vault, the job tickets and the dispatcher are located within the [[Segmentation]], which is the backbone of the [[low-level model|LowLevelModel]]. More specifically, the dispatcher interface is //implemented//&nbsp; by a set of &rarr; [[dispatcher tables|DispatcherTables]] within the segmentation.
|
||||
The dispatcher works together with the [[job ticket(s)|JobTicket]] and the scheduler; actually these are the //core abstractions//&nbsp; the process of ''job planning'' relies on. While the actual scheduler implementation lives within the Vault, the job tickets and the dispatcher are located within the [[Segmentation]], which is the backbone of the [[low-level model|LowLevelModel]]. More specifically, the dispatcher interface is //implemented//&nbsp; by a set of &rarr; [[dispatcher tables|DispatcherTables]] within the segmentation.
|
||||
|
||||
{{red{stalled since 2014}}} -- development on this (important) topic has been postponed. Moreover, some rough edges remain within the Design &rarr; see [[some notes...|AboutMonads]]
|
||||
|
||||
|
|
@ -6185,7 +6185,7 @@ This is the core service provided by the player subsystem. The purpose is to cre
|
|||
:any details of this processing remain opaque for the clients; even the player subsystem just accesses the EngineFaçade
|
||||
</pre>
|
||||
</div>
|
||||
<div title="PlaybackVerticalSlice" creator="Ichthyostega" modifier="Ichthyostega" created="202303272236" modified="202305100203" tags="overview impl discuss draft" changecount="21">
|
||||
<div title="PlaybackVerticalSlice" creator="Ichthyostega" modifier="Ichthyostega" created="202303272236" modified="202305232230" tags="overview impl discuss draft" changecount="26">
|
||||
<pre>//Integration effort to promote the development of rendering, playback and video display in the GUI//
|
||||
This IntegrationSlice was started in {{red{2023}}} as [[Ticket #1221|https://issues.lumiera.org/ticket/1221]] to coordinate the completion and integration of various implementation facilities, planned, drafted and built during the last years; this effort marks the return of development focus to the lower layers (after years of focussed UI development) and will implement the asynchronous and time-bound rendering coordinated by the [[Scheduler]] in the [[Vault|Vault-Layer]]
|
||||
|
||||
|
|
@ -6200,6 +6200,14 @@ __12.Apr.23__: At start, this is a dauntingly complex effort, demanding to recon
|
|||
|
||||
So the difficulties to understand my own (finished, working) code after several years compelled me to attempt a [[#1276|https://issues.lumiera.org/ticket/1276#comment:1]] refactoring of the FrameDispatcher, which I use as entrance point into the implementation of this //vertical slice//. This time I will approach the task as //on-demand processing pipeline// with //recursive expansion// -- attempting to segregate better what the monadic approach tended to interweave.
|
||||
|
||||
__May.23__: taking a //prototyping approach// now, since further development was hampered by incomplete requirements analysis interlocked with incomplete implementation drafts. Based on a rough preconception (drafted &rarr; [[here|FrameDispatcher]] and in my //Mindmap//), a hierarchy of mocked data structures will be built up, which can then support erecting the remoulded internals of the dispatcher. After these are back to working state, the focus will move downwards, thereby step by step replacing the mocked structures by real structures -- only then will it be possibly to assess the new design. So presumably the next steps will be
|
||||
* ✔ augment the {{{DummyJob}}} to allow tracing Job invocations in tests
|
||||
* ✔ build a {{{MockJobTicket}}} on top, implemented as subclass of the actual JobTicket
|
||||
* ✔ build a {{{MockSegmentation}}} to hold onto ~JobTickets, which can be created as Mock
|
||||
* ✔define a simple specification language (based on the existing {{{GenNode}}}-DSL to define segments, tickets and prerequisite jobs
|
||||
* ✔ implement a »~Split-Splice« algorithm for &rarr; SegmentationChange, rigged accordingly to generate a mocked Segementation for now
|
||||
* 🗘 create a testbed to assemble a DispatcherPipeline step by step (&rarr; [[#920|https://issues.lumiera.org/ticket/920]] and [[#1275|https://issues.lumiera.org/ticket/1275|]])
|
||||
|
||||
!Decisions
|
||||
;Scheduler
|
||||
:is understood as a high-level Service, not a bare bone implementation mechanism
|
||||
|
|
@ -7141,7 +7149,7 @@ The Fixture is mostly comprised of the Segementation datastructure, but some oth
|
|||
Largely the storage of the render nodes network is hooked up behind the Fixture &rarr; [[storage considerations|FixtureStorage]]
|
||||
</pre>
|
||||
</div>
|
||||
<div title="SegmentationChange" creator="Ichthyostega" modifier="Ichthyostega" created="202305020227" modified="202305022134" tags="spec operational Builder draft" changecount="29">
|
||||
<div title="SegmentationChange" creator="Ichthyostega" modifier="Ichthyostega" created="202305020227" modified="202305232241" tags="spec operational Builder draft" changecount="30">
|
||||
<pre>At the end of the build process, the existing [[Segmentation]] possibly needs to be changed, extended or adapted.
|
||||
This change must be performed as a //transactional switch,// since render or playback processes might be performed concurrently. All Fixture and low-level-Model datastructures are //immutable// -- thus for any changes, suitably adapted structures will be built as a replacement.
|
||||
|
||||
|
|
@ -7149,7 +7157,6 @@ This change must be performed as a //transactional switch,// since render or pla
|
|||
This is an implementation level operation, which analyses the existing Segmentation and determines the changes necessary to introduce a new or altered Segment. This operation has to retain the Segmentation ''Invariant'': it is a seamless sequence of Time intervals covering the complete time axis.
|
||||
|
||||
!!!Structure of the split-splice operation
|
||||
{{red{1.5.2023 : Analysis and implementation draft}}}
|
||||
;Invariant
|
||||
:complete and valid [[Segmentation]] always retained
|
||||
:* seamless coverage the complete time axis [-∞ .. +∞]
|
||||
|
|
@ -7219,6 +7226,9 @@ This is an implementation level operation, which analyses the existing Segmentat
|
|||
|
||||
!!!Implementation techique
|
||||
The split-splice operation is performed always for a single segment in the context of an existing segmentation; the covered range can be defined explicitly, or by partial spec. For each application of this algorithm, an instance of a //working context// is created (on stack) and initialised by scanning the existing segmentation to establish the insert point. The four stages are then performed on this working data, thereby determining the handling cases -- and in the last stage, new elements are inserted and existing elements are deleted (assuming immutable segment data, any changes and adaptations are done by inserting a modified clone copy).
|
||||
|
||||
!!!Generalisation
|
||||
The first implementation drafts furthered the observation that this decision scheme is actually not dependent on the specifics of the segmentation data structure; it can be generalised rather easily to to work on //any ordered discrete axis// and to handle generic intervals covering this axis in part or complete. The implementation can thus be turned into a ''template'', which is then instantiated with a ''binding'' to a concrete data structure, providing a few generic operation as λ-Functions. This allows to use a dedicated test binding for intervals over natural numbers -- used for exhaustive test coverage by systematically probing all logically possible invocation situations. This helped to spot some obscured bugs and fill-in some details of the implementation, notably the behaviour on incomplete specification of the new interval to splice in.
|
||||
</pre>
|
||||
</div>
|
||||
<div title="Sequence" modifier="Ichthyostega" created="201001252327" modified="201505310118" tags="def" changecount="2">
|
||||
|
|
|
|||
|
|
@ -54456,6 +54456,26 @@
|
|||
<icon BUILTIN="forward"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1684889964280" ID="ID_1406539973" MODIFIED="1684889985653" TEXT="⟹ stets meta::ValueTypeBinding verwenden">
|
||||
<node CREATED="1684890006274" ID="ID_1275439010" MODIFIED="1684890016858" TEXT="ordnet const dem Basistyp zu">
|
||||
<node CREATED="1684890224549" ID="ID_1208887811" MODIFIED="1684890249555" TEXT="d.h. anders als die STL wirkt const auf den value_type"/>
|
||||
<node CREATED="1684890250257" ID="ID_850627216" MODIFIED="1684890299139" TEXT="Vorsicht: RangeIter hat spezielle Magic, um STL-Iteratoren entsprechend korrekt zu handhaben"/>
|
||||
</node>
|
||||
<node CREATED="1684889997147" ID="ID_278450079" MODIFIED="1684890031955" TEXT="nivelliert Referenzen im gegebenen Typ"/>
|
||||
<node CREATED="1684890039014" ID="ID_1653509655" MODIFIED="1684890203370" TEXT="verhält sich sinngemäß anders für Pointer">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
Ein Pointer wird in diesem Kontext wie ein einfacher primitiver value behandelt, d.h. <font face="Monospaced">value_type</font> ≡ der Pointer selber, <font face="Monospaced">reference</font>  ≡ eine Referenz auf den Pointer, <font face="Monospaced">pointer </font>≡ ein Pointer auf den Pointer. Und: aus einem Pointer werden niemals <i>nested type bindings</i> abgegriffen.
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1684890048701" ID="ID_1515151471" MODIFIED="1684890070142" TEXT="greift nested type bindings aus dem gegebenen value_type ab"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1684279342553" ID="ID_289621340" MODIFIED="1684279366302" TEXT="diverse Ausprägungen">
|
||||
|
|
@ -54550,7 +54570,7 @@
|
|||
</body>
|
||||
</html></richcontent>
|
||||
<arrowlink COLOR="#80c6b3" DESTINATION="ID_1499495468" ENDARROW="Default" ENDINCLINATION="-1812;12745;" ID="Arrow_ID_673178727" STARTARROW="None" STARTINCLINATION="4133;-10665;"/>
|
||||
<linktarget COLOR="#6c79a2" DESTINATION="ID_1502143527" ENDARROW="Default" ENDINCLINATION="-522;742;" ID="Arrow_ID_616092581" SOURCE="ID_513357674" STARTARROW="None" STARTINCLINATION="238;0;"/>
|
||||
<linktarget COLOR="#6c79a2" DESTINATION="ID_1502143527" ENDARROW="Default" ENDINCLINATION="-606;743;" ID="Arrow_ID_616092581" SOURCE="ID_513357674" STARTARROW="None" STARTINCLINATION="229;19;"/>
|
||||
<icon BUILTIN="flag-blue"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1510446221317" HGAP="37" ID="ID_1955430588" MODIFIED="1535892751360" VSHIFT="-14">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
|
|
@ -68630,7 +68650,7 @@
|
|||
<node CREATED="1512925246057" ID="ID_181262071" MODIFIED="1561827466200" TEXT="JobPlanning">
|
||||
<linktarget COLOR="#5379b5" DESTINATION="ID_181262071" ENDARROW="Default" ENDINCLINATION="-150;-386;" ID="Arrow_ID_1786254694" SOURCE="ID_1543264108" STARTARROW="Default" STARTINCLINATION="-1298;0;"/>
|
||||
<node CREATED="1535892806131" ID="ID_513357674" MODIFIED="1535892890103" TEXT="könnte eine Monade sein.....?">
|
||||
<arrowlink COLOR="#6c79a2" DESTINATION="ID_1502143527" ENDARROW="Default" ENDINCLINATION="-522;742;" ID="Arrow_ID_616092581" STARTARROW="None" STARTINCLINATION="238;0;"/>
|
||||
<arrowlink COLOR="#6c79a2" DESTINATION="ID_1502143527" ENDARROW="Default" ENDINCLINATION="-606;743;" ID="Arrow_ID_616092581" STARTARROW="None" STARTINCLINATION="229;19;"/>
|
||||
<icon BUILTIN="help"/>
|
||||
</node>
|
||||
<node CREATED="1535891554587" ID="ID_185594200" MODIFIED="1535891663091" TEXT="entwerfe einen IterExplorer">
|
||||
|
|
@ -69412,18 +69432,33 @@
|
|||
<icon BUILTIN="help"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681168890963" ID="ID_734971500" MODIFIED="1681168935363" TEXT="varargs durch variadic-templates ersetzen">
|
||||
<node COLOR="#338800" CREATED="1681168890963" ID="ID_734971500" MODIFIED="1682009597938" TEXT="varargs durch variadic-templates ersetzen">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
verwendet noch den pre-C++11-Stil mit explizit ausgewalzten Template-Spezialisierungen für 1...5 Argumente
|
||||
<i>verwendete noch den pre-C++11-Stil mit explizit ausgewalzten Template-Spezialisierungen für 1...5 Argumente</i>
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
<p>
|
||||
geändert mit
|
||||
</p>
|
||||
<br/>
|
||||
<font face="Monospaced">
|
||||
<p>
|
||||
commit 856d8a3b519e4fc99e7b6749fbed67df33128741<br/>
|
||||
Author: Ichthyostega <prg@ichthyostega.de><br/>
|
||||
Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
||||
<br/>
|
||||
    Library: allow to reverse intrusive single linked list </font>
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681168945643" ID="ID_927049684" MODIFIED="1681168962346" TEXT="Verhältnis zum AllocationCluster klären">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
|
|
@ -69434,6 +69469,7 @@
|
|||
</node>
|
||||
<node CREATED="1681169265752" ID="ID_388188594" MODIFIED="1681169268100" TEXT="JobTicket">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681169270184" ID="ID_778864690" MODIFIED="1681169283728" TEXT="die schon gecodete Logik sieht sehr nach Skizze aus">
|
||||
<linktarget COLOR="#cc608f" DESTINATION="ID_778864690" ENDARROW="Default" ENDINCLINATION="-105;0;" ID="Arrow_ID_1647546023" SOURCE="ID_380471864" STARTARROW="None" STARTINCLINATION="-62;-87;"/>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1681169286078" ID="ID_514995150" MODIFIED="1681169634256" TEXT="Datenstrukturen konsistent?">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
|
|
@ -69458,6 +69494,13 @@
|
|||
<icon BUILTIN="help"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1684869532824" ID="ID_1031809806" MODIFIED="1684869549968" TEXT="Datenstrukturen „begradigen“">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1684869450278" ID="ID_804638831" MODIFIED="1684889723346" TEXT="Channel-Parameter zurückbauen">
|
||||
<arrowlink COLOR="#daffc5" DESTINATION="ID_122410804" ENDARROW="Default" ENDINCLINATION="-352;-925;" ID="Arrow_ID_194808318" STARTARROW="None" STARTINCLINATION="544;39;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681425106274" ID="ID_897788253" LINK="#ID_274575596" MODIFIED="1681425285122" TEXT="engine::Job und engine::Activity neu konzipieren">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
|
|
@ -69519,8 +69562,13 @@
|
|||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1681007034731" ID="ID_380471864" MODIFIED="1681007071540" TEXT="Implementierung (dispatcher-table) nur gestubbed">
|
||||
<arrowlink COLOR="#cc608f" DESTINATION="ID_778864690" ENDARROW="Default" ENDINCLINATION="-105;0;" ID="Arrow_ID_1647546023" STARTARROW="None" STARTINCLINATION="-62;-87;"/>
|
||||
<icon BUILTIN="bell"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1684869703449" ID="ID_842973451" MODIFIED="1684869779446" TEXT="Frame Dispatch">
|
||||
<icon BUILTIN="stop"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681425423695" ID="ID_1928295133" MODIFIED="1683836443972" TEXT="Reorganisation : RenderDrive verwenden">
|
||||
<linktarget COLOR="#f4fec9" DESTINATION="ID_1928295133" ENDARROW="Default" ENDINCLINATION="-1068;-69;" ID="Arrow_ID_362199078" SOURCE="ID_1888344503" STARTARROW="None" STARTINCLINATION="1381;58;"/>
|
||||
<linktarget COLOR="#fed5d7" DESTINATION="ID_1928295133" ENDARROW="Default" ENDINCLINATION="-463;400;" ID="Arrow_ID_1972838231" SOURCE="ID_580321819" STARTARROW="None" STARTINCLINATION="-412;-64;"/>
|
||||
|
|
@ -69588,6 +69636,7 @@
|
|||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1684869958460" ID="ID_588039580" MODIFIED="1684869978533" TEXT="⟹ Schlußfolgerung: RenderDrive ist der aktive Part"/>
|
||||
</node>
|
||||
<node CREATED="1681599191305" ID="ID_1167449829" MODIFIED="1681599208482" TEXT="benötigte Dependency-Injection ">
|
||||
<node CREATED="1681599223716" ID="ID_86738790" MODIFIED="1681599346318" TEXT="Timings (impliziert Frame-Grid)"/>
|
||||
|
|
@ -69597,7 +69646,7 @@
|
|||
<node CREATED="1681646460442" ID="ID_866977884" MODIFIED="1681646477449" TEXT="multiplicity and usage structure">
|
||||
<node CREATED="1681646502158" ID="ID_1554914113" MODIFIED="1681646512969" TEXT="die Planungs-Pipeline wird strikt sequentiell bespielt"/>
|
||||
<node CREATED="1681646532062" ID="ID_1383559792" MODIFIED="1681646551375" TEXT="es gibt nur einen Drive pro CalcStream"/>
|
||||
<node CREATED="1681646829918" ID="ID_284324155" MODIFIED="1681646835657" TEXT="nur minimlae bewegliche Teile"/>
|
||||
<node CREATED="1681646829918" ID="ID_284324155" MODIFIED="1681646835657" TEXT="nur minimale bewegliche Teile"/>
|
||||
<node CREATED="1681646836533" ID="ID_1000053188" MODIFIED="1681646846261" TEXT="könnte im Heap sitzen">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
|
|
@ -69725,7 +69774,7 @@
|
|||
<node COLOR="#338800" CREATED="1681741883229" ID="ID_15002134" MODIFIED="1681741890812" TEXT="Front-End: getJobTicketFor (FrameCoord)">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681741893771" ID="ID_1417028935" MODIFIED="1681741951224" TEXT="eigentliche Impl fehlt">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681741893771" ID="ID_1417028935" MODIFIED="1684870358568" TEXT="Implementierung per Rückgriff auf die Segmentation">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -69735,18 +69784,21 @@
|
|||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1681742255171" ID="ID_1531898349" MODIFIED="1681744077783" TEXT="Draft im Test-Setup">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681742836996" ID="ID_1978512771" MODIFIED="1681742860339" TEXT="scaffolding and mocking used for this test">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1681742863121" ID="ID_101929835" MODIFIED="1681742878203" TEXT="benötigte Mocks">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1682611217967" ID="ID_792021380" MODIFIED="1682611222829" TEXT="Segmentation">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#435e98" CREATED="1681742836996" FOLDED="true" ID="ID_1978512771" MODIFIED="1684889637419" TEXT="scaffolding and mocking used for this test">
|
||||
<icon BUILTIN="full-1"/>
|
||||
<node CREATED="1681742863121" ID="ID_101929835" MODIFIED="1684878277170" TEXT="benötigte Mocks">
|
||||
<icon BUILTIN="info"/>
|
||||
<node COLOR="#338800" CREATED="1682611217967" ID="ID_792021380" MODIFIED="1684878272344" TEXT="Segmentation">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1684878221645" ID="ID_1469919037" MODIFIED="1684878223961" TEXT="neu bauen"/>
|
||||
<node CREATED="1684878224453" ID="ID_1519678460" LINK="#ID_1176991982" MODIFIED="1684878249666" TEXT="dabei Grundlage schaffen: SplitSplice-Algo"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681742879175" ID="ID_1375353236" MODIFIED="1681742901348" TEXT="Dispatcher">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1681742879175" ID="ID_1375353236" MODIFIED="1684878270195" TEXT="Dispatcher">
|
||||
<icon BUILTIN="hourglass"/>
|
||||
<node CREATED="1681743458393" ID="ID_891681445" MODIFIED="1681743469323" TEXT="extrahieren aus DispatcherInterface_test"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681742890385" ID="ID_1681918468" MODIFIED="1681742901349" TEXT="JobTicket">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1681742890385" ID="ID_1681918468" MODIFIED="1684878273498" TEXT="JobTicket">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1681775901704" ID="ID_1011961716" MODIFIED="1681775914876" TEXT="muß Prerequisite-Struktur von weiteren JobTIckets bieten"/>
|
||||
<node CREATED="1681775915726" ID="ID_723266604" MODIFIED="1681775925599" TEXT="diese müssen irgendwo in Storage gehalten werden"/>
|
||||
<node CREATED="1681775956207" ID="ID_403116999" MODIFIED="1681775974479" TEXT="idealerweise kann der Test diese Stuktur in Grenzen selber vorgeben">
|
||||
|
|
@ -69772,8 +69824,8 @@
|
|||
<node CREATED="1681776335491" ID="ID_1866146614" MODIFIED="1681776353238" TEXT="jedes Element: ein JobTicket"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681742895901" ID="ID_594113874" MODIFIED="1681742901350" TEXT="Test-Job">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1681742895901" ID="ID_594113874" MODIFIED="1684878274989" TEXT="Test-Job">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1681777299523" ID="ID_252686764" MODIFIED="1681777342528" TEXT="alle Test-Jobs verwenden einen einzigen Funktor"/>
|
||||
<node CREATED="1681777343685" ID="ID_572811753" MODIFIED="1681777357938" TEXT="dieser beherbergt ein TestLog"/>
|
||||
<node CREATED="1681777358683" ID="ID_768023482" MODIFIED="1681777393914" TEXT="er kann aber mit einem Adapter speziell markiert werden"/>
|
||||
|
|
@ -69800,9 +69852,10 @@
|
|||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1681832844221" ID="ID_826966768" MODIFIED="1681832848268" TEXT="Aufbau">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node CREATED="1681832851795" ID="ID_1453467501" MODIFIED="1681832896408" TEXT="vom MockJobTicket aus beginnen...">
|
||||
<node COLOR="#338800" CREATED="1681832844221" ID="ID_826966768" MODIFIED="1684878140956" TEXT="Aufbau">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#435e98" CREATED="1681832851795" ID="ID_1453467501" MODIFIED="1684877396857" TEXT="vom MockJobTicket aus beginnen...">
|
||||
<icon BUILTIN="yes"/>
|
||||
<node COLOR="#338800" CREATED="1681832899812" ID="ID_1664606019" MODIFIED="1684816357301" TEXT="GenNode-basierter Implementierungs-Kern">
|
||||
<linktarget COLOR="#fef7d1" DESTINATION="ID_1664606019" ENDARROW="Default" ENDINCLINATION="139;-4;" ID="Arrow_ID_1184218305" SOURCE="ID_581175494" STARTARROW="None" STARTINCLINATION="13;150;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
|
|
@ -69816,8 +69869,8 @@
|
|||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1682419270798" ID="ID_1327152864" MODIFIED="1682419278493" TEXT="#1294 prototype / mock fixture components">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1682419270798" ID="ID_1327152864" MODIFIED="1684889569515" TEXT="#1294 prototype / mock fixture components">
|
||||
<icon BUILTIN="info"/>
|
||||
<node COLOR="#435e98" CREATED="1682419302874" ID="ID_1541946258" MODIFIED="1684816351989" TEXT="Den Knoten auflösen ⟹ Prototyping">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
|
@ -69950,7 +70003,7 @@
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1681833071385" ID="ID_1107925235" MODIFIED="1684816361001" TEXT="MockJob hinterlegen">
|
||||
<node COLOR="#338800" CREATED="1681833071385" FOLDED="true" ID="ID_1107925235" MODIFIED="1684816361001" TEXT="MockJob hinterlegen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1682036849793" ID="ID_1932533229" MODIFIED="1682047342244" TEXT="MockJob aufrufen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
|
|
@ -69993,6 +70046,7 @@
|
|||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1682204997554" ID="ID_599701197" MODIFIED="1684815618152" TEXT="Prerequisites hinzufügen">
|
||||
<linktarget COLOR="#92f974" DESTINATION="ID_599701197" ENDARROW="Default" ENDINCLINATION="-476;357;" ID="Arrow_ID_766289667" SOURCE="ID_728138659" STARTARROW="None" STARTINCLINATION="391;17;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1683836490113" ID="ID_1045524420" MODIFIED="1684815616170" TEXT="per rekursiver GenNode-Auswertung">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
|
|
@ -71534,6 +71588,7 @@
|
|||
<node COLOR="#338800" CREATED="1684800083638" ID="ID_214202588" MODIFIED="1684816199551" TEXT="mehrfach verschachtelte Prerequisites">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#435e98" CREATED="1684800102308" FOLDED="true" ID="ID_1545603358" MODIFIED="1684816327520" TEXT="SEGFAULT bzw. ungüliges Ticket">
|
||||
<linktarget COLOR="#803360" DESTINATION="ID_1545603358" ENDARROW="Default" ENDINCLINATION="-178;-8;" ID="Arrow_ID_450625950" SOURCE="ID_353579055" STARTARROW="None" STARTINCLINATION="390;-16;"/>
|
||||
<icon BUILTIN="broken-line"/>
|
||||
<node CREATED="1684800122544" ID="ID_1359955499" MODIFIED="1684800143035" TEXT="wie kann das passieren...?">
|
||||
<font ITALIC="true" NAME="SansSerif" SIZE="9"/>
|
||||
|
|
@ -71765,8 +71820,7 @@
|
|||
list::emplace_back  <b><font color="#0d8c6a">funktioniert</font></b>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -71931,7 +71985,7 @@
|
|||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1682205189643" FOLDED="true" ID="ID_897564380" MODIFIED="1683722703272" TEXT="Problem: Umbau in JobTicket selber blockt">
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1682205189643" FOLDED="true" ID="ID_897564380" MODIFIED="1684876950217" TEXT="Problem: Umbau in JobTicket selber blockt">
|
||||
<icon BUILTIN="stop-sign"/>
|
||||
<node CREATED="1682205214637" ID="ID_451342844" MODIFIED="1682205353004" TEXT="kann nicht klar sehen, wie ich einen Marker im MockJob hinterlegen kann">
|
||||
<icon BUILTIN="smiley-angry"/>
|
||||
|
|
@ -71943,16 +71997,37 @@
|
|||
<node CREATED="1682205306451" ID="ID_936014701" MODIFIED="1682715333366" TEXT="die eigentliche Ergebnis/Job-Erzeugung ist dabei halb mit eingewoben"/>
|
||||
<node CREATED="1682205329192" ID="ID_1591053369" MODIFIED="1682205341296" TEXT="schwer für einen Test/Mock zu isolieren"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1682205419719" ID="ID_806137309" MODIFIED="1682212328035" TEXT="Job createJobFor (FrameCoord) ist noch gar nicht implementiert">
|
||||
<node COLOR="#435e98" CREATED="1682205419719" ID="ID_806137309" MODIFIED="1684877148005" TEXT="Job createJobFor (FrameCoord) war noch garnich nutzbar implementiert">
|
||||
<arrowlink COLOR="#5cb854" DESTINATION="ID_1989334160" ENDARROW="Default" ENDINCLINATION="64;0;" ID="Arrow_ID_1232251004" STARTARROW="None" STARTINCLINATION="-4;26;"/>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<icon BUILTIN="hourglass"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1684877157081" HGAP="-1" ID="ID_1004578992" MODIFIED="1684877170968" TEXT="Probleme vorläufig umgehen" VSHIFT="5">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1682385376739" ID="ID_576604811" MODIFIED="1683722549420" TEXT="Mock-Implementierung">
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1684876994406" FOLDED="true" ID="ID_596223452" MODIFIED="1684889587050" TEXT="also auch MockSegmentation aufbauen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1682385392969" ID="ID_1317765253" MODIFIED="1682385456612" TEXT="Storage">
|
||||
<node CREATED="1682385491724" ID="ID_1049416610" MODIFIED="1682385544239" TEXT="JobTickets in eine Deque allozieren">
|
||||
<node COLOR="#435e98" CREATED="1684877008420" ID="ID_1844434779" MODIFIED="1684877046743" TEXT="Mock-setup: Segmentation ⟶ JobTicket ⟶ Job">
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
<node CREATED="1684877089721" ID="ID_1075049046" MODIFIED="1684877102900" TEXT="fehlende Impl in JobTicket ergänzen">
|
||||
<node COLOR="#338800" CREATED="1684877103800" ID="ID_1989334160" MODIFIED="1684877137469" TEXT="Job erzeugen">
|
||||
<linktarget COLOR="#5cb854" DESTINATION="ID_1989334160" ENDARROW="Default" ENDINCLINATION="64;0;" ID="Arrow_ID_1232251004" SOURCE="ID_806137309" STARTARROW="None" STARTINCLINATION="-4;26;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1684877107395" ID="ID_33334184" MODIFIED="1684877124124" TEXT="Prerequisites abholen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1684877114676" ID="ID_1858174883" MODIFIED="1684877124124" TEXT="Invocation-ID generieren">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1682385376739" FOLDED="true" ID="ID_576604811" MODIFIED="1684889615769" TEXT="Mock-Implementierung">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#435e98" CREATED="1682385392969" ID="ID_1317765253" MODIFIED="1684877385035" TEXT="Storage">
|
||||
<node CREATED="1682385491724" ID="ID_1049416610" MODIFIED="1684877190112" TEXT="JobTickets in eine Deque allozieren">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
|
|
@ -71963,11 +72038,26 @@
|
|||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="closed"/>
|
||||
<node CREATED="1684877210298" ID="ID_1646659821" MODIFIED="1684877225717" TEXT="simuliert vorläufig einen costom-Allocator">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node CREATED="1682385911140" ID="ID_310070879" MODIFIED="1682385934313" TEXT="move-only Mock-Objekt herausgeben">
|
||||
<node COLOR="#5b280f" CREATED="1684877227009" ID="ID_353579055" MODIFIED="1684877306099" TEXT="Problem: std::deque::emplace_back ist nicht re-entrant">
|
||||
<arrowlink COLOR="#803360" DESTINATION="ID_1545603358" ENDARROW="Default" ENDINCLINATION="-178;-8;" ID="Arrow_ID_450625950" STARTARROW="None" STARTINCLINATION="390;-16;"/>
|
||||
<icon BUILTIN="stop-sign"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1684877192366" ID="ID_1618079442" MODIFIED="1684877311685" TEXT="stattdessen: nun in eine std::list allozieren">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#5b280f" CREATED="1682385911140" ID="ID_310070879" MODIFIED="1684877365893" TEXT="move-only Mock-Objekt herausgeben">
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
<node CREATED="1682385936418" ID="ID_755704146" MODIFIED="1682385951914" TEXT="das ist aber „das Ding selber“"/>
|
||||
<node CREATED="1682385963140" ID="ID_1239158970" MODIFIED="1682385993315" TEXT="also MockSegmentation, MockJobTicket,..."/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1684877366605" ID="ID_1223106821" MODIFIED="1684877381834" TEXT="stattdessen: Mock-Instanzen können einfach direkt (Stack) alloziert werden">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1682614081119" ID="ID_57760675" MODIFIED="1683722491527" TEXT="Interpretieren der jeweilgen Spec">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
|
|
@ -72551,12 +72641,16 @@
|
|||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1684877323435" ID="ID_67085851" MODIFIED="1684889467446" TEXT="Mock-Code aufräumen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1681839415291" ID="ID_310889374" MODIFIED="1681839523165" TEXT="bestehenden Code nutzbar machen">
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1681839415291" FOLDED="true" ID="ID_310889374" MODIFIED="1684889622711" TEXT="bestehenden Code nutzbar machen">
|
||||
<linktarget COLOR="#fe80b2" DESTINATION="ID_310889374" ENDARROW="Default" ENDINCLINATION="-503;-32;" ID="Arrow_ID_1927639949" SOURCE="ID_697548050" STARTARROW="None" STARTINCLINATION="230;9;"/>
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node CREATED="1681839541902" ID="ID_147064800" MODIFIED="1681839551928" TEXT="die Datenstrukturen im JobTicket sind mühsam">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#823c96" CREATED="1681839541902" ID="ID_147064800" MODIFIED="1684889488786" TEXT="die Datenstrukturen im JobTicket sind mühsam">
|
||||
<icon BUILTIN="smiley-neutral"/>
|
||||
<node CREATED="1681839553444" ID="ID_1298986941" MODIFIED="1681839563846" TEXT="die intrusive Linked-List ist fragwürdig"/>
|
||||
<node CREATED="1681839564362" ID="ID_1371203216" MODIFIED="1681839580980" TEXT="aber Storage muß zwingend lückenlos sein"/>
|
||||
<node CREATED="1681839581752" ID="ID_643256358" MODIFIED="1681839603985" TEXT="alternativ wäre daher ein Builder / Subtyp-Ansatz notwendig"/>
|
||||
|
|
@ -72585,15 +72679,19 @@
|
|||
<node CREATED="1682034742882" ID="ID_944887323" MODIFIED="1682034750820" TEXT="ist kein Problem und stört nicht"/>
|
||||
<node CREATED="1682034751416" ID="ID_1279546753" MODIFIED="1682034762907" TEXT="da liegen nur Iterator (Value-Objekte) drauf"/>
|
||||
</node>
|
||||
<node CREATED="1681839799283" ID="ID_830915873" MODIFIED="1681839807269" TEXT="selbst einfachste Tests brauchen...">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1682622337048" ID="ID_1026907820" MODIFIED="1682622340207" TEXT="Storage">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1681839799283" ID="ID_830915873" MODIFIED="1684877947114" TEXT="selbst einfachste Tests brauchen...">
|
||||
<icon BUILTIN="yes"/>
|
||||
<node COLOR="#338800" CREATED="1682622337048" ID="ID_1026907820" MODIFIED="1684889506759" TEXT="Storage">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1682622347831" ID="ID_1252057037" MODIFIED="1682622360738" TEXT="für Tests: im MockSegment unterbringen">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1684877425598" ID="ID_736200810" MODIFIED="1684877438131" TEXT="einfacher pseudo-Allokator (std::list)">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681839808074" ID="ID_389152221" MODIFIED="1681839820464" TEXT="Einstiegspunkt">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1681839808074" ID="ID_389152221" MODIFIED="1684877790145" TEXT="Einstiegspunkt">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1681839824481" ID="ID_1782808621" LINK="#ID_1656777068" MODIFIED="1681839924803" TEXT="HA! startExploration könnte überflüssig sein">
|
||||
<icon BUILTIN="idea"/>
|
||||
<node CREATED="1681839942912" ID="ID_1045793970" MODIFIED="1681839954754" TEXT="an der Stelle zeigten sich deutlich die inneren Widersprüche"/>
|
||||
|
|
@ -72604,9 +72702,9 @@
|
|||
<icon BUILTIN="smiley-oh"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1681860325369" ID="ID_328096563" MODIFIED="1681860348325" TEXT="muß nun aber JobTicket-Ctor bereitstellen">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1681860349394" ID="ID_1525241951" MODIFIED="1681860363389" TEXT="wie definiert man ein JobTicket?">
|
||||
<node COLOR="#338800" CREATED="1681860325369" FOLDED="true" ID="ID_328096563" MODIFIED="1684889534615" TEXT="muß nun aber JobTicket-Ctor bereitstellen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#435e98" CREATED="1681860349394" ID="ID_1525241951" MODIFIED="1684877767110" TEXT="wie definiert man ein JobTicket?">
|
||||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1681860366713" ID="ID_161470410" MODIFIED="1681860416753" TEXT="erste Näherung: eine Spec abliefern">
|
||||
<icon BUILTIN="yes"/>
|
||||
|
|
@ -72657,13 +72755,36 @@
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681864684118" ID="ID_1606009220" MODIFIED="1682034587669" TEXT="Spezifikation">
|
||||
<node COLOR="#435e98" CREATED="1681864684118" ID="ID_1606009220" MODIFIED="1684877688940">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
<b>Spezifikation</b>: <font color="#342fa7" face="Monospaced" size="4">JobTicket</font> erstellen
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<arrowlink COLOR="#5385a7" DESTINATION="ID_896864831" ENDARROW="Default" ENDINCLINATION="69;-1101;" ID="Arrow_ID_1685360717" STARTARROW="None" STARTINCLINATION="-344;28;"/>
|
||||
<font NAME="SansSerif" SIZE="12"/>
|
||||
<icon BUILTIN="info"/>
|
||||
<node CREATED="1681864799687" ID="ID_1244549458" MODIFIED="1681864834215" TEXT="Aufzählung Prerequisites"/>
|
||||
<node CREATED="1681864758749" ID="ID_941507735" MODIFIED="1681864762804" TEXT="JobFunktor"/>
|
||||
<node CREATED="1684877708030" ID="ID_428523937" MODIFIED="1684877726290" TEXT="Iterator für alle Channel">
|
||||
<icon BUILTIN="stop-sign"/>
|
||||
<node CREATED="1684877729483" ID="ID_1965794240" MODIFIED="1684877733350" TEXT="bleibt vorerst bestehen"/>
|
||||
<node CREATED="1684877733890" ID="ID_693779832" MODIFIED="1684877738613" TEXT="aber wir nutzen immer nur einen"/>
|
||||
</node>
|
||||
<node CREATED="1684877740905" ID="ID_1421924463" MODIFIED="1684877747064" TEXT="darin: spezifikations-Tripel">
|
||||
<node CREATED="1681864758749" ID="ID_941507735" MODIFIED="1684877476273" TEXT="JobFunktor"/>
|
||||
<node CREATED="1684877477701" ID="ID_847995501" MODIFIED="1684877486921" TEXT="ein Hash-Seed"/>
|
||||
<node CREATED="1681864799687" ID="ID_1244549458" MODIFIED="1681864834215" TEXT="Aufzählung Prerequisites">
|
||||
<node CREATED="1684877758441" ID="ID_1047908309" MODIFIED="1684877759974" TEXT="iterator"/>
|
||||
<node CREATED="1684877760358" ID="ID_750561070" MODIFIED="1684877764130" TEXT="liefert JobTicket&"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1681860589211" ID="ID_1071396002" MODIFIED="1681861171511" TEXT="Problem: Allokation für die Provision-Records">
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1681860589211" ID="ID_1071396002" MODIFIED="1684877462825" TEXT="Problem: Allokation für die Provision-Records">
|
||||
<linktarget COLOR="#df2b36" DESTINATION="ID_1071396002" ENDARROW="Default" ENDINCLINATION="317;-20;" ID="Arrow_ID_375386930" SOURCE="ID_160492283" STARTARROW="None" STARTINCLINATION="-437;23;"/>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1681860891883" HGAP="24" ID="ID_1751384108" MODIFIED="1681861186918" VSHIFT="7">
|
||||
|
|
@ -72788,7 +72909,7 @@
|
|||
<node COLOR="#338800" CREATED="1682026969063" ID="ID_32615180" MODIFIED="1682026989799" TEXT="verwende eine TestLog-Instanz">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node CREATED="1682026978301" ID="ID_347272426" MODIFIED="1682027065816" TEXT="als Singleton per lib::Depend">
|
||||
<node COLOR="#435e98" CREATED="1682026978301" ID="ID_347272426" MODIFIED="1684877782771" TEXT="als Singleton per lib::Depend">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -72816,33 +72937,71 @@
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681839812280" ID="ID_525360569" MODIFIED="1681839820465" TEXT="Iteration">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#338800" CREATED="1681839812280" ID="ID_525360569" MODIFIED="1684877855255" TEXT="Iteration">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1681840007512" ID="ID_1951568685" MODIFIED="1681840020471" TEXT="ist für LinkedElements bereits fertig implementiert">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1684877802788" ID="ID_512421759" MODIFIED="1684877809589" TEXT="get Prerequisites">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#435e98" CREATED="1684877810281" ID="ID_1410059245" MODIFIED="1684877821196" TEXT="liefert Iteration über JobTicket&">
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681839815223" ID="ID_864479514" MODIFIED="1681839820465" TEXT="Verifikation">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1681840026883" ID="ID_43381502" MODIFIED="1681840070423" TEXT="es gibt eine empty()-Funktion — brauchbar?">
|
||||
<icon BUILTIN="help"/>
|
||||
<node COLOR="#338800" CREATED="1684877821874" ID="ID_1863425234" MODIFIED="1684877852389" TEXT="implementiert per TransformIterator">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
über die interne Provision-Datastruktur (LinkedElements)
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1684877860668" ID="ID_64705741" MODIFIED="1684877865545" TEXT="Iteration über Segmente">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1681839815223" ID="ID_864479514" MODIFIED="1684877934345" TEXT="Verifikation">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1681840026883" ID="ID_43381502" MODIFIED="1684877893782" TEXT="empty() für leere / Platzhalter-Tickets">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1684877895212" ID="ID_1666792015" LINK="#ID_1525753166" MODIFIED="1684878095119" TEXT="spezielles Rigging für die Frame-Hashes schaffen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1684877915664" ID="ID_1533409441" MODIFIED="1684877929575" TEXT="damit kann man beweisen: dieser Job gehört zu diesem Segment">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1684877930020" ID="ID_345323099" MODIFIED="1684877933809" TEXT="Hilfsfunktionen hierfür">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1684877969785" ID="ID_1253073647" MODIFIED="1684878015913" TEXT="MockSupport_test">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1684878012464" MODIFIED="1684878012464" TEXT="simpleUsage();"/>
|
||||
<node CREATED="1684878012464" MODIFIED="1684878012464" TEXT="verify_MockJob();"/>
|
||||
<node CREATED="1684878012464" MODIFIED="1684878012464" TEXT="verify_MockJobTicket();"/>
|
||||
<node CREATED="1684878012464" ID="ID_1761840218" LINK="#ID_1176991982" MODIFIED="1684878136078" TEXT="verify_MockSegmentation();"/>
|
||||
<node CREATED="1684878012464" ID="ID_1911013145" LINK="#ID_599701197" MODIFIED="1684878033002" TEXT="verify_MockPrerequisites();"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681742836995" ID="ID_456677168" MODIFIED="1681742856094" TEXT="using a frame step as base tick">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681742836996" ID="ID_1790705283" MODIFIED="1681742856095" TEXT="invoke the dispatcher to retrieve the top-level JobTicket">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681742836995" ID="ID_456677168" MODIFIED="1684878195489" TEXT="using a frame step as base tick">
|
||||
<icon BUILTIN="full-2"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681742836996" ID="ID_1224963303" MODIFIED="1681742856095" TEXT="expander function to explore prerequisite JobTickets">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681742836996" ID="ID_1790705283" MODIFIED="1684878198471" TEXT="invoke the dispatcher to retrieve the top-level JobTicket">
|
||||
<icon BUILTIN="full-3"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681742836996" ID="ID_1332543018" MODIFIED="1681742856096" TEXT="integration: generate a complete sequence of (dummy)Jobs">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681742836996" ID="ID_1224963303" MODIFIED="1684878201314" TEXT="expander function to explore prerequisite JobTickets">
|
||||
<icon BUILTIN="full-4"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681742836996" ID="ID_1332543018" MODIFIED="1684878204163" TEXT="integration: generate a complete sequence of (dummy)Jobs">
|
||||
<icon BUILTIN="full-5"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681742264338" ID="ID_627755845" MODIFIED="1681742273104" TEXT="in RenderDrive überführen">
|
||||
|
|
@ -72850,9 +73009,9 @@
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1512925253328" ID="ID_922277724" MODIFIED="1681168670386" TEXT="JobTicket">
|
||||
<node CREATED="1512925253328" ID="ID_922277724" MODIFIED="1684869771123" TEXT="JobTicket">
|
||||
<linktarget COLOR="#82597c" DESTINATION="ID_922277724" ENDARROW="Default" ENDINCLINATION="43;-81;" ID="Arrow_ID_941233317" SOURCE="ID_946385163" STARTARROW="None" STARTINCLINATION="-124;34;"/>
|
||||
<icon BUILTIN="stop"/>
|
||||
<node CREATED="1681166276225" ID="ID_877524227" MODIFIED="1681166317636" TEXT="ein Execution-Plan gülitg für ein Segment + ModelPort"/>
|
||||
<node CREATED="1681167533752" ID="ID_1794156121" MODIFIED="1681167538096" TEXT="Anforderungen">
|
||||
<node COLOR="#5b280f" CREATED="1681167546919" ID="ID_1656777068" MODIFIED="1683836193612" TEXT="startExploration()">
|
||||
|
|
@ -72873,9 +73032,13 @@
|
|||
<icon BUILTIN="closed"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1683836197004" ID="ID_885444410" MODIFIED="1683836585531" TEXT="getPrerequisites">
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1683836197004" ID="ID_885444410" MODIFIED="1684870427760" TEXT="getPrerequisites">
|
||||
<linktarget COLOR="#eb64a1" DESTINATION="ID_885444410" ENDARROW="Default" ENDINCLINATION="213;-1966;" ID="Arrow_ID_1011579074" SOURCE="ID_993440863" STARTARROW="None" STARTINCLINATION="-384;23;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#338800" CREATED="1684870442737" ID="ID_728138659" MODIFIED="1684870510425" TEXT="implementiert durch Transformation interner Datenstrukturen">
|
||||
<arrowlink COLOR="#92f974" DESTINATION="ID_599701197" ENDARROW="Default" ENDINCLINATION="-476;357;" ID="Arrow_ID_766289667" STARTARROW="None" STARTINCLINATION="391;17;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node CREATED="1683836203943" ID="ID_1933667832" MODIFIED="1683836212926" TEXT="liefert einen Iterator über JobTicket&"/>
|
||||
<node CREATED="1683836213973" ID="ID_571829359" MODIFIED="1683836218117" TEXT="nur eine Ebene tief"/>
|
||||
<node CREATED="1683836226928" ID="ID_580321819" MODIFIED="1683836458419" TEXT="für RenderDrive">
|
||||
|
|
@ -72990,6 +73153,15 @@
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1684877569538" ID="ID_1875449471" MODIFIED="1684877576667" TEXT="Spezifikation schrittweise entwickeln">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#435e98" CREATED="1684877636400" ID="ID_896864831" MODIFIED="1684889708951" TEXT="JobTicket erstellen">
|
||||
<linktarget COLOR="#5385a7" DESTINATION="ID_896864831" ENDARROW="Default" ENDINCLINATION="69;-1101;" ID="Arrow_ID_1685360717" SOURCE="ID_1606009220" STARTARROW="None" STARTINCLINATION="-344;28;"/>
|
||||
<node CREATED="1681864758749" ID="ID_1590189421" MODIFIED="1684877476273" TEXT="JobFunktor"/>
|
||||
<node CREATED="1684877477701" ID="ID_1567452222" MODIFIED="1684877486921" TEXT="ein Hash-Seed"/>
|
||||
<node CREATED="1681864799687" ID="ID_750179276" MODIFIED="1681864834215" TEXT="Aufzählung Prerequisites"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1681167767260" ID="ID_247185233" MODIFIED="1681167820893" TEXT="JobTicket::ExplorationState">
|
||||
<linktarget COLOR="#5c74b4" DESTINATION="ID_247185233" ENDARROW="Default" ENDINCLINATION="28;-86;" ID="Arrow_ID_1572923842" SOURCE="ID_1056088464" STARTARROW="None" STARTINCLINATION="-77;9;"/>
|
||||
</node>
|
||||
|
|
@ -73010,6 +73182,7 @@
|
|||
<linktarget COLOR="#b9234e" DESTINATION="ID_1133872595" ENDARROW="Default" ENDINCLINATION="78;-135;" ID="Arrow_ID_1952784533" SOURCE="ID_891227892" STARTARROW="Default" STARTINCLINATION="-66;89;"/>
|
||||
<icon BUILTIN="help"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681742053502" ID="ID_122410804" MODIFIED="1681742065769" TEXT="Idee: auch noch Channel auflösen">
|
||||
<linktarget COLOR="#daffc5" DESTINATION="ID_122410804" ENDARROW="Default" ENDINCLINATION="-352;-925;" ID="Arrow_ID_194808318" SOURCE="ID_804638831" STARTARROW="None" STARTINCLINATION="544;39;"/>
|
||||
<icon BUILTIN="idea"/>
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1681742068918" ID="ID_1859739609" MODIFIED="1681742080663" TEXT="Frage: sinnvoll für den ModelPort?">
|
||||
<icon BUILTIN="help"/>
|
||||
|
|
@ -73224,8 +73397,8 @@
|
|||
<node CREATED="1680563460649" ID="ID_127710483" MODIFIED="1680563474067" TEXT="MemManagement"/>
|
||||
</node>
|
||||
<node CREATED="1512923592590" ID="ID_540019681" MODIFIED="1557498707237" TEXT="Engine">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1679783052390" ID="ID_1851394144" MODIFIED="1679783057287" TEXT="gründen">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1679783052390" ID="ID_1851394144" MODIFIED="1684869799933" TEXT="gründen">
|
||||
<icon BUILTIN="stop"/>
|
||||
<node CREATED="1680563559852" ID="ID_580288207" MODIFIED="1680563577773" TEXT="plainPlay">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681086194343" ID="ID_1293419166" MODIFIED="1681086200999" TEXT="gemeinsame Datenstrukturen">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
|
|
@ -73586,7 +73759,8 @@
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1680563509728" ID="ID_1883500842" MODIFIED="1680563511567" TEXT="Scheduler">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1680563509728" ID="ID_1883500842" MODIFIED="1684869810400" TEXT="Scheduler">
|
||||
<icon BUILTIN="stop"/>
|
||||
<node CREATED="1680563512563" ID="ID_960191744" MODIFIED="1680563516470" TEXT="Layer-2"/>
|
||||
<node CREATED="1680563517255" ID="ID_1104189783" MODIFIED="1680563519264" TEXT="Layer-1"/>
|
||||
</node>
|
||||
|
|
|
|||
Loading…
Reference in a new issue