New issue
Advanced search Search tips

Issue 827811 link

Starred by 2 users

Issue metadata

Status: Fixed
Owner:
Closed: Apr 2018
Components:
EstimatedDays: ----
NextAction: ----
OS: Android
Pri: 3
Type: Bug
Proj-VR
Proj-XR



Sign in to add a comment

WebVR dropped frames and excessive latency due to broken scheduling heuristic

Project Member Reported by klausw@chromium.org, Mar 31 2018

Issue description

Chrome Version: M65+
OS: Android

What steps will reproduce the problem?
(1) Open https://webvr.info/samples/03-vr-presentation.html
(2) Enter VR
(3) Check framerate counter

What is the expected result? Smooth 60fps

What happens instead? 56-60fps, with frequent dropped frames

For a slow WebVR app, another symptom is that the "JS wait time" event trace counter shows wait times above 16ms. The heuristic is supposed to reduce that.


 

Comment 1 by klausw@chromium.org, Mar 31 2018

Proposed root cause and fix in https://chromium-review.googlesource.com/c/chromium/src/+/989431 :

The heuristic wasn't working right due to using the wrong frame as
timing reference, resulting in overthrottling for fast applications
and excessive latency for slow applications.

When estimating the render time for a frame that was already complete at
the time of check, it uses the time-until-copied as a lower bound, but
accidentally used the copy time of the currently processing frame as
opposed to the copy time of the previous rendering frame, resulting in
overestimating the render time.

Also, the heuristic to decide when to skip VSync also should have used
the currently rendering frame (two frames back when sending a new
animating frame), but was erroneously using the currently processing
frame (one frame back). Fix this, and adjust the heuristic to more
accurately reflect the intended scheduling.
Project Member

Comment 2 by bugdroid1@chromium.org, Apr 1 2018

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

commit 41f4ef7c623c7ae636f8666a844a12d42068ad2f
Author: Klaus Weidner <klausw@chromium.org>
Date: Sun Apr 01 11:27:19 2018

Fix WebVR VSync scheduling heuristic

The heuristic wasn't working right due to using the wrong frame as
timing reference, resulting in overthrottling for fast applications
and excessive latency for slow applications.

When estimating the render time for a frame that was already complete at
the time of check, it uses the time-until-copied as a lower bound, but
accidentally used the copy time of the currently processing frame as
opposed to the copy time of the previous rendering frame, resulting in
overestimating the render time.

Also, the heuristic to decide when to skip VSync also should have used
the currently rendering frame (two frames back when sending a new
animating frame), but was erroneously using the currently processing
frame (one frame back). Fix this, and adjust the heuristic to more
accurately reflect the intended scheduling.

Bug:  827811 
Change-Id: Ic4884ccaee6f2f6d3051ce2790132582dba6702a
Reviewed-on: https://chromium-review.googlesource.com/989431
Commit-Queue: Ian Vollick <vollick@chromium.org>
Reviewed-by: Ian Vollick <vollick@chromium.org>
Cr-Commit-Position: refs/heads/master@{#547398}
[modify] https://crrev.com/41f4ef7c623c7ae636f8666a844a12d42068ad2f/chrome/browser/android/vr/vr_shell_gl.cc

Owner: klausw@chromium.org
Status: Started (was: Untriaged)
Labels: -M-66 M-67
Status: Fixed (was: Started)
The CL from comment #2 seems to be effective according to the automated performance tests, the pose prediction time estimate looks improved:

https://chromeperf.appspot.com/report?sid=da922c1ae79febbe864da71ddef7c89cb93a6ccf5845d14bb59ceb8800161a3a&start_rev=542416&end_rev=547479
Labels: Test-Complete
Components: Blink>WebXR

Sign in to add a comment