blob: c3653606e31c2ef837a6d9df99a5991d34efbaa7 [file] [log] [blame]
<!DOCTYPE html>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
<script src="file:///gen/device/vr/public/mojom/vr_service.mojom.js"></script>
<script src="../external/wpt/resources/chromium/webxr-test.js"></script>
<script src="resources/vr-test-utils.js "></script>
<canvas id="webgl-canvas"></canvas>
<script src="resources/presentation-setup.js"></script>
<script>
let fakeDisplays = fakeVRDisplays();
// This test verifies that timestamps are consistent when switching between
// magic window and presentation mode.
vr_test( (t) => {
return navigator.getVRDisplays().then( (displays) => {
let display = displays[0];
let usingPresentingRAF = false;
let lastTime = -1;
let lastrAFTime = -1;
let tolerance_ms = 250;
function onAnimationFrame(time) {
var currentTime = window.performance.now();
if (lastTime != -1) {
var timeDiff = currentTime - lastTime;
var rAFDiff = time - lastrAFTime;
if (usingPresentingRAF) {
t.step( () => {
assert_approx_equals(rAFDiff, timeDiff, tolerance_ms);
}, "timestamps not continuous");
}
}
lastTime = currentTime;
lastrAFTime = time;
if (usingPresentingRAF) {
t.done();
}
if (!display.isPresenting) {
runWithUserGesture( () => {
display.requestPresent([{ source : webglCanvas }]).then( () => {
t.step( () => {
assert_true(display.isPresenting);
}, "Display should be presenting");
usingPresentingRAF = true;
display.requestAnimationFrame(onAnimationFrame);
}, (err) => {
t.step( () => {
assert_unreached(err);
}, "requestPresent rejected");
});
});
}
}
display.requestAnimationFrame(onAnimationFrame);
}, (err) => {
t.step( () => {
assert_unreached("getVRDisplays rejected");
});
t.done();
});
}, [fakeDisplays["Pixel"]],
"requestAnimationFrame timestamp is consistent between magic window and presentation.");
</script>