aboutsummaryrefslogtreecommitdiffstats
path: root/components/layout_thread/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/layout_thread/lib.rs')
-rw-r--r--components/layout_thread/lib.rs95
1 files changed, 38 insertions, 57 deletions
diff --git a/components/layout_thread/lib.rs b/components/layout_thread/lib.rs
index 026e9796883..f7d4bd05fde 100644
--- a/components/layout_thread/lib.rs
+++ b/components/layout_thread/lib.rs
@@ -56,7 +56,6 @@ use gfx::display_list::{StackingContext, StackingContextType, WebRenderImageInfo
use gfx::font;
use gfx::font_cache_thread::FontCacheThread;
use gfx::font_context;
-use gfx::paint_thread::LayoutToPaintMsg;
use gfx_traits::{Epoch, FragmentType, LayerId, ScrollPolicy, StackingContextId, color};
use heapsize::HeapSizeOf;
use ipc_channel::ipc::{self, IpcReceiver, IpcSender};
@@ -120,7 +119,6 @@ use style::timer::Timer;
use style::workqueue::WorkQueue;
use url::Url;
use util::geometry::max_rect;
-use util::ipc::OptionalIpcSender;
use util::opts;
use util::prefs::PREFS;
use util::resource_files::read_resource_file;
@@ -164,9 +162,6 @@ pub struct LayoutThread {
/// The channel on which messages can be sent to the script thread.
script_chan: IpcSender<ConstellationControlMsg>,
- /// The channel on which messages can be sent to the painting thread.
- paint_chan: OptionalIpcSender<LayoutToPaintMsg>,
-
/// The channel on which messages can be sent to the time profiler.
time_profiler_chan: time::ProfilerChan,
@@ -232,8 +227,8 @@ pub struct LayoutThread {
WebRenderImageInfo,
BuildHasherDefault<FnvHasher>>>>,
- // Webrender interface, if enabled.
- webrender_api: Option<webrender_traits::RenderApi>,
+ // Webrender interface.
+ webrender_api: webrender_traits::RenderApi,
/// The timer object to control the timing of the animations. This should
/// only be a test-mode timer during testing for animations.
@@ -255,13 +250,12 @@ impl LayoutThreadFactory for LayoutThread {
pipeline_port: IpcReceiver<LayoutControlMsg>,
constellation_chan: IpcSender<ConstellationMsg>,
script_chan: IpcSender<ConstellationControlMsg>,
- paint_chan: OptionalIpcSender<LayoutToPaintMsg>,
image_cache_thread: ImageCacheThread,
font_cache_thread: FontCacheThread,
time_profiler_chan: time::ProfilerChan,
mem_profiler_chan: mem::ProfilerChan,
content_process_shutdown_chan: IpcSender<()>,
- webrender_api_sender: Option<webrender_traits::RenderApiSender>,
+ webrender_api_sender: webrender_traits::RenderApiSender,
layout_threads: usize) {
thread::spawn_named(format!("LayoutThread {:?}", id),
move || {
@@ -276,7 +270,6 @@ impl LayoutThreadFactory for LayoutThread {
pipeline_port,
constellation_chan,
script_chan,
- paint_chan,
image_cache_thread,
font_cache_thread,
time_profiler_chan,
@@ -388,12 +381,11 @@ impl LayoutThread {
pipeline_port: IpcReceiver<LayoutControlMsg>,
constellation_chan: IpcSender<ConstellationMsg>,
script_chan: IpcSender<ConstellationControlMsg>,
- paint_chan: OptionalIpcSender<LayoutToPaintMsg>,
image_cache_thread: ImageCacheThread,
font_cache_thread: FontCacheThread,
time_profiler_chan: time::ProfilerChan,
mem_profiler_chan: mem::ProfilerChan,
- webrender_api_sender: Option<webrender_traits::RenderApiSender>,
+ webrender_api_sender: webrender_traits::RenderApiSender,
layout_threads: usize)
-> LayoutThread {
let device = Device::new(
@@ -439,7 +431,6 @@ impl LayoutThread {
pipeline_port: pipeline_receiver,
script_chan: script_chan.clone(),
constellation_chan: constellation_chan.clone(),
- paint_chan: paint_chan,
time_profiler_chan: time_profiler_chan,
mem_profiler_chan: mem_profiler_chan,
image_cache_thread: image_cache_thread,
@@ -460,7 +451,7 @@ impl LayoutThread {
expired_animations: Arc::new(RwLock::new(HashMap::new())),
epoch: Epoch(0),
viewport_size: Size2D::new(Au(0), Au(0)),
- webrender_api: webrender_api_sender.map(|wr| wr.create_api()),
+ webrender_api: webrender_api_sender.create_api(),
rw_data: Arc::new(Mutex::new(
LayoutThreadData {
constellation_chan: constellation_chan,
@@ -763,13 +754,12 @@ impl LayoutThread {
info.pipeline_port,
info.constellation_chan,
info.script_chan.clone(),
- info.paint_chan.to::<LayoutToPaintMsg>(),
self.image_cache_thread.clone(),
self.font_cache_thread.clone(),
self.time_profiler_chan.clone(),
self.mem_profiler_chan.clone(),
info.content_process_shutdown_chan,
- self.webrender_api.as_ref().map(|wr| wr.clone_sender()),
+ self.webrender_api.clone_sender(),
info.layout_threads);
}
@@ -805,8 +795,6 @@ impl LayoutThread {
if let Some(ref mut traversal) = self.parallel_traversal {
traversal.shutdown()
}
-
- let _ = self.paint_chan.send(LayoutToPaintMsg::Exit);
}
fn handle_add_stylesheet<'a, 'b>(&self,
@@ -1009,45 +997,38 @@ impl LayoutThread {
self.epoch.next();
- if let Some(ref mut webrender_api) = self.webrender_api {
- // 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 mut frame_builder = WebRenderFrameBuilder::new(pipeline_id);
- let root_scroll_layer_id = frame_builder.next_scroll_layer_id();
- let sc_id = rw_data.display_list.as_ref().unwrap().convert_to_webrender(
- webrender_api,
- pipeline_id,
- epoch,
- Some(root_scroll_layer_id),
- &mut frame_builder);
- let root_background_color = get_root_flow_background_color(layout_root);
- let root_background_color =
- webrender_traits::ColorF::new(root_background_color.r,
- root_background_color.g,
- root_background_color.b,
- root_background_color.a);
-
- let viewport_size = Size2D::new(self.viewport_size.width.to_f32_px(),
- self.viewport_size.height.to_f32_px());
-
- webrender_api.set_root_stacking_context(
- sc_id,
- root_background_color,
- epoch,
- pipeline_id,
- viewport_size,
- 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))
- .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 mut frame_builder = WebRenderFrameBuilder::new(pipeline_id);
+ let root_scroll_layer_id = frame_builder.next_scroll_layer_id();
+ let sc_id = rw_data.display_list.as_ref().unwrap().convert_to_webrender(
+ &mut self.webrender_api,
+ pipeline_id,
+ epoch,
+ Some(root_scroll_layer_id),
+ &mut frame_builder);
+ let root_background_color = get_root_flow_background_color(layout_root);
+ let root_background_color =
+ webrender_traits::ColorF::new(root_background_color.r,
+ root_background_color.g,
+ root_background_color.b,
+ root_background_color.a);
+
+ let viewport_size = Size2D::new(self.viewport_size.width.to_f32_px(),
+ self.viewport_size.height.to_f32_px());
+
+ self.webrender_api.set_root_stacking_context(sc_id,
+ root_background_color,
+ epoch,
+ pipeline_id,
+ viewport_size,
+ frame_builder.stacking_contexts,
+ frame_builder.display_lists,
+ frame_builder.auxiliary_lists_builder.finalize());
});
}