mirror of
https://github.com/servo/servo.git
synced 2025-07-23 07:13:52 +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
|
@ -40,9 +40,9 @@ use devtools_traits::{DevtoolScriptControlMsg, EvaluateJS, EvaluateJSReply, GetD
|
|||
use devtools_traits::{GetChildren, GetLayout};
|
||||
use script_traits::{CompositorEvent, ResizeEvent, ReflowEvent, ClickEvent, MouseDownEvent};
|
||||
use script_traits::{MouseMoveEvent, MouseUpEvent, ConstellationControlMsg, ScriptTaskFactory};
|
||||
use script_traits::{ResizeMsg, AttachLayoutMsg, LoadMsg, SendEventMsg, ResizeInactiveMsg};
|
||||
use script_traits::{ExitPipelineMsg, NewLayoutInfo, OpaqueScriptLayoutChannel, ScriptControlChan};
|
||||
use script_traits::{ReflowCompleteMsg, UntrustedNodeAddress};
|
||||
use script_traits::{ResizeMsg, AttachLayoutMsg, LoadMsg, ViewportMsg, SendEventMsg};
|
||||
use script_traits::{ResizeInactiveMsg, ExitPipelineMsg, NewLayoutInfo, OpaqueScriptLayoutChannel};
|
||||
use script_traits::{ScriptControlChan, ReflowCompleteMsg, UntrustedNodeAddress};
|
||||
use servo_msg::compositor_msg::{FinishedLoading, LayerId, Loading};
|
||||
use servo_msg::compositor_msg::{ScriptListener};
|
||||
use servo_msg::constellation_msg::{ConstellationChan, LoadCompleteMsg, LoadUrlMsg, NavigationDirection};
|
||||
|
@ -495,6 +495,13 @@ impl ScriptTask {
|
|||
pending.push_all_move(node_addresses);
|
||||
needs_reflow.insert(id);
|
||||
}
|
||||
FromConstellation(ViewportMsg(id, rect)) => {
|
||||
let mut page = self.page.borrow_mut();
|
||||
let inner_page = page.find(id).expect("Page rect message sent to nonexistent pipeline");
|
||||
if inner_page.set_page_clip_rect_with_new_viewport(rect) {
|
||||
needs_reflow.insert(id);
|
||||
}
|
||||
}
|
||||
_ => {
|
||||
sequential.push(event);
|
||||
}
|
||||
|
@ -530,6 +537,7 @@ impl ScriptTask {
|
|||
FromConstellation(ReflowCompleteMsg(id, reflow_id)) => self.handle_reflow_complete_msg(id, reflow_id),
|
||||
FromConstellation(ResizeInactiveMsg(id, new_size)) => self.handle_resize_inactive_msg(id, new_size),
|
||||
FromConstellation(ExitPipelineMsg(id)) => if self.handle_exit_pipeline_msg(id) { return false },
|
||||
FromConstellation(ViewportMsg(..)) => fail!("should have handled ViewportMsg already"),
|
||||
FromScript(ExitWindowMsg(id)) => self.handle_exit_window_msg(id),
|
||||
FromConstellation(ResizeMsg(..)) => fail!("should have handled ResizeMsg already"),
|
||||
FromScript(XHRProgressMsg(addr, progress)) => XMLHttpRequest::handle_progress(addr, progress),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue