aboutsummaryrefslogtreecommitdiffstats
path: root/components/layout
diff options
context:
space:
mode:
authorbors-servo <metajack+bors@gmail.com>2014-11-12 17:36:32 -0700
committerbors-servo <metajack+bors@gmail.com>2014-11-12 17:36:32 -0700
commit26045d7fcbab8851fbefe2851cd904203f8fd8dd (patch)
treeb2d7cf6732758f68df2355aff9ead4d924483002 /components/layout
parent668d9217d8b8d999547fd1e8b690da8c8d80ddda (diff)
parentc7327450ef1328a6045cfb8a47321e78976ca7a8 (diff)
downloadservo-26045d7fcbab8851fbefe2851cd904203f8fd8dd.tar.gz
servo-26045d7fcbab8851fbefe2851cd904203f8fd8dd.zip
auto merge of #3809 : mrobinson/servo/display-list-optimization, r=pcwalton
Instead of creating a display list for the entire page, only create one for an area that expands around the viewport. On my machine this makes incremental layout of http://timecube.com 50% faster.
Diffstat (limited to 'components/layout')
-rw-r--r--components/layout/block.rs6
-rw-r--r--components/layout/display_list_builder.rs4
-rw-r--r--components/layout/layout_task.rs2
3 files changed, 7 insertions, 5 deletions
diff --git a/components/layout/block.rs b/components/layout/block.rs
index 8835682644d..baf80f6ca3f 100644
--- a/components/layout/block.rs
+++ b/components/layout/block.rs
@@ -48,7 +48,7 @@ use geom::Size2D;
use gfx::display_list::BlockLevel;
use serialize::{Encoder, Encodable};
use servo_msg::compositor_msg::LayerId;
-use servo_util::geometry::{Au, MAX_AU, MAX_RECT};
+use servo_util::geometry::{Au, MAX_AU};
use servo_util::logical_geometry::{LogicalPoint, LogicalRect, LogicalSize};
use servo_util::opts;
use std::cmp::{max, min};
@@ -1665,10 +1665,6 @@ impl Flow for BlockFlow {
// FIXME(#2795): Get the real container size
let container_size = Size2D::zero();
- if self.is_root() {
- self.base.clip_rect = MAX_RECT;
- }
-
if self.base.flags.is_absolutely_positioned() {
let position_start = self.base.position.start.to_physical(self.base.writing_mode,
container_size);
diff --git a/components/layout/display_list_builder.rs b/components/layout/display_list_builder.rs
index 4a6da7b514b..ae2984f8091 100644
--- a/components/layout/display_list_builder.rs
+++ b/components/layout/display_list_builder.rs
@@ -499,6 +499,10 @@ impl FragmentDisplayListBuilding for Fragment {
return
}
+ if !absolute_fragment_bounds.intersects(clip_rect) {
+ return;
+ }
+
debug!("Fragment::build_display_list: intersected. Adding display item...");
if self.is_primary_fragment() {
diff --git a/components/layout/layout_task.rs b/components/layout/layout_task.rs
index 1ed51197db2..e1e918251cd 100644
--- a/components/layout/layout_task.rs
+++ b/components/layout/layout_task.rs
@@ -625,6 +625,8 @@ impl LayoutTask {
LogicalPoint::zero(writing_mode).to_physical(writing_mode,
rw_data.screen_size);
+ flow::mut_base(layout_root.deref_mut()).clip_rect = data.page_clip_rect;
+
let rw_data = rw_data.deref_mut();
match rw_data.parallel_traversal {
None => {