diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2020-02-23 08:55:33 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-02-23 08:55:33 -0500 |
commit | 6bc4a7df24df6c7ed41f2ee4c2d38a282760c2b6 (patch) | |
tree | fcbe9ebb7584055afbae43b26f65365bb93f30bf /components/script/dom | |
parent | 504eeb803d67864efbaa370a2f4f0db5afe71275 (diff) | |
parent | f3e1aba4e3bc1f715cebdca3d00734ab29b63d9b (diff) | |
download | servo-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.rs | 8 | ||||
-rw-r--r-- | components/script/dom/xrsession.rs | 26 |
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 |