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

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

Issue 2745283002: DevTools: merge coverage segments from different instances of same URL (Closed)
Patch Set: review comments addressed Created 3 years, 9 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2017 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 Coverage.CoverageListView = class extends UI.VBox { 5 Coverage.CoverageListView = class extends UI.VBox {
6 constructor() { 6 constructor() {
7 super(true); 7 super(true);
8 this.registerRequiredCSS('coverage/coverageListView.css'); 8 this.registerRequiredCSS('coverage/coverageListView.css');
9 var columns = [ 9 var columns = [
10 {id: 'url', title: Common.UIString('URL'), width: '300px', fixedWidth: fal se, sortable: true}, 10 {id: 'url', title: Common.UIString('URL'), width: '300px', fixedWidth: fal se, sortable: true},
(...skipping 21 matching lines...) Expand all
32 this._dataGrid.element.classList.add('flex-auto'); 32 this._dataGrid.element.classList.add('flex-auto');
33 this._dataGrid.element.addEventListener('dblclick', this._onDoubleClick.bind (this), false); 33 this._dataGrid.element.addEventListener('dblclick', this._onDoubleClick.bind (this), false);
34 this._dataGrid.element.addEventListener('keydown', this._onKeyDown.bind(this ), false); 34 this._dataGrid.element.addEventListener('keydown', this._onKeyDown.bind(this ), false);
35 this._dataGrid.addEventListener(DataGrid.DataGrid.Events.SortingChanged, thi s._sortingChanged, this); 35 this._dataGrid.addEventListener(DataGrid.DataGrid.Events.SortingChanged, thi s._sortingChanged, this);
36 36
37 var dataGridWidget = this._dataGrid.asWidget(); 37 var dataGridWidget = this._dataGrid.asWidget();
38 dataGridWidget.show(this.contentElement); 38 dataGridWidget.show(this.contentElement);
39 } 39 }
40 40
41 /** 41 /**
42 * @param {!Array<!Coverage.CoverageInfo>} coverageInfo 42 * @param {!Array<!Coverage.URLCoverageInfo>} coverageInfo
43 */ 43 */
44 update(coverageInfo) { 44 update(coverageInfo) {
45 var maxSize = coverageInfo.reduce((acc, entry) => Math.max(acc, entry.size), 0); 45 var maxSize = coverageInfo.reduce((acc, entry) => Math.max(acc, entry.size() ), 0);
46 var rootNode = this._dataGrid.rootNode(); 46 var rootNode = this._dataGrid.rootNode();
47 rootNode.removeChildren(); 47 rootNode.removeChildren();
48 for (var entry of coverageInfo) 48 for (var entry of coverageInfo)
49 rootNode.appendChild(new Coverage.CoverageListView.GridNode(entry, maxSize )); 49 rootNode.appendChild(new Coverage.CoverageListView.GridNode(entry, maxSize ));
50 this._sortingChanged(); 50 this._sortingChanged();
51 } 51 }
52 52
53 /** 53 /**
54 * @param {!Event} event 54 * @param {!Event} event
55 */ 55 */
(...skipping 14 matching lines...) Expand all
70 this._revealSourceForNode(this._dataGrid.selectedNode); 70 this._revealSourceForNode(this._dataGrid.selectedNode);
71 } 71 }
72 72
73 /** 73 /**
74 * @param {?DataGrid.DataGridNode} node 74 * @param {?DataGrid.DataGridNode} node
75 */ 75 */
76 _revealSourceForNode(node) { 76 _revealSourceForNode(node) {
77 if (!node) 77 if (!node)
78 return; 78 return;
79 var coverageInfo = /** @type {!Coverage.CoverageListView.GridNode} */ (node) ._coverageInfo; 79 var coverageInfo = /** @type {!Coverage.CoverageListView.GridNode} */ (node) ._coverageInfo;
80 var url = coverageInfo.contentProvider.contentURL(); 80 var sourceCode = Workspace.workspace.uiSourceCodeForURL(coverageInfo.url());
81 var sourceCode = Workspace.workspace.uiSourceCodeForURL(url);
82 if (!sourceCode) 81 if (!sourceCode)
83 return; 82 return;
84 Common.Revealer.reveal(sourceCode); 83 Common.Revealer.reveal(sourceCode);
85 } 84 }
86 85
87 _sortingChanged() { 86 _sortingChanged() {
88 var columnId = this._dataGrid.sortColumnId(); 87 var columnId = this._dataGrid.sortColumnId();
89 if (!columnId) 88 if (!columnId)
90 return; 89 return;
91 var sortFunction; 90 var sortFunction;
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 /** 123 /**
125 * @param {string} fieldName 124 * @param {string} fieldName
126 * @param {!DataGrid.DataGridNode} a 125 * @param {!DataGrid.DataGridNode} a
127 * @param {!DataGrid.DataGridNode} b 126 * @param {!DataGrid.DataGridNode} b
128 * @return {number} 127 * @return {number}
129 */ 128 */
130 function compareNumericField(fieldName, a, b) { 129 function compareNumericField(fieldName, a, b) {
131 var nodeA = /** @type {!Coverage.CoverageListView.GridNode} */ (a); 130 var nodeA = /** @type {!Coverage.CoverageListView.GridNode} */ (a);
132 var nodeB = /** @type {!Coverage.CoverageListView.GridNode} */ (b); 131 var nodeB = /** @type {!Coverage.CoverageListView.GridNode} */ (b);
133 132
134 return nodeA._coverageInfo[fieldName] - nodeB._coverageInfo[fieldName]; 133 return nodeA._coverageInfo[fieldName]() - nodeB._coverageInfo[fieldName]() ;
135 } 134 }
136 } 135 }
137 136
138 /** 137 /**
139 * @param {!Coverage.CoverageType} type 138 * @param {!Coverage.CoverageType} type
140 */ 139 */
141 static _typeToString(type) { 140 static _typeToString(type) {
142 var types = []; 141 var types = [];
143 if (type & Coverage.CoverageType.CSS) 142 if (type & Coverage.CoverageType.CSS)
144 types.push(Common.UIString('CSS')); 143 types.push(Common.UIString('CSS'));
145 if (type & Coverage.CoverageType.JavaScript) 144 if (type & Coverage.CoverageType.JavaScript)
146 types.push(Common.UIString('JS')); 145 types.push(Common.UIString('JS'));
147 return types.join('+'); 146 return types.join('+');
148 } 147 }
149 }; 148 };
150 149
151 Coverage.CoverageListView.GridNode = class extends DataGrid.SortableDataGridNode { 150 Coverage.CoverageListView.GridNode = class extends DataGrid.SortableDataGridNode {
152 /** 151 /**
153 * @param {!Coverage.CoverageInfo} coverageInfo 152 * @param {!Coverage.URLCoverageInfo} coverageInfo
154 * @param {number} maxSize 153 * @param {number} maxSize
155 */ 154 */
156 constructor(coverageInfo, maxSize) { 155 constructor(coverageInfo, maxSize) {
157 super(); 156 super();
158 this._coverageInfo = coverageInfo; 157 this._coverageInfo = coverageInfo;
159 this._url = coverageInfo.contentProvider.contentURL(); 158 this._url = coverageInfo.url();
160 this._displayURL = new Common.ParsedURL(this._url).displayName; 159 this._displayURL = new Common.ParsedURL(this._url).displayName;
161 this._maxSize = maxSize; 160 this._maxSize = maxSize;
162 } 161 }
163 162
164 /** 163 /**
165 * @override 164 * @override
166 * @param {string} columnId 165 * @param {string} columnId
167 * @return {!Element} 166 * @return {!Element}
168 */ 167 */
169 createCell(columnId) { 168 createCell(columnId) {
170 var cell = this.createTD(columnId); 169 var cell = this.createTD(columnId);
171 switch (columnId) { 170 switch (columnId) {
172 case 'url': 171 case 'url':
173 cell.title = this._url; 172 cell.title = this._url;
174 var outer = cell.createChild('div', 'url-outer'); 173 var outer = cell.createChild('div', 'url-outer');
175 var prefix = outer.createChild('div', 'url-prefix'); 174 var prefix = outer.createChild('div', 'url-prefix');
176 var suffix = outer.createChild('div', 'url-suffix'); 175 var suffix = outer.createChild('div', 'url-suffix');
177 var splitURL = /^(.*)(\/[^/]*)$/.exec(this._url); 176 var splitURL = /^(.*)(\/[^/]*)$/.exec(this._url);
178 prefix.textContent = splitURL ? splitURL[1] : this._url; 177 prefix.textContent = splitURL ? splitURL[1] : this._url;
179 suffix.textContent = splitURL ? splitURL[2] : ''; 178 suffix.textContent = splitURL ? splitURL[2] : '';
180 break; 179 break;
181 case 'type': 180 case 'type':
182 cell.textContent = Coverage.CoverageListView._typeToString(this._coverag eInfo.type); 181 cell.textContent = Coverage.CoverageListView._typeToString(this._coverag eInfo.type());
183 break; 182 break;
184 case 'size': 183 case 'size':
185 cell.classList.add('numeric-column'); 184 cell.classList.add('numeric-column');
186 cell.textContent = Number.withThousandsSeparator(this._coverageInfo.size || 0); 185 cell.textContent = Number.withThousandsSeparator(this._coverageInfo.size () || 0);
187 break; 186 break;
188 case 'unusedSize': 187 case 'unusedSize':
189 cell.classList.add('numeric-column'); 188 cell.classList.add('numeric-column');
190 cell.textContent = Number.withThousandsSeparator(this._coverageInfo.unus edSize || 0); 189 cell.textContent = Number.withThousandsSeparator(this._coverageInfo.unus edSize() || 0);
191 if (this._coverageInfo.size) 190 if (this._coverageInfo.size())
192 cell.title = Math.round(100 * this._coverageInfo.unusedSize / this._co verageInfo.size) + '%'; 191 cell.title = Math.round(100 * this._coverageInfo.unusedSize() / this._ coverageInfo.size()) + '%';
193 break; 192 break;
194 case 'bars': 193 case 'bars':
195 var barContainer = cell.createChild('div', 'bar-container'); 194 var barContainer = cell.createChild('div', 'bar-container');
196 var unusedSizeBar = barContainer.createChild('div', 'bar bar-unused-size '); 195 var unusedSizeBar = barContainer.createChild('div', 'bar bar-unused-size ');
197 unusedSizeBar.style.width = Math.ceil(100 * this._coverageInfo.unusedSiz e / this._maxSize) + '%'; 196 unusedSizeBar.style.width = Math.ceil(100 * this._coverageInfo.unusedSiz e() / this._maxSize) + '%';
198 var usedSizeBar = barContainer.createChild('div', 'bar bar-used-size'); 197 var usedSizeBar = barContainer.createChild('div', 'bar bar-used-size');
199 usedSizeBar.style.width = Math.ceil(100 * this._coverageInfo.usedSize / this._maxSize) + '%'; 198 usedSizeBar.style.width = Math.ceil(100 * this._coverageInfo.usedSize() / this._maxSize) + '%';
200 var sizeBar = barContainer.createChild('div', 'bar bar-slack-size'); 199 var sizeBar = barContainer.createChild('div', 'bar bar-slack-size');
201 var slackSize = this._coverageInfo.size - this._coverageInfo.unusedSize - this._coverageInfo.usedSize; 200 var slackSize = this._coverageInfo.size() - this._coverageInfo.unusedSiz e() - this._coverageInfo.usedSize();
202 sizeBar.style.width = Math.ceil(100 * slackSize / this._maxSize) + '%'; 201 sizeBar.style.width = Math.ceil(100 * slackSize / this._maxSize) + '%';
203 } 202 }
204 return cell; 203 return cell;
205 } 204 }
206 }; 205 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698