Index: third_party/WebKit/Source/devtools/front_end/bindings/DebuggerWorkspaceBinding.js |
diff --git a/third_party/WebKit/Source/devtools/front_end/bindings/DebuggerWorkspaceBinding.js b/third_party/WebKit/Source/devtools/front_end/bindings/DebuggerWorkspaceBinding.js |
index cecb966e3c26a179b4893840780cd454d64721a1..ebc3a428f041221c8ee68bc8d6543a02aa087a82 100644 |
--- a/third_party/WebKit/Source/devtools/front_end/bindings/DebuggerWorkspaceBinding.js |
+++ b/third_party/WebKit/Source/devtools/front_end/bindings/DebuggerWorkspaceBinding.js |
@@ -86,7 +86,7 @@ Bindings.DebuggerWorkspaceBinding = class extends Common.Object { |
* @return {!Bindings.DebuggerSourceMapping} |
*/ |
popSourceMapping(script) { |
- var info = this._infoForScript(script.target(), script.scriptId); |
+ var info = this._infoForScript(script); |
console.assert(info); |
return info._popSourceMapping(); |
} |
@@ -106,7 +106,7 @@ Bindings.DebuggerWorkspaceBinding = class extends Common.Object { |
* @param {!SDK.Script} script |
*/ |
updateLocations(script) { |
- var info = this._infoForScript(script.target(), script.scriptId); |
+ var info = this._infoForScript(script); |
if (info) |
info._updateLocations(); |
} |
@@ -118,7 +118,7 @@ Bindings.DebuggerWorkspaceBinding = class extends Common.Object { |
* @return {!Bindings.DebuggerWorkspaceBinding.Location} |
*/ |
createLiveLocation(rawLocation, updateDelegate, locationPool) { |
- var info = this._infoForScript(rawLocation.target(), rawLocation.scriptId); |
+ var info = this._infoForScript(rawLocation.script()); |
console.assert(info); |
var location = |
new Bindings.DebuggerWorkspaceBinding.Location(info._script, rawLocation, this, updateDelegate, locationPool); |
@@ -162,7 +162,7 @@ Bindings.DebuggerWorkspaceBinding = class extends Common.Object { |
* @return {!Workspace.UILocation} |
*/ |
rawLocationToUILocation(rawLocation) { |
- var info = this._infoForScript(rawLocation.target(), rawLocation.scriptId); |
+ var info = this._infoForScript(rawLocation.script()); |
console.assert(info); |
return info._rawLocationToUILocation(rawLocation); |
} |
@@ -280,25 +280,22 @@ Bindings.DebuggerWorkspaceBinding = class extends Common.Object { |
* @return {!Bindings.DebuggerWorkspaceBinding.ScriptInfo} |
*/ |
_ensureInfoForScript(script) { |
- var scriptDataMap = this._targetToData.get(script.target()).scriptDataMap; |
- var info = scriptDataMap.get(script.scriptId); |
+ var info = script[Bindings.DebuggerWorkspaceBinding._scriptInfoSymbol]; |
if (!info) { |
info = new Bindings.DebuggerWorkspaceBinding.ScriptInfo(script); |
- scriptDataMap.set(script.scriptId, info); |
+ script[Bindings.DebuggerWorkspaceBinding._scriptInfoSymbol] = info; |
} |
return info; |
} |
/** |
- * @param {!SDK.Target} target |
- * @param {string} scriptId |
+ * @param {?SDK.Script} script |
* @return {?Bindings.DebuggerWorkspaceBinding.ScriptInfo} |
*/ |
- _infoForScript(target, scriptId) { |
- var data = this._targetToData.get(target); |
- if (!data) |
+ _infoForScript(script) { |
+ if (!script) |
return null; |
- return data.scriptDataMap.get(scriptId) || null; |
+ return script[Bindings.DebuggerWorkspaceBinding._scriptInfoSymbol] || null; |
} |
/** |
@@ -314,7 +311,7 @@ Bindings.DebuggerWorkspaceBinding = class extends Common.Object { |
* @param {!Bindings.DebuggerWorkspaceBinding.Location} location |
*/ |
_removeLiveLocation(location) { |
- var info = this._infoForScript(location._script.target(), location._script.scriptId); |
+ var info = this._infoForScript(location._script); |
if (info) |
info._removeLocation(location); |
} |
@@ -328,6 +325,9 @@ Bindings.DebuggerWorkspaceBinding = class extends Common.Object { |
} |
}; |
+Bindings.DebuggerWorkspaceBinding._scriptInfoSymbol = Symbol('scriptDataMap'); |
+Bindings.DebuggerWorkspaceBinding._sourceMappingSymbol = Symbol('sourceMapping'); |
+ |
/** |
* @unrestricted |
*/ |
@@ -340,9 +340,6 @@ Bindings.DebuggerWorkspaceBinding.TargetData = class { |
this._debuggerModel = debuggerModel; |
this._debuggerWorkspaceBinding = debuggerWorkspaceBinding; |
- /** @type {!Map.<string, !Bindings.DebuggerWorkspaceBinding.ScriptInfo>} */ |
- this.scriptDataMap = new Map(); |
- |
/** @type {!Set.<!Bindings.DebuggerWorkspaceBinding.Location>} */ |
this.callFrameLocations = new Set(); |
@@ -354,13 +351,11 @@ Bindings.DebuggerWorkspaceBinding.TargetData = class { |
debuggerModel, workspace, Bindings.NetworkProject.forTarget(this._debuggerModel.target()), |
debuggerWorkspaceBinding); |
- /** @type {!Map.<!Workspace.UISourceCode, !Bindings.DebuggerSourceMapping>} */ |
- this._uiSourceCodeToSourceMapping = new Map(); |
- |
debuggerModel.setBeforePausedCallback(this._beforePaused.bind(this)); |
this._eventListeners = [ |
debuggerModel.addEventListener(SDK.DebuggerModel.Events.ParsedScriptSource, this._parsedScriptSource, this), |
- debuggerModel.addEventListener(SDK.DebuggerModel.Events.FailedToParseScriptSource, this._parsedScriptSource, this) |
+ debuggerModel.addEventListener( |
+ SDK.DebuggerModel.Events.FailedToParseScriptSource, this._parsedScriptSource, this), |
]; |
} |
@@ -389,19 +384,20 @@ Bindings.DebuggerWorkspaceBinding.TargetData = class { |
* @param {?Bindings.DebuggerSourceMapping} sourceMapping |
*/ |
_setSourceMapping(uiSourceCode, sourceMapping) { |
- if (this._uiSourceCodeToSourceMapping.get(uiSourceCode) === sourceMapping) |
+ if (uiSourceCode[Bindings.DebuggerWorkspaceBinding._sourceMappingSymbol] === sourceMapping) |
return; |
if (sourceMapping) |
- this._uiSourceCodeToSourceMapping.set(uiSourceCode, sourceMapping); |
+ uiSourceCode[Bindings.DebuggerWorkspaceBinding._sourceMappingSymbol] = sourceMapping; |
else |
- this._uiSourceCodeToSourceMapping.remove(uiSourceCode); |
+ delete uiSourceCode[Bindings.DebuggerWorkspaceBinding._sourceMappingSymbol]; |
- this._debuggerWorkspaceBinding.dispatchEventToListeners(Bindings.DebuggerWorkspaceBinding.Events.SourceMappingChanged, { |
- uiSourceCode: uiSourceCode, |
- target: this._debuggerModel.target(), |
- isIdentity: sourceMapping ? sourceMapping.isIdentity() : false |
- }); |
+ this._debuggerWorkspaceBinding.dispatchEventToListeners( |
+ Bindings.DebuggerWorkspaceBinding.Events.SourceMappingChanged, { |
+ uiSourceCode: uiSourceCode, |
+ target: this._debuggerModel.target(), |
+ isIdentity: sourceMapping ? sourceMapping.isIdentity() : false |
+ }); |
} |
/** |
@@ -411,7 +407,7 @@ Bindings.DebuggerWorkspaceBinding.TargetData = class { |
* @return {?SDK.DebuggerModel.Location} |
*/ |
_uiLocationToRawLocation(uiSourceCode, lineNumber, columnNumber) { |
- var sourceMapping = this._uiSourceCodeToSourceMapping.get(uiSourceCode); |
+ var sourceMapping = uiSourceCode[Bindings.DebuggerWorkspaceBinding._sourceMappingSymbol]; |
return sourceMapping ? sourceMapping.uiLocationToRawLocation(uiSourceCode, lineNumber, columnNumber) : null; |
} |
@@ -421,7 +417,7 @@ Bindings.DebuggerWorkspaceBinding.TargetData = class { |
* @return {boolean} |
*/ |
_uiLineHasMapping(uiSourceCode, lineNumber) { |
- var sourceMapping = this._uiSourceCodeToSourceMapping.get(uiSourceCode); |
+ var sourceMapping = uiSourceCode[Bindings.DebuggerWorkspaceBinding._sourceMappingSymbol]; |
return sourceMapping ? sourceMapping.uiLineHasMapping(uiSourceCode, lineNumber) : true; |
} |
@@ -429,7 +425,7 @@ Bindings.DebuggerWorkspaceBinding.TargetData = class { |
* @param {!Workspace.UISourceCode} uiSourceCode |
*/ |
_uiSourceCodeRemoved(uiSourceCode) { |
- this._uiSourceCodeToSourceMapping.remove(uiSourceCode); |
+ delete uiSourceCode[Bindings.DebuggerWorkspaceBinding._sourceMappingSymbol]; |
} |
_dispose() { |
@@ -438,7 +434,6 @@ Bindings.DebuggerWorkspaceBinding.TargetData = class { |
this._compilerMapping.dispose(); |
this._resourceMapping.dispose(); |
this._defaultMapping.dispose(); |
- this._uiSourceCodeToSourceMapping.clear(); |
} |
}; |
@@ -457,19 +452,21 @@ Bindings.DebuggerWorkspaceBinding.ScriptInfo = class { |
*/ |
constructor(script) { |
this._script = script; |
- |
- /** @type {!Array.<!Bindings.DebuggerSourceMapping>} */ |
- this._sourceMappings = []; |
- |
- /** @type {!Set<!Bindings.LiveLocation>} */ |
- this._locations = new Set(); |
+ // We create a lot of these, do not add arrays/collections/expensive data structures. |
} |
/** |
* @param {!Bindings.DebuggerSourceMapping} sourceMapping |
*/ |
_pushSourceMapping(sourceMapping) { |
- this._sourceMappings.push(sourceMapping); |
+ if (this._sourceMapping) { |
+ if (!this._backupMappings) { |
+ /** @type {!Array.<!Bindings.DebuggerSourceMapping>} */ |
+ this._backupMappings = []; |
+ } |
+ this._backupMappings.push(this._sourceMapping); |
+ } |
+ this._sourceMapping = sourceMapping; |
this._updateLocations(); |
} |
@@ -477,7 +474,8 @@ Bindings.DebuggerWorkspaceBinding.ScriptInfo = class { |
* @return {!Bindings.DebuggerSourceMapping} |
*/ |
_popSourceMapping() { |
- var sourceMapping = this._sourceMappings.pop(); |
+ var sourceMapping = this._sourceMapping; |
+ this._sourceMapping = this._backupMappings ? this._backupMappings.pop() : undefined; |
this._updateLocations(); |
return sourceMapping; |
} |
@@ -486,6 +484,10 @@ Bindings.DebuggerWorkspaceBinding.ScriptInfo = class { |
* @param {!Bindings.LiveLocation} location |
*/ |
_addLocation(location) { |
+ if (!this._locations) { |
+ /** @type {!Set<!Bindings.LiveLocation>} */ |
+ this._locations = new Set(); |
+ } |
this._locations.add(location); |
location.update(); |
} |
@@ -494,10 +496,14 @@ Bindings.DebuggerWorkspaceBinding.ScriptInfo = class { |
* @param {!Bindings.LiveLocation} location |
*/ |
_removeLocation(location) { |
+ if (!this._locations) |
+ return; |
this._locations.delete(location); |
} |
_updateLocations() { |
+ if (!this._locations) |
+ return; |
for (var location of this._locations) |
location.update(); |
} |
@@ -507,9 +513,11 @@ Bindings.DebuggerWorkspaceBinding.ScriptInfo = class { |
* @return {!Workspace.UILocation} |
*/ |
_rawLocationToUILocation(rawLocation) { |
- var uiLocation; |
- for (var i = this._sourceMappings.length - 1; !uiLocation && i >= 0; --i) |
- uiLocation = this._sourceMappings[i].rawLocationToUILocation(rawLocation); |
+ var uiLocation = this._sourceMapping ? this._sourceMapping.rawLocationToUILocation(rawLocation) : null; |
+ if (!uiLocation && this._backupMappings) { |
+ for (var i = this._backupMappings.length - 1; !uiLocation && i >= 0; --i) |
+ uiLocation = this._backupMappings[i].rawLocationToUILocation(rawLocation); |
+ } |
console.assert(uiLocation, 'Script raw location cannot be mapped to any UI location.'); |
return /** @type {!Workspace.UILocation} */ (uiLocation); |
} |