aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/window.rs
diff options
context:
space:
mode:
authorVíctor Manuel Jáquez Leal <vjaquez@igalia.com>2018-08-22 18:13:13 +0200
committerFernando Jiménez Moreno <ferjmoreno@gmail.com>2018-10-08 16:11:59 +0200
commit781b3b712bd328b2c94afc2196382ee6807ebfde (patch)
tree8d82e65391bd78df89f0b515c8be7216ca49e78c /components/script/dom/window.rs
parent77c7eda0bfe659fde191d0bb48cf6b124a5f4fd6 (diff)
downloadservo-781b3b712bd328b2c94afc2196382ee6807ebfde.tar.gz
servo-781b3b712bd328b2c94afc2196382ee6807ebfde.zip
Provide webrender_api::RenderApiSender to ScriptThread and DOM Window
This will allow the HTMLMediaElement later to get a handle to the RenderApi for rendering video frames. At a later time, all media handling should be moved to its own thread/process that is communicated with via IPC. At that point this can be removed again. Original-patch-by: Sebastian Dröge <sebastian@centricular.com>
Diffstat (limited to 'components/script/dom/window.rs')
-rw-r--r--components/script/dom/window.rs21
1 files changed, 20 insertions, 1 deletions
diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs
index ff905ab55b5..b6c7a460103 100644
--- a/components/script/dom/window.rs
+++ b/components/script/dom/window.rs
@@ -132,7 +132,9 @@ use time;
use timers::{IsInterval, TimerCallback};
use url::Position;
use webdriver_handlers::jsval_to_webdriver;
-use webrender_api::{ExternalScrollId, DeviceIntPoint, DeviceUintSize, DocumentId};
+use webrender_api::{
+ DeviceIntPoint, DeviceUintSize, DocumentId, ExternalScrollId, RenderApiSender,
+};
use webvr_traits::WebVRMsg;
/// Current state of the window object
@@ -308,6 +310,17 @@ pub struct Window {
/// Flag to identify whether mutation observers are present(true)/absent(false)
exists_mut_observer: Cell<bool>,
+ /// Webrender API Sender
+ #[ignore_malloc_size_of = "defined in webrender_api"]
+ webrender_api_sender: RenderApiSender,
+}
+
+// FIXME(victor): this doesn't belong here
+#[allow(unsafe_code)]
+unsafe impl ::dom::bindings::trace::JSTraceable for RenderApiSender {
+ unsafe fn trace(&self, _trc: *mut ::js::jsapi::JSTracer) {
+ // Do nothing
+ }
}
impl Window {
@@ -483,6 +496,10 @@ impl Window {
}
self.add_pending_reflow();
}
+
+ pub fn get_webrender_api_sender(&self) -> RenderApiSender {
+ self.webrender_api_sender.clone()
+ }
}
// https://html.spec.whatwg.org/multipage/#atob
@@ -2083,6 +2100,7 @@ impl Window {
webvr_chan: Option<IpcSender<WebVRMsg>>,
microtask_queue: Rc<MicrotaskQueue>,
webrender_document: DocumentId,
+ webrender_api_sender: RenderApiSender,
) -> DomRoot<Self> {
let layout_rpc: Box<LayoutRPC + Send> = {
let (rpc_send, rpc_recv) = channel();
@@ -2161,6 +2179,7 @@ impl Window {
paint_worklet: Default::default(),
webrender_document,
exists_mut_observer: Cell::new(false),
+ webrender_api_sender,
});
unsafe { WindowBinding::Wrap(runtime.cx(), win) }