legacy-paperclip icon indicating copy to clipboard operation
legacy-paperclip copied to clipboard

PC Engine diff consumer

Open crcn opened this issue 3 years ago • 2 comments
trafficstars

Currently, the engine delegate is doing all of the work around collecting related information about PC content, including all imported style sheets (even of dependencies). This is expensive, not to mention this information is also emitted over RPC.

To reduce some of the cost of this, it makes sense to have a consumer of emitted PC event data that can be used to aggregate this information for things like renderers. For example:

const delegate = createEngineDelegate();

// ... somewhere var events is wired up ...

const consumer = createEngineEventConsumer(events);


const frames = renderFrames(consumer.getContent("file.pc"));

for (const frame of frames) {
  document.body.appendChild(frame);
}

// Consumer handles all patching of PC content, and emits changes
consumer.onChange((uri, currContent, prevContent, event) => {
   patchFrames(frames, currContent, prevCount);
});

the editor client PC document should ever to a shared consumer that takes these events, then updates its own content when it changes.

Considerations

  • This this affect CRDTs (immediate hunch is no).

crcn avatar Jan 19 '22 14:01 crcn

Consumer can also be used to remove the importedSheets prop emitted by the engine

crcn avatar Jan 19 '22 14:01 crcn

Also need to be cognizant about consumers that are added after everything evaluates. Need to have some way of populating that data. One possibility is createEngineEventConsumer({ getAllData }) + feeding that through an adapter that works via RPC or in the same process as the engine delegate.

crcn avatar Jan 19 '22 14:01 crcn