aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2020-02-23 08:55:33 -0500
committerGitHub <noreply@github.com>2020-02-23 08:55:33 -0500
commit6bc4a7df24df6c7ed41f2ee4c2d38a282760c2b6 (patch)
treefcbe9ebb7584055afbae43b26f65365bb93f30bf /components/script/dom
parent504eeb803d67864efbaa370a2f4f0db5afe71275 (diff)
parentf3e1aba4e3bc1f715cebdca3d00734ab29b63d9b (diff)
downloadservo-6bc4a7df24df6c7ed41f2ee4c2d38a282760c2b6.tar.gz
servo-6bc4a7df24df6c7ed41f2ee4c2d38a282760c2b6.zip
Auto merge of #25810 - Manishearth:xr-profile, r=jdm
Add profiling to WebXR Fixes https://github.com/servo/webxr/issues/128 Depends on https://github.com/servo/webxr/pull/131 r? @jdm
Diffstat (limited to 'components/script/dom')
-rw-r--r--components/script/dom/document.rs8
-rw-r--r--components/script/dom/xrsession.rs26
2 files changed, 32 insertions, 2 deletions
diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs
index 3049d4f0bd6..6ee46bea95b 100644
--- a/components/script/dom/document.rs
+++ b/components/script/dom/document.rs
@@ -2530,11 +2530,17 @@ impl Document {
return;
}
+ #[allow(unused)]
+ let mut time = 0;
+ #[cfg(feature = "xr-profile")]
+ {
+ time = time::precise_time_ns();
+ }
let (sender, receiver) = webgl::webgl_channel().unwrap();
self.window
.webgl_chan()
.expect("Where's the WebGL channel?")
- .send(WebGLMsg::SwapBuffers(dirty_context_ids, sender))
+ .send(WebGLMsg::SwapBuffers(dirty_context_ids, sender, time))
.unwrap();
receiver.recv().unwrap();
}
diff --git a/components/script/dom/xrsession.rs b/components/script/dom/xrsession.rs
index 09aa2c7c854..62d9c15f3d6 100644
--- a/components/script/dom/xrsession.rs
+++ b/components/script/dom/xrsession.rs
@@ -164,10 +164,21 @@ impl XRSession {
ROUTER.add_route(
frame_receiver.to_opaque(),
Box::new(move |message| {
+ #[allow(unused)]
+ let mut frame: Frame = message.to().unwrap();
+ #[cfg(feature = "xr-profile")]
+ {
+ let received = time::precise_time_ns();
+ println!(
+ "WEBXR PROFILING [raf receive]:\t{}ms",
+ (received - frame.sent_time) as f64 / 1_000_000.
+ );
+ frame.sent_time = received;
+ }
let this = this.clone();
let _ = task_source.queue_with_canceller(
task!(xr_raf_callback: move || {
- this.root().raf_callback(message.to().unwrap());
+ this.root().raf_callback(frame);
}),
&canceller,
);
@@ -333,6 +344,13 @@ impl XRSession {
/// https://immersive-web.github.io/webxr/#xr-animation-frame
fn raf_callback(&self, mut frame: Frame) {
debug!("WebXR RAF callback");
+ #[cfg(feature = "xr-profile")]
+ let raf_start = time::precise_time_ns();
+ #[cfg(feature = "xr-profile")]
+ println!(
+ "WEBXR PROFILING [raf queued]:\t{}ms",
+ (raf_start - frame.sent_time) as f64 / 1_000_000.
+ );
// Step 1
if let Some(pending) = self.pending_render_state.take() {
@@ -389,6 +407,12 @@ impl XRSession {
self.session.borrow_mut().start_render_loop();
}
+ #[cfg(feature = "xr-profile")]
+ println!(
+ "WEBXR PROFILING [raf execute]:\t{}ms",
+ (time::precise_time_ns() - raf_start) as f64 / 1_000_000.
+ );
+
// If the canvas element is attached to the DOM, it is now dirty,
// and we need to trigger a reflow.
base_layer