Dispatcher+Scheduler: decision to dispose of the TimeAnchor
several years ago, it seemed like a good idea to incorporate the link between nominal time and wall-clock time into a dedicated anchor point, which also regulates the continued frame planning. But it turned out that such a design mixes up several concepts and introduces confusion regarding the meaning of "real time" - latency can not be reasonably defined for a whole planning chunk - skipping or sliding due to missed deadlines can not reasonably handled within such an abstract entity; it must be handled rather at the level of a playback process - linking the frame grid generation directly to a planning chunk undercuts the possible abstraction of a planning pipeline
This commit is contained in:
parent
87f40c8169
commit
fbfbd2a078
10 changed files with 322 additions and 64 deletions
|
|
@ -260,7 +260,7 @@ namespace test{
|
|||
|
||||
|
||||
|
||||
/** create a random but not insane Time value */
|
||||
/** create a random but not insane Time value between 1s ... 10min + 500ms */
|
||||
inline lib::time::Time
|
||||
randTime ()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -102,9 +102,9 @@ namespace time {
|
|||
* @warning this operation incurs information loss. Values may be rounded
|
||||
* and / or clipped, according to the grid used. And, contrary to
|
||||
* a QuTime value, the information about the actual grid is
|
||||
* discarded. Please don't use this operation if you just
|
||||
* "want a number" but feel to too lazy to understand
|
||||
* properly what quantisation means!
|
||||
* discarded. Please resist the temptation to abuse this
|
||||
* operation to "just get a simple number", without
|
||||
* understanding what quantisation means!
|
||||
*/
|
||||
TimeValue
|
||||
Quantiser::materialise (TimeValue const& raw) const
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@ namespace engine {
|
|||
FrameCoord frame;
|
||||
frame.absoluteNominalTime = refPoint;
|
||||
frame.absoluteFrameNumber = refPoint.getStartFrame();
|
||||
frame.absoluteRealDeadline = refPoint.establishDeadlineFor (frameOffset);
|
||||
frame.realTimeDeadline = refPoint.establishDeadlineFor (frameOffset);
|
||||
frame.modelPort = this->modelPort_;
|
||||
frame.channelNr = this->channel_;
|
||||
|
||||
|
|
|
|||
|
|
@ -69,7 +69,7 @@ namespace engine {
|
|||
TimeVar absoluteNominalTime;
|
||||
FrameCnt absoluteFrameNumber;
|
||||
|
||||
TimeVar absoluteRealDeadline;
|
||||
TimeVar realTimeDeadline;
|
||||
|
||||
ModelPort modelPort;
|
||||
uint channelNr; ///////////////////////////////////////////////////////////////////////////TICKET #1297 : retract differentiation into channels here (instead use ModelPorts in the Segment)
|
||||
|
|
@ -79,7 +79,7 @@ namespace engine {
|
|||
FrameCoord()
|
||||
: absoluteNominalTime(Time::NEVER)
|
||||
, absoluteFrameNumber(std::numeric_limits<FrameCnt>::max())
|
||||
, absoluteRealDeadline(Time::NEVER)
|
||||
, realTimeDeadline(Time::NEVER)
|
||||
, modelPort() // unconnected
|
||||
, channelNr(0)
|
||||
{ }
|
||||
|
|
@ -91,7 +91,7 @@ namespace engine {
|
|||
bool
|
||||
isDefined() const
|
||||
{
|
||||
return absoluteRealDeadline != Time::NEVER;
|
||||
return realTimeDeadline != Time::NEVER;
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -30,6 +30,8 @@
|
|||
** @todo this is part of an implementation draft from 2013,
|
||||
** to create a complete outline of player and render job generation.
|
||||
** @todo as of 2016 this effort is stalled, but remains valid
|
||||
**
|
||||
** @deprecated 5/23 during rework of Playback / Rendering the concept TimeAnchor lost its substance
|
||||
*/
|
||||
|
||||
|
||||
|
|
@ -89,6 +91,9 @@ namespace engine {
|
|||
* adjustments to the engine latency will be reflected in the planned job's
|
||||
* deadlines. Actually, the embedded Timings record is responsible for this
|
||||
* timing calculation and for fetching the current EngineConfig.
|
||||
*
|
||||
* @deprecated 5/23 during rework of Playback / Rendering it turns out that TimeAnchor
|
||||
* is completely redundant and void of substantial meaning
|
||||
*
|
||||
* @see Dispatcher
|
||||
* @see DispatcherInterface_test
|
||||
|
|
@ -100,6 +105,8 @@ namespace engine {
|
|||
FrameCnt anchorPoint_;
|
||||
Time relatedRealTime_;
|
||||
|
||||
#if false /////////////////////////////////////////////////////////////////////////////////////////////////////////////UNIMPLEMENTED :: TICKET #1301
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////OOO sensible calculation, but pointless in TimeAnchor
|
||||
static Time
|
||||
expectedTimeofArival (play::Timings const& timings, FrameCnt startFrame, Offset startDelay)
|
||||
{
|
||||
|
|
@ -120,6 +127,14 @@ namespace engine {
|
|||
}
|
||||
return deadline;
|
||||
}
|
||||
#endif /////////////////////////////////////////////////////////////////////////////////////////////////////////////UNIMPLEMENTED :: TICKET #1301
|
||||
static Time
|
||||
expectedTimeofArival (play::Timings const& timings, FrameCnt startFrame, Offset startDelay)
|
||||
{
|
||||
TimeVar deadline = timings.isTimebound()? timings.getTimeDue(startFrame)
|
||||
: RealClock::now();
|
||||
return deadline + startDelay;
|
||||
}
|
||||
|
||||
|
||||
public:
|
||||
|
|
|
|||
|
|
@ -128,14 +128,23 @@ namespace play {
|
|||
{
|
||||
return Offset (grid_->timeOf(refFrameNr), grid_->timeOf(refFrameNr + 1));
|
||||
}
|
||||
|
||||
|
||||
|
||||
FrameCnt
|
||||
Timings::getBreakPointAfter (TimeValue refPoint) const
|
||||
{
|
||||
FrameCnt frameNr = grid_->gridPoint (refPoint);
|
||||
return grid_->timeOf(frameNr) == refPoint? frameNr
|
||||
: frameNr+1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** @remarks the purpose of this function is to support scheduling
|
||||
* and frame handling even in case the frame rate isn't constant.
|
||||
* To indicate the case the frame rate is changing right now,
|
||||
* this function might return Duration::NIL
|
||||
* @todo implement real support for variable frame rates
|
||||
* @todo implement real support for variable frame rates
|
||||
*/ ////////////////////////////////////////////////////////TICKET #236
|
||||
Duration
|
||||
Timings::constantFrameTimingsInterval (TimeValue) const
|
||||
|
|
|
|||
|
|
@ -100,7 +100,7 @@ namespace play {
|
|||
PlaybackUrgency playbackUrgency;
|
||||
boost::rational<FrameCnt> playbackSpeed; /////////////TICKET #902 we need a more generic representation for variable speed playback
|
||||
Time scheduledDelivery; ///< a wall clock time corresponding to the Grid's origin. Can be Time::Never (=not time bound)
|
||||
Duration outputLatency;
|
||||
Duration outputLatency; ///////////////TICKET #1301 do we even need this information here (-> rather on some Engine state)
|
||||
|
||||
explicit
|
||||
Timings (FrameRate fps);
|
||||
|
|
@ -117,6 +117,9 @@ namespace play {
|
|||
Duration getFrameDurationAt (TimeValue refPoint) const;
|
||||
Duration getFrameDurationAt (FrameCnt refFrameNr) const;
|
||||
|
||||
/** the next grid point at or after the given reference time */
|
||||
FrameCnt getBreakPointAfter (TimeValue refPoint) const;
|
||||
|
||||
/** the frame spacing and duration remains constant for some time...
|
||||
* @param startPoint looking from that time point into future
|
||||
* @return duration after this starting point, where it's safe
|
||||
|
|
@ -174,6 +177,7 @@ namespace play {
|
|||
|
||||
|
||||
bool isOriginalSpeed() const;
|
||||
bool isTimebound() const;
|
||||
|
||||
|
||||
/** Consistency self-check */
|
||||
|
|
@ -196,6 +200,12 @@ namespace play {
|
|||
return 1 == playbackSpeed;
|
||||
}
|
||||
|
||||
inline bool
|
||||
Timings::isTimebound() const
|
||||
{
|
||||
return play::TIMEBOUND == playbackUrgency;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}} // namespace steam::play
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@
|
|||
|
||||
|
||||
#include "lib/test/run.hpp"
|
||||
#include "lib/error.hpp"
|
||||
#include "lib/test/test-helper.hpp"
|
||||
|
||||
//#include "steam/engine/procnode.hpp"
|
||||
#include "steam/play/dummy-play-connection.hpp"
|
||||
|
|
@ -61,7 +61,7 @@ namespace test {
|
|||
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;
|
||||
|
|
@ -75,16 +75,23 @@ namespace test {
|
|||
const uint DUMMY_CHANNEL(0); /////////////////////////////////////////////////////////////TICKET #1297 : get rid of the channels (use different ModelPort)
|
||||
|
||||
|
||||
ModelPort
|
||||
getTestPort()
|
||||
// ModelPort
|
||||
// getTestPort()
|
||||
// {
|
||||
// using play::test::ModelPorts;
|
||||
// using play::test::PlayTestFrames_Strategy;
|
||||
// using DummyPlaybackSetup = play::test::DummyPlayConnection<PlayTestFrames_Strategy>;
|
||||
//
|
||||
// DummyPlaybackSetup dummySetup;
|
||||
// ModelPorts mockModelPorts = dummySetup.provide_testModelPorts();
|
||||
// return *mockModelPorts; // using just the first dummy port
|
||||
// }
|
||||
|
||||
|
||||
FSecs
|
||||
randTicks()
|
||||
{
|
||||
using play::test::ModelPorts;
|
||||
using play::test::PlayTestFrames_Strategy;
|
||||
using DummyPlaybackSetup = play::test::DummyPlayConnection<PlayTestFrames_Strategy>;
|
||||
|
||||
DummyPlaybackSetup dummySetup;
|
||||
ModelPorts mockModelPorts = dummySetup.provide_testModelPorts();
|
||||
return *mockModelPorts; // using just the first dummy port
|
||||
return FSecs{1 + rand() % 600, 1 + rand() % 600};
|
||||
}
|
||||
|
||||
} // (End) Test fixture
|
||||
|
|
@ -120,53 +127,32 @@ namespace test {
|
|||
void
|
||||
verify_simpleFrameStep()
|
||||
{
|
||||
ModelPort modelPort (getTestPort());
|
||||
Timings timings (FrameRate::PAL);
|
||||
CHECK (timings.getOrigin() == Time::ZERO);
|
||||
|
||||
ENSURE (START_FRAME == 10);
|
||||
|
||||
TimeAnchor refPoint(timings, START_FRAME);
|
||||
CHECK (refPoint == Time::ZERO + Duration(10, FrameRate::PAL));
|
||||
|
||||
FrameCoord frame; /////////////////TODO get / implement offset-by-#-Frames
|
||||
FrameCnt frameOffset = 15;
|
||||
|
||||
frame.absoluteNominalTime = refPoint;
|
||||
frame.absoluteFrameNumber = refPoint.getStartFrame();
|
||||
frame.absoluteRealDeadline = refPoint.establishDeadlineFor (frameOffset);
|
||||
frame.modelPort = modelPort;
|
||||
frame.channelNr = DUMMY_CHANNEL;
|
||||
|
||||
ENSURE (frame.isDefined());
|
||||
// frame = dispatcher_->locateRelative (frame, frameOffset); /////////////////////////////OOO MAGIC FAIRY DUST HERE
|
||||
|
||||
CHECK (frame.absoluteNominalTime == Time(0,1)); ///////////////////////////////////OOO Boooooom
|
||||
CHECK (frame.absoluteFrameNumber == 25);
|
||||
CHECK (refPoint.remainingRealTimeFor(frame) < Time(FSecs(25,25)));
|
||||
CHECK (refPoint.remainingRealTimeFor(frame) >= Time(FSecs(24,25)));
|
||||
CHECK (frame.modelPort == modelPort);
|
||||
|
||||
CHECK (timings.getFrameStartAt(START_FRAME) == Time::ZERO + Duration(10, FrameRate::PAL));
|
||||
CHECK (timings.getFrameStartAt(START_FRAME+1) == Time::ZERO + Duration(11, FrameRate::PAL));
|
||||
#if false /////////////////////////////////////////////////////////////////////////////////////////////////////////////UNIMPLEMENTED :: TICKET #1301
|
||||
#endif /////////////////////////////////////////////////////////////////////////////////////////////////////////////UNIMPLEMENTED :: TICKET #1301
|
||||
}
|
||||
|
||||
|
||||
/** action used as "continuation" in #check_ContinuationBuilder
|
||||
* This function expects to be invoked with a time anchor bumped up
|
||||
* to point exactly behind the end of the previously planned chunk of Jobs
|
||||
/** @test detect boundaries of frame planning chunks for arbitrary chunk duration.
|
||||
*/
|
||||
void
|
||||
verify_next_startPoint()
|
||||
{
|
||||
Timings timings (FrameRate::PAL);
|
||||
TimeAnchor nextRefPoint(timings, START_FRAME); //////////////////////////////////////OOO : how is this actually determined (not yet implemented....)
|
||||
UNIMPLEMENTED ("How to determine the start point of the next planning chunk");
|
||||
Time refPoint{randTicks()};
|
||||
|
||||
FrameCnt startFrame = timings.getBreakPointAfter (refPoint);
|
||||
Time frameStart = timings.getFrameStartAt(startFrame);
|
||||
|
||||
Duration frameDuration (1, FrameRate::PAL);
|
||||
Time startAnchor = Time::ZERO + START_FRAME*frameDuration;
|
||||
Duration time_to_cover = timings.getPlanningChunkDuration();
|
||||
|
||||
CHECK (Time(nextRefPoint) >= startAnchor + time_to_cover);
|
||||
CHECK (Time(nextRefPoint) < startAnchor + time_to_cover + 1*frameDuration);
|
||||
CHECK (frameStart >= refPoint);
|
||||
CHECK (frameStart < refPoint + frameDuration);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -77,7 +77,6 @@ namespace test {
|
|||
|
||||
CHECK (timings.getOrigin() == Time::ZERO);
|
||||
CHECK (timings.getFrameDurationAt(t) == lengthPAL);
|
||||
CHECK (timings.getFrameOffsetAt(t) == lengthPAL);
|
||||
CHECK (ASAP == timings.playbackUrgency);
|
||||
#if false /////////////////////////////////////////////////////////////////////////////////////////////////////////////UNIMPLEMENTED :: TICKET #831
|
||||
#endif /////////////////////////////////////////////////////////////////////////////////////////////////////////////UNIMPLEMENTED :: TICKET #831
|
||||
|
|
|
|||
|
|
@ -69527,6 +69527,51 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1685402933522" ID="ID_517929511" MODIFIED="1685406668551" TEXT="TimeAnchor">
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
<node COLOR="#338800" CREATED="1685402939155" ID="ID_895439120" LINK="#ID_260441580" MODIFIED="1685402990260" TEXT="Konzept nochmal überprüft: grundsätzlich OK">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685402993556" ID="ID_1110033319" MODIFIED="1685406661129" TEXT="Aber: sollte keine Latenz-Kompensation machen">
|
||||
<icon BUILTIN="yes"/>
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
<node CREATED="1685403027730" ID="ID_1618141786" MODIFIED="1685403315041" TEXT="das verwirrt die Konzepte »realTime« und »Deadline«">
|
||||
<linktarget COLOR="#ff292c" DESTINATION="ID_1618141786" ENDARROW="Default" ENDINCLINATION="402;21;" ID="Arrow_ID_97219015" SOURCE="ID_1075266324" STARTARROW="None" STARTINCLINATION="250;-324;"/>
|
||||
<icon BUILTIN="stop-sign"/>
|
||||
</node>
|
||||
<node CREATED="1685403065973" ID="ID_675806191" MODIFIED="1685403127990" TEXT="die Kompensation kann an dieser Stelle gar nicht korrekt/vollständig sein">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
...denn dazu benötigen wir <i>detailierte Timing-Beobachtungen, </i>welche erst im speziellen Job-Funktor vorliegen können, nicht auf der Ebene eines ganzen Planning-Chunk
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685403325222" ID="ID_2694625" MODIFIED="1685403350256" TEXT="jedwede Latenz-Kompensation / Deadline-Bestimmung in die Planning-Pipeline verschieben">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
<node CREATED="1685406566342" ID="ID_524698195" MODIFIED="1685406623527" TEXT="dann bleibt aber nix mehr übrig....???">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
dann reduziert sich der TimeAnchor komplett auf einen Proxy zu den Timings (die obendrein noch als Kopie mitgeschleppt werden)
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1685406639037" ID="ID_1524269116" MODIFIED="1685406674080" TEXT="Also: TimeAnchor ist überflüssig">
|
||||
<icon BUILTIN="yes"/>
|
||||
<icon BUILTIN="stop-sign"/>
|
||||
</node>
|
||||
</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;"/>
|
||||
|
|
@ -69565,6 +69610,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685227587042" ID="ID_1506519459" MODIFIED="1685227597731" TEXT="EngineConfig">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685227599324" ID="ID_996861061" MODIFIED="1685227641903" TEXT="Timings verwenden einen Singleton-Zugang">
|
||||
<linktarget COLOR="#b03e6a" DESTINATION="ID_996861061" ENDARROW="Default" ENDINCLINATION="1914;0;" ID="Arrow_ID_280066938" SOURCE="ID_978050958" STARTARROW="None" STARTINCLINATION="202;-9;"/>
|
||||
<icon BUILTIN="stop-sign"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685227615700" ID="ID_233202097" MODIFIED="1685227641889" TEXT="sollte besser in die RenderEnvironmentClosure">
|
||||
|
|
@ -73083,9 +73129,99 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
<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 BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685063204038" ID="ID_1320162919" MODIFIED="1685063213261" TEXT="Vorarbeit: Timings_test">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685063204038" ID="ID_1320162919" MODIFIED="1685401869753" TEXT="Vorarbeit">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1685063216695" ID="ID_918094283" MODIFIED="1685063243124" TEXT="ich bin immer wieder verwirrt...">
|
||||
<node CREATED="1685396470984" ID="ID_977131570" MODIFIED="1685396475818" TEXT="Grundsätzliches...">
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1685403171015" ID="ID_1491439076" MODIFIED="1685403230708" TEXT="der Code sieht konfus aus">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
...was auf eine Verwirrung in den Konzepten und Begriffen hindeutet (die ich schon seit Tagen vermute, aber noch nicht recht fassen kann)
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="closed"/>
|
||||
</node>
|
||||
<node CREATED="1685396476863" ID="ID_639678188" MODIFIED="1685399823940" TEXT="die verschiedenen Zeiten sind verwirrend">
|
||||
<arrowlink COLOR="#3048bc" DESTINATION="ID_334635354" ENDARROW="Default" ENDINCLINATION="-699;-102;" ID="Arrow_ID_1276385023" STARTARROW="None" STARTINCLINATION="-673;45;"/>
|
||||
<icon BUILTIN="smiley-neutral"/>
|
||||
<node CREATED="1685399857119" ID="ID_1465166407" MODIFIED="1685401807863" TEXT="mehrfach kaskadiert">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
<node CREATED="1685399869137" ID="ID_1340639570" MODIFIED="1685399872381" TEXT="TimeAnchor">
|
||||
<node CREATED="1685399887711" ID="ID_1101109058" MODIFIED="1685399892290" TEXT="anchorPoint">
|
||||
<node CREATED="1685399911211" ID="ID_1078648686" MODIFIED="1685399915129" TEXT="Frame-Nr"/>
|
||||
<node CREATED="1685399915763" ID="ID_1286626168" MODIFIED="1685399941235" TEXT="relativ zur „absoluten“ nominellen Zeitskala"/>
|
||||
<node CREATED="1685399944455" ID="ID_556515153" MODIFIED="1685399962428">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
also relativ zum Ursprung des Time-Grid <i>dieser Timeline</i>
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1685401719809" ID="ID_892456481" MODIFIED="1685401724412" TEXT="relatedRealTime">
|
||||
<node CREATED="1685401730920" ID="ID_1452346847" MODIFIED="1685401741562" TEXT="nominelle Zeit zur Frame-Nr"/>
|
||||
<node CREATED="1685401764875" ID="ID_1929447704" MODIFIED="1685401777485" TEXT="verknüpft mit der Wall-Clock-Zeitachse"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1685403241929" ID="ID_1075266324" MODIFIED="1685403315041" TEXT="»Deadline« und »realTime« sind vermischt">
|
||||
<arrowlink COLOR="#ff292c" DESTINATION="ID_1618141786" ENDARROW="Default" ENDINCLINATION="402;21;" ID="Arrow_ID_97219015" STARTARROW="None" STARTINCLINATION="250;-324;"/>
|
||||
<icon BUILTIN="idea"/>
|
||||
<node CREATED="1685403382547" ID="ID_1490411843" MODIFIED="1685403437934" TEXT="der Code ist zwar logisch korrekt aber inhaltlich sinnlos">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
...deshalb kapiere ich ihn immer nicht
|
||||
</p>
|
||||
<p>
|
||||
...dann lese ich ihn einzeln durch, und alles sieht „richtig“ aus...
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="smiley-angry"/>
|
||||
</node>
|
||||
<node CREATED="1685403505076" ID="ID_1411221122" MODIFIED="1685403562528" TEXT="der TimeAnchor wurde mit Prozeß-Belangen aufgeladen">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
...weil ich erst mal einen Test schreiben wollte, und sonst noch keinerlei tragende Strukturen hatte
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685403577421" ID="ID_1838234667" MODIFIED="1685403609231">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
⟹ alles mit <i>Latency </i>und <i>Deadline </i>muß weg
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1685401871210" ID="ID_1279877312" MODIFIED="1685401884954" TEXT="Timings_test">
|
||||
<node CREATED="1685063216695" ID="ID_918094283" MODIFIED="1685401873636" TEXT="ich bin immer wieder verwirrt...">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
|
|
@ -73106,12 +73242,9 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685063128431" ID="ID_1958871740" MODIFIED="1685063140918" TEXT="Startpunkt gewinnen">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1685063142277" ID="ID_1900307953" MODIFIED="1685063194220" TEXT="Problem: muß die Frame-Nummer an diese Stelle bekommen">
|
||||
<arrowlink COLOR="#fb1618" DESTINATION="ID_548686360" ENDARROW="Default" ENDINCLINATION="-27;-313;" ID="Arrow_ID_567963048" STARTARROW="None" STARTINCLINATION="-36;126;"/>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
<node CREATED="1685231891079" ID="ID_260441580" MODIFIED="1685231911607" TEXT="Rolle des Start-Punktes (TimeAnchor) klären">
|
||||
<icon BUILTIN="yes"/>
|
||||
<node CREATED="1685231941823" ID="ID_1623940961" MODIFIED="1685231953912" TEXT="verankert jeden Planning-Chunk erneut">
|
||||
|
|
@ -73126,7 +73259,73 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<node CREATED="1685236006596" ID="ID_844227051" MODIFIED="1685236120369" TEXT="sonst ⟹ aktuelle Zeit + Puffer für Latency"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1685063142277" ID="ID_1900307953" MODIFIED="1685406733269" TEXT="Problem: muß die Frame-Nummer an diese Stelle bekommen">
|
||||
<arrowlink COLOR="#fb1618" DESTINATION="ID_548686360" ENDARROW="Default" ENDINCLINATION="-59;-351;" ID="Arrow_ID_567963048" STARTARROW="None" STARTINCLINATION="-369;18;"/>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
<node CREATED="1685231918246" ID="ID_1408660753" MODIFIED="1685231930041" TEXT="stellt zugleich den Link zur Wall-Clock-Time her"/>
|
||||
<node CREATED="1685406699651" ID="ID_789896275" MODIFIED="1685406708225" TEXT="das machen aber die Timings auch bereits"/>
|
||||
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1685406743623" ID="ID_1294162294" MODIFIED="1685406767041" TEXT="TimeAnchor ist ohne sinnvollen Gehalt">
|
||||
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
<icon BUILTIN="stop-sign"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#5b280f" CREATED="1685369565772" ID="ID_1409610431" MODIFIED="1685406829731" TEXT="der TimeAnchor selber bestimmt das">
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
<node CREATED="1685369583234" ID="ID_173951952" MODIFIED="1685369590725" TEXT="implementiert unter Rückgriff auf die Timings">
|
||||
<node CREATED="1685369618821" ID="ID_591055660" MODIFIED="1685369635383" TEXT="Timings::establishNextPlanningChunkStart (oldAnchorFrame)"/>
|
||||
<node CREATED="1685369819711" ID="ID_92215727" MODIFIED="1685369839386" TEXT="dort findet nur Aufruf von Grid-API-Funktionen statt">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
<node CREATED="1685369847871" ID="ID_962123040" MODIFIED="1685369878551" TEXT="und verwendet Timings::getPlanningChunkDuration()">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node CREATED="1685369901303" ID="ID_437509684" MODIFIED="1685369913102" TEXT="push/pull und Locking beachten">
|
||||
<icon BUILTIN="clanbomber"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1685369887513" ID="ID_978050958" MODIFIED="1685406802098" TEXT="Problematik: dynamische Updates von Engine-Werten">
|
||||
<arrowlink COLOR="#b03e6a" DESTINATION="ID_996861061" ENDARROW="Default" ENDINCLINATION="1914;0;" ID="Arrow_ID_280066938" STARTARROW="None" STARTINCLINATION="202;-9;"/>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#5b280f" CREATED="1685369987788" ID="ID_920255984" MODIFIED="1685406837547" TEXT="Überprüfen: Quantisierung logisch korrekt?">
|
||||
<icon BUILTIN="help"/>
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
<node CREATED="1685370021456" ID="ID_1840609510" MODIFIED="1685370045718" TEXT="Spezialfall: wenn der nächste Frame exakt getroffen wird">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1685370055315" ID="ID_1311898937" MODIFIED="1685406806410" TEXT="generelle Policy in Lumiera: auf den vorherigen Frame abrunden">
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#5b280f" CREATED="1685401941899" ID="ID_36079260" MODIFIED="1685406843234" TEXT="API festlegen">
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
<node CREATED="1685401954481" ID="ID_807804418" MODIFIED="1685402029862">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
bisher: <font face="Monospaced" size="2" color="#7b2b47">FrameCnt</font><font face="Monospaced" size="2"> </font><font face="Monospaced" size="2" color="#cc2727">getNextAnchorPoint()</font>
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
<node CREATED="1685406846904" ID="ID_923084245" MODIFIED="1685406864116" TEXT="sollte den TImeAnchor inkrementell weitersetzen...?">
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1685406878775" ID="ID_143543979" MODIFIED="1685406890912" TEXT="Nein: alles komplett überflüssig">
|
||||
<icon BUILTIN="idea"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
<node CREATED="1685406892909" ID="ID_877192337" MODIFIED="1685406903491" TEXT="wir zählen einfach die Frame-Nummer hoch und gut is"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685406904249" ID="ID_1903725712" MODIFIED="1685406939765" TEXT="aus dem TimeAnchor wird eine einfache Variable chunkStart">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1685066463050" ID="ID_1613334312" MODIFIED="1685066472930" TEXT="Mock-Setup schaffen">
|
||||
|
|
@ -73291,7 +73490,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<linktarget COLOR="#fb1618" DESTINATION="ID_548686360" ENDARROW="Default" ENDINCLINATION="-27;-313;" ID="Arrow_ID_567963048" SOURCE="ID_1900307953" STARTARROW="None" STARTINCLINATION="-36;126;"/>
|
||||
<linktarget COLOR="#fb1618" DESTINATION="ID_548686360" ENDARROW="Default" ENDINCLINATION="-59;-351;" ID="Arrow_ID_567963048" SOURCE="ID_1900307953" STARTARROW="None" STARTINCLINATION="-369;18;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1685062714666" ID="ID_1331730136" MODIFIED="1685062746213" TEXT="bisher habe ich mit der InvocationInstaceID "getrickst"">
|
||||
<icon BUILTIN="info"/>
|
||||
|
|
@ -74079,6 +74278,44 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
<icon BUILTIN="hourglass"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1685399667668" ID="ID_463573092" MODIFIED="1685399687234" TEXT="Begriffe">
|
||||
<node CREATED="1685399688969" ID="ID_334635354" MODIFIED="1685399823941" TEXT="Arten von Zeiten">
|
||||
<linktarget COLOR="#3048bc" DESTINATION="ID_334635354" ENDARROW="Default" ENDINCLINATION="-699;-102;" ID="Arrow_ID_1276385023" SOURCE="ID_639678188" STARTARROW="None" STARTINCLINATION="-673;45;"/>
|
||||
<icon BUILTIN="info"/>
|
||||
<node CREATED="1685396490909" ID="ID_1811324240" MODIFIED="1685396514990" TEXT="Frame-Zeit ≡ »nominal time«"/>
|
||||
<node CREATED="1685398161904" ID="ID_1260221239" MODIFIED="1685398489680" TEXT="»absolute« ⟶ auf die jeweilige Timeline bezogen">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
...ein eigenartiger Widerspruch, den ich nicht auflösen kann...
|
||||
</p>
|
||||
<p>
|
||||
Absolut ⟹ nicht relativ ⟹ nicht explizit auf etwas bezogen ⟹ also implizit auf „den Nullpunkt“ bezogen ⟹ also relativ zur jeweiligen Timeline
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1685398491390" ID="ID_880596225" MODIFIED="1685398609729" TEXT="»realTime« ≡ „wall clock time“ ≡ »Instant«"/>
|
||||
<node CREATED="1685398581508" ID="ID_999222806" MODIFIED="1685398604780">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
»Deadline« ist immer in <i>realTime</i>
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<node CREATED="1685398620907" ID="ID_454350455" MODIFIED="1685398749007" TEXT="»Frame Deadline« ≡ absolute Deadline of delivery"/>
|
||||
<node CREATED="1685398663573" ID="ID_135003232" MODIFIED="1685398735255" TEXT="»Job Deadline« ≡ latest time the Job can be started"/>
|
||||
<node CREATED="1685398713881" ID="ID_1091261870" MODIFIED="1685398773416" TEXT="»Plan Deadline« ≡ latest time to dispatch the calculation plan"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1680563506475" ID="ID_53985081" MODIFIED="1680563509211" TEXT="Interface">
|
||||
<node CREATED="1681341888374" ID="ID_1288070081" MODIFIED="1681341890674" TEXT="Konzepte">
|
||||
<node CREATED="1681341891551" ID="ID_1494961491" MODIFIED="1681341894065" TEXT="CalcStream">
|
||||
|
|
@ -74481,12 +74718,13 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</html></richcontent>
|
||||
</node>
|
||||
<node CREATED="1685316553665" ID="ID_1469791" MODIFIED="1685316844661" TEXT="eigentlich müßten zwei oder drei verschiedene Prozess-Arten programmiert werden">
|
||||
<arrowlink COLOR="#fffac4" DESTINATION="ID_779629114" ENDARROW="Default" ENDINCLINATION="13;-20;" ID="Arrow_ID_1083704754" STARTARROW="None" STARTINCLINATION="-69;0;"/>
|
||||
<arrowlink COLOR="#ffeac4" DESTINATION="ID_779629114" ENDARROW="Default" ENDINCLINATION="13;-20;" ID="Arrow_ID_1083704754" STARTARROW="None" STARTINCLINATION="-69;0;"/>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1685316762484" ID="ID_779629114" MODIFIED="1685316844661" TEXT="wir nutzen Zeitsteuerung als integrierendes Agens" VSHIFT="18">
|
||||
<linktarget COLOR="#fffac4" DESTINATION="ID_779629114" ENDARROW="Default" ENDINCLINATION="13;-20;" ID="Arrow_ID_1083704754" SOURCE="ID_1469791" STARTARROW="None" STARTINCLINATION="-69;0;"/>
|
||||
<arrowlink COLOR="#f9ffd5" DESTINATION="ID_503599380" ENDARROW="Default" ENDINCLINATION="-127;-352;" ID="Arrow_ID_215108045" STARTARROW="None" STARTINCLINATION="-65;91;"/>
|
||||
<linktarget COLOR="#ffeac4" DESTINATION="ID_779629114" ENDARROW="Default" ENDINCLINATION="13;-20;" ID="Arrow_ID_1083704754" SOURCE="ID_1469791" STARTARROW="None" STARTINCLINATION="-69;0;"/>
|
||||
<icon BUILTIN="idea"/>
|
||||
<node CREATED="1685317008821" ID="ID_75624396" MODIFIED="1685317551995" TEXT="den zusätzlichen Overhead müssen wir durch Parallelisierungs-Gewinn aufwiegen">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
|
|
@ -74557,6 +74795,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200<br/>
|
|||
</node>
|
||||
</node>
|
||||
<node CREATED="1685320663808" ID="ID_503599380" MODIFIED="1685320675723" TEXT="Struktur-Elemente">
|
||||
<linktarget COLOR="#f9ffd5" DESTINATION="ID_503599380" ENDARROW="Default" ENDINCLINATION="-127;-352;" ID="Arrow_ID_215108045" SOURCE="ID_779629114" STARTARROW="None" STARTINCLINATION="-65;91;"/>
|
||||
<node CREATED="1685320702161" ID="ID_1864388669" MODIFIED="1685320717483">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
|
|
|||
Loading…
Reference in a new issue