diff --git a/Cargo.lock b/Cargo.lock index 19dae1aa9b0..dd72fc858dd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1086,6 +1086,7 @@ dependencies = [ "servo_url 0.0.1", "style_traits 0.0.1", "webrender_api 0.60.0 (git+https://github.com/servo/webrender)", + "webxr-api 0.0.1 (git+https://github.com/servo/webxr)", ] [[package]] @@ -5492,7 +5493,7 @@ dependencies = [ [[package]] name = "webxr" version = "0.0.1" -source = "git+https://github.com/servo/webxr#43a54f4cbe0ed3037e5e2bf34769241a5bd3da60" +source = "git+https://github.com/servo/webxr#0418277175dbccf83e575c99d6b9c778bfdbe70b" dependencies = [ "euclid 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)", "gleam 0.6.18 (registry+https://github.com/rust-lang/crates.io-index)", @@ -5504,7 +5505,7 @@ dependencies = [ [[package]] name = "webxr-api" version = "0.0.1" -source = "git+https://github.com/servo/webxr#43a54f4cbe0ed3037e5e2bf34769241a5bd3da60" +source = "git+https://github.com/servo/webxr#0418277175dbccf83e575c99d6b9c778bfdbe70b" dependencies = [ "euclid 0.20.0 (registry+https://github.com/rust-lang/crates.io-index)", "gleam 0.6.18 (registry+https://github.com/rust-lang/crates.io-index)", diff --git a/components/embedder_traits/Cargo.toml b/components/embedder_traits/Cargo.toml index 1b67089b2f6..1235e71c1bd 100644 --- a/components/embedder_traits/Cargo.toml +++ b/components/embedder_traits/Cargo.toml @@ -23,3 +23,4 @@ serde = "1.0" servo_url = {path = "../url"} style_traits = {path = "../style_traits", features = ["servo"]} webrender_api = {git = "https://github.com/servo/webrender", features = ["ipc"]} +webxr-api = {git = "https://github.com/servo/webxr", features = ["ipc"]} diff --git a/components/embedder_traits/lib.rs b/components/embedder_traits/lib.rs index 7622f0e5822..949b3ba5acb 100644 --- a/components/embedder_traits/lib.rs +++ b/components/embedder_traits/lib.rs @@ -21,6 +21,8 @@ use servo_url::ServoUrl; use std::fmt::{Debug, Error, Formatter}; use webrender_api::units::{DeviceIntPoint, DeviceIntSize}; +pub use webxr_api::MainThreadWaker as EventLoopWaker; + /// A cursor for the window. This is different from a CSS cursor (see /// `CursorKind`) in that it has no `Auto` value. #[repr(u8)] @@ -63,12 +65,6 @@ pub enum Cursor { ZoomOut, } -/// Used to wake up the event loop, provided by the servo port/embedder. -pub trait EventLoopWaker: 'static + Send { - fn clone(&self) -> Box; - fn wake(&self); -} - /// Sends messages to the embedder. pub struct EmbedderProxy { pub sender: Sender<(Option, EmbedderMsg)>, diff --git a/components/net/tests/main.rs b/components/net/tests/main.rs index d473ee2368e..c67273a0318 100644 --- a/components/net/tests/main.rs +++ b/components/net/tests/main.rs @@ -67,7 +67,7 @@ fn create_embedder_proxy() -> EmbedderProxy { } impl EventLoopWaker for DummyEventLoopWaker { fn wake(&self) {} - fn clone(&self) -> Box { + fn clone_box(&self) -> Box { Box::new(DummyEventLoopWaker {}) } } diff --git a/components/servo/lib.rs b/components/servo/lib.rs index a64972bc1a7..42b52985b59 100644 --- a/components/servo/lib.rs +++ b/components/servo/lib.rs @@ -289,10 +289,10 @@ where // the client window and the compositor. This channel is unique because // messages to client may need to pump a platform-specific event loop // to deliver the message. + let event_loop_waker = embedder.create_event_loop_waker(); let (compositor_proxy, compositor_receiver) = - create_compositor_channel(embedder.create_event_loop_waker()); - let (embedder_proxy, embedder_receiver) = - create_embedder_channel(embedder.create_event_loop_waker()); + create_compositor_channel(event_loop_waker.clone()); + let (embedder_proxy, embedder_receiver) = create_embedder_channel(event_loop_waker.clone()); let time_profiler_chan = profile_time::Profiler::create( &opts.time_profiling, opts.time_profiler_trace_path.clone(), @@ -368,8 +368,8 @@ where // For the moment, we enable use both the webxr crate and the rust-webvr crate, // but we are migrating over to just using webxr. - let mut webxr_main_thread = - webxr_api::MainThreadRegistry::new().expect("Failed to create WebXR device registry"); + let mut webxr_main_thread = webxr_api::MainThreadRegistry::new(event_loop_waker) + .expect("Failed to create WebXR device registry"); if pref!(dom.webvr.enabled) || pref!(dom.webxr.enabled) { embedder.register_webxr(&mut webxr_main_thread); } diff --git a/ports/glutin/events_loop.rs b/ports/glutin/events_loop.rs index d3afddef8fe..770822d61c9 100644 --- a/ports/glutin/events_loop.rs +++ b/ports/glutin/events_loop.rs @@ -87,7 +87,7 @@ impl EventLoopWaker for HeadedEventLoopWaker { warn!("Failed to wake up event loop ({}).", err); } } - fn clone(&self) -> Box { + fn clone_box(&self) -> Box { Box::new(HeadedEventLoopWaker { proxy: self.proxy.clone(), }) @@ -97,5 +97,5 @@ impl EventLoopWaker for HeadedEventLoopWaker { struct HeadlessEventLoopWaker; impl EventLoopWaker for HeadlessEventLoopWaker { fn wake(&self) {} - fn clone(&self) -> Box { Box::new(HeadlessEventLoopWaker) } + fn clone_box(&self) -> Box { Box::new(HeadlessEventLoopWaker) } } diff --git a/ports/libmlservo/src/lib.rs b/ports/libmlservo/src/lib.rs index 07b2912dd87..029691c67e1 100644 --- a/ports/libmlservo/src/lib.rs +++ b/ports/libmlservo/src/lib.rs @@ -403,7 +403,7 @@ enum ScrollState { struct EventLoopWakerInstance; impl EventLoopWaker for EventLoopWakerInstance { - fn clone(&self) -> Box { + fn clone_box(&self) -> Box { Box::new(EventLoopWakerInstance) } diff --git a/ports/libsimpleservo/capi/src/lib.rs b/ports/libsimpleservo/capi/src/lib.rs index 0d7677db7d3..6407752286c 100644 --- a/ports/libsimpleservo/capi/src/lib.rs +++ b/ports/libsimpleservo/capi/src/lib.rs @@ -373,7 +373,7 @@ impl WakeupCallback { } impl EventLoopWaker for WakeupCallback { - fn clone(&self) -> Box { + fn clone_box(&self) -> Box { Box::new(WakeupCallback(self.0)) } fn wake(&self) { diff --git a/ports/libsimpleservo/jniapi/src/lib.rs b/ports/libsimpleservo/jniapi/src/lib.rs index 1a45ce35abb..d67c2588947 100644 --- a/ports/libsimpleservo/jniapi/src/lib.rs +++ b/ports/libsimpleservo/jniapi/src/lib.rs @@ -339,7 +339,7 @@ impl WakeupCallback { } impl EventLoopWaker for WakeupCallback { - fn clone(&self) -> Box { + fn clone_box(&self) -> Box { Box::new(WakeupCallback { callback: self.callback.clone(), jvm: self.jvm.clone(),