| <!DOCTYPE html> | |
| <html> | |
| <head> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <script src="resources/profile-utils.js"></script> | |
| <script id="external-script" src="resources/external-script.js"></script> | |
| </head> | |
| <body> | |
| <script> | |
| promise_test(async t => { | |
| const trace = await ProfileUtils.profileFunction(function trampoline(sample) { | |
| externalScriptFunction(sample); | |
| }); | |
| const scriptUrl = document.querySelector('#external-script').src; | |
| assert_true(ProfileUtils.containsResource(trace, scriptUrl), | |
| 'external resource is included'); | |
| const expectedTrampolineFrame = { | |
| name: 'trampoline', | |
| resourceId: trace.resources.indexOf( | |
| location.href, | |
| ), | |
| }; | |
| const expectedExternalFrame = { | |
| name: 'externalScriptFunction', | |
| resourceId: trace.resources.indexOf(scriptUrl), | |
| line: EXTERNAL_SCRIPT_FUNCTION_LINE, | |
| column: EXTERNAL_SCRIPT_FUNCTION_COLUMN, | |
| }; | |
| assert_true(ProfileUtils.containsFrame(trace, expectedTrampolineFrame), | |
| 'trampoline function included'); | |
| assert_true(ProfileUtils.containsFrame(trace, expectedExternalFrame), | |
| 'external script function included'); | |
| assert_true(ProfileUtils.containsSubstack(trace, [ | |
| externalScriptFunction, | |
| expectedTrampolineFrame, | |
| ]), | |
| 'stack exists with external script function'); | |
| }, 'external script function details'); | |
| </script> | |
| </body> | |
| </html> |