New issue
Advanced search Search tips

Issue 670891 link

Starred by 1 user

Issue metadata

Status: Fixed
Owner: ----
Closed: Jan 2017
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Android
Pri: 2
Type: Bug
Proj-XR



Sign in to add a comment

WebVR dynamic-resolution sample page is not displayed correctly in presentation mode

Project Member Reported by vsupruniuk@google.com, Dec 2 2016

Issue description

Version:Chrome Canary 57.0.2936.0
OS: Android 7.1
Test device: Pixel, Pixel XL

Reproduction steps:
a. Access https://webvr.info/samples/08-dynamic-resolution.html on the test device
b. Tap "Enter VR" button. Insert the device into a Daydream headset and wait until Daydream setup flow is started.
c. When asked to hold the home button on the Daydream controller, do so

Expected result:
Browser should correctly present sample page content in presentation mode (binocular view).

Actual result:
Picture is jumpy even if not to move device.

 
Cc: klausw@chromium.org
I was just noticing this myself. I think the issue is the latency between the frames being produced and when we update the layer bounds.

With the current compositor-based rendering new WebGL frames take 2-3 frames to reach the GVR compositor, but when we update the bounds we communicate that to GVR immediately. In practice this would make it so that when updating the bounds the new bounds will retroactively affect a couple of frames before syncing up again. In a sample like this where we update them frequently it manifests as a persistent jitter.

Assuming that is the case I'm not sure it's practical to fix in M56. The planned updates to the rendering pipeline would render this issue moot, but won't be ready till M57. Any short term fix would likely be invasive enough that it would be tough to justify the effort. And in the meantime apps that don't abuse this capability (the sample is a pretty extreme example) will still work pretty well, just a quick flicker on bounds update.

klausw@, your thoughts? 
Unless Klaus disagrees, I'd vote for closing this as WF.
I think fixing this would involve adding a ring buffer of bounds by pose index, similar to the current pose ring buffer. That way, rendering could look up the bounds for the pose in question when rendering it for GVR.

I do think we want to fix this since even without the compositor there's still overlapping frames in the pipeline, and while it should be less extreme I think it would still be noticeable. But I'm not sure if it's feasible for M56.
Components: Blink>WebVR
Labels: -M-56 M-57 Pri-2 Type-Bug
Status: Available (was: Untriaged)
Tentatively scheduling for M57 then.
Is this likely to happen for M57 or should we punt to M58?
Status: Untriaged (was: Available)
Components: -UI>Browser>VR

Comment 8 by sko...@chromium.org, Jan 12 2017

Labels: -M-57
Status: Available (was: Untriaged)
Project Member

Comment 9 by bugdroid1@chromium.org, Jan 27 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/961dc47e8f5b088debbab559fe81b85f32e9f9e4

commit 961dc47e8f5b088debbab559fe81b85f32e9f9e4
Author: mthiesse <mthiesse@chromium.org>
Date: Fri Jan 27 18:05:56 2017

Allow VRDisplay to specify which frame the layer bounds should be updated at.

BUG= 655722 , 670891 

Review-Url: https://codereview.chromium.org/2612333002
Cr-Commit-Position: refs/heads/master@{#446707}

[modify] https://crrev.com/961dc47e8f5b088debbab559fe81b85f32e9f9e4/chrome/browser/android/vr_shell/non_presenting_gvr_delegate.cc
[modify] https://crrev.com/961dc47e8f5b088debbab559fe81b85f32e9f9e4/chrome/browser/android/vr_shell/non_presenting_gvr_delegate.h
[modify] https://crrev.com/961dc47e8f5b088debbab559fe81b85f32e9f9e4/chrome/browser/android/vr_shell/vr_shell.cc
[modify] https://crrev.com/961dc47e8f5b088debbab559fe81b85f32e9f9e4/chrome/browser/android/vr_shell/vr_shell.h
[modify] https://crrev.com/961dc47e8f5b088debbab559fe81b85f32e9f9e4/chrome/browser/android/vr_shell/vr_shell_gl.cc
[modify] https://crrev.com/961dc47e8f5b088debbab559fe81b85f32e9f9e4/chrome/browser/android/vr_shell/vr_shell_gl.h
[modify] https://crrev.com/961dc47e8f5b088debbab559fe81b85f32e9f9e4/device/vr/android/gvr/gvr_delegate.h
[modify] https://crrev.com/961dc47e8f5b088debbab559fe81b85f32e9f9e4/device/vr/android/gvr/gvr_device.cc
[modify] https://crrev.com/961dc47e8f5b088debbab559fe81b85f32e9f9e4/device/vr/android/gvr/gvr_device.h
[modify] https://crrev.com/961dc47e8f5b088debbab559fe81b85f32e9f9e4/device/vr/test/fake_vr_device.cc
[modify] https://crrev.com/961dc47e8f5b088debbab559fe81b85f32e9f9e4/device/vr/test/fake_vr_device.h
[modify] https://crrev.com/961dc47e8f5b088debbab559fe81b85f32e9f9e4/device/vr/vr_device.h
[modify] https://crrev.com/961dc47e8f5b088debbab559fe81b85f32e9f9e4/device/vr/vr_display_impl.cc
[modify] https://crrev.com/961dc47e8f5b088debbab559fe81b85f32e9f9e4/device/vr/vr_display_impl.h
[modify] https://crrev.com/961dc47e8f5b088debbab559fe81b85f32e9f9e4/device/vr/vr_service.mojom
[modify] https://crrev.com/961dc47e8f5b088debbab559fe81b85f32e9f9e4/third_party/WebKit/Source/modules/vr/VRDisplay.cpp
[modify] https://crrev.com/961dc47e8f5b088debbab559fe81b85f32e9f9e4/third_party/WebKit/Source/modules/vr/VRDisplay.h

Status: Fixed (was: Available)
Components: Blink>WebXR

Sign in to add a comment