Chromium Code Reviews| Index: third_party/WebKit/Source/devtools/front_end/coverage/CoverageListView.js |
| diff --git a/third_party/WebKit/Source/devtools/front_end/coverage/CoverageListView.js b/third_party/WebKit/Source/devtools/front_end/coverage/CoverageListView.js |
| index a7fe3ff13599833b921777cf90c0a0cb8b795f7e..4840786c842746dd543e7b4edcaa0d27521fdd3c 100644 |
| --- a/third_party/WebKit/Source/devtools/front_end/coverage/CoverageListView.js |
| +++ b/third_party/WebKit/Source/devtools/front_end/coverage/CoverageListView.js |
| @@ -5,6 +5,8 @@ |
| Coverage.CoverageListView = class extends UI.VBox { |
| constructor() { |
| super(true); |
| + /** @type {!Map<!Coverage.URLCoverageInfo, !Coverage.CoverageListView.GridNode>} */ |
| + this._nodeForCoverageInfo = new Map(); |
| this.registerRequiredCSS('coverage/coverageListView.css'); |
| var columns = [ |
| {id: 'url', title: Common.UIString('URL'), width: '300px', fixedWidth: false, sortable: true}, |
| @@ -42,12 +44,27 @@ Coverage.CoverageListView = class extends UI.VBox { |
| * @param {!Array<!Coverage.URLCoverageInfo>} coverageInfo |
| */ |
| update(coverageInfo) { |
| + var hadUpdates = false; |
| var maxSize = coverageInfo.reduce((acc, entry) => Math.max(acc, entry.size()), 0); |
| var rootNode = this._dataGrid.rootNode(); |
| - rootNode.removeChildren(); |
| - for (var entry of coverageInfo) |
| - rootNode.appendChild(new Coverage.CoverageListView.GridNode(entry, maxSize)); |
| - this._sortingChanged(); |
| + for (var entry of coverageInfo) { |
| + var node = this._nodeForCoverageInfo.get(entry); |
| + if (node) { |
| + hadUpdates = node._refreshIfNeeded(maxSize) || hadUpdates; |
| + continue; |
| + } |
| + hadUpdates = true; |
| + node = new Coverage.CoverageListView.GridNode(entry, maxSize); |
| + this._nodeForCoverageInfo.set(entry, node); |
| + rootNode.appendChild(node); |
| + } |
| + if (hadUpdates) |
| + this._sortingChanged(); |
| + } |
| + |
| + reset() { |
| + this._nodeForCoverageInfo.clear(); |
| + this._dataGrid.rootNode().removeChildren(); |
| } |
| /** |
| @@ -135,7 +152,7 @@ Coverage.CoverageListView = class extends UI.VBox { |
| var nodeA = /** @type {!Coverage.CoverageListView.GridNode} */ (a); |
| var nodeB = /** @type {!Coverage.CoverageListView.GridNode} */ (b); |
| - return nodeA._coverageInfo[fieldName]() - nodeB._coverageInfo[fieldName](); |
| + return nodeA._coverageInfo[fieldName]() - nodeB._coverageInfo[fieldName]() || compareURL(a, b); |
| } |
| /** |
| @@ -148,7 +165,7 @@ Coverage.CoverageListView = class extends UI.VBox { |
| var nodeB = /** @type {!Coverage.CoverageListView.GridNode} */ (b); |
| var typeA = Coverage.CoverageListView._typeToString(nodeA._coverageInfo.type()); |
| var typeB = Coverage.CoverageListView._typeToString(nodeB._coverageInfo.type()); |
| - return typeA.localeCompare(typeB); |
| + return typeA.localeCompare(typeB) || compareURL(a, b); |
| } |
| } |
| @@ -173,12 +190,26 @@ Coverage.CoverageListView.GridNode = class extends DataGrid.SortableDataGridNode |
| constructor(coverageInfo, maxSize) { |
| super(); |
| this._coverageInfo = coverageInfo; |
| + /** @type {number} */ |
|
alph
2017/05/05 19:18:08
|undefined
|
| + this._lastUsedSize; |
| this._url = coverageInfo.url(); |
| this._displayURL = new Common.ParsedURL(this._url).displayName; |
| this._maxSize = maxSize; |
| } |
| /** |
| + * param {number} maxSize |
|
alph
2017/05/05 19:18:08
@param
|
| + */ |
|
alph
2017/05/05 19:18:08
@return
|
| + _refreshIfNeeded(maxSize) { |
| + if (this._lastUsedSize === this._coverageInfo.usedSize() && maxSize === this._maxSize) |
| + return false; |
| + this._lastUsedSize = this._coverageInfo.usedSize(); |
| + this._maxSize = maxSize; |
| + this.refresh(); |
| + return true; |
| + } |
| + |
| + /** |
| * @override |
| * @param {string} columnId |
| * @return {!Element} |