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

Unified Diff: third_party/WebKit/Source/devtools/front_end/ui_lazy/FilteredListWidget.js

Issue 2580043002: DevTools: improve go-to-file perceived latency: do not discard intermediate results. (Closed)
Patch Set: Created 4 years 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 | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/devtools/front_end/ui_lazy/FilteredListWidget.js
diff --git a/third_party/WebKit/Source/devtools/front_end/ui_lazy/FilteredListWidget.js b/third_party/WebKit/Source/devtools/front_end/ui_lazy/FilteredListWidget.js
index 4a221cdf1e809c52dd1cb94882d243fdbaa45081..8c37b129d82902107991194e7fa8f5cb484c7345 100644
--- a/third_party/WebKit/Source/devtools/front_end/ui_lazy/FilteredListWidget.js
+++ b/third_party/WebKit/Source/devtools/front_end/ui_lazy/FilteredListWidget.js
@@ -161,16 +161,19 @@ UI.FilteredListWidget = class extends UI.VBox {
if (this._scoringTimer) {
clearTimeout(this._scoringTimer);
delete this._scoringTimer;
+
+ if (this._refreshViewportWithCurrentResult)
+ this._refreshViewportWithCurrentResult();
}
var query = this._delegate.rewriteQuery(this._value());
this._query = query;
+
var filterRegex = query ? UI.FilteredListWidget.filterRegex(query) : null;
var oldSelectedAbsoluteIndex =
- this._selectedIndexInFiltered ? this._filteredItems[this._selectedIndexInFiltered] : null;
+ this._selectedIndexInFiltered && query ? this._filteredItems[this._selectedIndexInFiltered] : undefined;
var filteredItems = [];
- this._selectedIndexInFiltered = 0;
var bestScores = [];
var bestItems = [];
@@ -194,8 +197,10 @@ UI.FilteredListWidget = class extends UI.VBox {
* @this {UI.FilteredListWidget}
*/
function scoreItems(fromIndex) {
+ delete this._scoringTimer;
var maxWorkItems = 1000;
var workDone = 0;
+
for (var i = fromIndex; i < this._delegate.itemCount() && workDone < maxWorkItems; ++i) {
// Filter out non-matching items quickly.
if (filterRegex && !filterRegex.test(this._delegate.itemKeyAt(i)))
@@ -223,27 +228,40 @@ UI.FilteredListWidget = class extends UI.VBox {
}
}
+ this._refreshViewportWithCurrentResult =
+ this._refreshViewport.bind(this, bestItems, overflowItems, filteredItems, oldSelectedAbsoluteIndex);
+
// Process everything in chunks.
if (i < this._delegate.itemCount()) {
this._scoringTimer = setTimeout(scoreItems.bind(this, i), 0);
return;
}
- delete this._scoringTimer;
- this._filteredItems = bestItems.concat(overflowItems).concat(filteredItems);
- for (var i = 0; i < this._filteredItems.length; ++i) {
- if (this._filteredItems[i] === oldSelectedAbsoluteIndex) {
- this._selectedIndexInFiltered = i;
- break;
- }
+ this._refreshViewportWithCurrentResult();
+ }
+ }
+
+ /**
+ * @param {!Array<number>} bestItems
+ * @param {!Array<number>} overflowItems
+ * @param {!Array<number>} filteredItems
+ * @param {number|undefined} selectedAbsoluteIndex
+ */
+ _refreshViewport(bestItems, overflowItems, filteredItems, selectedAbsoluteIndex) {
+ delete this._refreshViewportWithCurrentResult;
+ this._filteredItems = bestItems.concat(overflowItems).concat(filteredItems);
lushnikov 2016/12/16 22:26:32 we can speed this up if we mutate single array ins
+
+ this._selectedIndexInFiltered = 0;
+ for (var i = 0; selectedAbsoluteIndex !== undefined && i < this._filteredItems.length; ++i) {
+ if (this._filteredItems[i] === selectedAbsoluteIndex) {
+ this._selectedIndexInFiltered = i;
+ break;
}
- this._elements = [];
- this._viewportControl.refresh();
- if (!query)
- this._selectedIndexInFiltered = 0;
- this._updateSelection(this._selectedIndexInFiltered, false);
- this._itemsFilteredForTest();
}
+ this._elements = [];
+ this._viewportControl.refresh();
+ this._updateSelection(this._selectedIndexInFiltered, false);
+ this._itemsFilteredForTest();
}
/**
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698