'use strict'; const inactiveFrameTestFunctionGenerator = function(isCpuOptimized) { return (session, controller, t, sessionObjects) => { return session.requestReferenceSpace('viewer').then((viewerSpace) => { let callbacksKickedOff = false; let callbackCounter = 0; const glBinding = new XRWebGLBinding(session, sessionObjects.gl); const rafCb = function(time, frame) { const pose = frame.getViewerPose(viewerSpace); for(const view of pose.views) { const callback = () => { t.step(() => { assert_throws_dom("InvalidStateError", () => isCpuOptimized ? frame.getDepthInformation(view) : glBinding.getDepthInformation(view), "getDepthInformation() should throw when ran outside RAF"); }); callbackCounter--; } t.step_timeout(callback, 10); callbackCounter++; } callbacksKickedOff = true; }; session.requestAnimationFrame(rafCb); return t.step_wait(() => callbacksKickedOff && (callbackCounter == 0)); }); }; };