mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-09-22 03:08:11 +08:00
Export the async-source flag from the macro and dispatch superseded type deltas in tests
This commit is contained in:
@@ -96,33 +96,6 @@ impl NodeNetworkInterface {
|
||||
}
|
||||
}
|
||||
|
||||
/// Append the hidden runtime and source-id inputs to async-source protonodes saved before their injection.
|
||||
/// Runs after the identifier replacement pass, so it matches only current identifier spellings.
|
||||
pub fn migrate_async_source_inputs(&mut self) {
|
||||
const PRE_INJECTION_ARITIES: [(&str, usize); 5] = [
|
||||
("graphene_std::platform_application_io::GetRequestNode", 4),
|
||||
("graphene_std::platform_application_io::PostRequestNode", 5),
|
||||
("graphene_std::platform_application_io::LoadResourceNode", 2),
|
||||
("graphene_std::platform_application_io::RasterizeNode", 3),
|
||||
("graphene_std::platform_application_io::ResourceNode", 2),
|
||||
];
|
||||
fix_network(self.document_network_mut());
|
||||
fn fix_network(network: &mut NodeNetwork) {
|
||||
for node in network.nodes.values_mut() {
|
||||
if let Some(network) = node.implementation.get_network_mut() {
|
||||
fix_network(network);
|
||||
}
|
||||
if let DocumentNodeImplementation::ProtoNode(protonode) = &node.implementation
|
||||
&& let Some(base) = protonode.as_str().split('<').next()
|
||||
&& let Some((_, arity)) = PRE_INJECTION_ARITIES.iter().find(|(identifier, _)| *identifier == base)
|
||||
&& node.inputs.len() == *arity
|
||||
{
|
||||
node.inputs.push(NodeInput::scope("graphene_std::runtime::RuntimeNode"));
|
||||
node.inputs.push(NodeInput::Reflection(graph_craft::document::DocumentNodeMetadata::SourceId));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Public immutable getters for the network interface
|
||||
|
||||
@@ -1148,8 +1148,6 @@ pub fn document_migration_upgrades(document: &mut DocumentMessageHandler, reset_
|
||||
}
|
||||
}
|
||||
|
||||
document.network_interface.migrate_async_source_inputs();
|
||||
|
||||
// The "Brush" wrapper network was replaced with the `brush` proto node directly. Convert old `Network("Brush")` instances to the proto node, forwarding all 3 inputs (Background, Trace, Cache) one-to-one.
|
||||
// This must run as a pre-pass before the recursive iteration below: replacing the outer Brush's network impl orphans its child paths, and the recursive iteration would log errors for those stale paths.
|
||||
let brush_layers: Vec<(NodeId, Vec<NodeId>)> = document
|
||||
|
||||
@@ -53,11 +53,16 @@ impl EditorTestUtils {
|
||||
}
|
||||
runtime.run().await;
|
||||
|
||||
// An async source reports `Pending` on the evaluation that starts it and marks the runtime dirty
|
||||
// once it completes, so the value only reaches the render on a follow-up evaluation. That first
|
||||
// response is superseded, so it is drained rather than asserted on.
|
||||
// An async source reports `Pending` on the evaluation that starts it and marks the runtime dirty once
|
||||
// it completes, so the value only reaches the render on a follow-up evaluation. The superseded response's
|
||||
// `Pending` error is ignored, but its messages carry the incremental resolved-types delta and must be
|
||||
// dispatched, or the editor's type map desyncs permanently.
|
||||
while runtime.take_dirty() {
|
||||
let _ = editor.poll_node_graph_evaluation(&mut VecDeque::new());
|
||||
let mut superseded_messages = VecDeque::new();
|
||||
let _ = editor.poll_node_graph_evaluation(&mut superseded_messages);
|
||||
for message in superseded_messages {
|
||||
editor.handle_message(message);
|
||||
}
|
||||
|
||||
let portfolio = &mut editor.dispatcher.message_handlers.portfolio_message_handler;
|
||||
let (executor, documents) = (&mut portfolio.executor, &mut portfolio.documents);
|
||||
|
||||
Reference in New Issue
Block a user