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

Unified Diff: third_party/WebKit/Source/devtools/front_end/console/ConsoleViewport.js

Issue 2688803002: DevTools: always do partial viewport update in console (Closed)
Patch Set: more focused cl without driveby Created 3 years, 10 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 | « third_party/WebKit/LayoutTests/inspector/console/console-viewport-control-expected.txt ('k') | 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/console/ConsoleViewport.js
diff --git a/third_party/WebKit/Source/devtools/front_end/console/ConsoleViewport.js b/third_party/WebKit/Source/devtools/front_end/console/ConsoleViewport.js
index 3388cd73f3779e16cabf143a725430296e9543e6..4dc94938fc8b60d9bdc33211f90d1d219b4a4186 100644
--- a/third_party/WebKit/Source/devtools/front_end/console/ConsoleViewport.js
+++ b/third_party/WebKit/Source/devtools/front_end/console/ConsoleViewport.js
@@ -321,7 +321,6 @@ Console.ConsoleViewport = class {
var visibleFrom = this.element.scrollTop;
var visibleHeight = this._visibleHeight();
- var isInvalidating = !this._cumulativeHeights;
for (var i = 0; i < this._renderedItems.length; ++i) {
// Tolerate 1-pixel error due to double-to-integer rounding errors.
@@ -331,8 +330,6 @@ Console.ConsoleViewport = class {
delete this._cumulativeHeights;
}
this._rebuildCumulativeHeightsIfNeeded();
- var oldFirstActiveIndex = this._firstActiveIndex;
- var oldLastActiveIndex = this._lastActiveIndex;
var activeHeight = visibleHeight * 2;
// When the viewport is scrolled to the bottom, using the cumulative heights estimate is not
// precise enough to determine next visible indices. This stickToBottom check avoids extra
@@ -366,10 +363,7 @@ Console.ConsoleViewport = class {
this._contentElement.style.setProperty('height', '10000000px');
}
- if (isInvalidating)
- this._fullViewportUpdate(prepare.bind(this));
- else
- this._partialViewportUpdate(oldFirstActiveIndex, oldLastActiveIndex, prepare.bind(this));
+ this._partialViewportUpdate(prepare.bind(this));
this._contentElement.style.removeProperty('height');
// Should be the last call in the method as it might force layout.
if (shouldRestoreSelection)
@@ -381,44 +375,21 @@ Console.ConsoleViewport = class {
/**
* @param {function()} prepare
*/
- _fullViewportUpdate(prepare) {
- for (var i = 0; i < this._renderedItems.length; ++i)
- this._renderedItems[i].willHide();
- prepare();
- this._renderedItems = [];
- this._contentElement.removeChildren();
- for (var i = this._firstActiveIndex; i <= this._lastActiveIndex; ++i) {
- var viewportElement = this._providerElement(i);
- this._contentElement.appendChild(viewportElement.element());
- this._renderedItems.push(viewportElement);
- }
- for (var i = 0; i < this._renderedItems.length; ++i)
- this._renderedItems[i].wasShown();
- }
-
- /**
- * @param {number} oldFirstActiveIndex
- * @param {number} oldLastActiveIndex
- * @param {function()} prepare
- */
- _partialViewportUpdate(oldFirstActiveIndex, oldLastActiveIndex, prepare) {
- var willBeHidden = [];
- for (var i = 0; i < this._renderedItems.length; ++i) {
- var index = oldFirstActiveIndex + i;
- if (index < this._firstActiveIndex || this._lastActiveIndex < index)
- willBeHidden.push(this._renderedItems[i]);
- }
+ _partialViewportUpdate(prepare) {
+ var orderedItemsToRender = [];
+ for (var i = this._firstActiveIndex; i <= this._lastActiveIndex; ++i)
+ orderedItemsToRender.push(this._providerElement(i));
+ var willBeHidden = this._renderedItems.filter(item => !orderedItemsToRender.includes(item));
lushnikov 2017/02/14 21:37:51 this will be faster with a Set()
luoe 2017/02/14 22:23:46 Done.
for (var i = 0; i < willBeHidden.length; ++i)
willBeHidden[i].willHide();
prepare();
for (var i = 0; i < willBeHidden.length; ++i)
willBeHidden[i].element().remove();
- this._renderedItems = [];
- var anchor = this._contentElement.firstChild;
var wasShown = [];
- for (var i = this._firstActiveIndex; i <= this._lastActiveIndex; ++i) {
- var viewportElement = this._providerElement(i);
+ var anchor = this._contentElement.firstChild;
+ for (var i = 0; i < orderedItemsToRender.length; ++i) {
+ var viewportElement = orderedItemsToRender[i];
var element = viewportElement.element();
if (element !== anchor) {
einbinder 2017/02/14 19:08:46 It looks like wasShown can be called on things tha
lushnikov 2017/02/14 21:37:51 That's a good call. We probably want calls willHid
luoe 2017/02/14 22:23:46 Good point, there's no need for wasShown if the el
luoe 2017/02/14 22:23:46 Done.
this._contentElement.insertBefore(element, anchor);
@@ -426,10 +397,10 @@ Console.ConsoleViewport = class {
} else {
anchor = anchor.nextSibling;
}
- this._renderedItems.push(viewportElement);
}
for (var i = 0; i < wasShown.length; ++i)
wasShown[i].wasShown();
+ this._renderedItems = orderedItemsToRender;
}
/**
« no previous file with comments | « third_party/WebKit/LayoutTests/inspector/console/console-viewport-control-expected.txt ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698