| <!DOCTYPE html> |
| <html> |
| <head> |
| <script src="../../http/tests/inspector/resources/protocol-test.js"></script> |
| <script> |
| function triggerProgrammaticCapture(message) { |
| console.profile(); |
| console.log(`Inside ${message} profile`); |
| console.profileEnd(); |
| } |
| |
| function test() |
| { |
| let suite = ProtocolTest.createAsyncSuite("Timeline.setInstruments.programmatic-capture"); |
| |
| let heapExpected = false; |
| let captureStopped = null; |
| |
| InspectorProtocol.sendCommand("Heap.enable"); |
| InspectorProtocol.sendCommand("Timeline.enable"); |
| |
| InspectorProtocol.eventHandler["Timeline.recordingStarted"] = () => { |
| ProtocolTest.pass("Timeline.recordingStarted"); |
| }; |
| InspectorProtocol.eventHandler["Timeline.recordingStopped"] = () => { |
| ProtocolTest.pass("Timeline.recordingStopped"); |
| captureStopped(); |
| }; |
| |
| InspectorProtocol.eventHandler["ScriptProfiler.trackingStart"] = () => { |
| ProtocolTest.pass("ScriptProfiler.startTracking"); |
| }; |
| |
| InspectorProtocol.eventHandler["Heap.trackingStart"] = () => { |
| if (heapExpected) |
| ProtocolTest.pass("Heap.trackingStart"); |
| else |
| ProtocolTest.fail("Unexpected Heap.trackingStart"); |
| }; |
| |
| suite.addTestCase({ |
| name: "NoInstrumentsProgrammaticCapture", |
| test(resolve, reject) { |
| heapExpected = false; |
| captureStopped = resolve; |
| |
| InspectorProtocol.sendCommand("Timeline.setInstruments", {instruments: []}, (messageObject) => { |
| ProtocolTest.expectThat(!messageObject.error, "Should not be an error setting valid instruments."); |
| }); |
| ProtocolTest.evaluateInPage("triggerProgrammaticCapture('NoInstrumentsProgrammaticCapture')"); |
| } |
| }); |
| |
| suite.addTestCase({ |
| name: "MultipleInstrumentsProgrammaticCapture", |
| test(resolve, reject) { |
| heapExpected = true; |
| captureStopped = resolve; |
| |
| InspectorProtocol.sendCommand("Timeline.setInstruments", {instruments: ["ScriptProfiler", "Heap"]}, (messageObject) => { |
| ProtocolTest.expectThat(!messageObject.error, "Should not be an error setting valid instruments."); |
| }); |
| ProtocolTest.evaluateInPage("triggerProgrammaticCapture('MultipleInstrumentsProgrammaticCapture')"); |
| } |
| }); |
| |
| suite.addTestCase({ |
| name: "NoInstrumentsProgrammaticCaptureAgain", |
| test(resolve, reject) { |
| heapExpected = true; |
| captureStopped = resolve; |
| |
| InspectorProtocol.sendCommand("Timeline.setInstruments", {instruments: []}, (messageObject) => { |
| ProtocolTest.expectThat(!messageObject.error, "Should not be an error setting valid instruments."); |
| }); |
| ProtocolTest.evaluateInPage("triggerProgrammaticCapture('NoInstrumentsProgrammaticCaptureAgain')"); |
| } |
| }); |
| |
| suite.runTestCasesAndFinish(); |
| } |
| </script> |
| </head> |
| <body onload="runTest()"> |
| <p>Tests programmatic capture (console.profile/profileEnd) automatically starts instruments set via Timeline.setInstruments.</p> |
| </body> |
| </html> |