8f8d2fe4ca
This change fixes the implementation of the previously introduced API `Runtime.setMaxCallStackSizeToCapture` to work correctly and also apply (consistently) to stack traces captured by V8 when exceptions are thrown. It does so in a fully backwards compatible manner. This change thus makes the previous fix for catapult (which landed in http://crrev.com/c/3347789) effective, and therefore ensures that real world performance benchmarks aren't affected by the use of the `Runtime` domain in the catapult test framework. Note this is basically a reland of crrev.com/c/3361839, but without touching the stack traces for console messages (which led to the regressions in crbug/1283516, crbug/1283523, etc.). Fixed: chromium:1280831 Bug: chromium:1283162, chromium:1278650, chromium:1258599 Bug: chromium:1280803, chromium:1280832, chromium:1280818 Doc: https://bit.ly/v8-cheaper-inspector-stack-traces Change-Id: I3dcec7b75d76ca267fac8bd6fcb2cda60d5e60dd Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3364086 Reviewed-by: Yang Guo <yangguo@chromium.org> Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Auto-Submit: Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/main@{#78479}
102 lines
2.7 KiB
JavaScript
102 lines
2.7 KiB
JavaScript
// Copyright 2018 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 Runtime.setMaxCallStackSizeToCapture.');
|
|
|
|
Protocol.Runtime.onConsoleAPICalled(
|
|
({params}) => InspectorTest.logMessage(params));
|
|
|
|
contextGroup.addScript(`
|
|
function testConsoleLog() {
|
|
console.log("Log message.");
|
|
}
|
|
|
|
function testConsoleTrace() {
|
|
function bar(callback) {
|
|
console.trace("Nested call.");
|
|
callback();
|
|
}
|
|
|
|
function foo(callback) {
|
|
bar(callback);
|
|
}
|
|
|
|
return new Promise(function executor(resolve) {
|
|
setTimeout(foo.bind(undefined, resolve), 0);
|
|
});
|
|
}
|
|
|
|
function testThrow() {
|
|
function bar() {
|
|
throw new Error();
|
|
}
|
|
|
|
function foo() {
|
|
bar();
|
|
}
|
|
|
|
foo();
|
|
}
|
|
//# sourceURL=test.js`);
|
|
|
|
InspectorTest.runAsyncTestSuite([
|
|
async function testBeforeEnable() {
|
|
const {error} =
|
|
await Protocol.Runtime.setMaxCallStackSizeToCapture({size: 0});
|
|
InspectorTest.logMessage(error);
|
|
},
|
|
|
|
async function testNegativeSize() {
|
|
await Protocol.Runtime.enable();
|
|
const {error} =
|
|
await Protocol.Runtime.setMaxCallStackSizeToCapture({size: -42});
|
|
InspectorTest.logMessage(error);
|
|
await Protocol.Runtime.disable();
|
|
},
|
|
|
|
async function testConsoleLogBeforeEnable() {
|
|
await Protocol.Runtime.evaluate({expression: 'testConsoleLog()'});
|
|
await Protocol.Runtime.enable();
|
|
await Promise.all([
|
|
Protocol.Runtime.discardConsoleEntries(),
|
|
Protocol.Runtime.disable(),
|
|
]);
|
|
},
|
|
|
|
async function testConsoleTrace() {
|
|
await Promise.all([
|
|
Protocol.Runtime.enable(),
|
|
Protocol.Runtime.setAsyncCallStackDepth({maxDepth: 10}),
|
|
]);
|
|
for (let size = 0; size <= 2; ++size) {
|
|
await Protocol.Runtime.setMaxCallStackSizeToCapture({size});
|
|
InspectorTest.log(`Test with max size ${size}.`);
|
|
await Protocol.Runtime.evaluate(
|
|
{expression: 'testConsoleTrace()', awaitPromise: true});
|
|
}
|
|
await Promise.all([
|
|
Protocol.Runtime.discardConsoleEntries(),
|
|
Protocol.Runtime.disable(),
|
|
]);
|
|
},
|
|
|
|
async function testException() {
|
|
await Promise.all([
|
|
Protocol.Runtime.enable(),
|
|
Protocol.Runtime.setAsyncCallStackDepth({maxDepth: 0}),
|
|
]);
|
|
for (let size = 0; size <= 2; ++size) {
|
|
await Protocol.Runtime.setMaxCallStackSizeToCapture({size});
|
|
InspectorTest.log(`Test with max size ${size}.`);
|
|
const {result: {exceptionDetails}} =
|
|
await Protocol.Runtime.evaluate({expression: 'testThrow()'});
|
|
InspectorTest.logMessage(exceptionDetails);
|
|
}
|
|
await Promise.all([
|
|
Protocol.Runtime.discardConsoleEntries(),
|
|
Protocol.Runtime.disable(),
|
|
]);
|
|
}
|
|
])
|