blob: 32d86879ac557a3eb144785240f0c241dc4e9e40 [file] [log] [blame]
// 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('Checks that we report not more then maxDepth call chains.');
contextGroup.addScript(`
function asyncChain(breakAtEnd) {
function asyncOpNested() {
setTimeout(asyncOpNested1, 0);
}
function asyncOpNested1() {
setTimeout(asyncOpNested2, 0);
}
function asyncOpNested2() {
setTimeout(asyncOpNested3, 0);
}
function asyncOpNested3() {
setTimeout(asyncOpNested4, 0);
}
function asyncOpNested4() {
if (breakAtEnd) {
debugger;
} else {
console.trace(42);
}
}
asyncOpNested();
}
`);
Protocol.Debugger.enable();
InspectorTest.runAsyncTestSuite([
async function testPaused() {
const breakAtEnd = true;
startTest({ limit: 8, breakAtEnd });
dumpCaptured((await Protocol.Debugger.oncePaused()).params.asyncStackTrace);
await Protocol.Debugger.resume();
startTest({ limit: 4, breakAtEnd });
dumpCaptured((await Protocol.Debugger.oncePaused()).params.asyncStackTrace);
await Protocol.Debugger.resume();
startTest({ limit: 3, breakAtEnd });
dumpCaptured((await Protocol.Debugger.oncePaused()).params.asyncStackTrace);
await Protocol.Debugger.resume();
startTest({ limit: 0, breakAtEnd });
dumpCaptured((await Protocol.Debugger.oncePaused()).params.asyncStackTrace);
await Protocol.Debugger.resume();
},
async function testConsoleTrace() {
await Protocol.Runtime.enable();
const breakAtEnd = false;
startTest({ limit: 8, breakAtEnd});
let msg = await Protocol.Runtime.onceConsoleAPICalled();
dumpCaptured(msg.params.stackTrace.parent);
startTest({ limit: 4, breakAtEnd});
msg = await Protocol.Runtime.onceConsoleAPICalled();
dumpCaptured(msg.params.stackTrace.parent);
startTest({ limit: 3, breakAtEnd});
msg = await Protocol.Runtime.onceConsoleAPICalled();
dumpCaptured(msg.params.stackTrace.parent);
startTest({ limit: 0, breakAtEnd});
msg = await Protocol.Runtime.onceConsoleAPICalled();
dumpCaptured(msg.params.stackTrace.parent);
await Protocol.Runtime.disable();
}
]);
function startTest(params) {
InspectorTest.log('Actual call chain length: 4');
InspectorTest.log(`setAsyncCallStackDepth(maxDepth): ${params.limit}`);
Protocol.Debugger.setAsyncCallStackDepth({maxDepth: params.limit});
Protocol.Runtime.evaluate({expression:
`asyncChain(${params.breakAtEnd})`});
}
function dumpCaptured(stack) {
let count = 0;
while (stack) {
++count;
stack = stack.parent;
}
InspectorTest.log('reported: ' + count + '\n');
}