Invocation: identify problems with buffer handling

The ''design exercise'' started yesterday ran into a total rodadblock.
And this is a good thing, as this unveils inconsistencies in our memory handling protocols
 * Buffer Provider Protocol
 * Output Slot Protocol
The latter exposes a `BuffHandle`, which should be usable from within the Render Node code
like any other regular buffer handle — which especially would require to ''delegate the lifecycle calls...''

So while this topic does not hinder us right now to proceed with a Node invocation in test setup,
it must be addressed before we're able to deliver data into an actual OutputSlot.

Created #1387 to track this topic...
This commit is contained in:
Fischlurch 2024-12-23 23:55:00 +01:00
parent 33c8f1c5b1
commit 9484ea0b71
3 changed files with 308 additions and 56 deletions

View file

@ -15,7 +15,7 @@
** Adapter to expose a given memory block through a BuffHandle.
** This allows to integrate a specific data access (e.g. related to input / output)
** with the buffer lifecycle protocol as defined by BufferProvider.
** @see state.hpp
** @todo BROKEN as of 12/2024 //////////////////////////////////////////////////////////////////////////////TICKET #1387 : can not properly compose BufferProvider
** @see output-slot.hpp
*/
@ -54,21 +54,64 @@ namespace engine {
* @todo WIP-WIP 12/2024 this is a design sketch to explore extension capabilities of BufferProvider
*/
class BufferProxyProvider
: util::MoveOnly
: util::NonCopyable
{
std::function<void(size_t,BufferState)> listener_;
using Listener = std::function<void(size_t,BufferState)>;
class ForwardingBufferProvider
: public BufferProvider
{
Listener listener_;
/* === BufferProvider API === */
uint
prepareBuffers (uint, HashVal) override
{
NOTREACHED ("this part of the API should not be used");
return 1; // can not sensibly do anything for "pre-allocation",
} // other than telling the caller that we only "have one buffer to provide"
BuffHandle
provideLockedBuffer (HashVal typeID) override
{
/////////////////////////////////////////////////////////////////////////////////////TICKET #1387 : BufferProvider default impl. is lacking means to compose and delegate
// return buildHandle (typeID, asBuffer(newBlock.accessMemory()), &newBlock);
}
void
mark_emitted (HashVal, LocalTag const&) override
{
}
void
detachBuffer (HashVal, LocalTag const&, Buff&) override
{
}
public:
ForwardingBufferProvider (Listener listener)
: BufferProvider{"BufferProxyProvider"}
, listener_{std::move (listener)}
{ }
};
ForwardingBufferProvider passThroughProvider_;
public:
template<class LIS, typename = lib::meta::disable_if_self<BufferProxyProvider, LIS>>
BufferProxyProvider (LIS&& listener)
: listener_{std::forward<LIS> (listener)}
: passThroughProvider_{std::forward<LIS> (listener)}
{ }
template<typename TAR>
BuffHandle
lockBuffer (TAR& dataBlock)
{
//////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1387 : impossible due to inner contradictions in BufferProvider and OutputSlot
UNIMPLEMENTED ("setup type handler and then create a locked BuffHandle");
}

View file

@ -32,11 +32,11 @@ namespace test {
/***************************************************************//**
* @test verify the OutputSlot interface and base implementation
* by performing full data exchange cycle. This is a
* kind of "dry run" for documentation purposes,
* both the actual OutputSlot implementation
* as the client using this slot are Mocks.
* @test verify the design of OutputSlot and BufferProvider by
* implementing a delegating BufferProvider to expose
* output data buffers provided from _some implementation._
* @todo WIP-WIP 12/2024 this turned out to be impossible,
* due to inconsistencies in the default implementation. /////////////////////////////////////////////TICKET #1387 : need to consolidate BufferProvider default implementation
*/
class OutputProxyProvider_test : public Test
{
@ -60,7 +60,7 @@ namespace test {
TestFrame dataBlock (frameNr);
CHECK ( dataBlock.isPristine());
BuffHandle handle = proxPro.lockBuffer (dataBlock);
BuffHandle handle = proxPro.lockBuffer (dataBlock); ///////////////////////////////////////////////TICKET #1387 : unable to implement this
// Now a »client« can do awful things to the buffer...
CHECK (handle.isValid());

View file

@ -28459,9 +28459,7 @@
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1555080572765" ID="ID_577805455" MODIFIED="1576282358065" TEXT="im Detail etwas komplexer...">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
aber es bleibt bei diesem Prinzip.
@ -29130,9 +29128,7 @@
</node>
<node CREATED="1555808311417" ID="ID_1932269477" MODIFIED="1576282358062" TEXT="oder ist es grade ein Vorteil, wenn sie ein roher Baustein ist">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
...weil man stets noch einen Layer dar&#252;bersetzt?
@ -29691,9 +29687,7 @@
<node CREATED="1674176756797" ID="ID_1711694466" MODIFIED="1674176762735" TEXT="berechnet als 14+68+82"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1674177671455" ID="ID_200566627" MODIFIED="1674254483689" TEXT="m&#xf6;glicherweise ist die kombinierte Spalte das Problem">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
|o| cH(line=0) += (14,14)
@ -30878,9 +30872,7 @@
</node>
<node CREATED="1542383648143" FOLDED="true" HGAP="41" ID="ID_718536842" MODIFIED="1557498707230" VSHIFT="-6">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
<b>nicht alles</b>&#160;wird gezeichnet
@ -30962,9 +30954,7 @@
<node CREATED="1566394504879" ID="ID_106666528" MODIFIED="1566394519122" TEXT="Diskussion 90er-Look vs flat design"/>
<node CREATED="1566394541001" ID="ID_878559119" MODIFIED="1566394556367">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
<i>manchmal</i>&#160;ist die alte L&#246;sung besser
@ -31985,9 +31975,7 @@
<icon BUILTIN="button_ok"/>
<node CREATED="1678925372624" ID="ID_348250165" MODIFIED="1678925428123">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
TiddlyWiki + <font face="Monospaced" color="#a63077">doc/technical/stage/style/Timeline.txt</font>
@ -32430,9 +32418,7 @@
<node CREATED="1564499271812" ID="ID_287796510" MODIFIED="1564499291455" TEXT="getBorder() macht eine Kopie des Rect"/>
<node CREATED="1564500049627" ID="ID_422878118" MODIFIED="1564500092094" TEXT="auch die unterliegenden CssValues sind immutable">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
und mehrfach gekapselt.
@ -33328,9 +33314,7 @@
<node CREATED="1611478208171" ID="ID_383778310" MODIFIED="1611478224282" TEXT="in jedem (Teil)-Canvas die &quot;nat&#xfc;rlichen&quot; Eigen-Koordinaten zu verwenden"/>
<node CREATED="1611478227499" ID="ID_1352834162" MODIFIED="1611482079208" TEXT="die &#xdc;bersetzung komplett via ViewHook wegzuabstrahieren">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
tats&#228;chlich ist es dann ein Sub-Interface: der CanvasHook. Und dieser
@ -88166,6 +88150,10 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<arrowlink COLOR="#fe018a" DESTINATION="ID_673154392" ENDARROW="Default" ENDINCLINATION="3;-16;" ID="Arrow_ID_894402730" STARTARROW="None" STARTINCLINATION="-151;11;"/>
<icon BUILTIN="yes"/>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1735004660507" ID="ID_1088386150" MODIFIED="1735005563022" TEXT="#1387 Memory handling scheme for render buffers">
<arrowlink COLOR="#ff2921" DESTINATION="ID_1747509213" ENDARROW="Default" ENDINCLINATION="-965;-57;" ID="Arrow_ID_1750574936" STARTARROW="None" STARTINCLINATION="1192;64;"/>
<icon BUILTIN="flag-pink"/>
</node>
</node>
</node>
<node CREATED="1713823918124" ID="ID_1749289662" MODIFIED="1713823922851" TEXT="Testbarkeit">
@ -94715,8 +94703,34 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1722279912483" ID="ID_1933308272" MODIFIED="1734901237987" TEXT="er belegt den Buffer per DataSink::lockBufferFor(Frame)">
<linktarget COLOR="#53677e" DESTINATION="ID_1933308272" ENDARROW="Default" ENDINCLINATION="170;9;" ID="Arrow_ID_463152101" SOURCE="ID_1044436621" STARTARROW="None" STARTINCLINATION="119;-239;"/>
</node>
<node CREATED="1722279973483" ID="ID_1607488895" MODIFIED="1722279984643" TEXT="er erstellt daraus das BufferHandle"/>
<node CREATED="1722279985641" ID="ID_1333031416" MODIFIED="1722280003882" TEXT="dieses ist so verdrahtet, da&#xdf; es den emit()-Aufruf weitergibt"/>
<node CREATED="1722279973483" ID="ID_1607488895" MODIFIED="1722279984643" TEXT="er erstellt daraus das BufferHandle">
<node CREATED="1734920682275" HGAP="37" ID="ID_416353249" MODIFIED="1734920740712" TEXT="das sollte bereits DataSink machen" VSHIFT="6">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<ul>
<li>
DataSink liefert ein BuffHandle, hat dann aber eine eigne Methode DataSink::emit()
</li>
<li>
die BuffHandle::emit()-Methode ist nicht richtig integriert...
</li>
<li>
deshalb kann derzeit (12/2024) der Render-Node-Code nicht korrekt mit Output-Buffern umgehen!
</li>
<li>
Grund ist zu enge Verkopplung mit der Default-Implementierung. Siehe #1387
</li>
</ul>
</body>
</html></richcontent>
<arrowlink DESTINATION="ID_1333031416" ENDARROW="Default" ENDINCLINATION="86;0;" ID="Arrow_ID_818357501" STARTARROW="None" STARTINCLINATION="77;7;"/>
<icon BUILTIN="idea"/>
</node>
</node>
<node CREATED="1722279985641" ID="ID_1333031416" MODIFIED="1734920740713" TEXT="dieses ist so verdrahtet, da&#xdf; es den emit()-Aufruf weitergibt">
<linktarget COLOR="#a9b4c1" DESTINATION="ID_1333031416" ENDARROW="Default" ENDINCLINATION="86;0;" ID="Arrow_ID_818357501" SOURCE="ID_416353249" STARTARROW="None" STARTINCLINATION="77;7;"/>
</node>
</node>
</node>
<node CREATED="1722280039959" ID="ID_1636377754" MODIFIED="1722280058164" TEXT="M&#xf6;glichkeit-4 : das Output-Protocol umbauen">
@ -94796,8 +94810,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</html></richcontent>
</node>
<node CREATED="1722444704965" ID="ID_329807269" MODIFIED="1722444730742" TEXT="Aber: nicht den BufferProvider austauschen, sondern blo&#xdf; das BuffHandle"/>
<node CREATED="1722445156984" ID="ID_204443476" MODIFIED="1734901315145" TEXT="der spezielle BufferProvider w&#xfc;rde au&#xdf;erhalb, im Top-Level verwendet">
<linktarget COLOR="#7b6890" DESTINATION="ID_204443476" ENDARROW="Default" ENDINCLINATION="40;118;" ID="Arrow_ID_594871915" SOURCE="ID_741480483" STARTARROW="None" STARTINCLINATION="138;-806;"/>
<node CREATED="1722445156984" ID="ID_204443476" MODIFIED="1734920752327" TEXT="der spezielle BufferProvider w&#xfc;rde au&#xdf;erhalb, im Top-Level verwendet">
<linktarget COLOR="#7b6890" DESTINATION="ID_204443476" ENDARROW="Default" ENDINCLINATION="-19;547;" ID="Arrow_ID_594871915" SOURCE="ID_741480483" STARTARROW="None" STARTINCLINATION="138;-806;"/>
<node CREATED="1734901163415" ID="ID_1044436621" MODIFIED="1734901245821" TEXT="er schl&#xe4;gt die Br&#xfc;cke zum OutputSlot-Protokoll">
<arrowlink COLOR="#53677e" DESTINATION="ID_1933308272" ENDARROW="Default" ENDINCLINATION="170;9;" ID="Arrow_ID_463152101" STARTARROW="None" STARTINCLINATION="119;-239;"/>
</node>
@ -95165,7 +95179,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1731889686746" ID="ID_5123490" MODIFIED="1731889696552" TEXT="konkreter Buffer-Typ"/>
<node CREATED="1731889697236" ID="ID_1573431621" MODIFIED="1731889706151" TEXT="StreamType / ImplType?"/>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1731890121591" HGAP="46" ID="ID_1319945622" MODIFIED="1731890346832" TEXT="wird relevant in dem Moment wo wir aufrufen wollen...." VSHIFT="-1">
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1731890121591" HGAP="46" ID="ID_1319945622" MODIFIED="1735004946234" TEXT="wird relevant in dem Moment wo wir aufrufen wollen...." VSHIFT="-1">
<arrowlink COLOR="#e0092c" DESTINATION="ID_1476280091" ENDARROW="Default" ENDINCLINATION="60;-97;" ID="Arrow_ID_602010804" STARTARROW="None" STARTINCLINATION="-541;28;"/>
<linktarget COLOR="#bb4c6b" DESTINATION="ID_1319945622" ENDARROW="Default" ENDINCLINATION="-663;35;" ID="Arrow_ID_542692149" SOURCE="ID_447051297" STARTARROW="None" STARTINCLINATION="745;112;"/>
<icon BUILTIN="flag-pink"/>
</node>
@ -95190,6 +95205,24 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1721238814245" ID="ID_1476280091" MODIFIED="1735004940722" TEXT="Schwierigkeit: BufferProvider im OutputSlot Protokoll">
<linktarget COLOR="#fe512a" DESTINATION="ID_1476280091" ENDARROW="Default" ENDINCLINATION="-997;55;" ID="Arrow_ID_4728843" SOURCE="ID_1160117239" STARTARROW="None" STARTINCLINATION="-865;41;"/>
<linktarget COLOR="#e0092c" DESTINATION="ID_1476280091" ENDARROW="Default" ENDINCLINATION="60;-97;" ID="Arrow_ID_602010804" SOURCE="ID_1319945622" STARTARROW="None" STARTINCLINATION="-541;28;"/>
<icon BUILTIN="bell"/>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1735004955001" ID="ID_393137872" MODIFIED="1735005013973" TEXT="DataSink soll ein BuffHandle liefern">
<icon BUILTIN="broken-line"/>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1735004968712" ID="ID_62347373" MODIFIED="1735005006450" TEXT="aber BufferProvider ist nicht auf Delegieren ausgelegt">
<icon BUILTIN="messagebox_warning"/>
</node>
<node COLOR="#5b280f" CREATED="1735005016587" ID="ID_348220482" MODIFIED="1735005042022" TEXT="deshalb verwendet DataSink eine separate emit()-Methode">
<icon BUILTIN="stop-sign"/>
</node>
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1735005044143" ID="ID_1580601333" MODIFIED="1735005667664" TEXT="die ist aber f&#xfc;r die Node-Invocation gar nicht zug&#xe4;nglich">
<linktarget COLOR="#cc0a6d" DESTINATION="ID_1580601333" ENDARROW="Default" ENDINCLINATION="-290;14;" ID="Arrow_ID_972000949" SOURCE="ID_1501030777" STARTARROW="None" STARTINCLINATION="579;-32;"/>
<icon BUILTIN="broken-line"/>
</node>
</node>
</node>
</node>
</node>
</node>
@ -97845,6 +97878,16 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<linktarget COLOR="#cc6e7f" DESTINATION="ID_159987338" ENDARROW="Default" ENDINCLINATION="-37;-657;" ID="Arrow_ID_717618496" SOURCE="ID_1168268714" STARTARROW="None" STARTINCLINATION="827;61;"/>
<linktarget COLOR="#cc6e7f" DESTINATION="ID_159987338" ENDARROW="Default" ENDINCLINATION="677;44;" ID="Arrow_ID_544228779" SOURCE="ID_1155618733" STARTARROW="Default" STARTINCLINATION="128;-1039;"/>
<icon BUILTIN="messagebox_warning"/>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1735004660507" ID="ID_1747509213" LINK="https://issues.lumiera.org/ticket/1387" MODIFIED="1735005639316" TEXT="#1387 Buffer Memory Handling konsolidieren">
<linktarget COLOR="#ff2921" DESTINATION="ID_1747509213" ENDARROW="Default" ENDINCLINATION="-965;-57;" ID="Arrow_ID_1750574936" SOURCE="ID_1088386150" STARTARROW="None" STARTINCLINATION="1192;64;"/>
<linktarget COLOR="#fde0ca" DESTINATION="ID_1747509213" ENDARROW="Default" ENDINCLINATION="-965;-57;" ID="Arrow_ID_1729225053" SOURCE="ID_1832590841" STARTARROW="None" STARTINCLINATION="-1804;99;"/>
<icon BUILTIN="flag-pink"/>
</node>
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1735005083801" ID="ID_1501030777" MODIFIED="1735005667664" TEXT="Weaving Pattern kann nicht mit Output-Buffern umgehen">
<arrowlink COLOR="#cc0a6d" DESTINATION="ID_1580601333" ENDARROW="Default" ENDINCLINATION="-290;14;" ID="Arrow_ID_972000949" STARTARROW="None" STARTINCLINATION="579;-32;"/>
<linktarget COLOR="#e3073a" DESTINATION="ID_1501030777" ENDARROW="Default" ENDINCLINATION="49;113;" ID="Arrow_ID_969824036" SOURCE="ID_1911052508" STARTARROW="None" STARTINCLINATION="-147;10;"/>
<icon BUILTIN="broken-line"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734893714728" ID="ID_1390040531" MODIFIED="1734894128783" TEXT="Invocation auf Node-Level">
@ -97870,7 +97913,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1734894268221" ID="ID_678148622" MODIFIED="1734894274280" TEXT="scheee...">
<icon BUILTIN="ksmiletris"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734894277732" ID="ID_1911052508" MODIFIED="1734894296705">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734894277732" ID="ID_1911052508" MODIFIED="1735005215586">
<richcontent TYPE="NODE"><html>
<head/>
<body>
@ -97878,8 +97921,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
brauche also <i>nur noch</i>&#160;ein BuffHandle hier
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<arrowlink COLOR="#e3073a" DESTINATION="ID_1501030777" ENDARROW="Default" ENDINCLINATION="49;113;" ID="Arrow_ID_969824036" STARTARROW="None" STARTINCLINATION="-147;10;"/>
<icon BUILTIN="flag-yellow"/>
</node>
</node>
@ -97905,8 +97948,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
das w&#252;rde mir eigentlich gefallen &#10233; packe ich diesen Schritt <b>JETZT</b>?
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<icon BUILTIN="yes"/>
<node CREATED="1734895218741" ID="ID_1995663657" MODIFIED="1734895230611" TEXT="ich glaube da&#xdf; &quot;Ja&quot;"/>
<node CREATED="1734895343709" ID="ID_352184052" MODIFIED="1734895434823" TEXT="Parameter: nur Zeit + Key sind unabdingbar">
@ -98039,8 +98081,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
Das k&#246;nnte ggfs. sogar eine automatische Transformation sein, auf Basis des jetzt definierten Node-Modells; man w&#252;rde dann eine DAG &#10236; Tree -Transformation machen und dann die jeweilge ausf&#252;hrbare Node &#252;ber ein Lambda-Binding &#252;ber eine Prototyp-Node erzeugen.
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<icon BUILTIN="forward"/>
</node>
</node>
@ -98057,11 +98098,10 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
alles andere w&#252;rde eine Art Kollaboration oder Protokoll implizieren
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
<node COLOR="#5b280f" CREATED="1734901125292" ID="ID_741480483" MODIFIED="1734907065705" TEXT="es braucht dann doch einen Proxy-Buffer-Provider">
<arrowlink COLOR="#7b6890" DESTINATION="ID_204443476" ENDARROW="Default" ENDINCLINATION="40;118;" ID="Arrow_ID_594871915" STARTARROW="None" STARTINCLINATION="138;-806;"/>
<node COLOR="#5b280f" CREATED="1734901125292" ID="ID_741480483" MODIFIED="1734920752327" TEXT="es braucht dann doch einen Proxy-Buffer-Provider">
<arrowlink COLOR="#7b6890" DESTINATION="ID_204443476" ENDARROW="Default" ENDINCLINATION="-19;547;" ID="Arrow_ID_594871915" STARTARROW="None" STARTINCLINATION="138;-806;"/>
<icon BUILTIN="button_cancel"/>
<node CREATED="1734901329053" ID="ID_890459099" MODIFIED="1734901340477" TEXT="war mal als generischer OutputBufferProvider geplant"/>
<node CREATED="1734901344895" ID="ID_1829576069" MODIFIED="1734901358806" TEXT="nach der Analys und dem Design mit dem LocalTag aufgegeben"/>
@ -98105,8 +98145,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
Deshalb m&#246;chte ich nun doch einmal aus-implementieren, was denn erforderlich w&#228;re, einen <b>frei-stehenden</b>&#160;Buffer-Provider neu zu implementieren, welcher an einen dahinter liegenden OutputSlot delegiert....
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<linktarget COLOR="#30ff00" DESTINATION="ID_579607510" ENDARROW="Default" ENDINCLINATION="35;-65;" ID="Arrow_ID_660020375" SOURCE="ID_1073109637" STARTARROW="None" STARTINCLINATION="-185;13;"/>
<icon BUILTIN="flag-yellow"/>
<node CREATED="1734903143791" ID="ID_1525724764" MODIFIED="1734903173828" TEXT="ein limitierter Proxy Buffer-Provider">
@ -98149,8 +98188,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
...und zwar schon l&#228;ngere Zeit bez&#252;glich der <i>Implementierung</i>&#160; des BufferProvider &#8212; das Konzept halte ich f&#252;r sehr wichtig und auch gelngen. Aber immer wieder, wenn ich dann die Implementierung anschaue, dann springt man irgendwo zwischen dieser Default-Implementierung und dem TrackingHeapBlockProvider hin und her &#8212; und der ganze Code &#8222;riecht schief&#8220;, irgendwie (wei&#223; aber nicht warum) ... Hinzu kommen Probleme (und, wie ich inzwischen wei&#223;, tats&#228;chliche Bugs) in der Typ-Registrierung, also BufferMetadata
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
<node CREATED="1734908668473" ID="ID_1923176208" MODIFIED="1734908680600" TEXT="andererseits sollte man das einfach zusammend&#xe4;ngeln k&#xf6;nnen"/>
<node CREATED="1734908683135" ID="ID_137786655" MODIFIED="1734908706479" TEXT="und dann k&#xf6;nnte man klarer sehen, was die Buffer-Provider default-Implementierung taugt"/>
@ -98163,8 +98201,171 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node CREATED="1734915691998" ID="ID_878475118" MODIFIED="1734915711342" TEXT="&#xfc;ber einen Listener von den Protokoll-Schritten benachrichtigt werden"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1734915714004" ID="ID_1586315790" MODIFIED="1734915746917" TEXT="Proxy-Implementierung &#xfc;ber private BufferProvider-Impl">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#5b280f" CREATED="1734915714004" ID="ID_1586315790" MODIFIED="1734998276312" TEXT="Proxy-Implementierung &#xfc;ber private BufferProvider-Impl">
<icon BUILTIN="button_cancel"/>
<node CREATED="1734919740843" ID="ID_1216051347" MODIFIED="1734919756141" TEXT="TrackingHeapBlockProvider-Implementierung lesen....">
<node CREATED="1734919757688" ID="ID_1725773036" MODIFIED="1734919925652" TEXT="sieht jetzt wieder ganz offensichtlich aus">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...es sind ja nur vier abstrakte Methoden zu implementieren, die die tats&#228;chlichen Zustands&#252;berg&#228;nge markieren
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1734919769391" ID="ID_1373808995" MODIFIED="1734919895583">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
die Idee war damals wohl, da&#223; die BufferProvider-Basis-Impl einen <i>Sicherheits-Layer</i>&#160; bietet
</p>
</body>
</html></richcontent>
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...will sagen, die Implementierung mu&#223; sich blo&#223; noch um ihr eigenes Memory-Management k&#252;mmern, aber nicht mehr darum, Typen und Lifecycle-Phasen zu tracken. Das erscheint mir nun durchaus ein plausibler Ansatz zu sein (h&#228;tte man blo&#223; besser dokumentieren sollen)
</p>
</body>
</html></richcontent>
<icon BUILTIN="idea"/>
</node>
</node>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1734919936639" ID="ID_1371720455" MODIFIED="1734919955314" TEXT="Frage: was registrieren wir also als Descriptor?">
<icon BUILTIN="help"/>
<node CREATED="1734919957318" ID="ID_1734760542" MODIFIED="1734919997853" TEXT="wir wollen hier erst mal keinerlei &#xbb;auto-placement&#xab;">
<icon BUILTIN="yes"/>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1734919974540" ID="ID_381640008" MODIFIED="1734919993649" TEXT="k&#xf6;nnte man sp&#xe4;ter noch draufsatteln....">
<font NAME="SansSerif" SIZE="10"/>
<icon BUILTIN="hourglass"/>
</node>
</node>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1734920107873" ID="ID_1746490029" MODIFIED="1734920133153" TEXT="damit reduziert sich aber die Typ-Registrierung rein auf die Storage-Gr&#xf6;&#xdf;e">
<icon BUILTIN="messagebox_warning"/>
</node>
<node COLOR="#5b280f" CREATED="1734920139741" ID="ID_1313207379" MODIFIED="1734920165622" TEXT="das gen&#xfc;gt nicht">
<icon BUILTIN="closed"/>
<node CREATED="1734920195773" ID="ID_220914611" MODIFIED="1734920200393" TEXT="oder doch?">
<node CREATED="1734921431454" ID="ID_123233296" MODIFIED="1734921445152" TEXT="in den konkreten Typ (HashKey) geht die Buffer-Adressse ein"/>
<node CREATED="1734921449556" ID="ID_460391398" MODIFIED="1734921472324" TEXT="und ggfs. zus&#xe4;tzlich das LocalTag (das dann aber im Parent nicht gesetzt sein darf)"/>
</node>
<node CREATED="1734921474623" ID="ID_1175854038" MODIFIED="1734921501112" TEXT="diesen konkreten Typ (also diese Adresse) darf man nur einmal locken"/>
</node>
</node>
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1734920777070" ID="ID_1821068828" MODIFIED="1734920821636" TEXT="Problem: die vorgegebene Adresse ins BuffHandle &#xfc;bertragen">
<icon BUILTIN="broken-line"/>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1734920824441" ID="ID_624823364" MODIFIED="1734920846332" TEXT="gef&#xfc;hlsm&#xe4;&#xdf;ig ist genau hier der Knoten im Design">
<icon BUILTIN="messagebox_warning"/>
<node COLOR="#5b280f" CREATED="1734921591825" ID="ID_1860867282" MODIFIED="1734921664368" TEXT="(virtual) provideLockedBuffer &#x27f5; nur von lockBuffer(Desrc) aufgerufen">
<icon BUILTIN="broken-line"/>
</node>
<node CREATED="1734921647001" ID="ID_241122408" MODIFIED="1734921704408" TEXT="d.h. es gibt nur diesen einzigen Pfad">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
und das Ergebnis, das BuffHandle &quot;ist es dann auch&quot;
</p>
</body>
</html></richcontent>
</node>
</node>
<node CREATED="1734920849660" ID="ID_1514999057" MODIFIED="1734920879576" TEXT="...auff&#xe4;lligerweise tricksen alle bisher bekannten Implementierungen mit dem &#xbb;LocalTag&#xab;">
<icon BUILTIN="clanbomber"/>
</node>
<node CREATED="1734921822219" ID="ID_1812269406" MODIFIED="1734921898515" TEXT="also &#x2014; wenn &#xfc;berhaupt, dann m&#xfc;&#xdf;te das LocalTag in provideLockedBuffer mitgegeben werden"/>
<node CREATED="1734922029549" ID="ID_1100314957" MODIFIED="1734922045485" TEXT="das w&#xe4;re dann eine (optional nutzbare) &#xbb;Hintert&#xfc;r&#xab;">
<node CREATED="1734922052257" ID="ID_1465090356" MODIFIED="1734922072323" TEXT="also gl&#xfc;cklich bin ich mit diesem Design nicht...">
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="smiley-neutral"/>
</node>
<node CREATED="1734922084008" ID="ID_548220515" MODIFIED="1734922155412">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
allerdings war das Design nie etwas anderes als&#160;<i>vorl&#228;ufig</i>
</p>
</body>
</html>
</richcontent>
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...denn in all honesty, die Pr&#228;misse war und ist, da&#223; man auf dieser Basis einen echten BufferProvider implementieren k&#246;nnen d&#252;rfen sollte
</p>
</body>
</html>
</richcontent>
</node>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#650099" CREATED="1734922183448" ID="ID_410220659" MODIFIED="1734963807037" TEXT="also durch die Hintert&#xfc;r gehen?">
<icon BUILTIN="help"/>
<node CREATED="1734963612356" ID="ID_595048331" MODIFIED="1734963638965" TEXT="die Bedeutung des LocalTag habe ich schon nachgesch&#xe4;rft"/>
<node CREATED="1734963640916" ID="ID_1219225733" MODIFIED="1734963697420" TEXT="es sollte ein essentielles Merkmal im Anwendungsfall darstellen"/>
<node CREATED="1734963699688" ID="ID_1232330574" MODIFIED="1734963719840" TEXT="hier ist das definitiv die bestimmte Speicher-Adresse"/>
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1734963767255" ID="ID_194976077" MODIFIED="1734963791910" TEXT="Insofern: das ist ein valider Zugang">
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
<icon BUILTIN="yes"/>
</node>
</node>
</node>
<node CREATED="1734964608165" ID="ID_399530510" MODIFIED="1734998018142" TEXT="einen offiziellen Zugang mit Zustatz-Info schafen...?">
<node CREATED="1734964627594" ID="ID_1037692936" MODIFIED="1734997526342" TEXT="Frage: beide qualifizierende Detail-Infos?">
<node CREATED="1734965120531" ID="ID_1584497125" MODIFIED="1734965128727" TEXT="ein LocalTag"/>
<node CREATED="1734965129950" ID="ID_424022129" MODIFIED="1734965135601" TEXT="eine Adresse"/>
</node>
<node CREATED="1734965138870" ID="ID_1530672531" MODIFIED="1734965191874" TEXT="die Interface-Methode provideLockedBuffer symmetrisch zu detachBuffer"/>
<node CREATED="1734965377702" ID="ID_1007085431" MODIFIED="1734965393200" TEXT="auch prepareBuffers sollte ein optionales LocalTag akzeptieren"/>
<node CREATED="1734965605030" ID="ID_640801382" MODIFIED="1734965635056" TEXT="dies ist aber nur ein API f&#xfc;r abgeleitete Klassen">
<node CREATED="1734965642496" ID="ID_76298640" MODIFIED="1734965648781" TEXT="das ist wichtig"/>
<node CREATED="1734965650073" ID="ID_153512216" MODIFIED="1734965668179" TEXT="die Interpretation von LocalTag geh&#xf6;rt dem Implementator"/>
<node CREATED="1734965670301" ID="ID_183213969" MODIFIED="1734965686112" TEXT="LocalTag sollte nie in dieser Form auf das public API gelangen"/>
</node>
<node BACKGROUND_COLOR="#ddab9a" COLOR="#990033" CREATED="1734997559023" ID="ID_542332973" MODIFIED="1734997748715" TEXT="Vorsicht! Wie legt eigentlich OutputSlot den Typ an??">
<arrowlink COLOR="#de054b" DESTINATION="ID_1650398278" ENDARROW="Default" ENDINCLINATION="29;-92;" ID="Arrow_ID_1889984976" STARTARROW="None" STARTINCLINATION="-411;22;"/>
<icon BUILTIN="help"/>
<node CREATED="1734998092530" ID="ID_1890469222" MODIFIED="1734998144523" TEXT="macht nur die Dummy-Impl (im ctor)"/>
<node CREATED="1734998118124" ID="ID_1704898808" MODIFIED="1734998162177" TEXT="BuffDesrc bufferType_ &#x2254; buffProvider_.getDescriptor&lt;TestFrame&gt;()"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1734997567180" ID="ID_1650398278" MODIFIED="1734998330539" TEXT="Schwerwiegende Design-Probleme">
<arrowlink COLOR="#ff117a" DESTINATION="ID_149589561" ENDARROW="Default" ENDINCLINATION="158;17;" ID="Arrow_ID_1019099346" STARTARROW="None" STARTINCLINATION="-68;116;"/>
<linktarget COLOR="#de054b" DESTINATION="ID_1650398278" ENDARROW="Default" ENDINCLINATION="29;-92;" ID="Arrow_ID_1889984976" SOURCE="ID_542332973" STARTARROW="None" STARTINCLINATION="-411;22;"/>
<icon BUILTIN="broken-line"/>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1734997763651" ID="ID_1134096744" MODIFIED="1734997799494" TEXT="die OutpotSlot::Connection arbeitet am BufferProvider vorbei">
<icon BUILTIN="messagebox_warning"/>
</node>
<node BACKGROUND_COLOR="#fed199" COLOR="#c90056" CREATED="1734997802742" ID="ID_662253623" MODIFIED="1734997859748" TEXT="der Client kann aber (und wird tats&#xe4;chlich) BuffHandle::emit() aufrufen">
<icon BUILTIN="broken-line"/>
</node>
<node BACKGROUND_COLOR="#f4a9a4" COLOR="#ea015e" CREATED="1734997909991" ID="ID_639039454" MODIFIED="1734997979245" TEXT="fest in OutputProvider eingabauter BufferMetata-Ptr ist so nicht Threadsafe">
<icon BUILTIN="broken-line"/>
</node>
<node BACKGROUND_COLOR="#bda4e7" COLOR="#5b280f" CREATED="1734998206023" ID="ID_629938630" MODIFIED="1734998258936" TEXT="Interface und Default-Impl sind viel zu eng verflochten">
<icon BUILTIN="stop-sign"/>
</node>
</node>
</node>
<node COLOR="#5b280f" CREATED="1734998279533" ID="ID_149589561" MODIFIED="1734998323684" TEXT="so nicht durchf&#xfc;hrbar!">
<linktarget COLOR="#ff117a" DESTINATION="ID_149589561" ENDARROW="Default" ENDINCLINATION="158;17;" ID="Arrow_ID_1019099346" SOURCE="ID_1650398278" STARTARROW="None" STARTINCLINATION="-68;116;"/>
<icon BUILTIN="closed"/>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1721238837562" HGAP="148" ID="ID_1160117239" MODIFIED="1735004853222" STYLE="bubble" TEXT="Output BufferProvider kann nicht delegieren" VSHIFT="44">
<edge COLOR="#ff5d00" STYLE="sharp_linear"/>
<arrowlink COLOR="#fe512a" DESTINATION="ID_284736049" ENDARROW="Default" ENDINCLINATION="1101;-48;" ID="Arrow_ID_749038566" STARTARROW="None" STARTINCLINATION="-865;41;"/>
<arrowlink COLOR="#fe512a" DESTINATION="ID_1476280091" ENDARROW="Default" ENDINCLINATION="-997;55;" ID="Arrow_ID_4728843" STARTARROW="None" STARTINCLINATION="-865;41;"/>
<icon BUILTIN="bell"/>
<node CREATED="1721239003353" ID="ID_1369893688" MODIFIED="1735004566787" STYLE="fork" TEXT="Er bekommt einen Buffer von &#x201e;woanders&#x201c;">
<font NAME="SansSerif" SIZE="8"/>
</node>
<node CREATED="1721239003353" ID="ID_1138093656" MODIFIED="1735004585568" STYLE="fork" TEXT="mu&#xdf; Lifecylce-Events delegieren k&#xf6;nnen">
<font NAME="SansSerif" SIZE="8"/>
</node>
</node>
</node>
</node>
</node>
@ -100036,6 +100237,10 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<linktarget COLOR="#fe512a" DESTINATION="ID_344362560" ENDARROW="Default" ENDINCLINATION="1101;-48;" ID="Arrow_ID_1035098256" SOURCE="ID_285031565" STARTARROW="None" STARTINCLINATION="-799;81;"/>
<icon BUILTIN="bell"/>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1721238814245" ID="ID_284736049" MODIFIED="1735004524906" TEXT="Schwierigkeit: BufferProvider schwer zu Erweitern">
<linktarget COLOR="#fe512a" DESTINATION="ID_284736049" ENDARROW="Default" ENDINCLINATION="1101;-48;" ID="Arrow_ID_749038566" SOURCE="ID_1160117239" STARTARROW="None" STARTINCLINATION="-865;41;"/>
<icon BUILTIN="bell"/>
</node>
</node>
<node BACKGROUND_COLOR="#e2caa2" COLOR="#990000" CREATED="1729956600896" ID="ID_1377083965" MODIFIED="1729956915005" STYLE="fork" TEXT="Einsichten">
<edge COLOR="#b14253" STYLE="sharp_linear"/>
@ -148844,6 +149049,10 @@ unsigned int ThreadIdAsInt = *static_cast&lt;unsigned int*&gt;(static_cast&lt;vo
<arrowlink COLOR="#fde0ca" DESTINATION="ID_943908122" ENDARROW="Default" ENDINCLINATION="-1682;204;" ID="Arrow_ID_1115019309" STARTARROW="None" STARTINCLINATION="-1643;116;"/>
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1735004660507" ID="ID_1832590841" LINK="https://issues.lumiera.org/ticket/1387" MODIFIED="1735005639316" TEXT="#1387 Memory handling scheme for render buffers">
<arrowlink COLOR="#fde0ca" DESTINATION="ID_1747509213" ENDARROW="Default" ENDINCLINATION="-965;-57;" ID="Arrow_ID_1729225053" STARTARROW="None" STARTINCLINATION="-1804;99;"/>
<icon BUILTIN="flag-yellow"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1680196129567" ID="ID_988036389" LINK="https://issues.lumiera.org/ticket/1288" MODIFIED="1680392639594" TEXT="#1288 simple video display widget">
<icon BUILTIN="flag-yellow"/>