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

Unified Diff: tools/turbolizer/selection-broker.js

Issue 2230083004: [turbolizer] Use locations rather than ranges everywhere (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Remove stray change Created 4 years, 4 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
« no previous file with comments | « tools/turbolizer/selection.js ('k') | tools/turbolizer/text-view.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/turbolizer/selection-broker.js
diff --git a/tools/turbolizer/selection-broker.js b/tools/turbolizer/selection-broker.js
index 3a223d8b643097079d68b543eadc741e797c7977..822cf1ce1f62fd74b7874fd7e76e3323d40c9ac4 100644
--- a/tools/turbolizer/selection-broker.js
+++ b/tools/turbolizer/selection-broker.js
@@ -6,25 +6,78 @@ var SelectionBroker = function() {
this.brokers = [];
this.dispatching = false;
this.lastDispatchingHandler = null;
+ this.nodePositionMap = [];
+ this.sortedPositionList = [];
+ this.positionNodeMap = [];
};
SelectionBroker.prototype.addSelectionHandler = function(handler) {
this.brokers.push(handler);
}
-SelectionBroker.prototype.select = function(from, ranges, selected) {
- if (!this.dispatching) {
- this.lastDispatchingHandler = from;
+SelectionBroker.prototype.setNodePositionMap = function(map) {
+ let broker = this;
+ if (!map) return;
+ broker.nodePositionMap = map;
+ broker.positionNodeMap = [];
+ broker.sortedPositionList = [];
+ let next = 0;
+ for (let i in broker.nodePositionMap) {
+ broker.sortedPositionList[next] = Number(broker.nodePositionMap[i]);
+ broker.positionNodeMap[next++] = i;
+ }
+ broker.sortedPositionList = sortUnique(broker.sortedPositionList,
+ function(a,b) { return a - b; });
+ this.positionNodeMap.sort(function(a,b) {
+ let result = broker.nodePositionMap[a] - broker.nodePositionMap[b];
+ if (result != 0) return result;
+ return a - b;
+ });
+}
+
+SelectionBroker.prototype.select = function(from, locations, selected) {
+ let broker = this;
+ if (!broker.dispatching) {
+ broker.lastDispatchingHandler = from;
try {
- this.dispatching = true;
+ broker.dispatching = true;
+ let enrichLocations = function(locations) {
+ result = [];
+ for (let location of locations) {
+ let newLocation = {};
+ if (location.pos_start != undefined) {
+ newLocation.pos_start = location.pos_start;
+ }
+ if (location.pos_end != undefined) {
+ newLocation.pos_end = location.pos_end;
+ }
+ if (location.node_id != undefined) {
+ newLocation.node_id = location.node_id;
+ }
+ if (location.block_id != undefined) {
+ newLocation.block_id = location.block_id;
+ }
+ if (newLocation.pos_start == undefined &&
+ newLocation.pos_end == undefined &&
+ newLocation.node_id != undefined) {
+ if (broker.nodePositionMap && broker.nodePositionMap[location.node_id]) {
+ newLocation.pos_start = broker.nodePositionMap[location.node_id];
+ newLocation.pos_end = location.pos_start + 1;
+ }
+ }
+ result.push(newLocation);
+ }
+ return result;
+ }
+ locations = enrichLocations(locations);
for (var b of this.brokers) {
if (b != from) {
- b.brokeredSelect(ranges, selected);
+ b.brokeredSelect(locations, selected);
}
}
}
finally {
- this.dispatching = false;
+ broker.dispatching = false;
}
}
}
« no previous file with comments | « tools/turbolizer/selection.js ('k') | tools/turbolizer/text-view.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698