| <!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 fd1 = new VRFrameData(); |
| var fd2 = new VRFrameData(); |
| mock_service.mockVRDisplays_[0].setPose(expected_pose); |
| var counter = 0; |
| |
| function onFrame() { |
| display.requestAnimationFrame(onFrame); |
| t.step( () => { |
| assert_true(display.getFrameData(fd1)); |
| assert_true(display.getFrameData(fd2)); |
| }, "getFrameData successfully updated object"); |
| t.step( () => { |
| for (let i = 0; i < 16; i++) { |
| assert_equals(fd1.leftProjectionMatrix[i], |
| fd2.leftProjectionMatrix[i]); |
| assert_equals(fd1.leftViewMatrix[i], fd2.leftViewMatrix[i]); |
| assert_equals(fd1.rightProjectionMatrix[i], |
| fd2.rightProjectionMatrix[i]); |
| assert_equals(fd1.rightViewMatrix[i], fd2.rightViewMatrix[i]); |
| } |
| let counter = 0; |
| for (let field in fd1.pose) { |
| counter++; |
| assert_equals(fd1.pose[field].length, fd2.pose[field].length); |
| assert_greater_than(fd1.pose[field].length, 0); |
| for (let i = 0; i < fd1.pose[field].length; i++) { |
| assert_equals(fd1.pose[field][i], fd2.pose[field][i]); |
| } |
| } |
| assert_equals(counter, 6); |
| }, "frame data matches within the same frame"); |
| t.done(); |
| } |
| |
| display.requestAnimationFrame(onFrame); |
| }, (err) => { |
| t.step( () => { |
| assert_unreached("getVRDisplays rejected"); |
| }); |
| }); |
| }, [fakeDisplays["Pixel"]], |
| "getFrameData returns the same data within a single frame"); |
| |
| </script> |