Chromium Code Reviews| 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..d029ddbbd41e99c46911f8e58e7a7c44da8d4f21 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.pop(); |
|
dgozman
2017/01/04 01:04:08
this._backupMappings could be undefined
pfeldman
2017/01/04 01:13:47
Done.
|
| 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); |
| } |