Changeset 196792 in webkit
- Timestamp:
- Feb 18, 2016 6:44:34 PM (8 years ago)
- Location:
- trunk/Websites/perf.webkit.org
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Websites/perf.webkit.org/ChangeLog
r196787 r196792 1 2016-02-18 Ryosuke Niwa <rniwa@webkit.org> 2 3 The rows in the analysis results table should be expandable 4 https://bugs.webkit.org/show_bug.cgi?id=154427 5 6 Reviewed by Chris Dumez. 7 8 Added "(Expand)" link between rows that have hidden points. Upon click it inserts the hidden rows. 9 10 We insert around five rows at a time when there are hundreds of hidden points but we also avoid leaving 11 behind expandable rows of less than two rows. 12 13 Also fixed a bug in CustomizableTestGroupForm that getElementsById would throw in the shipping Safari 14 because getElementsById doesn't exist on Element.prototype by using class name instead. 15 16 * public/v3/components/analysis-results-viewer.js: 17 (AnalysisResultsViewer): 18 (AnalysisResultsViewer.prototype.setCurrentTestGroup): Removed superfluous call to render(). 19 (AnalysisResultsViewer.prototype.setPoints): Always show the start and the end points. 20 (AnalysisResultsViewer.prototype.buildRowGroups): 21 (AnalysisResultsViewer.prototype._buildRowsForPointsAndTestGroups): Add an instance of ExpandableRow which 22 shows a "(Expand)" link to show hidden rows here. 23 (AnalysisResultsViewer.prototype._expandBetween): Added. Expands rows between two points. 24 (AnalysisResultsViewer.cssTemplate): Added rules for "(Expand)" links. 25 (AnalysisResultsViewer.ExpandableRow): Added. 26 (AnalysisResultsViewer.ExpandableRow.prototype.resultContent): Added. Overrides what's in the results column. 27 (AnalysisResultsViewer.ExpandableRow.prototype.heading): Added. Generates "(Expand)" link. 28 29 * public/v3/components/customizable-test-group-form.js: 30 (CustomizableTestGroupForm.prototype._computeRootSetMap): Use getElementsByClassName instead of 31 getElementById. 32 (CustomizableTestGroupForm.prototype._classForLabelAndRepository): Renamed from _idForLabelAndRepository. 33 (CustomizableTestGroupForm._constructRevisionRadioButtons): Set class name instead of id. 34 35 * public/v3/components/results-table.js: 36 (ResultsTable.prototype.render): Don't generate radio buttons to select a row when root set is missing; 37 e.g. for rows that show "(Expand)" links. 38 1 39 2016-02-18 Ryosuke Niwa <rniwa@webkit.org> 2 40 -
trunk/Websites/perf.webkit.org/public/v3/components/analysis-results-viewer.js
r196463 r196792 12 12 this._additionalHeading = null; 13 13 this._testGroupCallback = null; 14 this._expandedPoints = new Set; 14 15 } 15 16 … … 19 20 { 20 21 this._currentTestGroup = testGroup; 21 this.render();22 22 } 23 23 … … 27 27 this._endPoint = endPoint; 28 28 this._shouldRenderTable = true; 29 this._expandedPoints.clear(); 30 this._expandedPoints.add(startPoint); 31 this._expandedPoints.add(endPoint); 29 32 } 30 33 … … 92 95 rowList.forEach(function (row, rowIndex) { 93 96 var matchingRootSets = rowToMatchingRootSets.get(row); 97 if (!matchingRootSets) { 98 console.assert(row instanceof AnalysisResultsViewer.ExpandableRow); 99 return; 100 } 101 94 102 for (var entry of matchingRootSets) { 95 103 var testGroup = entry.testGroup(); … … 145 153 var rootSetsWithPoints = new Set; 146 154 var pointIndex = 0; 155 var previousPoint; 147 156 for (var point = this._startPoint; point && point != pointAfterEnd; point = point.series.nextPoint(point), pointIndex++) { 148 157 var rootSetInPoint = point.rootSet(); … … 155 164 } 156 165 157 if (!matchingRootSets.length && point != this._startPoint && point != this._endPoint) 166 var hasMatchingTestGroup = !!matchingRootSets.length; 167 if (!hasMatchingTestGroup && !this._expandedPoints.has(point)) 158 168 continue; 159 169 160 170 var row = new ResultsTableRow(pointIndex.toString(), rootSetInPoint); 161 171 row.setResult(point); 172 173 if (previousPoint && previousPoint.series.nextPoint(previousPoint) != point) 174 rowList.push(new AnalysisResultsViewer.ExpandableRow(this._expandBetween.bind(this, previousPoint, point))); 175 previousPoint = point; 162 176 163 177 rowToMatchingRootSets.set(row, matchingRootSets); … … 171 185 for (var i = 0; i < rowList.length; i++) { 172 186 var row = rowList[i]; 173 if ( row.rootSet().equals(entry.rootSet())) {187 if (!(row instanceof AnalysisResultsViewer.ExpandableRow) && row.rootSet().equals(entry.rootSet())) { 174 188 rowToMatchingRootSets.get(row).push(entry); 175 189 return; … … 179 193 var groupTime = entry.rootSet().latestCommitTime(); 180 194 for (var i = 0; i < rowList.length; i++) { 195 if (rowList[i] instanceof AnalysisResultsViewer.ExpandableRow) 196 continue; 197 181 198 var rowTime = rowList[i].rootSet().latestCommitTime(); 182 199 if (rowTime > groupTime) { … … 191 208 var repositoriesInNewRow = entry.rootSet().repositories(); 192 209 for (var j = i; j < rowList.length; j++) { 210 if (rowList[j] instanceof AnalysisResultsViewer.ExpandableRow) 211 continue; 193 212 for (var repository of repositoriesInNewRow) { 194 213 var newCommit = entry.rootSet().commitForRepository(repository); … … 223 242 this._testGroupCallback(testGroup); 224 243 } 244 245 _expandBetween(pointBeforeExpansion, pointAfterExpansion) 246 { 247 console.assert(pointBeforeExpansion.series == pointAfterExpansion.series); 248 var indexBeforeStart = pointBeforeExpansion.seriesIndex; 249 var indexAfterEnd = pointAfterExpansion.seriesIndex; 250 console.assert(indexBeforeStart + 1 < indexAfterEnd); 251 252 var series = pointAfterExpansion.series; 253 var increment = Math.ceil((indexAfterEnd - indexBeforeStart) / 5); 254 if (increment < 3) 255 increment = 1; 256 for (var i = indexBeforeStart + 1; i < indexAfterEnd; i += increment) 257 this._expandedPoints.add(series.findPointByIndex(i)); 258 this._shouldRenderTable = true; 259 this.render(); 260 } 225 261 226 262 static htmlTemplate() … … 285 321 background: rgba(102, 102, 255, 0.5); 286 322 } 323 324 .analysis-view .point-label-with-expansion-link { 325 font-size: 0.7rem; 326 } 327 .analysis-view .point-label-with-expansion-link a { 328 color: #999; 329 text-decoration: none; 330 } 287 331 `; 288 332 } … … 290 334 291 335 ComponentBase.defineElement('analysis-results-viewer', AnalysisResultsViewer); 336 337 AnalysisResultsViewer.ExpandableRow = class extends ResultsTableRow { 338 constructor(callback) 339 { 340 super(null, null); 341 this._callback = callback; 342 } 343 344 resultContent() { return ''; } 345 346 heading() 347 { 348 return ComponentBase.createElement('span', {class: 'point-label-with-expansion-link'}, [ 349 ComponentBase.createLink('(Expand)', 'Expand', this._callback), 350 ]); 351 } 352 } 292 353 293 354 AnalysisResultsViewer.RootSetInTestGroup = class { -
trunk/Websites/perf.webkit.org/public/v3/components/customizable-test-group-form.js
r196787 r196792 43 43 var customRootSet = new CustomRootSet; 44 44 for (var repository of this._renderedRepositorylist) { 45 var id = CustomizableTestGroupForm._idForLabelAndRepository(label, repository);46 var revision = this.content().getElement ById(id).value;45 var className = CustomizableTestGroupForm._classForLabelAndRepository(label, repository); 46 var revision = this.content().getElementsByClassName(className)[0].value; 47 47 console.assert(revision); 48 48 if (revision) … … 93 93 } 94 94 95 static _ idForLabelAndRepository(label, repository) { return label + '-' + repository.id(); }95 static _classForLabelAndRepository(label, repository) { return label + '-' + repository.id(); } 96 96 97 97 static _constructRevisionRadioButtons(rootSetMap, repository, rowLabel) 98 98 { 99 var id = this._idForLabelAndRepository(rowLabel, repository);100 var groupName = id+ '-group';99 var className = this._classForLabelAndRepository(rowLabel, repository); 100 var groupName = className + '-group'; 101 101 var element = ComponentBase.createElement; 102 var revisionEditor = element('input', { id: id});102 var revisionEditor = element('input', {class: className}); 103 103 104 104 var nodes = []; -
trunk/Websites/perf.webkit.org/public/v3/components/results-table.js
r196708 r196792 33 33 var extraRepositories = []; 34 34 var repositoryList = this._computeRepositoryList(rowGroups, extraRepositories); 35 36 this._selectedRange = {}; 35 37 36 38 var barGraphGroup = new BarGraphGroup(this._valueFormatter); … … 47 49 48 50 if (self._rangeSelectorLabels) { 49 self._selectedRange = {}; 50 for (var label of self._rangeSelectorLabels) 51 cells.push(element('td', element('input', 52 {type: 'radio', name: label, onchange: self._rangeSelectorClicked.bind(self, label, row)}))); 51 for (var label of self._rangeSelectorLabels) { 52 var content = ''; 53 if (row.rootSet()) { 54 content = element('input', 55 {type: 'radio', name: label, onchange: self._rangeSelectorClicked.bind(self, label, row)}); 56 } 57 cells.push(element('td', content)); 58 } 53 59 } 54 60
Note: See TracChangeset
for help on using the changeset viewer.