Properly use STYLE_THREAD_POOL in layout 2020

This commit is contained in:
Anthony Ramine 2019-11-20 14:28:14 +01:00
parent 1446756774
commit 6f49dc2356

View file

@ -88,7 +88,7 @@ use style::context::{SharedStyleContext, ThreadLocalStyleContextCreationInfo};
use style::dom::{TDocument, TElement, TNode}; use style::dom::{TDocument, TElement, TNode};
use style::driver; use style::driver;
use style::error_reporting::RustLogReporter; use style::error_reporting::RustLogReporter;
use style::global_style_data::GLOBAL_STYLE_DATA; use style::global_style_data::{GLOBAL_STYLE_DATA, STYLE_THREAD_POOL};
use style::invalidation::element::restyle_hints::RestyleHint; use style::invalidation::element::restyle_hints::RestyleHint;
use style::media_queries::{Device, MediaList, MediaType}; use style::media_queries::{Device, MediaList, MediaType};
use style::properties::PropertyId; use style::properties::PropertyId;
@ -1087,14 +1087,16 @@ impl LayoutThread {
RecalcStyle::pre_traverse(element, shared) RecalcStyle::pre_traverse(element, shared)
}; };
let rayon_pool = STYLE_THREAD_POOL.pool();
let rayon_pool = rayon_pool.as_ref().unwrap();
let box_tree = if token.should_traverse() { let box_tree = if token.should_traverse() {
driver::traverse_dom(&traversal, token, None); driver::traverse_dom(&traversal, token, None);
let shared = DomTraversal::<ServoLayoutElement>::shared_context(&traversal); let shared = DomTraversal::<ServoLayoutElement>::shared_context(&traversal);
Some(BoxTreeRoot::construct( let root_node = document.root_element().unwrap().as_node();
shared, let box_tree = rayon_pool.install(|| BoxTreeRoot::construct(shared, root_node));
document.root_element().unwrap().as_node(), Some(box_tree)
))
} else { } else {
None None
}; };
@ -1102,13 +1104,12 @@ impl LayoutThread {
layout_context = traversal.destroy(); layout_context = traversal.destroy();
if let Some(box_tree) = box_tree { if let Some(box_tree) = box_tree {
let fragment_tree = box_tree.layout( let viewport_size = Size2D::new(
&layout_context,
Size2D::new(
self.viewport_size.width.to_f32_px(), self.viewport_size.width.to_f32_px(),
self.viewport_size.height.to_f32_px(), self.viewport_size.height.to_f32_px(),
),
); );
let fragment_tree =
rayon_pool.install(|| box_tree.layout(&layout_context, viewport_size));
*self.box_tree_root.borrow_mut() = Some(box_tree); *self.box_tree_root.borrow_mut() = Some(box_tree);
*self.fragment_tree_root.borrow_mut() = Some(fragment_tree); *self.fragment_tree_root.borrow_mut() = Some(fragment_tree);
} }