mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
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>
This commit is contained in:
parent
77c7eda0bf
commit
781b3b712b
4 changed files with 32 additions and 3 deletions
|
@ -517,6 +517,7 @@ impl UnprivilegedPipelineContent {
|
||||||
webgl_chan: self.webgl_chan,
|
webgl_chan: self.webgl_chan,
|
||||||
webvr_chan: self.webvr_chan,
|
webvr_chan: self.webvr_chan,
|
||||||
webrender_document: self.webrender_document,
|
webrender_document: self.webrender_document,
|
||||||
|
webrender_api_sender: self.webrender_api_sender.clone(),
|
||||||
},
|
},
|
||||||
self.load_data.clone(),
|
self.load_data.clone(),
|
||||||
);
|
);
|
||||||
|
|
|
@ -132,7 +132,9 @@ use time;
|
||||||
use timers::{IsInterval, TimerCallback};
|
use timers::{IsInterval, TimerCallback};
|
||||||
use url::Position;
|
use url::Position;
|
||||||
use webdriver_handlers::jsval_to_webdriver;
|
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;
|
use webvr_traits::WebVRMsg;
|
||||||
|
|
||||||
/// Current state of the window object
|
/// Current state of the window object
|
||||||
|
@ -308,6 +310,17 @@ pub struct Window {
|
||||||
|
|
||||||
/// Flag to identify whether mutation observers are present(true)/absent(false)
|
/// Flag to identify whether mutation observers are present(true)/absent(false)
|
||||||
exists_mut_observer: Cell<bool>,
|
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 {
|
impl Window {
|
||||||
|
@ -483,6 +496,10 @@ impl Window {
|
||||||
}
|
}
|
||||||
self.add_pending_reflow();
|
self.add_pending_reflow();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn get_webrender_api_sender(&self) -> RenderApiSender {
|
||||||
|
self.webrender_api_sender.clone()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://html.spec.whatwg.org/multipage/#atob
|
// https://html.spec.whatwg.org/multipage/#atob
|
||||||
|
@ -2083,6 +2100,7 @@ impl Window {
|
||||||
webvr_chan: Option<IpcSender<WebVRMsg>>,
|
webvr_chan: Option<IpcSender<WebVRMsg>>,
|
||||||
microtask_queue: Rc<MicrotaskQueue>,
|
microtask_queue: Rc<MicrotaskQueue>,
|
||||||
webrender_document: DocumentId,
|
webrender_document: DocumentId,
|
||||||
|
webrender_api_sender: RenderApiSender,
|
||||||
) -> DomRoot<Self> {
|
) -> DomRoot<Self> {
|
||||||
let layout_rpc: Box<LayoutRPC + Send> = {
|
let layout_rpc: Box<LayoutRPC + Send> = {
|
||||||
let (rpc_send, rpc_recv) = channel();
|
let (rpc_send, rpc_recv) = channel();
|
||||||
|
@ -2161,6 +2179,7 @@ impl Window {
|
||||||
paint_worklet: Default::default(),
|
paint_worklet: Default::default(),
|
||||||
webrender_document,
|
webrender_document,
|
||||||
exists_mut_observer: Cell::new(false),
|
exists_mut_observer: Cell::new(false),
|
||||||
|
webrender_api_sender,
|
||||||
});
|
});
|
||||||
|
|
||||||
unsafe { WindowBinding::Wrap(runtime.cx(), win) }
|
unsafe { WindowBinding::Wrap(runtime.cx(), win) }
|
||||||
|
|
|
@ -130,7 +130,7 @@ use time::{get_time, precise_time_ns, Tm};
|
||||||
use url::Position;
|
use url::Position;
|
||||||
use url::percent_encoding::percent_decode;
|
use url::percent_encoding::percent_decode;
|
||||||
use webdriver_handlers;
|
use webdriver_handlers;
|
||||||
use webrender_api::DocumentId;
|
use webrender_api::{DocumentId, RenderApiSender};
|
||||||
use webvr_traits::{WebVREvent, WebVRMsg};
|
use webvr_traits::{WebVREvent, WebVRMsg};
|
||||||
|
|
||||||
pub type ImageCacheMsg = (PipelineId, PendingImageResponse);
|
pub type ImageCacheMsg = (PipelineId, PendingImageResponse);
|
||||||
|
@ -591,6 +591,9 @@ pub struct ScriptThread {
|
||||||
|
|
||||||
/// The Webrender Document ID associated with this thread.
|
/// The Webrender Document ID associated with this thread.
|
||||||
webrender_document: DocumentId,
|
webrender_document: DocumentId,
|
||||||
|
|
||||||
|
/// FIXME(victor):
|
||||||
|
webrender_api_sender: RenderApiSender,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// In the event of thread panic, all data on the stack runs its destructor. However, there
|
/// In the event of thread panic, all data on the stack runs its destructor. However, there
|
||||||
|
@ -1063,6 +1066,7 @@ impl ScriptThread {
|
||||||
custom_element_reaction_stack: CustomElementReactionStack::new(),
|
custom_element_reaction_stack: CustomElementReactionStack::new(),
|
||||||
|
|
||||||
webrender_document: state.webrender_document,
|
webrender_document: state.webrender_document,
|
||||||
|
webrender_api_sender: state.webrender_api_sender,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2584,6 +2588,7 @@ impl ScriptThread {
|
||||||
self.webvr_chan.clone(),
|
self.webvr_chan.clone(),
|
||||||
self.microtask_queue.clone(),
|
self.microtask_queue.clone(),
|
||||||
self.webrender_document,
|
self.webrender_document,
|
||||||
|
self.webrender_api_sender.clone(),
|
||||||
);
|
);
|
||||||
|
|
||||||
// Initialize the browsing context for the window.
|
// Initialize the browsing context for the window.
|
||||||
|
|
|
@ -72,7 +72,9 @@ use style_traits::CSSPixel;
|
||||||
use style_traits::SpeculativePainter;
|
use style_traits::SpeculativePainter;
|
||||||
use style_traits::cursor::CursorKind;
|
use style_traits::cursor::CursorKind;
|
||||||
use webdriver_msg::{LoadStatus, WebDriverScriptCommand};
|
use webdriver_msg::{LoadStatus, WebDriverScriptCommand};
|
||||||
use webrender_api::{ExternalScrollId, DevicePixel, DeviceUintSize, DocumentId, ImageKey};
|
use webrender_api::{
|
||||||
|
DevicePixel, DeviceUintSize, DocumentId, ExternalScrollId, ImageKey, RenderApiSender,
|
||||||
|
};
|
||||||
use webvr_traits::{WebVREvent, WebVRMsg};
|
use webvr_traits::{WebVREvent, WebVRMsg};
|
||||||
|
|
||||||
pub use script_msg::{LayoutMsg, ScriptMsg, EventResult, LogEntry};
|
pub use script_msg::{LayoutMsg, ScriptMsg, EventResult, LogEntry};
|
||||||
|
@ -588,6 +590,8 @@ pub struct InitialScriptState {
|
||||||
pub webvr_chan: Option<IpcSender<WebVRMsg>>,
|
pub webvr_chan: Option<IpcSender<WebVRMsg>>,
|
||||||
/// The Webrender document ID associated with this thread.
|
/// The Webrender document ID associated with this thread.
|
||||||
pub webrender_document: DocumentId,
|
pub webrender_document: DocumentId,
|
||||||
|
/// FIXME(victor): The Webrender API sender in this constellation's pipeline
|
||||||
|
pub webrender_api_sender: RenderApiSender,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// This trait allows creating a `ScriptThread` without depending on the `script`
|
/// This trait allows creating a `ScriptThread` without depending on the `script`
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue