mirror of
https://github.com/servo/servo.git
synced 2025-08-06 14:10:11 +01:00
Clip display list based on frame viewport
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.
This commit is contained in:
parent
f4471f0602
commit
c7327450ef
11 changed files with 130 additions and 34 deletions
|
@ -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);
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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 => {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue