Job-Planning: replace FrameCoord by direct references

...in the hope that the Optimiser is able to elide those references entirely,
when (as is here the case) they point into another field of a larger object compound
This commit is contained in:
Fischlurch 2023-06-19 01:51:48 +02:00
parent a1c1456849
commit 9ef3d98de7
3 changed files with 61 additions and 19 deletions

View file

@ -54,6 +54,7 @@
#include "lib/time/timevalue.hpp"
//#include "lib/iter-explorer.hpp"
//#include "lib/iter-adapter.hpp"
#include "lib/nocopy.hpp"
#include "lib/util.hpp"
@ -89,16 +90,17 @@ namespace engine {
* @todo WIP-WIP 6/2023 reworking the job-planning pipeline for »PlaybackVerticalSlice«
*/
class JobPlanning
: util::MoveOnly
{
FrameCoord frameCoord_;
JobTicket& jobTicket_;
DataSink& outputSink_;
JobTicket& jobTicket_;
Time const& nominalTime_;
FrameCnt const& frameNr_;
public:
JobPlanning(FrameCoord frame, JobTicket& ticket, DataSink& sink)
: frameCoord_{frame}
, jobTicket_{ticket}
, outputSink_{sink}
JobPlanning(JobTicket& ticket, Time const& nominalTime, FrameCnt const& frameNr)
: jobTicket_{ticket}
, nominalTime_{nominalTime}
, frameNr_{frameNr}
{ }
@ -112,7 +114,7 @@ namespace engine {
Job
buildJob()
{
Job job = jobTicket_.createJobFor (frameCoord_.absoluteNominalTime);
Job job = jobTicket_.createJobFor (Time{nominalTime_});
//////////////////////////////////////////////////////TICKET #1295 : somehow package and communicate the DataSink info
return job;
}
@ -132,7 +134,7 @@ namespace engine {
return Time::ANYTIME;
case play::TIMEBOUND:
return timings.getTimeDue(frameCoord_.absoluteFrameNumber)
return timings.getTimeDue(frameNr_)
- totalLatency(timings);
}
NOTREACHED ("unexpected playbackUrgency");

View file

@ -112,12 +112,12 @@ namespace test {
play::Timings timings (FrameRate::PAL);
auto [port,sink] = dispatcher.getDummyConnection(1);
Time nominalTime{200,0};
FrameCnt frameNr{5};
TimeVar nominalTime{Time{200,0}};
size_t portIDX = dispatcher.resolveModelPort (port);
JobTicket& ticket = dispatcher.getJobTicketFor(portIDX, nominalTime);
FrameCoord frame{nominalTime, portIDX}; /////////////////////////////OOO replace FrameCoord
JobPlanning plan{frame,ticket,sink};
JobPlanning plan{ticket,nominalTime,frameNr};
Job job = plan.buildJob();
CHECK (dispatcher.verify (job, port, sink));
@ -140,8 +140,7 @@ namespace test {
size_t portIDX = dispatcher.resolveModelPort (port);
JobTicket& ticket = dispatcher.getJobTicketFor(portIDX, nominalTime);
FrameCoord frame{nominalTime, frameNr, portIDX}; /////////////////////////////OOO replace FrameCoord
JobPlanning plan{frame,ticket,sink};
JobPlanning plan{ticket,nominalTime,frameNr};
// the following calculations are expected to happen....
Duration latency = ticket.getExpectedRuntime()

View file

@ -75947,7 +75947,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</body>
</html></richcontent>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1687043645122" ID="ID_1471106329" MODIFIED="1687047113108" TEXT="FrameCoord m&#xfc;ssen bereits in den TickGenerator">
<node COLOR="#5b280f" CREATED="1687043645122" ID="ID_1471106329" MODIFIED="1687131535956" TEXT="FrameCoord m&#xfc;ssen bereits in den TickGenerator">
<richcontent TYPE="NOTE"><html>
<head>
@ -75958,6 +75958,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</p>
</body>
</html></richcontent>
<icon BUILTIN="button_cancel"/>
<node CREATED="1687047126863" ID="ID_1211205955" MODIFIED="1687047136938" TEXT="das ist aber nicht sch&#xf6;n">
<icon BUILTIN="smily_bad"/>
</node>
@ -75979,7 +75980,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="idea"/>
</node>
<node CREATED="1687047521489" ID="ID_1343365951" MODIFIED="1687047537890" TEXT="meistens sind sie nur halb g&#xfc;ltig &#x2014; oder redundant"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1687047541216" ID="ID_3859431" MODIFIED="1687047560873" TEXT="wichtige bestehende Verwendungen">
<node COLOR="#435e98" CREATED="1687047541216" ID="ID_3859431" MODIFIED="1687131788560" TEXT="wichtige bestehende Verwendungen">
<icon BUILTIN="info"/>
<node COLOR="#338800" CREATED="1687047579697" ID="ID_737360799" MODIFIED="1687052483835" TEXT="JobTicket::createJobFor (FrameCoord)">
<icon BUILTIN="button_ok"/>
@ -76066,12 +76067,12 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1687047874264" ID="ID_59699296" MODIFIED="1687047879655" TEXT="Feld in JobPlanning">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1687047874264" ID="ID_59699296" MODIFIED="1687131543337" TEXT="Feld in JobPlanning">
<icon BUILTIN="button_ok"/>
<node CREATED="1687047881181" ID="ID_1499402798" MODIFIED="1687047886577" TEXT="grade neu gebaut">
<icon BUILTIN="ksmiletris"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1687047888296" ID="ID_1054027313" MODIFIED="1687047916199" TEXT="m&#xf6;glichst durch Referenzen ersetzen">
<node COLOR="#435e98" CREATED="1687047888296" ID="ID_1054027313" MODIFIED="1687131548328" TEXT="m&#xf6;glichst durch Referenzen ersetzen">
<icon BUILTIN="yes"/>
</node>
</node>
@ -76082,6 +76083,46 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="yes"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1687053133875" ID="ID_613644358" MODIFIED="1687053158627" TEXT="...und stattdessen wird direkt auf die Felder im TickGenerator verwiesen (const&amp;)">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1687131811965" ID="ID_1192855537" MODIFIED="1687131818555" TEXT="Pipeline-Definition umbauen">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1687131819547" ID="ID_1957351479" MODIFIED="1687131843128" TEXT="Problem: ItemWrapper weist Werte zu">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1687131845108" ID="ID_1247271270" MODIFIED="1687131867304" TEXT="...und kann deshalb keine non-copyable-Typen handhaben">
<icon BUILTIN="info"/>
</node>
<node CREATED="1687131868445" ID="ID_1704149630" MODIFIED="1687131886190" TEXT="jetzt REICHTS mir langsam mit diesem d&#xe4;mlichen Problem">
<icon BUILTIN="yes"/>
<icon BUILTIN="smiley-angry"/>
<node CREATED="1687131919997" ID="ID_830496483" MODIFIED="1687132086162">
<richcontent TYPE="NODE"><html>
<head>
</head>
<body>
<p>
leider ist das ziemlich <i>absch&#252;ssiges Gel&#228;nde</i>
</p>
</body>
</html></richcontent>
<richcontent TYPE="NOTE"><html>
<head>
</head>
<body>
<p>
....per SFINAE feststellen, da&#223; ein Asignment-Operator unterdr&#252;ckt wurde; lt. Standard sollte das gehen (das war eine sp&#228;te &#196;nderung zu C++11, da es in der Stdlib so viel Probleme gemacht hat) &#8212; aber in der Praxis wei&#223; ich, da&#223; das fragil ist, manchmal Fehler ausl&#246;sen kann (statt SFINAE), und da&#223; es Diskrepanzen zwischen den Compilern gibt. Ich hatte auch schon F&#228;lle, wo std::is_assignable rundweg versagt hat....
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1687132088191" ID="ID_1816334696" MODIFIED="1687132118495" TEXT="also k&#xe4;me erst mal nur in Frage, dort generell stets neu zu konstruieren"/>
<node CREATED="1687132120955" ID="ID_170368448" MODIFIED="1687132134893" TEXT="(was aber meist auch das ist, was man dort m&#xf6;chte)"/>
</node>
</node>
</node>
</node>