legacy-paperclip
legacy-paperclip copied to clipboard
PC Engine diff consumer
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).
Consumer can also be used to remove the importedSheets prop emitted by the engine
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.