xrSession_cancelAnimationFrame.https.html (1926B)
1 <!DOCTYPE html> 2 <body> 3 <script src=/resources/testharness.js></script> 4 <script src=/resources/testharnessreport.js></script> 5 <script src="resources/webxr_util.js"></script> 6 <script src="resources/webxr_test_constants.js"></script> 7 8 <script> 9 let immersiveTestName = "XRSession requestAnimationFrame callbacks can be " 10 + "unregistered with cancelAnimationFrame for immersive sessions"; 11 let nonImmersiveTestName = "XRSession requestAnimationFrame callbacks can be " 12 + "unregistered with cancelAnimationFrame for non-immersive sessions"; 13 14 let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE; 15 16 let testFunction = (session) => new Promise((resolve, reject) => { 17 18 // Schedule and immediately cancel animation frame 19 session.cancelAnimationFrame(session.requestAnimationFrame( 20 (time, vrFrame) => { reject("Cancelled frame callback was called"); })); 21 22 let counter = 0; 23 let handle; 24 function onFrame(time, vrFrame) { 25 // Cancel the second animation frame. 26 if (handle != 0) { 27 session.cancelAnimationFrame(handle); 28 handle = 0; 29 } 30 31 // Run a few more animation frames to be sure that the cancelled frame isn't 32 // going to call. 33 counter++; 34 if (counter >= 4) { 35 // Ok, we're done here. 36 resolve(); 37 } else { 38 session.requestAnimationFrame(onFrame); 39 } 40 } 41 42 // Schedule two animation frame and cancel one during on animation frame. 43 session.requestAnimationFrame(onFrame); 44 handle = session.requestAnimationFrame( 45 (time, vrFrame) => { reject("Cancelled frame callback was called"); }); 46 }); 47 48 xr_session_promise_test(immersiveTestName, testFunction, 49 fakeDeviceInitParams, 'immersive-vr'); 50 xr_session_promise_test(nonImmersiveTestName, testFunction, 51 fakeDeviceInitParams, 'inline'); 52 53 </script> 54 </body>