diff options
author | Víctor Manuel Jáquez Leal <vjaquez@igalia.com> | 2018-08-22 18:13:13 +0200 |
---|---|---|
committer | Fernando Jiménez Moreno <ferjmoreno@gmail.com> | 2018-10-08 16:11:59 +0200 |
commit | 781b3b712bd328b2c94afc2196382ee6807ebfde (patch) | |
tree | 8d82e65391bd78df89f0b515c8be7216ca49e78c /components/script/dom/window.rs | |
parent | 77c7eda0bfe659fde191d0bb48cf6b124a5f4fd6 (diff) | |
download | servo-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.rs | 21 |
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) } |