diff options
author | bors-servo <release+servo@mozilla.com> | 2014-01-30 13:40:28 -0800 |
---|---|---|
committer | bors-servo <release+servo@mozilla.com> | 2014-01-30 13:40:28 -0800 |
commit | ad2d1e9d8766b543a1e38c8b034f4aaa7fd7ed0d (patch) | |
tree | d3fe2db43c6c072afbdaf1619d39dbfe8243d388 /src | |
parent | e9a0c8184f1af460583fe5ab2615e01d08ffc22f (diff) | |
parent | 94ab4f50865e5e0ad13c1a9d33fc04fd96828a6b (diff) | |
download | servo-ad2d1e9d8766b543a1e38c8b034f4aaa7fd7ed0d.tar.gz servo-ad2d1e9d8766b543a1e38c8b034f4aaa7fd7ed0d.zip |
auto merge of #1585 : pcwalton/servo/parallel-aux-init, r=metajack
Brings aux initialization time down to essentially zero (!)
r? @metajack
Diffstat (limited to 'src')
-rw-r--r-- | src/components/main/layout/context.rs | 4 | ||||
-rw-r--r-- | src/components/main/layout/layout_task.rs | 12 | ||||
-rw-r--r-- | src/components/main/layout/parallel.rs | 7 |
3 files changed, 19 insertions, 4 deletions
diff --git a/src/components/main/layout/context.rs b/src/components/main/layout/context.rs index 801b474c824..9a405dad147 100644 --- a/src/components/main/layout/context.rs +++ b/src/components/main/layout/context.rs @@ -17,6 +17,7 @@ use std::rt::task::Task; use geom::size::Size2D; use gfx::font_context::{FontContext, FontContextInfo}; +use script::layout_interface::LayoutChan; use servo_msg::constellation_msg::ConstellationChan; use servo_net::local_image_cache::LocalImageCache; use servo_util::geometry::Au; @@ -40,6 +41,9 @@ pub struct LayoutContext { /// The set of leaf DOM nodes. dom_leaf_set: MutexArc<DomLeafSet>, + /// A channel up to the layout task. + layout_chan: LayoutChan, + /// The set of leaf flows. flow_leaf_set: MutexArc<FlowLeafSet>, diff --git a/src/components/main/layout/layout_task.rs b/src/components/main/layout/layout_task.rs index c8b9c435f14..28a19b657be 100644 --- a/src/components/main/layout/layout_task.rs +++ b/src/components/main/layout/layout_task.rs @@ -324,6 +324,7 @@ impl LayoutTask { constellation_chan: self.constellation_chan.clone(), dom_leaf_set: self.dom_leaf_set.clone(), flow_leaf_set: self.flow_leaf_set.clone(), + layout_chan: self.chan.clone(), font_context_info: font_context_info, stylist: &*self.stylist, reflow_root: OpaqueNode::from_layout_node(reflow_root), @@ -549,10 +550,13 @@ impl LayoutTask { || { // Initialize layout data for each node. // - // FIXME: This is inefficient. We don't need an entire traversal to do this! - profile(time::LayoutAuxInitCategory, self.profiler_chan.clone(), || { - node.initialize_style_for_subtree(self.chan.clone()); - }); + // FIXME(pcwalton): This is inefficient. We don't need an entire traversal to do this + // in sequential mode! + if self.parallel_traversal.is_none() { + profile(time::LayoutAuxInitCategory, self.profiler_chan.clone(), || { + node.initialize_style_for_subtree(self.chan.clone()); + }); + } // Perform CSS selector matching if necessary. match data.damage.level { diff --git a/src/components/main/layout/parallel.rs b/src/components/main/layout/parallel.rs index 859a3839333..a64abdc9a5c 100644 --- a/src/components/main/layout/parallel.rs +++ b/src/components/main/layout/parallel.rs @@ -8,6 +8,7 @@ use css::matching::MatchMethods; use layout::context::LayoutContext; +use layout::extra::LayoutAuxMethods; use layout::flow::{Flow, FlowLeafSet, PostorderFlowTraversal}; use layout::flow; use layout::layout_task::{AssignHeightsAndStoreOverflowTraversal, BubbleWidthsTraversal}; @@ -130,6 +131,12 @@ fn match_and_cascade_node(unsafe_layout_node: UnsafeLayoutNode, // Get a real layout node. let node: LayoutNode = cast::transmute(unsafe_layout_node); + // Initialize layout data. + // + // FIXME(pcwalton): Stop allocating here. Ideally this should just be done by the HTML + // parser. + node.initialize_layout_data(layout_context.layout_chan.clone()); + if node.is_element() { // Perform the CSS selector matching. let stylist: &Stylist = cast::transmute(layout_context.stylist); |