aboutsummaryrefslogtreecommitdiffstats
path: root/components/layout/sequential.rs
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2016-03-04 02:49:04 +0530
committerbors-servo <lbergstrom+bors@mozilla.com>2016-03-04 02:49:04 +0530
commit55fc48e4c46917a0f036d0054fac296bb5719434 (patch)
treec3602ca91ace848d540f40ac488c920e9d4a2e7a /components/layout/sequential.rs
parent633f0414aaa177e439528f0fa848a41bc0fc094a (diff)
parent117e92aefd0136e192edf132c9bd5c75bce9bd5f (diff)
downloadservo-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.rs13
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,