| 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);
|
| }
|
|
|