Browse Source

make parallelism optional

Evan Almloff 2 years ago
parent
commit
2f6b8393f8

+ 7 - 2
packages/native-core/src/passes.rs

@@ -380,6 +380,7 @@ pub fn resolve_passes<V: FromAnyValue + Send + Sync>(
     tree: &mut RealDom<V>,
     dirty_nodes: DirtyNodeStates,
     ctx: SendAnyMap,
+    parallel: bool,
 ) -> FxDashSet<NodeId> {
     let passes = &tree.passes;
     let mut resolved_passes: FxHashSet<TypeId> = FxHashSet::default();
@@ -414,9 +415,13 @@ pub fn resolve_passes<V: FromAnyValue + Send + Sync>(
                     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;
                 }

+ 5 - 1
packages/native-core/src/real_dom.rs

@@ -439,6 +439,7 @@ impl<V: FromAnyValue + Send + Sync> RealDom<V> {
     pub fn update_state(
         &mut self,
         ctx: SendAnyMap,
+        parallel: bool,
     ) -> (FxDashSet<NodeId>, FxHashMap<NodeId, NodeMask>) {
         let passes = std::mem::take(&mut self.passes_updated);
         let nodes_updated = std::mem::take(&mut self.nodes_updated);
@@ -452,7 +453,10 @@ impl<V: FromAnyValue + Send + Sync> RealDom<V> {
             }
         }
 
-        (resolve_passes(self, dirty_nodes, ctx), nodes_updated)
+        (
+            resolve_passes(self, dirty_nodes, ctx, parallel),
+            nodes_updated,
+        )
     }
 
     fn remove(&mut self, id: NodeId) {

+ 2 - 2
packages/tui/src/lib.rs

@@ -126,7 +126,7 @@ pub fn launch_cfg_with_props<Props: 'static>(app: Component<Props>, 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 {