Commit 14020f57 authored by Bill Orr's avatar Bill Orr Committed by Commit Bot

WebVR: Update VRDisplay.GetFrameData to follow the current spec.

The WebVR 1.1 spec was updated to clarify the behavior of getFrameData.
Now, GetFrameData should return false unless called within a
VRDisplay.requestAnimationFrame callback.

BUG=736023

Change-Id: I14d9442a016817a78232ed7b1e71956c8dac614a
Reviewed-on: https://chromium-review.googlesource.com/578188Reviewed-by: default avatarBrandon Jones <bajones@chromium.org>
Commit-Queue: Bill Orr <billorr@chromium.org>
Cr-Commit-Position: refs/heads/master@{#487970}
parent b54ae338
<!DOCTYPE html>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script src="resources/fake-vr-displays.js"></script>
<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
<script src="file:///gen/device/vr/vr_service.mojom.js"></script>
<script src="resources/mock-vr-service.js"></script>
<script src="resources/test-constants.js"></script>
<script>
let fakeDisplays = fakeVRDisplays();
vr_test( (t, mock_service) => {
return navigator.getVRDisplays().then( (displays) => {
var display = displays[0];
var expected_pose = VALID_POSE;
var fd = new VRFrameData();
var counter = 0;
function onFrame() {
window.requestAnimationFrame(onFrame);
if (counter == 0) {
t.step( () => {
assert_false(display.getFrameData(fd));
}, "Expecting to not get framedata since there is no pose");
mock_service.mockVRDisplays_[0].setPose(expected_pose);
t.step( () => {
assert_false(display.getFrameData(fd));
}, "Does not update within the same frame");
} else {
t.step( () => {
assert_false(display.getFrameData(fd));
}, "getFrameData is expected to return false when not in a display RAF callback");
t.done();
}
counter++;
}
window.requestAnimationFrame(onFrame);
}, (err) => {
t.step( () => {
assert_unreached("getVRDisplays rejected");
});
});
}, [fakeDisplays["Pixel"]],
"getFrameData updates on the next frame");
</script>
......@@ -148,6 +148,17 @@ bool VRDisplay::getFrameData(VRFrameData* frame_data) {
if (!frame_data)
return false;
if (!in_animation_frame_) {
Document* doc = navigator_vr_->GetDocument();
if (doc) {
doc->AddConsoleMessage(
ConsoleMessage::Create(kRenderingMessageSource, kWarningMessageLevel,
"getFrameData must be called within a "
"VRDisplay.requestAnimationFrame callback."));
}
return false;
}
if (depth_near_ == depth_far_)
return false;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment