| // Copyright 2017 the V8 project authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| let {session, contextGroup, Protocol} = | |
| InspectorTest.start('Test for step-into remote async task.'); | |
| contextGroup.addScript(` | |
| function store(description) { | |
| let buffer = inspector.storeCurrentStackTrace(description); | |
| return '[' + new Int32Array(buffer).join(',') + ']'; | |
| } | |
| //# sourceURL=utils.js`); | |
| contextGroup.addScript(` | |
| function call(id, f) { | |
| inspector.externalAsyncTaskStarted(Int32Array.from(JSON.parse(id)).buffer); | |
| f(); | |
| inspector.externalAsyncTaskFinished(Int32Array.from(JSON.parse(id)).buffer); | |
| } | |
| //# sourceURL=framework.js`); | |
| session.setupScriptMap(); | |
| (async function test() { | |
| InspectorTest.log('Setup debugger agents..'); | |
| let debuggerId = (await Protocol.Debugger.enable()).result.debuggerId; | |
| Protocol.Debugger.setAsyncCallStackDepth({maxDepth: 128}); | |
| Protocol.Debugger.setBlackboxPatterns({patterns: ['framework\.js']}); | |
| InspectorTest.log('Pause before stack trace is captured..'); | |
| Protocol.Debugger.setBreakpointByUrl( | |
| {lineNumber: 2, columnNumber: 25, url: 'utils.js'}); | |
| let evaluatePromise = Protocol.Runtime.evaluate({ | |
| expression: `(function foo() { | |
| return store('remote-task'); | |
| })() | |
| //# sourceURL=source.js` | |
| }); | |
| await Protocol.Debugger.oncePaused(); | |
| InspectorTest.log('Run stepInto with breakOnAsyncCall flag'); | |
| Protocol.Debugger.stepInto({breakOnAsyncCall: true}); | |
| let {params: {asyncCallStackTraceId}} = await Protocol.Debugger.oncePaused(); | |
| InspectorTest.log('Call pauseOnAsyncCall'); | |
| Protocol.Debugger.pauseOnAsyncCall({ | |
| parentStackTraceId: asyncCallStackTraceId, | |
| }); | |
| Protocol.Debugger.resume(); | |
| InspectorTest.log('Trigger external async task on another context group'); | |
| let stackTraceId = (await evaluatePromise).result.result.value; | |
| Protocol.Runtime.evaluate({ | |
| expression: `call('${stackTraceId}', | |
| function boo() {}) | |
| //# sourceURL=target.js` | |
| }); | |
| InspectorTest.log('Dump stack trace'); | |
| let {params: {callFrames, asyncStackTraceId}} = | |
| await Protocol.Debugger.oncePaused(); | |
| while (true) { | |
| session.logCallFrames(callFrames); | |
| if (asyncStackTraceId) { | |
| let {result: {stackTrace}} = await Protocol.Debugger.getStackTrace( | |
| {stackTraceId: asyncStackTraceId}); | |
| InspectorTest.log(`-- ${stackTrace.description} --`); | |
| callFrames = stackTrace.callFrames; | |
| asyncStackTraceId = stackTrace.parentId; | |
| } else { | |
| break; | |
| } | |
| } | |
| Protocol.Debugger.setAsyncCallStackDepth({maxDepth: 0}); | |
| await Protocol.Debugger.disable(); | |
| InspectorTest.completeTest(); | |
| })() |