mirror of
https://github.com/servo/servo.git
synced 2025-06-22 08:08:59 +01:00
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.
This commit is contained in:
parent
aadf48bd4d
commit
28315ba48a
6 changed files with 110 additions and 66 deletions
|
@ -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 {
|
||||
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 {
|
||||
|
|
|
@ -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"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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(
|
||||
let _ = compositor_proxy.send(CompositorMsg::Forwarded(
|
||||
ForwardedToCompositorMsg::Net(
|
||||
message.to().expect("conversion failure"),
|
||||
)));
|
||||
),
|
||||
));
|
||||
}),
|
||||
);
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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,15 +897,19 @@ 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,14 +921,18 @@ 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> {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue