| <!doctype html> |
| <html> |
| <head> |
| <meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline'"> |
| <script src="../../http/tests/inspector/resources/inspector-test.js"></script> |
| <script src="./resources/timeline-helper.js"></script> |
| <script> |
| function installTimer() |
| { |
| setTimeout(function() { |
| callFunction(mul, add(1, 3), 3); |
| hook(); |
| }); |
| } |
| |
| function add(a, b) |
| { |
| TestPage.addResult("Calling add(): " + a + " + " + b); |
| return a + b; |
| } |
| |
| function mul(a, b) |
| { |
| TestPage.addResult("Calling mul(): " + a + " * " + b); |
| return a * b; |
| } |
| |
| function test() |
| { |
| // First, set up the breakpoint, start timeline capturing, and trigger execution of installTimer(). |
| WI.debuggerManager.addEventListener(WI.DebuggerManager.Event.ScriptAdded, function(event) { |
| var scriptObject = event.data.script; |
| |
| if (!/timeline-helper\.js$/.test(scriptObject.url)) |
| return; |
| |
| var location = scriptObject.createSourceCodeLocation(17, 0); // Inside timeline-helper.js:hook() |
| var breakpoint = new WI.Breakpoint(location); |
| WI.debuggerManager.addBreakpoint(breakpoint); |
| InspectorTest.addResult("Added a breakpoint inside hook().") |
| |
| WI.timelineManager.startCapturing(); |
| InspectorTest.evaluateInPage("installTimer()"); |
| }); |
| |
| // Second, the debugger will pause during timeline capturing. Resume, then stop timeline capturing. |
| WI.debuggerManager.addEventListener(WI.DebuggerManager.Event.Paused, function(event) { |
| InspectorTest.addResult("Debugger paused; resuming..."); |
| |
| WI.debuggerManager.resume().then(function() { |
| InspectorTest.addResult("Debugger resumed; stopping timeline capture."); |
| WI.timelineManager.stopCapturing(); |
| }) |
| }); |
| |
| // When timeline capturing stops, inspect the resulting timeline records for a profile. |
| WI.timelineManager.addEventListener(WI.TimelineManager.Event.CapturingStateChanged, (event) => { |
| if (WI.timelineManager.capturingState !== WI.TimelineManager.CapturingState.Inactive) |
| return; |
| |
| var recording = WI.timelineManager.activeRecording; |
| var scriptTimeline = recording.timelines.get(WI.TimelineRecord.Type.Script); |
| console.assert(scriptTimeline); |
| |
| InspectorTest.addResult("Timeline capturing stopped. Inspecting the active recording...."); |
| |
| for (var record of scriptTimeline.records) { |
| if (record.eventType !== WI.ScriptTimelineRecord.EventType.TimerFired) |
| continue; |
| |
| var result = record.profile ? "TRUE" : "FALSE"; |
| InspectorTest.addResult("TimerFired timeline record has profile attached: " + result); |
| } |
| |
| InspectorTest.completeTest(); |
| }); |
| |
| InspectorTest.reloadPage(); |
| } |
| </script> |
| </head> |
| <body onload="runTest()"> |
| <p>Testing that profiling data is correctly generated and attached to Timeline records when the debugger pauses and resumes while capturing timelines.</p> |
| </body> |
| </html> |