Automatic update from web-platform-tests Split render_state_update test into two While the test has been reliably okay for a while, there's been a recent surge of flakiness which seems to center around the single inline test hanging. In order to better isolate this, split the inline test into its own file. Bug: 456455370 Change-Id: I8bcd85e0265b63498277d5cae71e9655be9337b4 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7108259 Commit-Queue: Brian Sheedy <bsheedy@chromium.org> Commit-Queue: Alexander Cooper <alcooper@chromium.org> Auto-Submit: Alexander Cooper <alcooper@chromium.org> Reviewed-by: Brian Sheedy <bsheedy@chromium.org> Cr-Commit-Position: refs/heads/main@{#1538863} -- wpt-commits: 634f0ee3e2f40414f4fb98e1c8a595999ffc4b4e wpt-pr: 55800
105 lines
3.8 KiB
HTML
105 lines
3.8 KiB
HTML
<!DOCTYPE html>
|
|
<script src="/resources/testharness.js"></script>
|
|
<script src="/resources/testharnessreport.js"></script>
|
|
<script src="resources/webxr_util.js"></script>
|
|
<script src="resources/webxr_test_constants.js"></script>
|
|
|
|
<script>
|
|
let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
|
|
|
|
let testSessionEnded = function(session, fakeDeviceController, t) {
|
|
return new Promise((resolve, reject) => {
|
|
resolve(session.end().then(() => {
|
|
t.step(() => {
|
|
assert_throws_dom('InvalidStateError', () => session.updateRenderState({}));
|
|
});
|
|
}));
|
|
});
|
|
};
|
|
|
|
|
|
let testBaseLayer = function(session, fakeDeviceController, t, sessionObjects) {
|
|
return new Promise((resolve, reject) => {
|
|
navigator.xr.test.simulateUserActivation(() => {
|
|
navigator.xr.requestSession('inline').then((tempSession) => {
|
|
t.step(() => {
|
|
assert_not_equals(session, tempSession);
|
|
assert_throws_dom('InvalidStateError', () => session.updateRenderState({ baseLayer : new XRWebGLLayer(tempSession, sessionObjects.gl), }));
|
|
});
|
|
});
|
|
resolve();
|
|
});
|
|
});
|
|
};
|
|
|
|
let testFieldOfView = function(session, fakeDeviceController, t) {
|
|
return new Promise((resolve, reject) => {
|
|
t.step(() => {
|
|
assert_throws_dom('InvalidStateError', () => session.updateRenderState({ inlineVerticalFieldOfView : Math.PI, }));
|
|
});
|
|
resolve();
|
|
});
|
|
};
|
|
|
|
let testNoParams = function(session, fakeDeviceController, t) {
|
|
return new Promise((resolve, reject) => {
|
|
try {
|
|
session.updateRenderState({});
|
|
} catch (err) {
|
|
assert_unreached("updateRenderState should not fail (actually not do anything) with no params");
|
|
}
|
|
resolve();
|
|
});
|
|
};
|
|
|
|
let testMinMaxClippingPlanes = function(session, fakeDeviceController, t, sessionObjects) {
|
|
return new Promise((resolve, reject) => {
|
|
let gl = sessionObjects.gl;
|
|
gl.makeXRCompatible().then(() => {
|
|
t.step(() => {
|
|
let near = 0.2;
|
|
let far = 0.8;
|
|
let layer = new XRWebGLLayer(session, gl);
|
|
session.updateRenderState({ depthNear: near, depthFar: far, baseLayer: layer });
|
|
assert_not_equals(session.renderState.depthNear, near);
|
|
assert_not_equals(session.renderState.depthFar, far);
|
|
assert_not_equals(session.renderState.baseLayer, layer);
|
|
session.requestAnimationFrame((time, xrFrame) => {
|
|
t.step(() => {
|
|
assert_equals(session.renderState.depthNear, near);
|
|
assert_equals(session.renderState.depthFar, far);
|
|
// Clamp negative values
|
|
near = -20.3;
|
|
far = -1.5;
|
|
session.updateRenderState({ depthNear: near, depthFar: far });
|
|
session.requestAnimationFrame((time, xrFrame) => {
|
|
t.step(() => {
|
|
assert_equals(session.renderState.depthNear, 0.0);
|
|
assert_equals(session.renderState.depthFar, 0.0);
|
|
resolve();
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
};
|
|
|
|
let testName = "updateRenderState handles appropriately ended sessions";
|
|
xr_session_promise_test(testName, testSessionEnded, fakeDeviceInitParams, 'immersive-vr');
|
|
|
|
testName = "updateRenderState handles appropriately baseLayers created with different sessions";
|
|
xr_session_promise_test(testName, testBaseLayer, fakeDeviceInitParams, 'immersive-vr');
|
|
|
|
testName = "updateRenderState handles appropriately immersive sessions with specified inlineVerticalFieldOfView";
|
|
xr_session_promise_test(testName, testFieldOfView, fakeDeviceInitParams, 'immersive-vr');
|
|
|
|
testName = "updateRenderState handles appropriately XRRenderStateInit with no params";
|
|
xr_session_promise_test(testName, testNoParams, fakeDeviceInitParams, 'immersive-vr');
|
|
|
|
testName = "updateRenderState clamps appropriately near/far clipping planes";
|
|
xr_session_promise_test(testName, testMinMaxClippingPlanes, fakeDeviceInitParams, 'immersive-vr');
|
|
|
|
</script>
|