Unreviewed chromium windows rebaseline for r119456.
[WebKit-https.git] / Tools / TestResultServer / static-dashboards / builders.js
1 // Copyright (C) 2012 Google Inc. All rights reserved.
2 //
3 // Redistribution and use in source and binary forms, with or without
4 // modification, are permitted provided that the following conditions are
5 // met:
6 //
7 //    * Redistributions of source code must retain the above copyright
8 // notice, this list of conditions and the following disclaimer.
9 //    * Redistributions in binary form must reproduce the above
10 // copyright notice, this list of conditions and the following disclaimer
11 // in the documentation and/or other materials provided with the
12 // distribution.
13 //    * Neither the name of Google Inc. nor the names of its
14 // contributors may be used to endorse or promote products derived from
15 // this software without specific prior written permission.
16 //
17 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
29 // @fileoverview File that lists builders, their masters, and logical groupings
30 // of them.
31
32 function BuilderMaster(name, basePath)
33 {
34     this.name = name;
35     this.basePath = basePath;
36 }
37
38 BuilderMaster.prototype.logPath = function(builder, buildNumber)
39 {
40     return this.basePath + 'builders/' + builder + '/builds/' + buildNumber;
41 };
42
43 BuilderMaster.prototype.builderJsonPath = function()
44 {
45     return this.basePath + 'json/builders';
46 };
47
48 CHROMIUM_BUILDER_MASTER = new BuilderMaster('Chromium', 'http://build.chromium.org/p/chromium/');
49 CHROMIUMOS_BUILDER_MASTER = new BuilderMaster('ChromiumChromiumOS', 'http://build.chromium.org/p/chromium.chromiumos/');
50 CHROMIUM_GPU_BUILDER_MASTER = new BuilderMaster('ChromiumGPU', 'http://build.chromium.org/p/chromium.gpu/');
51 CHROMIUM_GPU_FYI_BUILDER_MASTER = new BuilderMaster('ChromiumGPUFYI', 'http://build.chromium.org/p/chromium.gpu.fyi/');
52 CHROMIUM_WEBKIT_BUILDER_MASTER = new BuilderMaster('ChromiumWebkit', 'http://build.chromium.org/p/chromium.webkit/');
53 WEBKIT_BUILDER_MASTER = new BuilderMaster('webkit.org', 'http://build.webkit.org/');
54
55 var LEGACY_BUILDER_MASTERS_TO_GROUPS = {
56     'Chromium': '@DEPS - chromium.org',
57     'ChromiumChromiumOS': '@DEPS CrOS - chromium.org',
58     'ChromiumGPU': '@DEPS - chromium.org',
59     'ChromiumGPUFYI': '@DEPS FYI - chromium.org',
60     'ChromiumWebkit': '@ToT - chromium.org',
61     'webkit.org': '@ToT - webkit.org'
62 };
63
64 function BuilderGroup(isToTWebKit, builders)
65 {
66     this.isToTWebKit = isToTWebKit;
67     // Map of builderName (the name shown in the waterfall) to builderPath (the
68     // path used in the builder's URL)
69     this.builders = {};
70     builders.forEach(function(builderAndFlags) {
71         var builder = builderAndFlags[0];
72         var flags = builderAndFlags[1];
73
74         this.builders[builder] = builder.replace(/[ .()]/g, '_');
75         if (flags & BuilderGroup.DEFAULT_BUILDER)
76             this.defaultBuilder = builder;
77     }, this);
78 }
79
80 BuilderGroup.prototype.setup = function()
81 {
82     // FIXME: instead of copying these to globals, it would be better if
83     // the rest of the code read things from the BuilderGroup instance directly
84     g_defaultBuilderName = this.defaultBuilder;
85     g_builders = this.builders;
86 };
87
88 BuilderGroup.TOT_WEBKIT = true;
89 BuilderGroup.DEPS_WEBKIT = false;
90 BuilderGroup.DEFAULT_BUILDER = 1 << 1;
91
92 var BUILDER_TO_MASTER = {};
93 function associateBuildersWithMaster(builders, master)
94 {
95     builders.forEach(function(builderAndFlags) {
96         var builder = builderAndFlags[0];
97         BUILDER_TO_MASTER[builder] = master;
98     });
99 }
100
101 function requestBuilderList(builderGroups, builderFilter, master, groupName, groupEnum)
102 {
103     var onLoad = partial(onBuilderListLoad, builderGroups, builderFilter, master, groupName, groupEnum);
104     var xhr = new XMLHttpRequest();
105     var url = master.builderJsonPath();
106     xhr.open('GET', url, true);
107     xhr.onload = function() {
108         if (xhr.status == 200)
109             onLoad(JSON.parse(xhr.response));
110         else
111             onErrorLoadingBuilderList(url);
112     };
113     xhr.onerror = function() { onErrorLoadingBuilderList(url); };
114     xhr.send();
115 }
116
117 function isChromiumDepsGpuTestRunner(builder)
118 {
119     return true;
120 }
121
122 function isChromiumDepsFyiGpuTestRunner(builder)
123 {
124     // FIXME: This is kind of wonky, but there's not really a better pattern.
125     return builder.indexOf('(') != -1;
126 }
127
128 function isChromiumTipOfTreeGpuTestRunner(builder)
129 {
130     return builder.indexOf('GPU') != -1;
131 }
132
133 function isWebkitTestRunner(builder)
134 {
135     if (builder.indexOf('Tests') != -1) {
136         // Apple Windows bots still run old-run-webkit-tests, so they don't upload data.
137         return builder.indexOf('Windows') == -1 || (builder.indexOf('Qt') != -1 && builder.indexOf('Chromium') != -1);
138     }
139     return builder.indexOf('GTK') != -1 || builder == 'Qt Linux Release';
140 }
141
142 function isChromiumWebkitTipOfTreeTestRunner(builder)
143 {
144     return builder.indexOf('Webkit') != -1 && builder.indexOf('Builder') == -1 && builder.indexOf('(deps)') == -1 && builder.indexOf('ASAN') == -1;
145 }
146
147 function isChromiumWebkitDepsTestRunner(builder)
148 {
149     return builder.indexOf('Webkit') != -1 && builder.indexOf('Builder') == -1 && builder.indexOf('(deps)') != -1;
150 }
151
152 function isChromiumDepsGTestRunner(builder)
153 {
154     return builder.indexOf('Tests') != -1 && builder.indexOf('Chrome Frame') == -1;
155 }
156
157 function isChromiumDepsCrosGTestRunner(builder)
158 {
159     return builder.indexOf('Tests') != -1;
160 }
161
162 function isChromiumTipOfTreeGTestRunner(builder)
163 {
164     return !isChromiumTipOfTreeGpuTestRunner(builder) && builder.indexOf('Builder') == -1 && builder.indexOf('Perf') == -1 &&
165          builder.indexOf('Webkit') == -1 && builder.indexOf('Valgrind') == -1 && builder.indexOf('Chrome Frame') == -1;
166 }
167
168 function generateBuildersFromBuilderList(builderList, filter)
169 {
170     return builderList.filter(filter).map(function(tester, index) {
171         var builder = [tester];
172         if (!index)
173             builder.push(BuilderGroup.DEFAULT_BUILDER);
174         return builder;
175     });
176 }
177
178 function onBuilderListLoad(builderGroups, builderFilter, master, groupName, groupEnum, json)
179 {
180     var builders = generateBuildersFromBuilderList(Object.keys(json), builderFilter);
181     associateBuildersWithMaster(builders, master);
182     builderGroups[groupName] = new BuilderGroup(groupEnum, builders);
183     g_handleBuildersListLoaded();
184 }
185
186 function onErrorLoadingBuilderList(url)
187 {
188     alert('Could not load list of builders from ' + url + '. Try reloading.');
189 }
190
191 function loadBuildersList(group, testType) {
192     if (testType == 'gpu_tests') {
193         switch(group) {
194         case '@DEPS - chromium.org':
195             requestBuilderList(CHROMIUM_GPU_TESTS_BUILDER_GROUPS, isChromiumDepsGpuTestRunner, CHROMIUM_GPU_BUILDER_MASTER, group, BuilderGroup.DEPS_WEBKIT);
196             break;
197
198         case '@DEPS FYI - chromium.org':
199             requestBuilderList(CHROMIUM_GPU_TESTS_BUILDER_GROUPS, isChromiumDepsFyiGpuTestRunner, CHROMIUM_GPU_FYI_BUILDER_MASTER, group, BuilderGroup.DEPS_WEBKIT);
200             break;
201
202         case '@ToT - chromium.org':
203             requestBuilderList(CHROMIUM_GPU_TESTS_BUILDER_GROUPS, isChromiumTipOfTreeGpuTestRunner, CHROMIUM_WEBKIT_BUILDER_MASTER, group, BuilderGroup.TOT_WEBKIT);
204             break;
205         }
206     } else if (testType == 'layout-tests') {
207         switch(group) {
208         case '@ToT - chromium.org':
209             requestBuilderList(LAYOUT_TESTS_BUILDER_GROUPS, isChromiumWebkitTipOfTreeTestRunner, CHROMIUM_WEBKIT_BUILDER_MASTER, group, BuilderGroup.TOT_WEBKIT);
210             break;
211
212         case '@ToT - webkit.org':
213             requestBuilderList(LAYOUT_TESTS_BUILDER_GROUPS, isWebkitTestRunner, WEBKIT_BUILDER_MASTER, group, BuilderGroup.TOT_WEBKIT);
214             break;
215
216         case '@DEPS - chromium.org':
217             requestBuilderList(LAYOUT_TESTS_BUILDER_GROUPS, isChromiumWebkitDepsTestRunner, CHROMIUM_WEBKIT_BUILDER_MASTER, group, BuilderGroup.DEPS_WEBKIT);
218             break;
219         }
220     } else {
221         switch(group) {
222         case '@DEPS - chromium.org':
223             requestBuilderList(CHROMIUM_GTESTS_BUILDER_GROUPS, isChromiumDepsGTestRunner, CHROMIUM_BUILDER_MASTER, group, BuilderGroup.DEPS_WEBKIT);
224             break;
225
226         case '@DEPS CrOS - chromium.org':
227             requestBuilderList(CHROMIUM_GTESTS_BUILDER_GROUPS, isChromiumDepsCrosGTestRunner, CHROMIUMOS_BUILDER_MASTER, group, BuilderGroup.DEPS_WEBKIT);
228             break;
229
230         case '@ToT - chromium.org':
231             requestBuilderList(CHROMIUM_GTESTS_BUILDER_GROUPS, isChromiumTipOfTreeGTestRunner, CHROMIUM_WEBKIT_BUILDER_MASTER, group, BuilderGroup.TOT_WEBKIT);
232             break;
233         }
234     }
235 }
236
237 var LAYOUT_TESTS_BUILDER_GROUPS = {
238     '@ToT - chromium.org': null,
239     '@ToT - webkit.org': null,
240     '@DEPS - chromium.org': null,
241 };
242
243 var CHROMIUM_GPU_TESTS_BUILDER_GROUPS = {
244     '@DEPS - chromium.org': null,
245     '@DEPS FYI - chromium.org': null,
246     '@ToT - chromium.org': null,
247 };
248
249 var CHROMIUM_GTESTS_BUILDER_GROUPS = {
250     '@DEPS - chromium.org': null,
251     '@DEPS CrOS - chromium.org': null,
252     '@ToT - chromium.org': null,
253 };