diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2017-01-24 17:02:41 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-01-24 17:02:41 -0800 |
commit | 1934a338757a84a6efddcbd3ecf051cd128a8d18 (patch) | |
tree | de8aade40f3fe32832ffeffe4018e64af0d6f941 /components/layout_thread/lib.rs | |
parent | dc8fc4423833103de5cdf0e2e50003ee1fa07b8b (diff) | |
parent | f00b628c3abf07b46d544e2f82fdd24602195f7a (diff) | |
download | servo-1934a338757a84a6efddcbd3ecf051cd128a8d18.tar.gz servo-1934a338757a84a6efddcbd3ecf051cd128a8d18.zip |
Auto merge of #15160 - emilio:expose-traversal-kind, r=bholley
style: Expose the traversal kind to the style system.
This way we'll be able to take different paths for the sequential and parallel
traversals in some concrete cases.
This is a preliminar patch to fix bug 1332525.
r? @bholley
<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/15160)
<!-- Reviewable:end -->
Diffstat (limited to 'components/layout_thread/lib.rs')
-rw-r--r-- | components/layout_thread/lib.rs | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/components/layout_thread/lib.rs b/components/layout_thread/lib.rs index 19c86f64fff..caabb158f5d 100644 --- a/components/layout_thread/lib.rs +++ b/components/layout_thread/lib.rs @@ -121,7 +121,7 @@ use style::stylesheets::{Origin, Stylesheet, UserAgentStylesheets}; use style::stylist::Stylist; use style::thread_state; use style::timer::Timer; -use style::traversal::DomTraversal; +use style::traversal::{DomTraversal, TraversalDriver}; /// Information needed by the layout thread. pub struct LayoutThread { @@ -1159,7 +1159,13 @@ impl LayoutThread { data.reflow_info.goal); // NB: Type inference falls apart here for some reason, so we need to be very verbose. :-( - let traversal = RecalcStyleAndConstructFlows::new(shared_layout_context); + let traversal_driver = if self.parallel_flag && self.parallel_traversal.is_some() { + TraversalDriver::Parallel + } else { + TraversalDriver::Sequential + }; + + let traversal = RecalcStyleAndConstructFlows::new(shared_layout_context, traversal_driver); let dom_depth = Some(0); // This is always the root node. let token = { let stylist = &<RecalcStyleAndConstructFlows as @@ -1175,7 +1181,8 @@ impl LayoutThread { self.time_profiler_chan.clone(), || { // Perform CSS selector matching and flow construction. - if let (true, Some(pool)) = (self.parallel_flag, self.parallel_traversal.as_mut()) { + if traversal_driver.is_parallel() { + let pool = self.parallel_traversal.as_mut().unwrap(); // Parallel mode parallel::traverse_dom::<ServoLayoutElement, RecalcStyleAndConstructFlows>( &traversal, element, dom_depth, token, pool); |