Chromium Code Reviews| 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; |
| } |
| /** |