make parallelism optional

This commit is contained in:
Evan Almloff committed 2023-02-02 08:57:23 -06:00
1 parent 687cdf2cac
commit 2f6b8393f8
3 files changed
+14 -5

No files matched your search

+7 -2
View File
@@ -380,6 +380,7 @@ pub fn resolve_passes<V: FromAnyValue + Send + Sync>(
tree: &mut RealDom<V>, tree: &mut RealDom<V>,
dirty_nodes: DirtyNodeStates, dirty_nodes: DirtyNodeStates,
ctx: SendAnyMap, ctx: SendAnyMap,
parallel: bool,
) -> FxDashSet<NodeId> { ) -> FxDashSet<NodeId> {
let passes = &tree.passes; let passes = &tree.passes;
let mut resolved_passes: FxHashSet<TypeId> = FxHashSet::default(); 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 dirty_nodes = dirty_nodes.clone();
let nodes_updated = nodes_updated.clone(); let nodes_updated = nodes_updated.clone();
let ctx = ctx.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); pass.resolve(tree_view, &dirty_nodes, &nodes_updated, &ctx);
}); }
} else { } else {
i += 1; i += 1;
} }
+5 -1
View File
@@ -439,6 +439,7 @@ impl<V: FromAnyValue + Send + Sync> RealDom<V> {
pub fn update_state( pub fn update_state(
&mut self, &mut self,
ctx: SendAnyMap, ctx: SendAnyMap,
parallel: bool,
) -> (FxDashSet<NodeId>, FxHashMap<NodeId, NodeMask>) { ) -> (FxDashSet<NodeId>, FxHashMap<NodeId, NodeMask>) {
let passes = std::mem::take(&mut self.passes_updated); let passes = std::mem::take(&mut self.passes_updated);
let nodes_updated = std::mem::take(&mut self.nodes_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) { fn remove(&mut self, id: NodeId) {
+2 -2
View File
@@ -126,7 +126,7 @@ pub fn launch_cfg_with_props<Props: 'static>(app: Component<Props>, props: Props
rdom.apply_mutations(mutations); rdom.apply_mutations(mutations);
let mut any_map = SendAnyMap::new(); let mut any_map = SendAnyMap::new();
any_map.insert(taffy.clone()); any_map.insert(taffy.clone());
let _ = rdom.update_state(any_map); let _ = rdom.update_state(any_map, false);
} }
render_vdom( render_vdom(
@@ -320,7 +320,7 @@ fn render_vdom(
// update the style and layout // update the style and layout
let mut any_map = SendAnyMap::new(); let mut any_map = SendAnyMap::new();
any_map.insert(taffy.clone()); 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; to_rerender = new_to_rerender;
let text_mask = NodeMaskBuilder::new().with_text().build(); let text_mask = NodeMaskBuilder::new().with_text().build();
for (id, mask) in dirty { for (id, mask) in dirty {