diff --git a/components/compositing/compositor.rs b/components/compositing/compositor.rs index 0f549d50256..9e45f2ab7ba 100644 --- a/components/compositing/compositor.rs +++ b/components/compositing/compositor.rs @@ -11,8 +11,9 @@ use std::rc::Rc; use canvas::canvas_paint_thread::ImageUpdate; use compositing_traits::{ - CompositingReason, CompositionPipeline, CompositorMsg, CompositorReceiver, ConstellationMsg, - SendableFrameTree, WebrenderCanvasMsg, WebrenderFontMsg, WebrenderMsg, + CanvasToCompositorMsg, CompositingReason, CompositionPipeline, CompositorMsg, + CompositorReceiver, ConstellationMsg, FontToCompositorMsg, ForwardedToCompositorMsg, + SendableFrameTree, }; use crossbeam_channel::Sender; use embedder_traits::Cursor; @@ -645,7 +646,7 @@ impl IOCompositor { } }, - (CompositorMsg::Webrender(msg), ShutdownState::NotShuttingDown) => { + (CompositorMsg::Forwarded(msg), ShutdownState::NotShuttingDown) => { self.handle_webrender_message(msg); }, @@ -660,9 +661,11 @@ impl IOCompositor { /// Accept messages from content processes that need to be relayed to the WebRender /// instance in the parent process. - fn handle_webrender_message(&mut self, msg: WebrenderMsg) { + fn handle_webrender_message(&mut self, msg: ForwardedToCompositorMsg) { match msg { - WebrenderMsg::Layout(script_traits::WebrenderMsg::SendInitialTransaction(pipeline)) => { + ForwardedToCompositorMsg::Layout( + script_traits::ScriptToCompositorMsg::SendInitialTransaction(pipeline), + ) => { self.waiting_on_pending_frame = true; let mut txn = Transaction::new(); txn.set_display_list( @@ -677,7 +680,9 @@ impl IOCompositor { .send_transaction(self.webrender_document, txn); }, - WebrenderMsg::Layout(script_traits::WebrenderMsg::SendScrollNode(point, scroll_id)) => { + ForwardedToCompositorMsg::Layout( + script_traits::ScriptToCompositorMsg::SendScrollNode(point, scroll_id), + ) => { self.waiting_for_results_of_scroll = true; let mut txn = Transaction::new(); @@ -687,11 +692,13 @@ impl IOCompositor { .send_transaction(self.webrender_document, txn); }, - WebrenderMsg::Layout(script_traits::WebrenderMsg::SendDisplayList { - display_list_info, - display_list_descriptor, - display_list_receiver, - }) => { + ForwardedToCompositorMsg::Layout( + script_traits::ScriptToCompositorMsg::SendDisplayList { + display_list_info, + display_list_descriptor, + display_list_receiver, + }, + ) => { let display_list_data = match display_list_receiver.recv() { Ok(display_list_data) => display_list_data, _ => return warn!("Could not recieve WebRender display list."), @@ -721,7 +728,7 @@ impl IOCompositor { .send_transaction(self.webrender_document, txn); }, - WebrenderMsg::Layout(script_traits::WebrenderMsg::HitTest( + ForwardedToCompositorMsg::Layout(script_traits::ScriptToCompositorMsg::HitTest( pipeline, point, flags, @@ -743,12 +750,18 @@ impl IOCompositor { let _ = sender.send(result); }, - WebrenderMsg::Layout(script_traits::WebrenderMsg::GenerateImageKey(sender)) | - WebrenderMsg::Net(net_traits::WebrenderImageMsg::GenerateImageKey(sender)) => { + ForwardedToCompositorMsg::Layout( + script_traits::ScriptToCompositorMsg::GenerateImageKey(sender), + ) | + ForwardedToCompositorMsg::Net(net_traits::NetToCompositorMsg::GenerateImageKey( + sender, + )) => { let _ = sender.send(self.webrender_api.generate_image_key()); }, - WebrenderMsg::Layout(script_traits::WebrenderMsg::UpdateImages(updates)) => { + ForwardedToCompositorMsg::Layout( + script_traits::ScriptToCompositorMsg::UpdateImages(updates), + ) => { let mut txn = Transaction::new(); for update in updates { match update { @@ -773,14 +786,22 @@ impl IOCompositor { .send_transaction(self.webrender_document, txn); }, - WebrenderMsg::Net(net_traits::WebrenderImageMsg::AddImage(key, desc, data)) => { + ForwardedToCompositorMsg::Net(net_traits::NetToCompositorMsg::AddImage( + key, + desc, + data, + )) => { let mut txn = Transaction::new(); txn.add_image(key, desc, data, None); self.webrender_api .send_transaction(self.webrender_document, txn); }, - WebrenderMsg::Font(WebrenderFontMsg::AddFontInstance(font_key, size, sender)) => { + ForwardedToCompositorMsg::Font(FontToCompositorMsg::AddFontInstance( + font_key, + size, + sender, + )) => { let key = self.webrender_api.generate_font_instance_key(); let mut txn = Transaction::new(); txn.add_font_instance(key, font_key, size, None, None, Vec::new()); @@ -789,7 +810,7 @@ impl IOCompositor { let _ = sender.send(key); }, - WebrenderMsg::Font(WebrenderFontMsg::AddFont(data, sender)) => { + ForwardedToCompositorMsg::Font(FontToCompositorMsg::AddFont(data, sender)) => { let font_key = self.webrender_api.generate_font_key(); let mut txn = Transaction::new(); match data { @@ -801,11 +822,11 @@ impl IOCompositor { let _ = sender.send(font_key); }, - WebrenderMsg::Canvas(WebrenderCanvasMsg::GenerateKey(sender)) => { + ForwardedToCompositorMsg::Canvas(CanvasToCompositorMsg::GenerateKey(sender)) => { let _ = sender.send(self.webrender_api.generate_image_key()); }, - WebrenderMsg::Canvas(WebrenderCanvasMsg::UpdateImages(updates)) => { + ForwardedToCompositorMsg::Canvas(CanvasToCompositorMsg::UpdateImages(updates)) => { let mut txn = Transaction::new(); for update in updates { match update { diff --git a/components/compositing_traits/lib.rs b/components/compositing_traits/lib.rs index d446a0638d8..81ef4ace3b9 100644 --- a/components/compositing_traits/lib.rs +++ b/components/compositing_traits/lib.rs @@ -18,9 +18,10 @@ use ipc_channel::ipc::IpcSender; use log::warn; use msg::constellation_msg::{PipelineId, TopLevelBrowsingContextId}; use net_traits::image::base::Image; +use net_traits::NetToCompositorMsg; use script_traits::{ AnimationState, ConstellationControlMsg, EventResult, LayoutControlMsg, MouseButton, - MouseEventType, + MouseEventType, ScriptToCompositorMsg, }; use style_traits::CSSPixel; use webrender_api::units::{DeviceIntPoint, DeviceIntSize}; @@ -148,8 +149,9 @@ pub enum CompositorMsg { /// Get screen available size. GetScreenAvailSize(IpcSender), - /// Webrender operations requested from non-compositor threads. - Webrender(WebrenderMsg), + /// Messages forwarded to the compositor by the constellation from other crates. These + /// messages are mainly passed on from the compositor to WebRender. + Forwarded(ForwardedToCompositorMsg), } pub struct SendableFrameTree { @@ -166,21 +168,22 @@ pub struct CompositionPipeline { pub layout_chan: IpcSender, } -pub enum WebrenderFontMsg { +pub enum FontToCompositorMsg { AddFontInstance(FontKey, f32, Sender), AddFont(gfx_traits::FontData, Sender), } -pub enum WebrenderCanvasMsg { +pub enum CanvasToCompositorMsg { GenerateKey(Sender), UpdateImages(Vec), } -pub enum WebrenderMsg { - Layout(script_traits::WebrenderMsg), - Net(net_traits::WebrenderImageMsg), - Font(WebrenderFontMsg), - Canvas(WebrenderCanvasMsg), +/// Messages forwarded by the Constellation to the Compositor. +pub enum ForwardedToCompositorMsg { + Layout(ScriptToCompositorMsg), + Net(NetToCompositorMsg), + Font(FontToCompositorMsg), + Canvas(CanvasToCompositorMsg), } impl Debug for CompositorMsg { @@ -206,7 +209,7 @@ impl Debug for CompositorMsg { CompositorMsg::GetClientWindow(..) => write!(f, "GetClientWindow"), CompositorMsg::GetScreenSize(..) => write!(f, "GetScreenSize"), CompositorMsg::GetScreenAvailSize(..) => write!(f, "GetScreenAvailSize"), - CompositorMsg::Webrender(..) => write!(f, "Webrender"), + CompositorMsg::Forwarded(..) => write!(f, "Webrender"), } } } diff --git a/components/constellation/constellation.rs b/components/constellation/constellation.rs index 2207251de70..08003f4edf7 100644 --- a/components/constellation/constellation.rs +++ b/components/constellation/constellation.rs @@ -104,8 +104,8 @@ use canvas_traits::canvas::{CanvasId, CanvasMsg}; use canvas_traits::webgl::WebGLThreads; use canvas_traits::ConstellationCanvasMsg; use compositing_traits::{ - CompositorMsg, CompositorProxy, ConstellationMsg as FromCompositorMsg, SendableFrameTree, - WebrenderMsg, + CompositorMsg, CompositorProxy, ConstellationMsg as FromCompositorMsg, + ForwardedToCompositorMsg, SendableFrameTree, }; use crossbeam_channel::{after, never, select, unbounded, Receiver, Sender}; use devtools_traits::{ @@ -716,8 +716,10 @@ where ROUTER.add_route( webrender_ipc_receiver.to_opaque(), Box::new(move |message| { - let _ = compositor_proxy.send(CompositorMsg::Webrender( - WebrenderMsg::Layout(message.to().expect("conversion failure")), + let _ = compositor_proxy.send(CompositorMsg::Forwarded( + ForwardedToCompositorMsg::Layout( + message.to().expect("conversion failure"), + ), )); }), ); @@ -726,9 +728,11 @@ where ROUTER.add_route( webrender_image_ipc_receiver.to_opaque(), Box::new(move |message| { - let _ = compositor_proxy.send(CompositorMsg::Webrender(WebrenderMsg::Net( - message.to().expect("conversion failure"), - ))); + let _ = compositor_proxy.send(CompositorMsg::Forwarded( + ForwardedToCompositorMsg::Net( + message.to().expect("conversion failure"), + ), + )); }), ); diff --git a/components/net_traits/lib.rs b/components/net_traits/lib.rs index 9bce0185969..b8b32725a25 100644 --- a/components/net_traits/lib.rs +++ b/components/net_traits/lib.rs @@ -823,23 +823,23 @@ pub fn http_percent_encode(bytes: &[u8]) -> String { } #[derive(Deserialize, Serialize)] -pub enum WebrenderImageMsg { +pub enum NetToCompositorMsg { AddImage(ImageKey, ImageDescriptor, ImageData), GenerateImageKey(IpcSender), } #[derive(Clone, Deserialize, Serialize)] -pub struct WebrenderIpcSender(IpcSender); +pub struct WebrenderIpcSender(IpcSender); impl WebrenderIpcSender { - pub fn new(sender: IpcSender) -> Self { + pub fn new(sender: IpcSender) -> Self { Self(sender) } pub fn generate_image_key(&self) -> ImageKey { let (sender, receiver) = ipc::channel().unwrap(); self.0 - .send(WebrenderImageMsg::GenerateImageKey(sender)) + .send(NetToCompositorMsg::GenerateImageKey(sender)) .expect("error sending image key generation"); receiver.recv().expect("error receiving image key result") } @@ -847,7 +847,7 @@ impl WebrenderIpcSender { pub fn add_image(&self, key: ImageKey, descriptor: ImageDescriptor, data: ImageData) { if let Err(e) = self .0 - .send(WebrenderImageMsg::AddImage(key, descriptor, data)) + .send(NetToCompositorMsg::AddImage(key, descriptor, data)) { warn!("Error sending image update: {}", e); } diff --git a/components/script_traits/lib.rs b/components/script_traits/lib.rs index 64c213955c2..77782255a4c 100644 --- a/components/script_traits/lib.rs +++ b/components/script_traits/lib.rs @@ -1116,7 +1116,7 @@ pub struct CompositorHitTestResult { /// The set of WebRender operations that can be initiated by the content process. #[derive(Deserialize, Serialize)] -pub enum WebrenderMsg { +pub enum ScriptToCompositorMsg { /// Inform WebRender of the existence of this pipeline. SendInitialTransaction(WebRenderPipelineId), /// Perform a scroll operation. @@ -1147,24 +1147,30 @@ pub enum WebrenderMsg { #[derive(Clone, Deserialize, Serialize)] /// A mechanism to communicate with the parent process' WebRender instance. -pub struct WebrenderIpcSender(IpcSender); +pub struct WebrenderIpcSender(IpcSender); impl WebrenderIpcSender { /// Create a new WebrenderIpcSender object that wraps the provided channel sender. - pub fn new(sender: IpcSender) -> Self { + pub fn new(sender: IpcSender) -> Self { Self(sender) } /// Inform WebRender of the existence of this pipeline. pub fn send_initial_transaction(&self, pipeline: WebRenderPipelineId) { - if let Err(e) = self.0.send(WebrenderMsg::SendInitialTransaction(pipeline)) { + if let Err(e) = self + .0 + .send(ScriptToCompositorMsg::SendInitialTransaction(pipeline)) + { warn!("Error sending initial transaction: {}", e); } } /// Perform a scroll operation. pub fn send_scroll_node(&self, point: LayoutPoint, scroll_id: ExternalScrollId) { - if let Err(e) = self.0.send(WebrenderMsg::SendScrollNode(point, scroll_id)) { + if let Err(e) = self + .0 + .send(ScriptToCompositorMsg::SendScrollNode(point, scroll_id)) + { warn!("Error sending scroll node: {}", e); } } @@ -1177,7 +1183,7 @@ impl WebrenderIpcSender { ) { let (display_list_data, display_list_descriptor) = list.into_data(); let (display_list_sender, display_list_receiver) = ipc::bytes_channel().unwrap(); - if let Err(e) = self.0.send(WebrenderMsg::SendDisplayList { + if let Err(e) = self.0.send(ScriptToCompositorMsg::SendDisplayList { display_list_info, display_list_descriptor, display_list_receiver, @@ -1200,7 +1206,9 @@ impl WebrenderIpcSender { ) -> Vec { let (sender, receiver) = ipc::channel().unwrap(); self.0 - .send(WebrenderMsg::HitTest(pipeline, point, flags, sender)) + .send(ScriptToCompositorMsg::HitTest( + pipeline, point, flags, sender, + )) .expect("error sending hit test"); receiver.recv().expect("error receiving hit test result") } @@ -1209,7 +1217,7 @@ impl WebrenderIpcSender { pub fn generate_image_key(&self) -> Result { let (sender, receiver) = ipc::channel().unwrap(); self.0 - .send(WebrenderMsg::GenerateImageKey(sender)) + .send(ScriptToCompositorMsg::GenerateImageKey(sender)) .map_err(|_| ())?; receiver.recv().map_err(|_| ()) } @@ -1249,7 +1257,7 @@ impl WebrenderIpcSender { }) .collect(); - if let Err(e) = self.0.send(WebrenderMsg::UpdateImages(updates)) { + if let Err(e) = self.0.send(ScriptToCompositorMsg::UpdateImages(updates)) { warn!("error sending image updates: {}", e); } diff --git a/components/servo/lib.rs b/components/servo/lib.rs index 36ceac156e0..1cf645b97cb 100644 --- a/components/servo/lib.rs +++ b/components/servo/lib.rs @@ -32,8 +32,8 @@ use canvas_traits::webgl::WebGLThreads; use compositing::windowing::{EmbedderEvent, EmbedderMethods, WindowMethods}; use compositing::{IOCompositor, InitialCompositorState, ShutdownState}; use compositing_traits::{ - CompositingReason, CompositorMsg, CompositorProxy, CompositorReceiver, ConstellationMsg, - WebrenderCanvasMsg, WebrenderFontMsg, WebrenderMsg, + CanvasToCompositorMsg, CompositingReason, CompositorMsg, CompositorProxy, CompositorReceiver, + ConstellationMsg, FontToCompositorMsg, ForwardedToCompositorMsg, }; #[cfg(all( not(target_os = "windows"), @@ -897,16 +897,20 @@ struct FontCacheWR(CompositorProxy); impl gfx_traits::WebrenderApi for FontCacheWR { fn add_font_instance(&self, font_key: FontKey, size: f32) -> FontInstanceKey { let (sender, receiver) = unbounded(); - let _ = self.0.send(CompositorMsg::Webrender(WebrenderMsg::Font( - WebrenderFontMsg::AddFontInstance(font_key, size, sender), - ))); + let _ = self + .0 + .send(CompositorMsg::Forwarded(ForwardedToCompositorMsg::Font( + FontToCompositorMsg::AddFontInstance(font_key, size, sender), + ))); receiver.recv().unwrap() } fn add_font(&self, data: gfx_traits::FontData) -> FontKey { let (sender, receiver) = unbounded(); - let _ = self.0.send(CompositorMsg::Webrender(WebrenderMsg::Font( - WebrenderFontMsg::AddFont(data, sender), - ))); + let _ = self + .0 + .send(CompositorMsg::Forwarded(ForwardedToCompositorMsg::Font( + FontToCompositorMsg::AddFont(data, sender), + ))); receiver.recv().unwrap() } } @@ -917,15 +921,19 @@ struct CanvasWebrenderApi(CompositorProxy); impl canvas_paint_thread::WebrenderApi for CanvasWebrenderApi { fn generate_key(&self) -> Result { let (sender, receiver) = unbounded(); - let _ = self.0.send(CompositorMsg::Webrender(WebrenderMsg::Canvas( - WebrenderCanvasMsg::GenerateKey(sender), - ))); + let _ = self + .0 + .send(CompositorMsg::Forwarded(ForwardedToCompositorMsg::Canvas( + CanvasToCompositorMsg::GenerateKey(sender), + ))); receiver.recv().map_err(|_| ()) } fn update_images(&self, updates: Vec) { - let _ = self.0.send(CompositorMsg::Webrender(WebrenderMsg::Canvas( - WebrenderCanvasMsg::UpdateImages(updates), - ))); + let _ = self + .0 + .send(CompositorMsg::Forwarded(ForwardedToCompositorMsg::Canvas( + CanvasToCompositorMsg::UpdateImages(updates), + ))); } fn clone(&self) -> Box { Box::new(::clone(self))