diff options
author | Martin Robinson <mrobinson@igalia.com> | 2023-10-05 18:40:44 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-05 16:40:44 +0000 |
commit | 28315ba48a90a40340feefea646428dee45dfd65 (patch) | |
tree | 8fb3f8a565aae18ad2cc93205e004875311b9c7e | |
parent | aadf48bd4d8afa86fa702c8709c9bc3753dd20d8 (diff) | |
download | servo-28315ba48a90a40340feefea646428dee45dfd65.tar.gz servo-28315ba48a90a40340feefea646428dee45dfd65.zip |
Rename messages forwarded from the constellation to the compositor (#30496)
The constellation forwards messages from other tasks to the compositor.
Mainly, these are passed to WebRender. This change updates the names of
these messages so it is clearer where they are coming from and where
they are going.
-rw-r--r-- | components/compositing/compositor.rs | 61 | ||||
-rw-r--r-- | components/compositing_traits/lib.rs | 25 | ||||
-rw-r--r-- | components/constellation/constellation.rs | 18 | ||||
-rw-r--r-- | components/net_traits/lib.rs | 10 | ||||
-rw-r--r-- | components/script_traits/lib.rs | 26 | ||||
-rw-r--r-- | components/servo/lib.rs | 36 |
6 files changed, 110 insertions, 66 deletions
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<Window: WindowMethods + ?Sized> IOCompositor<Window> { } }, - (CompositorMsg::Webrender(msg), ShutdownState::NotShuttingDown) => { + (CompositorMsg::Forwarded(msg), ShutdownState::NotShuttingDown) => { self.handle_webrender_message(msg); }, @@ -660,9 +661,11 @@ impl<Window: WindowMethods + ?Sized> IOCompositor<Window> { /// 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<Window: WindowMethods + ?Sized> IOCompositor<Window> { .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<Window: WindowMethods + ?Sized> IOCompositor<Window> { .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<Window: WindowMethods + ?Sized> IOCompositor<Window> { .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<Window: WindowMethods + ?Sized> IOCompositor<Window> { 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<Window: WindowMethods + ?Sized> IOCompositor<Window> { .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<Window: WindowMethods + ?Sized> IOCompositor<Window> { 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<Window: WindowMethods + ?Sized> IOCompositor<Window> { 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<DeviceIntSize>), - /// 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<LayoutControlMsg>, } -pub enum WebrenderFontMsg { +pub enum FontToCompositorMsg { AddFontInstance(FontKey, f32, Sender<FontInstanceKey>), AddFont(gfx_traits::FontData, Sender<FontKey>), } -pub enum WebrenderCanvasMsg { +pub enum CanvasToCompositorMsg { GenerateKey(Sender<ImageKey>), UpdateImages(Vec<ImageUpdate>), } -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<ImageKey>), } #[derive(Clone, Deserialize, Serialize)] -pub struct WebrenderIpcSender(IpcSender<WebrenderImageMsg>); +pub struct WebrenderIpcSender(IpcSender<NetToCompositorMsg>); impl WebrenderIpcSender { - pub fn new(sender: IpcSender<WebrenderImageMsg>) -> Self { + pub fn new(sender: IpcSender<NetToCompositorMsg>) -> 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<WebrenderMsg>); +pub struct WebrenderIpcSender(IpcSender<ScriptToCompositorMsg>); impl WebrenderIpcSender { /// Create a new WebrenderIpcSender object that wraps the provided channel sender. - pub fn new(sender: IpcSender<WebrenderMsg>) -> Self { + pub fn new(sender: IpcSender<ScriptToCompositorMsg>) -> 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<CompositorHitTestResult> { 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<ImageKey, ()> { 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<ImageKey, ()> { 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<canvas_paint_thread::ImageUpdate>) { - 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<dyn canvas_paint_thread::WebrenderApi> { Box::new(<Self as Clone>::clone(self)) |