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

Unified Diff: third_party/WebKit/Source/devtools/front_end/bindings/DebuggerWorkspaceBinding.js

Issue 2613643002: DevTools: migrate from external Maps to symbols in the bindings objects. (Closed)
Patch Set: Created 3 years, 12 months 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
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);
}

Powered by Google App Engine
This is Rietveld 408576698