Commit 7534dfcb authored by kozyatinskiy's avatar kozyatinskiy Committed by Commit bot

[DevTools] Better label for async function call stacks

Async call stack with async function always contains (async function) label and async function as top frame for following stack. We can merge label with this frame for better user experience.

R=dgozman@chromium.org,littledan@chromium.org
BUG=654018,621515

Review-Url: https://chromiumcodereview.appspot.com/2384533002
Cr-Commit-Position: refs/heads/master@{#426960}
parent 87303d73
......@@ -110,7 +110,6 @@ crbug.com/420008 virtual/threaded/inspector/tracing/ [ Slow ]
crbug.com/246190 [ Release ] http/tests/inspector/indexeddb/ [ Slow ]
crbug.com/451577 [ Mac ] inspector/extensions/extensions-sidebar.html [ Slow ]
crbug.com/451577 [ Mac ] inspector/extensions/extensions-events.html [ Slow ]
crbug.com/450493 virtual/asyncawait/inspector/sources/debugger-async/ [ Slow ]
# Random slow tests
webkit.org/b/90488 [ Release ] http/tests/inspector/compiler-source-mapping-debug.html [ Slow ]
......
......@@ -577,12 +577,6 @@ crbug.com/492664 imported/csswg-test/css-writing-modes-3/text-orientation-script
crbug.com/537080 imported/csswg-test/css-writing-modes-3/vertical-alignment-003.xht [ Failure ]
crbug.com/537080 imported/csswg-test/css-writing-modes-3/vertical-alignment-009.xht [ Failure ]
# These tests fail / timeout until https://www.chromestatus.com/features/5643236399906816 ships
crbug.com/621515 inspector/sources/debugger-async/async-await/async-callstack-async-await1.html [ Skip ]
crbug.com/621515 inspector/sources/debugger-async/async-await/async-callstack-async-await2.html [ Skip ]
crbug.com/621515 inspector/sources/debugger-async/async-await/async-callstack-async-await3.html [ Skip ]
crbug.com/621515 inspector/sources/debugger-async/async-await/async-pause-on-exception.html [ Skip ]
# These tests pass but images do not match because of position: absolute in vertical flow bug
crbug.com/492664 imported/csswg-test/css-writing-modes-3/block-flow-direction-vrl-009.xht [ Failure ]
crbug.com/492664 imported/csswg-test/css-writing-modes-3/clip-rect-vlr-003.xht [ Failure ]
......
......@@ -254,11 +254,6 @@
"base": "http/tests/preload/document-write",
"args": ["--enable-blink-features=DocumentWriteEvaluator"]
},
{
"prefix": "asyncawait",
"base": "inspector/sources/debugger-async/async-await",
"args": ["--js-flags=--harmony-async-await"]
},
{
"prefix": "wheelscrolllatching",
"base": "fast/events/wheel",
......
......@@ -6,8 +6,7 @@ Call stack:
0) errorCallback (async-callstack-async-await1.html:60)
1) doTestSettledPromisesRejected (async-callstack-async-await1.html:92)
[async function]
0) doTestSettledPromisesRejected (async-callstack-async-await1.html:86)
1) testFunctionTimeout (async-callstack-async-await1.html:50)
0) testFunctionTimeout (async-callstack-async-await1.html:50)
[setTimeout]
0) testFunction (async-callstack-async-await1.html:43)
[setTimeout]
......@@ -28,8 +27,7 @@ Call stack:
0) thenCallback (async-callstack-async-await1.html:55)
1) doTestPromiseConstructor (async-callstack-async-await1.html:70)
[async function]
0) doTestPromiseConstructor (async-callstack-async-await1.html:63)
1) testFunctionTimeout (async-callstack-async-await1.html:50)
0) testFunctionTimeout (async-callstack-async-await1.html:50)
[setTimeout]
0) testFunction (async-callstack-async-await1.html:43)
[setTimeout]
......@@ -40,8 +38,7 @@ Call stack:
0) thenCallback (async-callstack-async-await1.html:55)
1) doTestSettledPromisesResolved (async-callstack-async-await1.html:80)
[async function]
0) doTestSettledPromisesResolved (async-callstack-async-await1.html:76)
1) testFunctionTimeout (async-callstack-async-await1.html:50)
0) testFunctionTimeout (async-callstack-async-await1.html:50)
[setTimeout]
0) testFunction (async-callstack-async-await1.html:43)
[setTimeout]
......
......@@ -5,8 +5,7 @@ Captured call stacks in no particular order:
Call stack:
0) doTestChainedPromises (async-callstack-async-await2.html:67)
[async function]
0) doTestChainedPromises (async-callstack-async-await2.html:63)
1) testFunctionTimeout (async-callstack-async-await2.html:50)
0) testFunctionTimeout (async-callstack-async-await2.html:50)
[setTimeout]
0) testFunction (async-callstack-async-await2.html:43)
[setTimeout]
......@@ -16,8 +15,7 @@ Call stack:
Call stack:
0) doTestChainedPromises (async-callstack-async-await2.html:69)
[async function]
0) doTestChainedPromises (async-callstack-async-await2.html:63)
1) testFunctionTimeout (async-callstack-async-await2.html:50)
0) testFunctionTimeout (async-callstack-async-await2.html:50)
[setTimeout]
0) testFunction (async-callstack-async-await2.html:43)
[setTimeout]
......@@ -27,8 +25,7 @@ Call stack:
Call stack:
0) doTestChainedPromises (async-callstack-async-await2.html:71)
[async function]
0) doTestChainedPromises (async-callstack-async-await2.html:63)
1) testFunctionTimeout (async-callstack-async-await2.html:50)
0) testFunctionTimeout (async-callstack-async-await2.html:50)
[setTimeout]
0) testFunction (async-callstack-async-await2.html:43)
[setTimeout]
......@@ -38,8 +35,7 @@ Call stack:
Call stack:
0) doTestChainedPromises (async-callstack-async-await2.html:73)
[async function]
0) doTestChainedPromises (async-callstack-async-await2.html:63)
1) testFunctionTimeout (async-callstack-async-await2.html:50)
0) testFunctionTimeout (async-callstack-async-await2.html:50)
[setTimeout]
0) testFunction (async-callstack-async-await2.html:43)
[setTimeout]
......@@ -50,8 +46,7 @@ Call stack:
0) thenCallback (async-callstack-async-await2.html:55)
1) doTestChainedPromises (async-callstack-async-await2.html:74)
[async function]
0) doTestChainedPromises (async-callstack-async-await2.html:63)
1) testFunctionTimeout (async-callstack-async-await2.html:50)
0) testFunctionTimeout (async-callstack-async-await2.html:50)
[setTimeout]
0) testFunction (async-callstack-async-await2.html:43)
[setTimeout]
......@@ -62,8 +57,7 @@ Call stack:
0) thenCallback (async-callstack-async-await2.html:55)
1) doTestChainedPromisesJSON (async-callstack-async-await2.html:86)
[async function]
0) doTestChainedPromisesJSON (async-callstack-async-await2.html:80)
1) testFunctionTimeout (async-callstack-async-await2.html:50)
0) testFunctionTimeout (async-callstack-async-await2.html:50)
[setTimeout]
0) testFunction (async-callstack-async-await2.html:43)
[setTimeout]
......
......@@ -6,8 +6,7 @@ Call stack:
0) errorCallback (async-callstack-async-await3.html:60)
1) doTestPromiseReject (async-callstack-async-await3.html:129)
[async function]
0) doTestPromiseReject (async-callstack-async-await3.html:123)
1) testFunctionTimeout (async-callstack-async-await3.html:50)
0) testFunctionTimeout (async-callstack-async-await3.html:50)
[setTimeout]
0) testFunction (async-callstack-async-await3.html:43)
[setTimeout]
......@@ -18,8 +17,7 @@ Call stack:
0) errorCallback (async-callstack-async-await3.html:60)
1) doTestRejectFromChain (async-callstack-async-await3.html:109)
[async function]
0) doTestRejectFromChain (async-callstack-async-await3.html:103)
1) testFunctionTimeout (async-callstack-async-await3.html:50)
0) testFunctionTimeout (async-callstack-async-await3.html:50)
[setTimeout]
0) testFunction (async-callstack-async-await3.html:43)
[setTimeout]
......@@ -30,8 +28,7 @@ Call stack:
0) errorCallback (async-callstack-async-await3.html:60)
1) doTestThrowFromChain (async-callstack-async-await3.html:89)
[async function]
0) doTestThrowFromChain (async-callstack-async-await3.html:83)
1) testFunctionTimeout (async-callstack-async-await3.html:50)
0) testFunctionTimeout (async-callstack-async-await3.html:50)
[setTimeout]
0) testFunction (async-callstack-async-await3.html:43)
[setTimeout]
......@@ -42,8 +39,7 @@ Call stack:
0) thenCallback (async-callstack-async-await3.html:55)
1) doTestPromiseAll (async-callstack-async-await3.html:67)
[async function]
0) doTestPromiseAll (async-callstack-async-await3.html:63)
1) testFunctionTimeout (async-callstack-async-await3.html:50)
0) testFunctionTimeout (async-callstack-async-await3.html:50)
[setTimeout]
0) testFunction (async-callstack-async-await3.html:43)
[setTimeout]
......@@ -54,8 +50,7 @@ Call stack:
0) thenCallback (async-callstack-async-await3.html:55)
1) doTestPromiseResolve (async-callstack-async-await3.html:117)
[async function]
0) doTestPromiseResolve (async-callstack-async-await3.html:113)
1) testFunctionTimeout (async-callstack-async-await3.html:50)
0) testFunctionTimeout (async-callstack-async-await3.html:50)
[setTimeout]
0) testFunction (async-callstack-async-await3.html:43)
[setTimeout]
......
Tests that call stack sidebar contains correct labels for async await functions.
Set timer for test function.
footest.js:6
boo awaits foo
bootest.js:12
testFunction awaits boo
testFunctiontest.js:18
setTimeout (async)
scheduleTestFunctiondebugger-test.js:3
(anonymous)VM:1
<html>
<head>
<script src="../../../http/tests/inspector/inspector-test.js"></script>
<script src="../../../http/tests/inspector/debugger-test.js"></script>
<script>
async function foo()
{
await Promise.resolve(1);
await Promise.resolve(2);
debugger;
}
async function boo()
{
await Promise.resolve(3);
await foo();
}
async function testFunction()
{
await Promise.resolve(4);
await boo();
}
//# sourceURL=test.js
</script>
<script>
var test = function()
{
InspectorTest.DebuggerAgent.setAsyncCallStackDepth(200);
InspectorTest.startDebuggerTestPromise(/* quiet */ true)
.then(() => InspectorTest.runTestFunctionAndWaitUntilPausedPromise())
.then(() => dumpCallStackSidebarPane())
.then(() => InspectorTest.completeDebuggerTest());
function dumpCallStackSidebarPane()
{
var callFrameList = self.runtime.sharedInstance(WebInspector.CallStackSidebarPane).callFrameList;
for (var item of callFrameList._items)
InspectorTest.addResult(item.element.textContent.replace(/VM\d+/g, "VM"));
}
}
</script>
</head>
<body onload="runTest()">
<p>Tests that call stack sidebar contains correct labels for async await functions.</p>
</body>
</html>
# This suite runs the inspector/debugger-async/async-await tests with --js-flags=--harmony-async-await
Tests for V8 that depend on the new experimental async/await feature
\ No newline at end of file
......@@ -1239,7 +1239,8 @@ WebInspector.DebuggerPausedDetails = function(debuggerModel, callFrames, reason,
this.reason = reason;
this.auxData = auxData;
this.breakpointIds = breakpointIds;
this.asyncStackTrace = asyncStackTrace;
if (asyncStackTrace)
this.asyncStackTrace = this._cleanRedundantFrames(asyncStackTrace);
}
WebInspector.DebuggerPausedDetails.prototype = {
......@@ -1253,6 +1254,26 @@ WebInspector.DebuggerPausedDetails.prototype = {
return this.target().runtimeModel.createRemoteObject(/** @type {!RuntimeAgent.RemoteObject} */(this.auxData));
},
/**
* @param {!RuntimeAgent.StackTrace} asyncStackTrace
* @return {!RuntimeAgent.StackTrace}
*/
_cleanRedundantFrames: function(asyncStackTrace)
{
var stack = asyncStackTrace;
var previous = null;
while (stack) {
if (stack.description === "async function" && stack.callFrames.length)
stack.callFrames.shift();
if (previous && !stack.callFrames.length)
previous.parent = stack.parent;
else
previous = stack;
stack = stack.parent;
}
return asyncStackTrace;
},
__proto__: WebInspector.SDKObject.prototype
}
......
......@@ -81,12 +81,23 @@ WebInspector.CallStackSidebarPane.prototype = {
this._appendSidebarCallFrames(this._callFramesFromDebugger(details.callFrames));
var topStackHidden = (this._hiddenCallFrames === this.callFrames.length);
var peviousStackTrace = details.callFrames;
while (asyncStackTrace) {
var title = WebInspector.asyncStackTraceLabel(asyncStackTrace.description);
var title = "";
if (asyncStackTrace.description === "async function") {
var lastPreviousFrame = peviousStackTrace[peviousStackTrace.length - 1];
var topFrame = asyncStackTrace.callFrames[0];
var lastPreviousFrameName = WebInspector.beautifyFunctionName(lastPreviousFrame.functionName);
var topFrameName = WebInspector.beautifyFunctionName(topFrame.functionName);
title = topFrameName + " awaits " + lastPreviousFrameName;
} else {
title = WebInspector.asyncStackTraceLabel(asyncStackTrace.description);
}
var asyncCallFrame = new WebInspector.UIList.Item(title, "", true);
asyncCallFrame.setHoverable(false);
asyncCallFrame.element.addEventListener("contextmenu", this._asyncCallFrameContextMenu.bind(this, this.callFrames.length), true);
this._appendSidebarCallFrames(this._callFramesFromRuntime(asyncStackTrace.callFrames, asyncCallFrame), asyncCallFrame);
peviousStackTrace = asyncStackTrace.callFrames;
asyncStackTrace = asyncStackTrace.parent;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment