Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1391)

Unified Diff: Source/devtools/front_end/DebuggerModel.js

Issue 80383004: DevTools: Show asynchronous call stacks on frontend. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: addressed Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/devtools/front_end/CallStackSidebarPane.js ('k') | Source/devtools/front_end/Placard.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/devtools/front_end/DebuggerModel.js
diff --git a/Source/devtools/front_end/DebuggerModel.js b/Source/devtools/front_end/DebuggerModel.js
index 6126878366251bbe99ccbaf3b8b6186f494ed63c..b772d03acb2366a455275bd10d2a99351eab92e0 100644
--- a/Source/devtools/front_end/DebuggerModel.js
+++ b/Source/devtools/front_end/DebuggerModel.js
@@ -36,10 +36,9 @@ WebInspector.DebuggerModel = function()
{
InspectorBackend.registerDebuggerDispatcher(new WebInspector.DebuggerDispatcher(this));
+ /** @type {?WebInspector.DebuggerPausedDetails} */
this._debuggerPausedDetails = null;
- /**
- * @type {!Object.<string, !WebInspector.Script>}
- */
+ /** @type {!Object.<string, !WebInspector.Script>} */
this._scripts = {};
/** @type {!Object.<!string, !Array.<!WebInspector.Script>>} */
this._scriptsBySourceURL = {};
@@ -50,6 +49,9 @@ WebInspector.DebuggerModel = function()
WebInspector.settings.pauseOnExceptionStateString = WebInspector.settings.createSetting("pauseOnExceptionStateString", WebInspector.DebuggerModel.PauseOnExceptionsState.DontPauseOnExceptions);
WebInspector.settings.pauseOnExceptionStateString.addChangeListener(this._pauseOnExceptionStateChanged, this);
+ WebInspector.settings.enableAsyncStackTraces.addChangeListener(this._asyncStackTracesStateChanged, this);
+ WebInspector.settings.maxAsyncStackTraceDepth.addChangeListener(this._asyncStackTracesStateChanged, this);
+
this.enableDebugger();
WebInspector.DebuggerModel.applySkipStackFrameSettings();
@@ -167,6 +169,7 @@ WebInspector.DebuggerModel.prototype = {
{
this._debuggerEnabled = true;
this._pauseOnExceptionStateChanged();
+ this._asyncStackTracesStateChanged();
this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.DebuggerWasEnabled);
},
@@ -175,6 +178,13 @@ WebInspector.DebuggerModel.prototype = {
DebuggerAgent.setPauseOnExceptions(WebInspector.settings.pauseOnExceptionStateString.get());
},
+ _asyncStackTracesStateChanged: function()
+ {
+ var enabled = WebInspector.settings.enableAsyncStackTraces.get();
+ var depth = enabled ? Number(WebInspector.settings.maxAsyncStackTraceDepth.get()) : 0;
+ DebuggerAgent.setAsyncCallStackDepth(depth);
+ },
+
_debuggerWasDisabled: function()
{
this._debuggerEnabled = false;
@@ -444,7 +454,7 @@ WebInspector.DebuggerModel.prototype = {
* @param {string} reason
* @param {Object|undefined} auxData
* @param {!Array.<string>} breakpointIds
- * @param {DebuggerAgent.StackTrace=} asyncStackTrace
+ * @param {!DebuggerAgent.StackTrace=} asyncStackTrace
*/
_pausedScript: function(callFrames, reason, auxData, breakpointIds, asyncStackTrace)
{
@@ -461,7 +471,7 @@ WebInspector.DebuggerModel.prototype = {
}
}
- this._setDebuggerPausedDetails(new WebInspector.DebuggerPausedDetails(this, callFrames, reason, auxData, breakpointIds, asyncStackTrace));
+ this._setDebuggerPausedDetails(new WebInspector.DebuggerPausedDetails(callFrames, reason, auxData, breakpointIds, asyncStackTrace));
},
_resumedScript: function()
@@ -687,7 +697,7 @@ WebInspector.DebuggerModel.prototype = {
* @this {WebInspector.DebuggerModel}
* @param {!Array.<!DebuggerAgent.CallFrame>=} newCallFrames
* @param {Object=} details
- * @param {DebuggerAgent.StackTrace=} asyncStackTrace
+ * @param {!DebuggerAgent.StackTrace=} asyncStackTrace
*/
callStackModified: function(newCallFrames, details, asyncStackTrace)
{
@@ -732,7 +742,7 @@ WebInspector.DebuggerDispatcher.prototype = {
* @param {string} reason
* @param {Object=} auxData
* @param {!Array.<string>=} breakpointIds
- * @param {DebuggerAgent.StackTrace=} asyncStackTrace
+ * @param {!DebuggerAgent.StackTrace=} asyncStackTrace
*/
paused: function(callFrames, reason, auxData, breakpointIds, asyncStackTrace)
{
@@ -790,12 +800,32 @@ WebInspector.DebuggerDispatcher.prototype = {
* @constructor
* @param {!WebInspector.Script} script
* @param {!DebuggerAgent.CallFrame} payload
+ * @param {boolean=} isAsync
*/
-WebInspector.DebuggerModel.CallFrame = function(script, payload)
+WebInspector.DebuggerModel.CallFrame = function(script, payload, isAsync)
{
this._script = script;
this._payload = payload;
+ /** @type {!Array.<!WebInspector.Script.Location>} */
this._locations = [];
+ this._isAsync = isAsync;
+}
+
+/**
+ * @param {!Array.<!DebuggerAgent.CallFrame>} callFrames
+ * @param {boolean=} isAsync
+ * @return {!Array.<!WebInspector.DebuggerModel.CallFrame>}
+ */
+WebInspector.DebuggerModel.CallFrame.fromPayloadArray = function(callFrames, isAsync)
+{
+ var result = [];
+ for (var i = 0; i < callFrames.length; ++i) {
+ var callFrame = callFrames[i];
+ var script = WebInspector.debuggerModel.scriptForId(callFrame.location.scriptId);
+ if (script)
+ result.push(new WebInspector.DebuggerModel.CallFrame(script, callFrame, isAsync));
+ }
+ return result;
}
WebInspector.DebuggerModel.CallFrame.prototype = {
@@ -865,6 +895,14 @@ WebInspector.DebuggerModel.CallFrame.prototype = {
},
/**
+ * @return {boolean}
+ */
+ isAsync: function()
+ {
+ return !!this._isAsync;
+ },
+
+ /**
* @param {string} code
* @param {string} objectGroup
* @param {boolean} includeCommandLineAPI
@@ -903,7 +941,7 @@ WebInspector.DebuggerModel.CallFrame.prototype = {
* @param {?Protocol.Error} error
* @param {!Array.<!DebuggerAgent.CallFrame>=} callFrames
* @param {Object=} details
- * @param {DebuggerAgent.StackTrace=} asyncStackTrace
+ * @param {!DebuggerAgent.StackTrace=} asyncStackTrace
*/
function protocolCallback(error, callFrames, details, asyncStackTrace)
{
@@ -928,10 +966,10 @@ WebInspector.DebuggerModel.CallFrame.prototype = {
* @param {?string} error
* @param {!Array.<!DebuggerAgent.Location>=} stepInPositions
*/
- function getStepInPositionsCallback(error, stepInPositions) {
- if (error) {
+ function getStepInPositionsCallback(error, stepInPositions)
+ {
+ if (error)
return;
- }
this._stepInLocations = stepInPositions;
callback(this._stepInLocations.slice(0));
}
@@ -948,7 +986,7 @@ WebInspector.DebuggerModel.CallFrame.prototype = {
return location;
},
- dispose: function(updateDelegate)
+ dispose: function()
{
for (var i = 0; i < this._locations.length; ++i)
this._locations[i].dispose();
@@ -958,35 +996,65 @@ WebInspector.DebuggerModel.CallFrame.prototype = {
/**
* @constructor
- * @param {WebInspector.DebuggerModel} model
+ * @param {!Array.<!WebInspector.DebuggerModel.CallFrame>} callFrames
+ * @param {?WebInspector.DebuggerModel.StackTrace} asyncStackTrace
+ */
+WebInspector.DebuggerModel.StackTrace = function(callFrames, asyncStackTrace)
+{
+ this.callFrames = callFrames;
+ this.asyncStackTrace = asyncStackTrace;
+}
+
+/**
+ * @param {!DebuggerAgent.StackTrace=} payload
+ * @param {boolean=} isAsync
+ * @return {?WebInspector.DebuggerModel.StackTrace}
+ */
+WebInspector.DebuggerModel.StackTrace.fromPayload = function(payload, isAsync)
+{
+ if (!payload)
+ return null;
+ var callFrames = WebInspector.DebuggerModel.CallFrame.fromPayloadArray(payload.callFrames, isAsync);
+ if (!callFrames.length)
+ return null;
+ var asyncStackTrace = WebInspector.DebuggerModel.StackTrace.fromPayload(payload.asyncStackTrace, true);
+ return new WebInspector.DebuggerModel.StackTrace(callFrames, asyncStackTrace);
+}
+
+WebInspector.DebuggerModel.StackTrace.prototype = {
+ dispose: function()
+ {
+ for (var i = 0; i < this.callFrames.length; ++i)
+ this.callFrames[i].dispose();
+ if (this.asyncStackTrace)
+ this.asyncStackTrace.dispose();
+ }
+}
+
+/**
+ * @constructor
* @param {!Array.<!DebuggerAgent.CallFrame>} callFrames
* @param {string} reason
* @param {Object|undefined} auxData
* @param {!Array.<string>} breakpointIds
- * @param {DebuggerAgent.StackTrace=} asyncStackTrace
+ * @param {!DebuggerAgent.StackTrace=} asyncStackTrace
*/
-WebInspector.DebuggerPausedDetails = function(model, callFrames, reason, auxData, breakpointIds, asyncStackTrace)
+WebInspector.DebuggerPausedDetails = function(callFrames, reason, auxData, breakpointIds, asyncStackTrace)
{
- this.callFrames = [];
- for (var i = 0; i < callFrames.length; ++i) {
- var callFrame = callFrames[i];
- var script = model.scriptForId(callFrame.location.scriptId);
- if (script)
- this.callFrames.push(new WebInspector.DebuggerModel.CallFrame(script, callFrame));
- }
+ this.callFrames = WebInspector.DebuggerModel.CallFrame.fromPayloadArray(callFrames);
this.reason = reason;
this.auxData = auxData;
this.breakpointIds = breakpointIds;
- this.asyncStackTrace = asyncStackTrace;
+ this.asyncStackTrace = WebInspector.DebuggerModel.StackTrace.fromPayload(asyncStackTrace, true);
}
WebInspector.DebuggerPausedDetails.prototype = {
dispose: function()
{
- for (var i = 0; i < this.callFrames.length; ++i) {
- var callFrame = this.callFrames[i];
- callFrame.dispose();
- }
+ for (var i = 0; i < this.callFrames.length; ++i)
+ this.callFrames[i].dispose();
+ if (this.asyncStackTrace)
+ this.asyncStackTrace.dispose();
}
}
« no previous file with comments | « Source/devtools/front_end/CallStackSidebarPane.js ('k') | Source/devtools/front_end/Placard.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698