| 'use strict'; |
| |
| const TestStates = Object.freeze({ |
| "ShouldSucceedScheduleRAF": 1, |
| "ShouldFailScheduleRAF": 2, |
| "ShouldSucceedTestDone": 3, |
| }); |
| |
| const dataUnavailableTestFunctionGenerator = function(isCpuOptimized) { |
| return (session, controller, t, sessionObjects) => { |
| let state = TestStates.ShouldSucceedScheduleRAF; |
| |
| return session.requestReferenceSpace('viewer').then((viewerSpace) => { |
| let done = false; |
| |
| const glBinding = new XRWebGLBinding(session, sessionObjects.gl); |
| |
| const rafCb = function(time, frame) { |
| const pose = frame.getViewerPose(viewerSpace); |
| for(const view of pose.views) { |
| const depthInformation = isCpuOptimized ? frame.getDepthInformation(view) |
| : glBinding.getDepthInformation(view); |
| |
| if (state == TestStates.ShouldSucceedScheduleRAF |
| || state == TestStates.ShouldSucceedTestDone) { |
| t.step(() => { |
| assert_not_equals(depthInformation, null); |
| }); |
| } else { |
| t.step(() => { |
| assert_equals(depthInformation, null); |
| }); |
| } |
| } |
| |
| switch(state) { |
| case TestStates.ShouldSucceedScheduleRAF: |
| controller.clearDepthSensingData(); |
| state = TestStates.ShouldFailScheduleRAF; |
| session.requestAnimationFrame(rafCb); |
| break; |
| case TestStates.ShouldFailScheduleRAF: |
| controller.setDepthSensingData(DEPTH_SENSING_DATA); |
| state = TestStates.ShouldSucceedTestDone; |
| session.requestAnimationFrame(rafCb); |
| break; |
| case TestStates.ShouldSucceedTestDone: |
| done = true; |
| break; |
| } |
| }; |
| |
| session.requestAnimationFrame(rafCb); |
| |
| return t.step_wait(() => done); |
| }); |
| }; |
| }; |