<!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>
