diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2016-03-04 02:49:04 +0530 |
---|---|---|
committer | bors-servo <lbergstrom+bors@mozilla.com> | 2016-03-04 02:49:04 +0530 |
commit | 55fc48e4c46917a0f036d0054fac296bb5719434 (patch) | |
tree | c3602ca91ace848d540f40ac488c920e9d4a2e7a /components/layout/sequential.rs | |
parent | 633f0414aaa177e439528f0fa848a41bc0fc094a (diff) | |
parent | 117e92aefd0136e192edf132c9bd5c75bce9bd5f (diff) | |
download | servo-55fc48e4c46917a0f036d0054fac296bb5719434.tar.gz servo-55fc48e4c46917a0f036d0054fac296bb5719434.zip |
Auto merge of #9843 - pcwalton:optimize-flat-display-lists, r=mrobinson
Optimize flat display lists
Flat display lists were a 2x regression on the spheres demo. This patch series fixes that.
See the individual commits for more details.
r? @mrobinson
<!-- Reviewable:start -->
[<img src="https://reviewable.io/review_button.svg" height="40" alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/9843)
<!-- Reviewable:end -->
Diffstat (limited to 'components/layout/sequential.rs')
-rw-r--r-- | components/layout/sequential.rs | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/components/layout/sequential.rs b/components/layout/sequential.rs index e0207ee7ca0..a54d46848ca 100644 --- a/components/layout/sequential.rs +++ b/components/layout/sequential.rs @@ -6,13 +6,14 @@ use app_units::Au; use context::{LayoutContext, SharedLayoutContext}; +use display_list_builder::DisplayListBuildState; use euclid::point::Point2D; use flow::{PostorderFlowTraversal, PreorderFlowTraversal}; use flow::{self, Flow, ImmutableFlowUtils, InorderFlowTraversal, MutableFlowUtils}; use flow_ref::{self, FlowRef}; use fragment::FragmentBorderBoxIterator; use generated_content::ResolveGeneratedContent; -use gfx::display_list::StackingContext; +use gfx::display_list::{DisplayListEntry, StackingContext}; use style::dom::TNode; use style::traversal::DomTraversalContext; use traversal::{AssignBSizesAndStoreOverflow, AssignISizes}; @@ -77,13 +78,19 @@ pub fn traverse_flow_tree_preorder(root: &mut FlowRef, pub fn build_display_list_for_subtree(root: &mut FlowRef, root_stacking_context: &mut StackingContext, - shared_layout_context: &SharedLayoutContext) { + shared_layout_context: &SharedLayoutContext) + -> Vec<DisplayListEntry> { let flow_root = flow_ref::deref_mut(root); let layout_context = LayoutContext::new(shared_layout_context); flow_root.traverse_preorder(&ComputeAbsolutePositions { layout_context: &layout_context }); flow_root.collect_stacking_contexts(root_stacking_context.id, &mut root_stacking_context.children); - flow_root.traverse_postorder(&BuildDisplayList { layout_context: &layout_context }); + let mut build_display_list = BuildDisplayList { + state: DisplayListBuildState::new(&layout_context, + flow::base(&**root).stacking_context_id), + }; + build_display_list.traverse(&mut *flow_root); + build_display_list.state.items } pub fn iterate_through_flow_tree_fragment_border_boxes(root: &mut FlowRef, |