aboutsummaryrefslogtreecommitdiffstats
path: root/components/layout_thread/lib.rs
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2017-01-24 17:02:41 -0800
committerGitHub <noreply@github.com>2017-01-24 17:02:41 -0800
commit1934a338757a84a6efddcbd3ecf051cd128a8d18 (patch)
treede8aade40f3fe32832ffeffe4018e64af0d6f941 /components/layout_thread/lib.rs
parentdc8fc4423833103de5cdf0e2e50003ee1fa07b8b (diff)
parentf00b628c3abf07b46d544e2f82fdd24602195f7a (diff)
downloadservo-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.rs13
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);