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

Unified Diff: third_party/WebKit/Source/devtools/front_end/coverage/CoverageListView.js

Issue 2865573003: DevTools: support live coverage (Closed)
Patch Set: minor polish on corner cases Created 3 years, 7 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
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..654120e1170d3ce491f6a10b433574e58007363a 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,27 @@ Coverage.CoverageListView.GridNode = class extends DataGrid.SortableDataGridNode
constructor(coverageInfo, maxSize) {
super();
this._coverageInfo = coverageInfo;
+ /** @type {number|undefined} */
+ this._lastUsedSize;
this._url = coverageInfo.url();
this._displayURL = new Common.ParsedURL(this._url).displayName;
this._maxSize = maxSize;
}
/**
+ * @param {number} maxSize
+ * @return {boolean}
+ */
+ _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}

Powered by Google App Engine
This is Rietveld 408576698