blob: 77282f6f4166388538219c144656f0c09b6edf0e [file] [log] [blame]
<!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_single_view.js"></script>
<script>
function gc()
{
if (window.GCController)
return GCController.collect();
for (var i = 0; i < 10000; i++) { // > force garbage collection (FF requires about 9K allocations before a collect)
var s = new String("abc");
}
}
let testName = "Test object lifetime of Hand Input module";
let fakeDeviceInitParams = TRACKED_IMMERSIVE_SINGLE_VIEWDEVICE;
let testFunction = function(session, fakeDeviceController, t, sessionObjects) {
let input_source = fakeDeviceController.simulateInputSourceConnection({
handedness: "none",
targetRayMode: "tracked-pointer",
pointerOrigin: VALID_POINTER_TRANSFORM,
profiles: [],
simulateHand: true,
});
return session.requestReferenceSpace('local')
.then((referenceSpace) => new Promise((resolve) => {
function onFrame(time, xrFrame) {
if (session.inputSources && session.inputSources.length) {
session.customProperty = 1;
assert_equals(session.customProperty, 1, "session");
gc();
assert_equals(session.customProperty, 1, "session");
session.inputSources.customProperty = 1;
assert_equals(session.inputSources.customProperty, 1, "session.inputSources");
gc();
assert_equals(session.inputSources.customProperty, 1, "session.inputSources");
session.inputSources[0].customProperty = 1;
assert_equals(session.inputSources[0].customProperty, 1, "session.inputSources[0]");
gc();
assert_equals(session.inputSources[0].customProperty, 1, "session.inputSources[0]");
session.inputSources[0].hand.customProperty = 1;
assert_equals(session.inputSources[0].hand.customProperty, 1, "session.inputSources[0].hand");
gc();
assert_equals(session.inputSources[0].hand.customProperty, 1, "session.inputSources[0].hand");
}
resolve();
}
session.requestAnimationFrame(onFrame);
}));
};
xr_session_promise_test(
testName, testFunction, fakeDeviceInitParams, 'immersive-vr', { optionalFeatures: ["hand-tracking"] });
</script>