diff --git a/components/shared/webxr/device.rs b/components/shared/webxr/device.rs index 0c6a7161686..377294387d1 100644 --- a/components/shared/webxr/device.rs +++ b/components/shared/webxr/device.rs @@ -8,8 +8,8 @@ use euclid::{Point2D, RigidTransform3D}; use crate::{ ContextId, EnvironmentBlendMode, Error, Event, Floor, Frame, HitTestId, HitTestSource, - InputSource, LayerId, LayerInit, Native, Quitter, Sender, Session, SessionBuilder, SessionInit, - SessionMode, Viewports, + InputSource, LayerId, LayerInit, Native, Quitter, Session, SessionBuilder, SessionInit, + SessionMode, Viewports, WebXrSender, }; /// A trait for discovering XR devices @@ -47,7 +47,7 @@ pub trait DeviceAPI: 'static { fn initial_inputs(&self) -> Vec; /// Sets the event handling channel - fn set_event_dest(&mut self, dest: Sender); + fn set_event_dest(&mut self, dest: WebXrSender); /// Quit the session fn quit(&mut self); diff --git a/components/shared/webxr/events.rs b/components/shared/webxr/events.rs index c56332a0b7a..5a7928810bb 100644 --- a/components/shared/webxr/events.rs +++ b/components/shared/webxr/events.rs @@ -5,7 +5,8 @@ use euclid::RigidTransform3D; use crate::{ - ApiSpace, BaseSpace, Frame, InputFrame, InputId, InputSource, SelectEvent, SelectKind, Sender, + ApiSpace, BaseSpace, Frame, InputFrame, InputId, InputSource, SelectEvent, SelectKind, + WebXrSender, }; #[derive(Clone, Debug)] @@ -45,7 +46,7 @@ pub enum Visibility { /// when no event callback has been set pub enum EventBuffer { Buffered(Vec), - Sink(Sender), + Sink(WebXrSender), } impl Default for EventBuffer { @@ -64,7 +65,7 @@ impl EventBuffer { } } - pub fn upgrade(&mut self, dest: Sender) { + pub fn upgrade(&mut self, dest: WebXrSender) { if let EventBuffer::Buffered(ref mut events) = *self { for event in events.drain(..) { let _ = dest.send(event); diff --git a/components/shared/webxr/lib.rs b/components/shared/webxr/lib.rs index 2348947d3b9..563d1190c47 100644 --- a/components/shared/webxr/lib.rs +++ b/components/shared/webxr/lib.rs @@ -20,7 +20,7 @@ pub mod util; mod view; #[cfg(not(feature = "ipc"))] -pub use std::sync::mpsc::{Receiver, RecvTimeoutError, Sender}; +pub use std::sync::mpsc::{RecvTimeoutError, WebXrReceiver, WebXrSender}; #[cfg(feature = "ipc")] use std::thread; use std::time::Duration; @@ -37,11 +37,11 @@ pub use input::{ Handedness, InputFrame, InputId, InputSource, SelectEvent, SelectKind, TargetRayMode, }; #[cfg(feature = "ipc")] -pub use ipc_channel::ipc::channel; +pub use ipc_channel::ipc::channel as webxr_channel; #[cfg(feature = "ipc")] -pub use ipc_channel::ipc::IpcReceiver as Receiver; +pub use ipc_channel::ipc::IpcReceiver as WebXrReceiver; #[cfg(feature = "ipc")] -pub use ipc_channel::ipc::IpcSender as Sender; +pub use ipc_channel::ipc::IpcSender as WebXrSender; pub use layer::{ ContextId, GLContexts, GLTypes, LayerGrandManager, LayerGrandManagerAPI, LayerId, LayerInit, LayerLayout, LayerManager, LayerManagerAPI, LayerManagerFactory, SubImage, SubImages, @@ -63,18 +63,21 @@ pub use view::{ }; #[cfg(not(feature = "ipc"))] -pub fn channel() -> Result<(Sender, Receiver), ()> { +pub fn webxr_channel() -> Result<(WebXrWebXrSender, WebXrWebXrReceiver), ()> { Ok(std::sync::mpsc::channel()) } #[cfg(not(feature = "ipc"))] -pub fn recv_timeout(receiver: &Receiver, timeout: Duration) -> Result { +pub fn recv_timeout( + receiver: &WebXrReceiver, + timeout: Duration, +) -> Result { receiver.recv_timeout(timeout) } #[cfg(feature = "ipc")] pub fn recv_timeout( - receiver: &Receiver, + receiver: &WebXrReceiver, timeout: Duration, ) -> Result where diff --git a/components/shared/webxr/mock.rs b/components/shared/webxr/mock.rs index 5c8d855e5ab..b386f7d3ba5 100644 --- a/components/shared/webxr/mock.rs +++ b/components/shared/webxr/mock.rs @@ -8,8 +8,8 @@ use serde::{Deserialize, Serialize}; use crate::{ DiscoveryAPI, Display, EntityType, Error, Floor, Handedness, Input, InputId, InputSource, - LeftEye, Native, Receiver, RightEye, SelectEvent, SelectKind, Sender, TargetRayMode, Triangle, - Viewer, Viewport, Visibility, + LeftEye, Native, RightEye, SelectEvent, SelectKind, TargetRayMode, Triangle, Viewer, Viewport, + Visibility, WebXrReceiver, WebXrSender, }; /// A trait for discovering mock XR devices @@ -17,7 +17,7 @@ pub trait MockDiscoveryAPI: 'static { fn simulate_device_connection( &mut self, init: MockDeviceInit, - receiver: Receiver, + receiver: WebXrReceiver, ) -> Result>, Error>; } @@ -62,7 +62,7 @@ pub enum MockDeviceMsg { VisibilityChange(Visibility), SetWorld(MockWorld), ClearWorld, - Disconnect(Sender<()>), + Disconnect(WebXrSender<()>), SetBoundsGeometry(Vec>), SimulateResetPose, } diff --git a/components/shared/webxr/registry.rs b/components/shared/webxr/registry.rs index 5835424e375..fc894b62fd6 100644 --- a/components/shared/webxr/registry.rs +++ b/components/shared/webxr/registry.rs @@ -8,14 +8,14 @@ use serde::{Deserialize, Serialize}; use crate::{ DiscoveryAPI, Error, Frame, GLTypes, LayerGrandManager, MainThreadSession, MockDeviceInit, - MockDeviceMsg, MockDiscoveryAPI, Receiver, Sender, Session, SessionBuilder, SessionId, - SessionInit, SessionMode, + MockDeviceMsg, MockDiscoveryAPI, Session, SessionBuilder, SessionId, SessionInit, SessionMode, + WebXrReceiver, WebXrSender, }; #[derive(Clone)] #[cfg_attr(feature = "ipc", derive(Serialize, Deserialize))] pub struct Registry { - sender: Sender, + sender: WebXrSender, waker: MainThreadWakerImpl, } @@ -23,8 +23,8 @@ pub struct MainThreadRegistry { discoveries: Vec>>, sessions: Vec>, mocks: Vec>>, - sender: Sender, - receiver: Receiver, + sender: WebXrSender, + receiver: WebXrReceiver, waker: MainThreadWakerImpl, grand_manager: LayerGrandManager, next_session_id: u32, @@ -45,7 +45,7 @@ impl Clone for Box { #[cfg_attr(feature = "ipc", derive(Serialize, Deserialize))] struct MainThreadWakerImpl { #[cfg(feature = "ipc")] - sender: Sender<()>, + sender: WebXrSender<()>, #[cfg(not(feature = "ipc"))] waker: Box, } @@ -53,7 +53,7 @@ struct MainThreadWakerImpl { #[cfg(feature = "ipc")] impl MainThreadWakerImpl { fn new(waker: Box) -> Result { - let (sender, receiver) = crate::channel().or(Err(Error::CommunicationError))?; + let (sender, receiver) = crate::webxr_channel().or(Err(Error::CommunicationError))?; ipc_channel::router::ROUTER.add_typed_route(receiver, Box::new(move |_| waker.wake())); Ok(MainThreadWakerImpl { sender }) } @@ -75,7 +75,7 @@ impl MainThreadWakerImpl { } impl Registry { - pub fn supports_session(&mut self, mode: SessionMode, dest: Sender>) { + pub fn supports_session(&mut self, mode: SessionMode, dest: WebXrSender>) { let _ = self.sender.send(RegistryMsg::SupportsSession(mode, dest)); self.waker.wake(); } @@ -84,8 +84,8 @@ impl Registry { &mut self, mode: SessionMode, init: SessionInit, - dest: Sender>, - animation_frame_handler: Sender, + dest: WebXrSender>, + animation_frame_handler: WebXrSender, ) { let _ = self.sender.send(RegistryMsg::RequestSession( mode, @@ -99,7 +99,7 @@ impl Registry { pub fn simulate_device_connection( &mut self, init: MockDeviceInit, - dest: Sender, Error>>, + dest: WebXrSender, Error>>, ) { let _ = self .sender @@ -113,7 +113,7 @@ impl MainThreadRegistry { waker: Box, grand_manager: LayerGrandManager, ) -> Result { - let (sender, receiver) = crate::channel().or(Err(Error::CommunicationError))?; + let (sender, receiver) = crate::webxr_channel().or(Err(Error::CommunicationError))?; let discoveries = Vec::new(); let sessions = Vec::new(); let mocks = Vec::new(); @@ -199,7 +199,7 @@ impl MainThreadRegistry { &mut self, mode: SessionMode, init: SessionInit, - raf_sender: Sender, + raf_sender: WebXrSender, ) -> Result { for discovery in &mut self.discoveries { if discovery.supports_session(mode) { @@ -225,9 +225,9 @@ impl MainThreadRegistry { fn simulate_device_connection( &mut self, init: MockDeviceInit, - ) -> Result, Error> { + ) -> Result, Error> { for mock in &mut self.mocks { - let (sender, receiver) = crate::channel().or(Err(Error::CommunicationError))?; + let (sender, receiver) = crate::webxr_channel().or(Err(Error::CommunicationError))?; if let Ok(discovery) = mock.simulate_device_connection(init.clone(), receiver) { self.discoveries.insert(0, discovery); return Ok(sender); @@ -243,9 +243,12 @@ enum RegistryMsg { RequestSession( SessionMode, SessionInit, - Sender>, - Sender, + WebXrSender>, + WebXrSender, + ), + SupportsSession(SessionMode, WebXrSender>), + SimulateDeviceConnection( + MockDeviceInit, + WebXrSender, Error>>, ), - SupportsSession(SessionMode, Sender>), - SimulateDeviceConnection(MockDeviceInit, Sender, Error>>), } diff --git a/components/shared/webxr/session.rs b/components/shared/webxr/session.rs index 17219d03868..4809ff5f17b 100644 --- a/components/shared/webxr/session.rs +++ b/components/shared/webxr/session.rs @@ -11,9 +11,9 @@ use log::warn; use serde::{Deserialize, Serialize}; use crate::{ - channel, ContextId, DeviceAPI, Error, Event, Floor, Frame, FrameUpdateEvent, HitTestId, - HitTestSource, InputSource, LayerGrandManager, LayerId, LayerInit, Native, Receiver, Sender, - Viewport, Viewports, + webxr_channel, ContextId, DeviceAPI, Error, Event, Floor, Frame, FrameUpdateEvent, HitTestId, + HitTestSource, InputSource, LayerGrandManager, LayerId, LayerInit, Native, Viewport, Viewports, + WebXrReceiver, WebXrSender, }; // How long to wait for an rAF. @@ -89,24 +89,24 @@ pub enum EnvironmentBlendMode { #[derive(Debug)] #[cfg_attr(feature = "ipc", derive(Serialize, Deserialize))] enum SessionMsg { - CreateLayer(ContextId, LayerInit, Sender>), + CreateLayer(ContextId, LayerInit, WebXrSender>), DestroyLayer(ContextId, LayerId), SetLayers(Vec<(ContextId, LayerId)>), - SetEventDest(Sender), + SetEventDest(WebXrSender), UpdateClipPlanes(/* near */ f32, /* far */ f32), StartRenderLoop, RenderAnimationFrame, RequestHitTest(HitTestSource), CancelHitTest(HitTestId), - UpdateFrameRate(f32, Sender), + UpdateFrameRate(f32, WebXrSender), Quit, - GetBoundsGeometry(Sender>>>), + GetBoundsGeometry(WebXrSender>>>), } #[cfg_attr(feature = "ipc", derive(Serialize, Deserialize))] #[derive(Clone)] pub struct Quitter { - sender: Sender, + sender: WebXrSender, } impl Quitter { @@ -122,7 +122,7 @@ impl Quitter { pub struct Session { floor_transform: Option>, viewports: Viewports, - sender: Sender, + sender: WebXrSender, environment_blend_mode: EnvironmentBlendMode, initial_inputs: Vec, granted_features: Vec, @@ -144,7 +144,7 @@ impl Session { } pub fn reference_space_bounds(&self) -> Option>> { - let (sender, receiver) = channel().ok()?; + let (sender, receiver) = webxr_channel().ok()?; let _ = self.sender.send(SessionMsg::GetBoundsGeometry(sender)); receiver.recv().ok()? } @@ -175,7 +175,7 @@ impl Session { } pub fn create_layer(&self, context_id: ContextId, init: LayerInit) -> Result { - let (sender, receiver) = channel().map_err(|_| Error::CommunicationError)?; + let (sender, receiver) = webxr_channel().map_err(|_| Error::CommunicationError)?; let _ = self .sender .send(SessionMsg::CreateLayer(context_id, init, sender)); @@ -201,7 +201,7 @@ impl Session { let _ = self.sender.send(SessionMsg::UpdateClipPlanes(near, far)); } - pub fn set_event_dest(&mut self, dest: Sender) { + pub fn set_event_dest(&mut self, dest: WebXrSender) { let _ = self.sender.send(SessionMsg::SetEventDest(dest)); } @@ -233,7 +233,7 @@ impl Session { let _ = self.sender.send(SessionMsg::CancelHitTest(id)); } - pub fn update_frame_rate(&mut self, rate: f32, sender: Sender) { + pub fn update_frame_rate(&mut self, rate: f32, sender: WebXrSender) { let _ = self.sender.send(SessionMsg::UpdateFrameRate(rate, sender)); } @@ -251,12 +251,12 @@ enum RenderState { /// For devices that want to do their own thread management, the `SessionThread` type is exposed. pub struct SessionThread { - receiver: Receiver, - sender: Sender, + receiver: WebXrReceiver, + sender: WebXrSender, layers: Vec<(ContextId, LayerId)>, pending_layers: Option>, frame_count: u64, - frame_sender: Sender, + frame_sender: WebXrSender, running: bool, device: Device, id: SessionId, @@ -269,10 +269,10 @@ where { pub fn new( mut device: Device, - frame_sender: Sender, + frame_sender: WebXrSender, id: SessionId, ) -> Result { - let (sender, receiver) = crate::channel().or(Err(Error::CommunicationError))?; + let (sender, receiver) = crate::webxr_channel().or(Err(Error::CommunicationError))?; device.set_quitter(Quitter { sender: sender.clone(), }); @@ -440,7 +440,7 @@ where /// A type for building XR sessions pub struct SessionBuilder<'a, GL> { sessions: &'a mut Vec>, - frame_sender: Sender, + frame_sender: WebXrSender, layer_grand_manager: LayerGrandManager, id: SessionId, } @@ -452,7 +452,7 @@ impl<'a, GL: 'static> SessionBuilder<'a, GL> { pub(crate) fn new( sessions: &'a mut Vec>, - frame_sender: Sender, + frame_sender: WebXrSender, layer_grand_manager: LayerGrandManager, id: SessionId, ) -> Self { @@ -470,7 +470,7 @@ impl<'a, GL: 'static> SessionBuilder<'a, GL> { Factory: 'static + FnOnce(LayerGrandManager) -> Result + Send, Device: DeviceAPI, { - let (acks, ackr) = crate::channel().or(Err(Error::CommunicationError))?; + let (acks, ackr) = crate::webxr_channel().or(Err(Error::CommunicationError))?; let frame_sender = self.frame_sender; let layer_grand_manager = self.layer_grand_manager; let id = self.id; diff --git a/components/webxr/glwindow/mod.rs b/components/webxr/glwindow/mod.rs index e5389c3dcc1..5ef352d2ade 100644 --- a/components/webxr/glwindow/mod.rs +++ b/components/webxr/glwindow/mod.rs @@ -18,10 +18,10 @@ use surfman::{ use webxr_api::util::ClipPlanes; use webxr_api::{ ContextId, DeviceAPI, DiscoveryAPI, Display, Error, Event, EventBuffer, Floor, Frame, - InputSource, LayerGrandManager, LayerId, LayerInit, LayerManager, Native, Quitter, Sender, - Session, SessionBuilder, SessionInit, SessionMode, SomeEye, View, Viewer, ViewerPose, Viewport, - Viewports, Views, CUBE_BACK, CUBE_BOTTOM, CUBE_LEFT, CUBE_RIGHT, CUBE_TOP, LEFT_EYE, RIGHT_EYE, - VIEWER, + InputSource, LayerGrandManager, LayerId, LayerInit, LayerManager, Native, Quitter, Session, + SessionBuilder, SessionInit, SessionMode, SomeEye, View, Viewer, ViewerPose, Viewport, + Viewports, Views, WebXrSender, CUBE_BACK, CUBE_BOTTOM, CUBE_LEFT, CUBE_RIGHT, CUBE_TOP, + LEFT_EYE, RIGHT_EYE, VIEWER, }; use crate::{SurfmanGL, SurfmanLayerManager}; @@ -305,7 +305,7 @@ impl DeviceAPI for GlWindowDevice { vec![] } - fn set_event_dest(&mut self, dest: Sender) { + fn set_event_dest(&mut self, dest: WebXrSender) { self.events.upgrade(dest) } diff --git a/components/webxr/headless/mod.rs b/components/webxr/headless/mod.rs index 032687b25a7..17eda8ce822 100644 --- a/components/webxr/headless/mod.rs +++ b/components/webxr/headless/mod.rs @@ -13,8 +13,8 @@ use webxr_api::{ Frame, FrameUpdateEvent, HitTestId, HitTestResult, HitTestSource, Input, InputFrame, InputId, InputSource, LayerGrandManager, LayerId, LayerInit, LayerManager, MockButton, MockDeviceInit, MockDeviceMsg, MockDiscoveryAPI, MockInputMsg, MockViewInit, MockViewsInit, MockWorld, Native, - Quitter, Ray, Receiver, SelectEvent, SelectKind, Sender, Session, SessionBuilder, SessionInit, - SessionMode, Space, SubImages, View, Viewer, ViewerPose, Viewports, Views, + Quitter, Ray, SelectEvent, SelectKind, Session, SessionBuilder, SessionInit, SessionMode, + Space, SubImages, View, Viewer, ViewerPose, Viewports, Views, WebXrReceiver, WebXrSender, }; use crate::{SurfmanGL, SurfmanLayerManager}; @@ -74,7 +74,7 @@ impl MockDiscoveryAPI for HeadlessMockDiscovery { fn simulate_device_connection( &mut self, init: MockDeviceInit, - receiver: Receiver, + receiver: WebXrReceiver, ) -> Result>, Error> { let viewer_origin = init.viewer_origin; let floor_transform = init.floor_origin.map(|f| f.inverse()); @@ -107,7 +107,7 @@ impl MockDiscoveryAPI for HeadlessMockDiscovery { } } -fn run_loop(receiver: Receiver, data: Arc>) { +fn run_loop(receiver: WebXrReceiver, data: Arc>) { while let Ok(msg) = receiver.recv() { if !data.lock().expect("Mutex poisoned").handle_msg(msg) { break; @@ -283,7 +283,7 @@ impl DeviceAPI for HeadlessDevice { vec![] } - fn set_event_dest(&mut self, dest: Sender) { + fn set_event_dest(&mut self, dest: WebXrSender) { self.with_per_session(|s| s.events.upgrade(dest)) } diff --git a/components/webxr/openxr/mod.rs b/components/webxr/openxr/mod.rs index a772cbbbbe2..98968bede25 100644 --- a/components/webxr/openxr/mod.rs +++ b/components/webxr/openxr/mod.rs @@ -29,9 +29,9 @@ use webxr_api::util::{self, ClipPlanes}; use webxr_api::{ BaseSpace, Capture, ContextId, DeviceAPI, DiscoveryAPI, Display, Error, Event, EventBuffer, Floor, Frame, GLContexts, InputId, InputSource, LayerGrandManager, LayerId, LayerInit, - LayerManager, LayerManagerAPI, LeftEye, Native, Quitter, RightEye, SelectKind, Sender, + LayerManager, LayerManagerAPI, LeftEye, Native, Quitter, RightEye, SelectKind, Session as WebXrSession, SessionBuilder, SessionInit, SessionMode, SubImage, SubImages, View, - ViewerPose, Viewport, Viewports, Views, Visibility, + ViewerPose, Viewport, Viewports, Views, Visibility, WebXrSender, }; use crate::gl_utils::GlClearer; @@ -1421,7 +1421,7 @@ impl DeviceAPI for OpenXrDevice { ] } - fn set_event_dest(&mut self, dest: Sender) { + fn set_event_dest(&mut self, dest: WebXrSender) { self.events.upgrade(dest) }