aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom')
-rw-r--r--components/script/dom/htmlmediaelement.rs32
-rw-r--r--components/script/dom/screen.rs16
-rw-r--r--components/script/dom/window.rs30
3 files changed, 39 insertions, 39 deletions
diff --git a/components/script/dom/htmlmediaelement.rs b/components/script/dom/htmlmediaelement.rs
index 3e57b4e2645..04d388cf9a3 100644
--- a/components/script/dom/htmlmediaelement.rs
+++ b/components/script/dom/htmlmediaelement.rs
@@ -17,7 +17,7 @@ use headers::{ContentLength, ContentRange, HeaderMapExt};
use html5ever::{local_name, namespace_url, ns, LocalName, Prefix};
use http::header::{self, HeaderMap, HeaderValue};
use http::StatusCode;
-use ipc_channel::ipc;
+use ipc_channel::ipc::{self, IpcSharedMemory};
use ipc_channel::router::ROUTER;
use js::jsapi::JSAutoRealm;
use media::{glplayer_channel, GLPlayerMsg, GLPlayerMsgForward, WindowGLContext};
@@ -35,10 +35,10 @@ use servo_media::player::{PlaybackState, Player, PlayerError, PlayerEvent, SeekL
use servo_media::{ClientContextId, ServoMedia, SupportsMediaType};
use servo_url::ServoUrl;
use webrender_api::{
- ExternalImageData, ExternalImageId, ExternalImageType, ImageBufferKind, ImageData,
- ImageDescriptor, ImageDescriptorFlags, ImageFormat, ImageKey,
+ ExternalImageData, ExternalImageId, ExternalImageType, ImageBufferKind, ImageDescriptor,
+ ImageDescriptorFlags, ImageFormat, ImageKey,
};
-use webrender_traits::{ImageUpdate, WebRenderScriptApi};
+use webrender_traits::{CrossProcessCompositorApi, ImageUpdate, SerializableImageData};
use crate::document_loader::{LoadBlocker, LoadType};
use crate::dom::attr::Attr;
@@ -156,7 +156,7 @@ impl FrameHolder {
pub struct MediaFrameRenderer {
player_id: Option<u64>,
- api: WebRenderScriptApi,
+ compositor_api: CrossProcessCompositorApi,
current_frame: Option<(ImageKey, i32, i32)>,
old_frame: Option<ImageKey>,
very_old_frame: Option<ImageKey>,
@@ -165,10 +165,10 @@ pub struct MediaFrameRenderer {
}
impl MediaFrameRenderer {
- fn new(render_api_sender: WebRenderScriptApi) -> Self {
+ fn new(compositor_api: CrossProcessCompositorApi) -> Self {
Self {
player_id: None,
- api: render_api_sender,
+ compositor_api,
current_frame: None,
old_frame: None,
very_old_frame: None,
@@ -213,7 +213,7 @@ impl VideoFrameRenderer for MediaFrameRenderer {
updates.push(ImageUpdate::UpdateImage(
*image_key,
descriptor,
- ImageData::Raw(frame.get_data()),
+ SerializableImageData::Raw(IpcSharedMemory::from_bytes(&frame.get_data())),
));
}
@@ -228,7 +228,7 @@ impl VideoFrameRenderer for MediaFrameRenderer {
Some((ref mut image_key, ref mut width, ref mut height)) => {
self.old_frame = Some(*image_key);
- let Some(new_image_key) = self.api.generate_image_key() else {
+ let Some(new_image_key) = self.compositor_api.generate_image_key() else {
return;
};
@@ -244,13 +244,13 @@ impl VideoFrameRenderer for MediaFrameRenderer {
ImageBufferKind::Texture2D
};
- ImageData::External(ExternalImageData {
+ SerializableImageData::External(ExternalImageData {
id: ExternalImageId(self.player_id.unwrap()),
channel_index: 0,
image_type: ExternalImageType::TextureHandle(texture_target),
})
} else {
- ImageData::Raw(frame.get_data())
+ SerializableImageData::Raw(IpcSharedMemory::from_bytes(&frame.get_data()))
};
self.current_frame_holder
@@ -260,7 +260,7 @@ impl VideoFrameRenderer for MediaFrameRenderer {
updates.push(ImageUpdate::AddImage(new_image_key, descriptor, image_data));
},
None => {
- let Some(image_key) = self.api.generate_image_key() else {
+ let Some(image_key) = self.compositor_api.generate_image_key() else {
return;
};
self.current_frame = Some((image_key, frame.get_width(), frame.get_height()));
@@ -272,13 +272,13 @@ impl VideoFrameRenderer for MediaFrameRenderer {
ImageBufferKind::Texture2D
};
- ImageData::External(ExternalImageData {
+ SerializableImageData::External(ExternalImageData {
id: ExternalImageId(self.player_id.unwrap()),
channel_index: 0,
image_type: ExternalImageType::TextureHandle(texture_target),
})
} else {
- ImageData::Raw(frame.get_data())
+ SerializableImageData::Raw(IpcSharedMemory::from_bytes(&frame.get_data()))
};
self.current_frame_holder = Some(FrameHolder::new(frame));
@@ -286,7 +286,7 @@ impl VideoFrameRenderer for MediaFrameRenderer {
updates.push(ImageUpdate::AddImage(image_key, descriptor, image_data));
},
}
- self.api.update_images(updates);
+ self.compositor_api.update_images(updates);
}
}
@@ -445,7 +445,7 @@ impl HTMLMediaElement {
in_flight_play_promises_queue: Default::default(),
player: Default::default(),
video_renderer: Arc::new(Mutex::new(MediaFrameRenderer::new(
- document.window().get_webrender_api_sender(),
+ document.window().compositor_api().clone(),
))),
audio_renderer: Default::default(),
show_poster: Cell::new(true),
diff --git a/components/script/dom/screen.rs b/components/script/dom/screen.rs
index fcbd84fd061..d7ce8b6b4be 100644
--- a/components/script/dom/screen.rs
+++ b/components/script/dom/screen.rs
@@ -5,16 +5,14 @@
use dom_struct::dom_struct;
use euclid::Size2D;
use profile_traits::ipc;
-use script_traits::ScriptMsg;
use style_traits::CSSPixel;
use webrender_api::units::DeviceIntSize;
+use webrender_traits::CrossProcessCompositorMessage;
use crate::dom::bindings::codegen::Bindings::ScreenBinding::ScreenMethods;
-use crate::dom::bindings::inheritance::Castable;
use crate::dom::bindings::num::Finite;
use crate::dom::bindings::reflector::{reflect_dom_object, DomObject, Reflector};
use crate::dom::bindings::root::{Dom, DomRoot};
-use crate::dom::globalscope::GlobalScope;
use crate::dom::window::Window;
#[dom_struct]
@@ -39,9 +37,9 @@ impl Screen {
let (send, recv) =
ipc::channel::<DeviceIntSize>(self.global().time_profiler_chan().clone()).unwrap();
self.window
- .upcast::<GlobalScope>()
- .script_to_constellation_chan()
- .send(ScriptMsg::GetScreenSize(send))
+ .compositor_api()
+ .sender()
+ .send(CrossProcessCompositorMessage::GetScreenSize(send))
.unwrap();
let dpr = self.window.device_pixel_ratio();
let screen = recv.recv().unwrap_or(Size2D::zero());
@@ -52,9 +50,9 @@ impl Screen {
let (send, recv) =
ipc::channel::<DeviceIntSize>(self.global().time_profiler_chan().clone()).unwrap();
self.window
- .upcast::<GlobalScope>()
- .script_to_constellation_chan()
- .send(ScriptMsg::GetScreenAvailSize(send))
+ .compositor_api()
+ .sender()
+ .send(CrossProcessCompositorMessage::GetAvailableScreenSize(send))
.unwrap();
let dpr = self.window.device_pixel_ratio();
let screen = recv.recv().unwrap_or(Size2D::zero());
diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs
index 1622eecc896..73a63e435db 100644
--- a/components/script/dom/window.rs
+++ b/components/script/dom/window.rs
@@ -76,9 +76,9 @@ use style::str::HTML_SPACE_CHARACTERS;
use style::stylesheets::{CssRuleType, Origin, UrlExtraData};
use style_traits::{CSSPixel, DevicePixel, ParsingMode};
use url::Position;
-use webrender_api::units::{DeviceIntPoint, DeviceIntSize, LayoutPixel};
+use webrender_api::units::{DeviceIntRect, LayoutPixel};
use webrender_api::{DocumentId, ExternalScrollId};
-use webrender_traits::WebRenderScriptApi;
+use webrender_traits::CrossProcessCompositorApi;
use super::bindings::codegen::Bindings::MessagePortBinding::StructuredSerializeOptions;
use super::bindings::trace::HashMapTracedValues;
@@ -312,10 +312,10 @@ pub struct Window {
/// Flag to identify whether mutation observers are present(true)/absent(false)
exists_mut_observer: Cell<bool>,
- /// Webrender API Sender
+ /// Cross-process access to the compositor.
#[ignore_malloc_size_of = "Wraps an IpcSender"]
#[no_trace]
- webrender_api_sender: WebRenderScriptApi,
+ compositor_api: CrossProcessCompositorApi,
/// Indicate whether a SetDocumentStatus message has been sent after a reflow is complete.
/// It is used to avoid sending idle message more than once, which is unneccessary.
@@ -526,8 +526,8 @@ impl Window {
self.add_pending_reflow();
}
- pub fn get_webrender_api_sender(&self) -> WebRenderScriptApi {
- self.webrender_api_sender.clone()
+ pub fn compositor_api(&self) -> &CrossProcessCompositorApi {
+ &self.compositor_api
}
pub fn get_userscripts_path(&self) -> Option<String> {
@@ -1773,14 +1773,16 @@ impl Window {
fn client_window(&self) -> (Size2D<u32, CSSPixel>, Point2D<i32, CSSPixel>) {
let timer_profile_chan = self.global().time_profiler_chan().clone();
- let (send, recv) =
- ProfiledIpc::channel::<(DeviceIntSize, DeviceIntPoint)>(timer_profile_chan).unwrap();
- self.send_to_constellation(ScriptMsg::GetClientWindow(send));
- let (size, point) = recv.recv().unwrap_or((Size2D::zero(), Point2D::zero()));
+ let (send, recv) = ProfiledIpc::channel::<DeviceIntRect>(timer_profile_chan).unwrap();
+ let _ = self
+ .compositor_api
+ .sender()
+ .send(webrender_traits::CrossProcessCompositorMessage::GetClientWindowRect(send));
+ let rect = recv.recv().unwrap_or_default();
let dpr = self.device_pixel_ratio();
(
- (size.to_f32() / dpr).to_u32(),
- (point.to_f32() / dpr).to_i32(),
+ (rect.size().to_f32() / dpr).to_u32(),
+ (rect.min.to_f32() / dpr).to_i32(),
)
}
@@ -2548,7 +2550,7 @@ impl Window {
webxr_registry: webxr_api::Registry,
microtask_queue: Rc<MicrotaskQueue>,
webrender_document: DocumentId,
- webrender_api_sender: WebRenderScriptApi,
+ compositor_api: CrossProcessCompositorApi,
relayout_event: bool,
prepare_for_screenshot: bool,
unminify_js: bool,
@@ -2633,7 +2635,7 @@ impl Window {
paint_worklet: Default::default(),
webrender_document,
exists_mut_observer: Cell::new(false),
- webrender_api_sender,
+ compositor_api,
has_sent_idle_message: Cell::new(false),
relayout_event,
prepare_for_screenshot,