Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Faster display list transfer #9947

Merged
merged 2 commits into from Mar 23, 2016
Merged
Changes from 1 commit
Commits
File filter...
Filter file types
Jump to…
Jump to file
Failed to load files.

Always

Just for now

Next

layout: Flatten display list transfer into a separately-transferred byte

array, and consolidate the multitude of display list messages into one.

Improves display list building performance by 50%-100% for small display
lists.
  • Loading branch information
pcwalton committed Mar 22, 2016
commit 9fcf9215d008c4d29482f866812866f7169e6d15
@@ -83,7 +83,7 @@ use util::opts;
use util::thread;
use util::thread_state;
use util::workqueue::WorkQueue;
use webrender_helpers::WebRenderDisplayListConverter;
use webrender_helpers::{WebRenderDisplayListConverter, WebRenderFrameBuilder};
use webrender_traits::{self, AuxiliaryListsBuilder};
use wrapper::{LayoutNode, NonOpaqueStyleAndLayoutData, ServoLayoutNode, ThreadSafeLayoutNode};

@@ -940,21 +940,20 @@ impl LayoutThread {
self.epoch.next();

if opts::get().use_webrender {
let api = self.webrender_api.as_ref().unwrap();
// TODO: Avoid the temporary conversion and build webrender sc/dl directly!
let Epoch(epoch_number) = self.epoch;
let epoch = webrender_traits::Epoch(epoch_number);
let pipeline_id = self.id.to_webrender();

// TODO(gw) For now only create a root scrolling layer!
let root_scroll_layer_id = webrender_traits::ScrollLayerId::new(pipeline_id, 0);
let mut auxiliary_lists_builder = AuxiliaryListsBuilder::new();
let mut frame_builder = WebRenderFrameBuilder::new(pipeline_id);
let sc_id = rw_data.display_list.as_ref().unwrap().convert_to_webrender(
&self.webrender_api.as_ref().unwrap(),
&mut self.webrender_api.as_mut().unwrap(),
pipeline_id,
epoch,
Some(root_scroll_layer_id),
&mut auxiliary_lists_builder);
&mut frame_builder);
let root_background_color = get_root_flow_background_color(
flow_ref::deref_mut(layout_root));
let root_background_color =
@@ -966,12 +965,16 @@ impl LayoutThread {
let viewport_size = Size2D::new(self.viewport_size.width.to_f32_px(),
self.viewport_size.height.to_f32_px());

let api = self.webrender_api.as_ref().unwrap();
api.set_root_stacking_context(sc_id,
root_background_color,
epoch,
pipeline_id,
viewport_size,
auxiliary_lists_builder.finalize());
frame_builder.stacking_contexts,
frame_builder.display_lists,
frame_builder.auxiliary_lists_builder
.finalize());
} else {
self.paint_chan
.send(LayoutToPaintMsg::PaintInit(self.epoch, display_list))
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.