diff --git a/packages/native-core/src/passes.rs b/packages/native-core/src/passes.rs index c6c212f5f..b7c3de826 100644 --- a/packages/native-core/src/passes.rs +++ b/packages/native-core/src/passes.rs @@ -380,6 +380,7 @@ pub fn resolve_passes( tree: &mut RealDom, dirty_nodes: DirtyNodeStates, ctx: SendAnyMap, + parallel: bool, ) -> FxDashSet { let passes = &tree.passes; let mut resolved_passes: FxHashSet = FxHashSet::default(); @@ -414,9 +415,13 @@ pub fn resolve_passes( let dirty_nodes = dirty_nodes.clone(); let nodes_updated = nodes_updated.clone(); let ctx = ctx.clone(); - s.spawn(move |_| { + if parallel { + s.spawn(move |_| { + pass.resolve(tree_view, &dirty_nodes, &nodes_updated, &ctx); + }); + } else { pass.resolve(tree_view, &dirty_nodes, &nodes_updated, &ctx); - }); + } } else { i += 1; } diff --git a/packages/native-core/src/real_dom.rs b/packages/native-core/src/real_dom.rs index b06119ff6..49f0e03c9 100644 --- a/packages/native-core/src/real_dom.rs +++ b/packages/native-core/src/real_dom.rs @@ -439,6 +439,7 @@ impl RealDom { pub fn update_state( &mut self, ctx: SendAnyMap, + parallel: bool, ) -> (FxDashSet, FxHashMap) { let passes = std::mem::take(&mut self.passes_updated); let nodes_updated = std::mem::take(&mut self.nodes_updated); @@ -452,7 +453,10 @@ impl RealDom { } } - (resolve_passes(self, dirty_nodes, ctx), nodes_updated) + ( + resolve_passes(self, dirty_nodes, ctx, parallel), + nodes_updated, + ) } fn remove(&mut self, id: NodeId) { diff --git a/packages/tui/src/lib.rs b/packages/tui/src/lib.rs index 562cd39ad..a26cfe547 100644 --- a/packages/tui/src/lib.rs +++ b/packages/tui/src/lib.rs @@ -126,7 +126,7 @@ pub fn launch_cfg_with_props(app: Component, props: Props rdom.apply_mutations(mutations); let mut any_map = SendAnyMap::new(); any_map.insert(taffy.clone()); - let _ = rdom.update_state(any_map); + let _ = rdom.update_state(any_map, false); } render_vdom( @@ -320,7 +320,7 @@ fn render_vdom( // update the style and layout let mut any_map = SendAnyMap::new(); any_map.insert(taffy.clone()); - let (new_to_rerender, dirty) = rdom.update_state(any_map); + let (new_to_rerender, dirty) = rdom.update_state(any_map, false); to_rerender = new_to_rerender; let text_mask = NodeMaskBuilder::new().with_text().build(); for (id, mask) in dirty {