aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/script/dom/navigator.rs4
-rw-r--r--components/script/dom/webglrenderingcontext.rs6
-rw-r--r--components/script/dom/window.rs8
3 files changed, 18 insertions, 0 deletions
diff --git a/components/script/dom/navigator.rs b/components/script/dom/navigator.rs
index 7d120ba2eba..731960518ea 100644
--- a/components/script/dom/navigator.rs
+++ b/components/script/dom/navigator.rs
@@ -59,6 +59,10 @@ impl Navigator {
pub fn new(window: &Window) -> DomRoot<Navigator> {
reflect_dom_object(Box::new(Navigator::new_inherited()), window)
}
+
+ pub fn xr(&self) -> Option<DomRoot<XRSystem>> {
+ self.xr.get()
+ }
}
impl NavigatorMethods for Navigator {
diff --git a/components/script/dom/webglrenderingcontext.rs b/components/script/dom/webglrenderingcontext.rs
index 33000497abf..ff4dea4fdb3 100644
--- a/components/script/dom/webglrenderingcontext.rs
+++ b/components/script/dom/webglrenderingcontext.rs
@@ -502,6 +502,12 @@ impl WebGLRenderingContext {
return;
}
+ // Dirtying the canvas is unnecessary if we're actively displaying immersive
+ // XR content right now.
+ if self.global().as_window().in_immersive_xr_session() {
+ return;
+ }
+
self.canvas
.upcast::<Node>()
.dirty(NodeDamage::OtherNodeDamage);
diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs
index 688ced4fda7..71094a0cd2e 100644
--- a/components/script/dom/window.rs
+++ b/components/script/dom/window.rs
@@ -2225,6 +2225,14 @@ impl Window {
pub fn webrender_document(&self) -> DocumentId {
self.webrender_document
}
+
+ pub fn in_immersive_xr_session(&self) -> bool {
+ self.navigator
+ .get()
+ .as_ref()
+ .and_then(|nav| nav.xr())
+ .map_or(false, |xr| xr.pending_or_active_session())
+ }
}
impl Window {