| OLD | NEW |
| 1 <!-- | 1 <!-- |
| 2 Copyright 2014 The Chromium Authors. All rights reserved. | 2 Copyright 2014 The Chromium Authors. All rights reserved. |
| 3 Use of this source code is governed by a BSD-style license that can be | 3 Use of this source code is governed by a BSD-style license that can be |
| 4 found in the LICENSE file. | 4 found in the LICENSE file. |
| 5 --> | 5 --> |
| 6 | 6 |
| 7 <link rel="import" href="ct-builder.html"> | 7 <link rel="import" href="ct-builder.html"> |
| 8 | 8 |
| 9 <!-- Table of failure types, listing the failing builders for each type. --> | 9 <!-- Table of failure types, listing the failing builders for each type. --> |
| 10 <polymer-element name="ct-builder-grid" attributes="failures"> | 10 <polymer-element name="ct-builder-grid" attributes="failures builderLatestRevisi
ons"> |
| 11 <template> | 11 <template> |
| 12 <style> | 12 <style> |
| 13 table { | 13 table { |
| 14 border-collapse: collapse; | 14 border-collapse: collapse; |
| 15 font-size: 11px; | 15 font-size: 11px; |
| 16 table-layout: fixed; | 16 table-layout: fixed; |
| 17 width: 350px; | 17 width: 350px; |
| 18 } | 18 } |
| 19 | 19 |
| 20 tbody td:first-child { | 20 tbody td:first-child { |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 92 </template> | 92 </template> |
| 93 </td> | 93 </td> |
| 94 </tr> | 94 </tr> |
| 95 </template> | 95 </template> |
| 96 </tbody> | 96 </tbody> |
| 97 </table> | 97 </table> |
| 98 </template> | 98 </template> |
| 99 <script> | 99 <script> |
| 100 Polymer({ | 100 Polymer({ |
| 101 failures: [], | 101 failures: [], |
| 102 builderLatestRevisions: {}, |
| 102 resultTypes: {}, | 103 resultTypes: {}, |
| 103 | 104 |
| 104 keys: function(obj) { | 105 keys: function(obj) { |
| 105 return Object.keys(obj).sort(); | 106 return Object.keys(obj).sort(); |
| 106 }, | 107 }, |
| 107 | 108 |
| 108 resultTypeKeys: function(obj) { | 109 resultTypeKeys: function(obj) { |
| 109 // Get the keys, but the BUILDING type should be last. | 110 // Get the keys, but the BUILDING type should be last. |
| 110 var keys = this.keys(obj); | 111 var keys = this.keys(obj); |
| 111 var index = keys.indexOf('BUILDING'); | 112 var index = keys.indexOf('BUILDING'); |
| 112 if (index != -1) { | 113 if (index != -1) { |
| 113 var buildingResult = keys.splice(index, 1); | 114 var buildingResult = keys.splice(index, 1); |
| 114 keys.push(buildingResult[0]); | 115 keys.push(buildingResult[0]); |
| 115 } | 116 } |
| 116 return keys; | 117 return keys; |
| 117 }, | 118 }, |
| 118 | 119 |
| 119 failuresChanged: function() { | 120 failuresChanged: function() { |
| 120 // Create a set of builders for each result type (e.g., text, crash). | 121 // Create a set of builders for each result type (e.g., text, crash). |
| 121 this.resultTypes = {}; | 122 this.resultTypes = {}; |
| 122 var passingRevisions = []; | 123 var passingRevisions = []; |
| 123 this.failures.forEach(function(failure) { | 124 this.failures.forEach(function(failure) { |
| 124 passingRevisions.push(failure.newestPassingRevision); | 125 passingRevisions.push(failure.newestPassingRevision); |
| 125 var results = failure.resultNodesByBuilder; | 126 var results = failure.resultNodesByBuilder; |
| 126 Object.keys(results, (function(builderName) { | 127 Object.keys(results, (function(builder) { |
| 127 var result = results[builderName]; | 128 var result = results[builder]; |
| 128 if (!result.is_unexpected) | 129 if (!result.is_unexpected) |
| 129 return; | 130 return; |
| 130 | 131 |
| 131 if (!Object.has(this.resultTypes, result.actual)) | 132 if (!Object.has(this.resultTypes, result.actual)) |
| 132 this.resultTypes[result.actual] = {}; | 133 this.resultTypes[result.actual] = {}; |
| 133 this.resultTypes[result.actual][builderName] = | 134 this.resultTypes[result.actual][builder] = |
| 134 config.builders[builderName]; | 135 config.builders[builder]; |
| 135 }).bind(this)); | 136 }).bind(this)); |
| 136 }, this); | 137 }, this); |
| 137 | 138 |
| 138 var buildingType = this._getBuilding(passingRevisions); | 139 var buildingType = this._getBuilding(passingRevisions); |
| 139 if (!Object.isEmpty(buildingType)) | 140 if (!Object.isEmpty(buildingType)) |
| 140 this.resultTypes['BUILDING'] = buildingType; | 141 this.resultTypes['BUILDING'] = buildingType; |
| 141 }, | 142 }, |
| 142 | 143 |
| 144 _buildersInFlightForRevision: function(revision) { |
| 145 return Object.keys(this.builderLatestRevisions).filter(function(builder)
{ |
| 146 // FIXME: This should look at all chromium/v8/etc revisions as well. |
| 147 // Is this concept of "building" builders even useful as is? |
| 148 return parseInt(this.builderLatestRevisions[builder].blink, 10) < revi
sion; |
| 149 }.bind(this)); |
| 150 }, |
| 151 |
| 143 _getBuilding: function(revisions) { | 152 _getBuilding: function(revisions) { |
| 144 var building = {}; | 153 var building = {}; |
| 145 var builderNames = []; | 154 var builders = []; |
| 146 revisions.unique().forEach(function(revision) { | 155 revisions.unique().forEach(function(revision) { |
| 147 builderNames.push.apply(builderNames, | 156 builders.push.apply(builders, this._buildersInFlightForRevision(revisi
on + 1)); |
| 148 Object.keys(model.buildersInFlightForRevision(revision + 1))); | 157 }.bind(this)); |
| 158 |
| 159 builders.unique().forEach(function(builder) { |
| 160 if (!config.builders[builder]) |
| 161 return; |
| 162 building[builder] = {'debug': config.builders[builder].debug}; |
| 149 }); | 163 }); |
| 150 builderNames.unique().forEach(function(builderName) { | 164 |
| 151 if (!config.builders[builderName]) | |
| 152 return; | |
| 153 building[builderName] = | |
| 154 {'debug': config.builders[builderName].debug}; | |
| 155 }); | |
| 156 return building; | 165 return building; |
| 157 }, | 166 }, |
| 158 }); | 167 }); |
| 159 </script> | 168 </script> |
| 160 </polymer-element> | 169 </polymer-element> |
| OLD | NEW |