<!DOCTYPE HTML> <meta charset=utf-8> <title>Long Animation Frame Timing: source location extraction</title> <meta name="timeout" content="long"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="resources/utils.js"></script> <body> <h1>Long Animation Frame: source location extraction</h1> <div id="log"></div> <script> promise_test(async t => { const [entry, script] = await expect_long_frame_with_script(() => { requestAnimationFrame(function non_bound_function() { busy_wait(); }); }, script => script.name === "FrameRequestCallback", t); assert_true(script.sourceLocation?.startsWith("non_bound_function")); }, "Source location should be extracted from non-bound functions"); promise_test(async t => { const [entry, script] = await expect_long_frame_with_script(() => { const object = {}; requestAnimationFrame((function my_bound_function() { busy_wait(); }).bind(object)); }, script => script.name === "FrameRequestCallback", t); assert_true(script.sourceLocation?.startsWith("my_bound_function")); }, "Source location should be extracted from bound functions"); promise_test(async t => { const [entry, script] = await expect_long_frame_with_script(() => { t.step_timeout(function my_timeout() { busy_wait(); }); }, script => script.name === "TimerHandler:setTimeout" && script.sourceLocation, t ); assert_true(script.sourceLocation.includes("testharness.js")); }, "Source location should be extracted for setTimeout"); </script> </body>