Generate a list of builders/test suites from the buildbot json
authorojan@chromium.org <ojan@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 20 Nov 2012 19:58:45 +0000 (19:58 +0000)
committerojan@chromium.org <ojan@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 20 Nov 2012 19:58:45 +0000 (19:58 +0000)
https://bugs.webkit.org/show_bug.cgi?id=102443

Reviewed by Dirk Pranke.

Instead of the cludgy things we do now to track which bots run which tests,
we generate all that data from the buildbots' json files.
This is the minimal amount to keep everything working. Once this lands,
we can also do a bunch of followup cleanup.

For now we commit the generated data. In theory, in the future, we could
have the test results server generate the data on the fly.

For the sake of easily understanding what changes when we run the generate script,
also checkin a pretty printed version of the output. The pretty printed version
is too large to serve as part of the flakiness dashboard though.

This also has the benefit of making the dashboard load much faster since
we no longer ever need to block on requests to buildbot.

* TestResultServer/generate_builders_json.py: Added.
(master_json_url):
(builder_json_url):
(cached_build_json_url):
(fetch_json):
(insert_builder_and_test_data):
(main):
* TestResultServer/generate_builders_json_unittest.py: Added.
(GenerateBuildersJsonTest):
(GenerateBuildersJsonTest.test_master_json_url):
(GenerateBuildersJsonTest.test_builder_json_url):
(GenerateBuildersJsonTest.test_cached_build_json_url):
(GenerateBuildersJsonTest.test_generate_json_data):
(GenerateBuildersJsonTest.test_generate_json_data.dummy_fetch_json):
* TestResultServer/static-dashboards/builders-pretty.jsonp: Added.
* TestResultServer/static-dashboards/builders.js:
(LOAD_BUILDBOT_DATA):
(BuilderGroup):
(BuilderGroup.prototype.append):
(BuilderGroup.prototype.master):
(requestBuilderList):
* TestResultServer/static-dashboards/builders.jsonp: Added.
* TestResultServer/static-dashboards/builders_unittests.js: Added.
* TestResultServer/static-dashboards/dashboard_base.js:
* TestResultServer/static-dashboards/flakiness_dashboard.js:
(showPopupForBuild):
(htmlForTestResults):
(htmlForIndividualTestOnAllBuildersWithResultsLinks):
(loadExpectationsLayoutTests):
* TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:
(resetGlobals):
(test):
* TestResultServer/static-dashboards/loader.js:
* TestResultServer/static-dashboards/loader_unittests.js:
* TestResultServer/static-dashboards/run-embedded-unittests.html:
* TestResultServer/static-dashboards/run-unittests.html:
* TestResultServer/static-dashboards/timeline_explorer.html:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@135304 268f45cc-cd09-0410-ab3c-d52691b4dbfc

14 files changed:
Tools/ChangeLog
Tools/TestResultServer/generate_builders_json.py [new file with mode: 0644]
Tools/TestResultServer/generate_builders_json_unittest.py [new file with mode: 0644]
Tools/TestResultServer/static-dashboards/builders.js
Tools/TestResultServer/static-dashboards/builders.jsonp [new file with mode: 0644]
Tools/TestResultServer/static-dashboards/builders_unittests.js [new file with mode: 0644]
Tools/TestResultServer/static-dashboards/dashboard_base.js
Tools/TestResultServer/static-dashboards/flakiness_dashboard.js
Tools/TestResultServer/static-dashboards/flakiness_dashboard_unittests.js
Tools/TestResultServer/static-dashboards/loader.js
Tools/TestResultServer/static-dashboards/loader_unittests.js
Tools/TestResultServer/static-dashboards/run-embedded-unittests.html
Tools/TestResultServer/static-dashboards/run-unittests.html
Tools/TestResultServer/static-dashboards/timeline_explorer.html

index 27dab453a3e8a34c25cd1690613b085dbe5cded1..cc8a1b0aa750e3029174e68ab34a8aca9c77e8b3 100644 (file)
@@ -1,3 +1,63 @@
+2012-11-15  Ojan Vafai  <ojan@chromium.org>
+
+        Generate a list of builders/test suites from the buildbot json
+        https://bugs.webkit.org/show_bug.cgi?id=102443
+
+        Reviewed by Dirk Pranke.
+
+        Instead of the cludgy things we do now to track which bots run which tests,
+        we generate all that data from the buildbots' json files.
+        This is the minimal amount to keep everything working. Once this lands,
+        we can also do a bunch of followup cleanup.
+
+        For now we commit the generated data. In theory, in the future, we could
+        have the test results server generate the data on the fly.
+
+        For the sake of easily understanding what changes when we run the generate script,
+        also checkin a pretty printed version of the output. The pretty printed version
+        is too large to serve as part of the flakiness dashboard though.
+
+        This also has the benefit of making the dashboard load much faster since
+        we no longer ever need to block on requests to buildbot.
+
+        * TestResultServer/generate_builders_json.py: Added.
+        (master_json_url):
+        (builder_json_url):
+        (cached_build_json_url):
+        (fetch_json):
+        (insert_builder_and_test_data):
+        (main):
+        * TestResultServer/generate_builders_json_unittest.py: Added.
+        (GenerateBuildersJsonTest):
+        (GenerateBuildersJsonTest.test_master_json_url):
+        (GenerateBuildersJsonTest.test_builder_json_url):
+        (GenerateBuildersJsonTest.test_cached_build_json_url):
+        (GenerateBuildersJsonTest.test_generate_json_data):
+        (GenerateBuildersJsonTest.test_generate_json_data.dummy_fetch_json):
+        * TestResultServer/static-dashboards/builders-pretty.jsonp: Added.
+        * TestResultServer/static-dashboards/builders.js:
+        (LOAD_BUILDBOT_DATA):
+        (BuilderGroup):
+        (BuilderGroup.prototype.append):
+        (BuilderGroup.prototype.master):
+        (requestBuilderList):
+        * TestResultServer/static-dashboards/builders.jsonp: Added.
+        * TestResultServer/static-dashboards/builders_unittests.js: Added.
+        * TestResultServer/static-dashboards/dashboard_base.js:
+        * TestResultServer/static-dashboards/flakiness_dashboard.js:
+        (showPopupForBuild):
+        (htmlForTestResults):
+        (htmlForIndividualTestOnAllBuildersWithResultsLinks):
+        (loadExpectationsLayoutTests):
+        * TestResultServer/static-dashboards/flakiness_dashboard_unittests.js:
+        (resetGlobals):
+        (test):
+        * TestResultServer/static-dashboards/loader.js:
+        * TestResultServer/static-dashboards/loader_unittests.js:
+        * TestResultServer/static-dashboards/run-embedded-unittests.html:
+        * TestResultServer/static-dashboards/run-unittests.html:
+        * TestResultServer/static-dashboards/timeline_explorer.html:
+
 2012-11-20  Thiago Marcos P. Santos  <thiago.santos@intel.com>
 
         [WTR][Qt] Enable fixedLayout when needed by the test
diff --git a/Tools/TestResultServer/generate_builders_json.py b/Tools/TestResultServer/generate_builders_json.py
new file mode 100644 (file)
index 0000000..9be6552
--- /dev/null
@@ -0,0 +1,123 @@
+#!/usr/bin/env python
+# Copyright (C) 2011 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+#     * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#     * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+#     * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+import json
+import logging
+import optparse
+import os
+import urllib2
+
+# FIXME: See if Tools/Scripts/webkitpy/layout_tests/port/builders.py should also read
+# the output json file here as its data source.
+
+
+def master_json_url(master_url):
+    return master_url + '/json/builders'
+
+
+def builder_json_url(master_url, builder):
+    return master_json_url(master_url) + '/' + urllib2.quote(builder)
+
+
+def cached_build_json_url(master_url, builder, build_number):
+    return builder_json_url(master_url, builder) + '/builds/' + str(build_number)
+
+
+def fetch_json(url):
+    logging.debug('Fetching %s' % url)
+    return json.load(urllib2.urlopen(url))
+
+
+def insert_builder_and_test_data(masters):
+    for master in masters:
+        master_url = master['url']
+        tests_object = {}
+        master['tests'] = tests_object
+
+        for builder in fetch_json(master_json_url(master_url)):
+            build_data = fetch_json(builder_json_url(master_url, builder))
+            cached_builds = build_data['cachedBuilds']
+            current_builds = build_data['currentBuilds']
+
+            latest_cached_build = cached_builds.pop()
+            while latest_cached_build in current_builds and len(cached_builds):
+                latest_cached_build = cached_builds.pop()
+
+            for step in fetch_json(cached_build_json_url(master_url, builder, latest_cached_build))['steps']:
+                step_name = step['name']
+
+                # The chromium bots call this step webkit-tests, the webkit.org bots call it layout-test. :(
+                # The files stored at test-results.appspot.com use layout-tests as the test suite name, so normalize to that.
+                if step_name in ['layout-test', 'webkit_tests']:
+                    step_name = 'layout-tests'
+
+                is_test = step_name == 'layout-tests' if master['name'] == 'webkit.org' else 'test' in step_name and 'archive' not in step_name
+                if not is_test:
+                    continue
+
+                if step_name not in tests_object:
+                    tests_object[step_name] = {'builders': []}
+                tests_object[step_name]['builders'].append(builder)
+
+    for step_name in tests_object:
+        tests_object[step_name]['builders'].sort()
+
+
+def main():
+    option_parser = optparse.OptionParser()
+    option_parser.add_option('-v', '--verbose', action='store_true', default=False, help='Print debug logging')
+    options, args = option_parser.parse_args()
+
+    logging.getLogger().setLevel(logging.DEBUG if options.verbose else logging.INFO)
+
+    masters = [
+        {'name': 'ChromiumWin', 'url': 'http://build.chromium.org/p/chromium.win'},
+        {'name': 'ChromiumMac', 'url': 'http://build.chromium.org/p/chromium.mac'},
+        {'name': 'ChromiumLinux', 'url': 'http://build.chromium.org/p/chromium.linux'},
+        {'name': 'ChromiumChromiumOS', 'url': 'http://build.chromium.org/p/chromium.chromiumos'},
+        {'name': 'ChromiumGPU', 'url': 'http://build.chromium.org/p/chromium.gpu'},
+        {'name': 'ChromiumGPUFYI', 'url': 'http://build.chromium.org/p/chromium.gpu.fyi'},
+        {'name': 'ChromiumPerfAv', 'url': 'http://build.chromium.org/p/chromium.perf_av'},
+        {'name': 'ChromiumWebkit', 'url': 'http://build.chromium.org/p/chromium.webkit'},
+        {'name': 'webkit.org', 'url': 'http://build.webkit.org'},
+    ]
+
+    insert_builder_and_test_data(masters)
+
+    json_file_prefix = ('// This file is auto-generated by Tools/TestResultServer/generate_builders_json.py. It should not be manually modified.\n'
+        '// It uses jsonp instead of proper json because we want to be able to load it from a file URL in Chrome for local testing.\n'
+        'LOAD_BUILDBOT_DATA(')
+    json_file_suffix = ');\n';
+
+    json_file = open(os.path.join('static-dashboards', 'builders.jsonp'), 'w')
+    json_file.write(json_file_prefix + json.dumps(masters, separators=(', ', ': '), indent=4, sort_keys=True) + json_file_suffix)
+
+
+if __name__ == "__main__":
+    main()
diff --git a/Tools/TestResultServer/generate_builders_json_unittest.py b/Tools/TestResultServer/generate_builders_json_unittest.py
new file mode 100644 (file)
index 0000000..588c939
--- /dev/null
@@ -0,0 +1,135 @@
+#!/usr/bin/env python
+# Copyright (C) 2012 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+#     * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#     * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+#     * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+import logging
+import unittest
+
+import generate_builders_json
+
+
+class GenerateBuildersJsonTest(unittest.TestCase):
+
+    def test_master_json_url(self):
+        self.assertEqual(generate_builders_json.master_json_url('http://base'), 'http://base/json/builders')
+
+    def test_builder_json_url(self):
+        self.assertEqual(generate_builders_json.builder_json_url('http://base', 'dummybuilder'), 'http://base/json/builders/dummybuilder')
+
+    def test_cached_build_json_url(self):
+        self.assertEqual(generate_builders_json.cached_build_json_url('http://base', 'dummybuilder', 12345), 'http://base/json/builders/dummybuilder/builds/12345')
+        self.assertEqual(generate_builders_json.cached_build_json_url('http://base', 'dummybuilder', '12345'), 'http://base/json/builders/dummybuilder/builds/12345')
+
+    def test_generate_json_data(self):
+        try:
+            old_fetch_json = generate_builders_json.fetch_json
+
+            fetched_urls = []
+
+            def dummy_fetch_json(url):
+                fetched_urls.append(url)
+
+                if url == 'http://build.chromium.org/p/chromium.webkit/json/builders':
+                    return {'WebKit Win': None, 'WebKit Linux': None, 'WebKit Mac': None}
+                if url == 'http://build.webkit.org/json/builders':
+                    return {'Apple Mac SnowLeopard Tests': None, 'Chromium Mac Builder': None, 'GTK': None}
+
+                if url == 'http://build.chromium.org/p/chromium.webkit/json/builders/WebKit%20Linux':
+                    return {'cachedBuilds': [1, 2], 'currentBuilds': []}
+                if url == 'http://build.chromium.org/p/chromium.webkit/json/builders/WebKit%20Win':
+                    return {'cachedBuilds': [1, 2], 'currentBuilds': []}
+                if url == 'http://build.chromium.org/p/chromium.webkit/json/builders/WebKit%20Mac':
+                    return {'cachedBuilds': [1, 2], 'currentBuilds': []}
+                if url == 'http://build.webkit.org/json/builders/Apple%20Mac%20SnowLeopard%20Tests':
+                    return {'cachedBuilds': [1, 2], 'currentBuilds': []}
+                if url == 'http://build.webkit.org/json/builders/Chromium%20Mac%20Builder':
+                    return {'cachedBuilds': [1, 2, 3], 'currentBuilds': [3]}
+                if url == 'http://build.webkit.org/json/builders/GTK':
+                    return {'cachedBuilds': [2], 'currentBuilds': []}
+
+                if url == 'http://build.chromium.org/p/chromium.webkit/json/builders/WebKit%20Linux/builds/2':
+                    return {'steps': [{'name': 'webkit_tests'}, {'name': 'browser_tests'}, {'name': 'mini_installer_test'}, {'name': 'archive_test_results'}, {'name': 'compile'}]}
+                if url == 'http://build.chromium.org/p/chromium.webkit/json/builders/WebKit%20Win/builds/2':
+                    return {'steps': [{'name': 'webkit_tests'}, {'name': 'mini_installer_test'}, {'name': 'archive_test_results'}, {'name': 'compile'}]}
+                if url == 'http://build.chromium.org/p/chromium.webkit/json/builders/WebKit%20Mac/builds/2':
+                    return {'steps': [{'name': 'browser_tests'}, {'name': 'mini_installer_test'}, {'name': 'archive_test_results'}, {'name': 'compile'}]}
+                if url == 'http://build.webkit.org/json/builders/Apple%20Mac%20SnowLeopard%20Tests/builds/2':
+                    return {'steps': [{'name': 'layout-test'}, {'name': 'archive_test_results'}, {'name': 'compile'}]}
+                if url == 'http://build.webkit.org/json/builders/Chromium%20Mac%20Builder/builds/2':
+                    return {'steps': [{'name': 'compile'}]}
+                if url == 'http://build.webkit.org/json/builders/GTK/builds/2':
+                    return {'steps': [{'name': 'layout-test'}, {'name': 'archive_test_results'}, {'name': 'compile'}]}
+
+                logging.error('Cannot fetch fake url: %s' % url)
+
+            generate_builders_json.fetch_json = dummy_fetch_json
+
+            masters = [
+                {'name': 'ChromiumWebkit', 'url': 'http://build.chromium.org/p/chromium.webkit'},
+                {'name': 'webkit.org', 'url': 'http://build.webkit.org'},
+            ]
+
+            generate_builders_json.insert_builder_and_test_data(masters)
+
+            expected_fetched_urls = [
+                'http://build.chromium.org/p/chromium.webkit/json/builders',
+                'http://build.chromium.org/p/chromium.webkit/json/builders/WebKit%20Linux',
+                'http://build.chromium.org/p/chromium.webkit/json/builders/WebKit%20Linux/builds/2',
+                'http://build.chromium.org/p/chromium.webkit/json/builders/WebKit%20Mac',
+                'http://build.chromium.org/p/chromium.webkit/json/builders/WebKit%20Mac/builds/2',
+                'http://build.chromium.org/p/chromium.webkit/json/builders/WebKit%20Win',
+                'http://build.chromium.org/p/chromium.webkit/json/builders/WebKit%20Win/builds/2',
+                'http://build.webkit.org/json/builders',
+                'http://build.webkit.org/json/builders/Apple%20Mac%20SnowLeopard%20Tests',
+                'http://build.webkit.org/json/builders/Apple%20Mac%20SnowLeopard%20Tests/builds/2',
+                'http://build.webkit.org/json/builders/GTK',
+                'http://build.webkit.org/json/builders/GTK/builds/2',
+                'http://build.webkit.org/json/builders/Chromium%20Mac%20Builder',
+                'http://build.webkit.org/json/builders/Chromium%20Mac%20Builder/builds/2']
+            self.assertEqual(fetched_urls, expected_fetched_urls)
+
+            expected_masters = [
+                {
+                    'url': 'http://build.chromium.org/p/chromium.webkit',
+                    'tests': {
+                        'browser_tests': {'builders': ['WebKit Linux', 'WebKit Mac']},
+                        'mini_installer_test': {'builders': ['WebKit Linux', 'WebKit Mac', 'WebKit Win']},
+                        'layout-tests': {'builders': ['WebKit Linux', 'WebKit Win']}},
+                    'name': 'ChromiumWebkit'},
+                {
+                    'url': 'http://build.webkit.org',
+                    'tests': {
+                        'layout-tests': {'builders': ['Apple Mac SnowLeopard Tests', 'GTK']}},
+                    'name': 'webkit.org'}]
+            self.assertEqual(masters, expected_masters)
+
+        finally:
+            generate_builders_json.fetch_json = old_fetch_json
+
+if __name__ == '__main__':
+    unittest.main()
index 2a6b67d149154045a4f71d382d9749ee2b09ae19..e9ebc4b403654dbb3f23ec05ecb8adee83de43c7 100644 (file)
 // @fileoverview File that lists builders, their masters, and logical groupings
 // of them.
 
-function BuilderMaster(name, basePath)
+function LOAD_BUILDBOT_DATA(builderData)
 {
-    this.name = name;
-    this.basePath = basePath;
+    builders.masters = {};
+    builderData.forEach(function(master) {
+        builders.masters[master.name] = new builders.BuilderMaster(master.name, master.url, master.tests);
+    })
 }
 
-BuilderMaster.prototype.logPath = function(builder, buildNumber)
+var builders = builders || {};
+
+(function() {
+
+// FIXME: Move some of this loading logic into loader.js.
+
+builders._loadScript = function(url, success, error)
 {
-    return this.basePath + 'builders/' + builder + '/builds/' + buildNumber;
-};
+    var script = document.createElement('script');
+    script.src = url;
+    script.onload = success;
+    script.onerror = error;
+    document.head.appendChild(script);
+}
 
-BuilderMaster.prototype.builderJsonPath = function()
+builders._requestBuilders = function()
 {
-    return this.basePath + 'json/builders';
-};
+    var buildersUrl = 'builders.jsonp';
+    builders._loadScript(buildersUrl, function() {}, function() {
+        console.error('Could not load ' + buildersUrl);
+    });
+}
+
+
+builders.BuilderMaster = function(name, basePath, tests)
+{
+    this.name = name;
+    this.basePath = basePath;
+    this.tests = tests;
+}
+
+builders.BuilderMaster.prototype = {
+    logPath: function(builder, buildNumber)
+    {
+        return this.basePath + '/builders/' + builder + '/builds/' + buildNumber;
+    },
+    builderJsonPath: function()
+    {
+        return this.basePath + '/json/builders';
+    },
+}
+
+builders._requestBuilders();
+
+})();
 
-CHROMIUM_WIN_BUILDER_MASTER = new BuilderMaster('ChromiumWin', 'http://build.chromium.org/p/chromium.win/');
-CHROMIUM_MAC_BUILDER_MASTER = new BuilderMaster('ChromiumMac', 'http://build.chromium.org/p/chromium.mac/');
-CHROMIUM_LINUX_BUILDER_MASTER = new BuilderMaster('ChromiumLinux', 'http://build.chromium.org/p/chromium.linux/');
-CHROMIUMOS_BUILDER_MASTER = new BuilderMaster('ChromiumChromiumOS', 'http://build.chromium.org/p/chromium.chromiumos/');
-CHROMIUM_GPU_BUILDER_MASTER = new BuilderMaster('ChromiumGPU', 'http://build.chromium.org/p/chromium.gpu/');
-CHROMIUM_GPU_FYI_BUILDER_MASTER = new BuilderMaster('ChromiumGPUFYI', 'http://build.chromium.org/p/chromium.gpu.fyi/');
-CHROMIUM_PERF_AV_BUILDER_MASTER = new BuilderMaster('ChromiumPerfAv', 'http://build.chromium.org/p/chromium.perf_av/');
-CHROMIUM_WEBKIT_BUILDER_MASTER = new BuilderMaster('ChromiumWebkit', 'http://build.chromium.org/p/chromium.webkit/');
-WEBKIT_BUILDER_MASTER = new BuilderMaster('webkit.org', 'http://build.webkit.org/');
+// FIXME: Move everything below into the anonymous namespace above.
+
+CHROMIUM_WIN_BUILDER_MASTER = 'ChromiumWin';
+CHROMIUM_MAC_BUILDER_MASTER = 'ChromiumMac';
+CHROMIUM_LINUX_BUILDER_MASTER = 'ChromiumLinux';
+CHROMIUMOS_BUILDER_MASTER = 'ChromiumChromiumOS';
+CHROMIUM_GPU_BUILDER_MASTER = 'ChromiumGPU';
+CHROMIUM_GPU_FYI_BUILDER_MASTER = 'ChromiumGPUFYI';
+CHROMIUM_PERF_AV_BUILDER_MASTER = 'ChromiumPerfAv';
+CHROMIUM_WEBKIT_BUILDER_MASTER = 'ChromiumWebkit';
+WEBKIT_BUILDER_MASTER = 'webkit.org';
 
 var LEGACY_BUILDER_MASTERS_TO_GROUPS = {
     'Chromium': '@DEPS - chromium.org',
@@ -74,8 +114,6 @@ function BuilderGroup(isToTWebKit)
     // Map of builderName (the name shown in the waterfall) to builderPath (the
     // path used in the builder's URL)
     this.builders = {};
-    this.groups = 0;
-    this.expectedGroups = 0;
 }
 
 BuilderGroup.prototype.setbuilder = function(builder, flags) {
@@ -93,13 +131,8 @@ BuilderGroup.prototype.append = function(builders) {
         var flags = builderAndFlags[1];
         this.setbuilder(builder, flags);
     }, this);
-    this.groups += 1;
 };
 
-BuilderGroup.prototype.loaded = function() {
-    return this.groups >= this.expectedGroups;
-}
-
 BuilderGroup.prototype.setup = function()
 {
     // FIXME: instead of copying these to globals, it would be better if
@@ -108,27 +141,35 @@ BuilderGroup.prototype.setup = function()
     g_builders = this.builders;
 };
 
+BuilderGroup.prototype.master = function()
+{
+    for (var builder in this.builders)
+        return builderMaster(builder);
+    console.error('There are no builders in this builder group.');
+}
+
 BuilderGroup.TOT_WEBKIT = true;
 BuilderGroup.DEPS_WEBKIT = false;
 BuilderGroup.DEFAULT_BUILDER = 1 << 1;
 
 var BUILDER_TO_MASTER = {};
-function associateBuildersWithMaster(builders, master)
+
+function builderMaster(builderName)
 {
-    builders.forEach(function(builderAndFlags) {
-        var builder = builderAndFlags[0];
-        BUILDER_TO_MASTER[builder] = master;
-    });
+    return BUILDER_TO_MASTER[builderName];
 }
 
-function requestBuilderList(builderGroups, builderFilter, master, groupName, builderGroup)
+function requestBuilderList(builderGroups, builderFilter, masterName, groupName, builderGroup, testType)
 {
     if (!builderGroups[groupName])
         builderGroups[groupName] = builderGroup;
-    loader.request(master.builderJsonPath(),
-                   partial(onBuilderListLoad, builderGroups, builderFilter, master, groupName),
-                   partial(onErrorLoadingBuilderList, master.builderJsonPath(), builderGroups, groupName));
-    builderGroups[groupName].expectedGroups += 1;
+    var master = builders.masters[masterName];
+    var builderList = generateBuildersFromBuilderList(master.tests[testType].builders, builderFilter);
+    builderList.forEach(function(builderAndFlags) {
+        var builder = builderAndFlags[0];
+        BUILDER_TO_MASTER[builder] = master;
+    });
+    builderGroups[groupName].append(builderList);
 }
 
 function isChromiumDepsGpuTestRunner(builder)
@@ -206,21 +247,7 @@ function generateBuildersFromBuilderList(builderList, filter)
     });
 }
 
-function onBuilderListLoad(builderGroups, builderFilter, master, groupName, xhr)
-{
-    var builders = generateBuildersFromBuilderList(Object.keys(JSON.parse(xhr.responseText)), builderFilter);
-    associateBuildersWithMaster(builders, master);
-    builderGroups[groupName].append(builders);
-    if (builderGroups[groupName].loaded())
-        g_resourceLoader.buildersListLoaded();
-}
-
-function onErrorLoadingBuilderList(url, builderGroups, groupName, xhr)
-{
-    builderGroups[groupName].groups += 1;
-    console.log('Could not load list of builders from ' + url + '. Try reloading.');
-}
-
+// FIXME: Look into whether we can move the grouping logic into builders.jsonp and get rid of this code.
 function loadBuildersList(groupName, testType) {
     switch (testType) {
     case 'gl_tests':
@@ -228,17 +255,17 @@ function loadBuildersList(groupName, testType) {
         switch(groupName) {
         case '@DEPS - chromium.org':
             var builderGroup = new BuilderGroup(BuilderGroup.DEPS_WEBKIT);
-            requestBuilderList(CHROMIUM_GPU_TESTS_BUILDER_GROUPS, isChromiumDepsGpuTestRunner, CHROMIUM_GPU_BUILDER_MASTER, groupName, builderGroup);
+            requestBuilderList(CHROMIUM_GPU_TESTS_BUILDER_GROUPS, isChromiumDepsGpuTestRunner, CHROMIUM_GPU_BUILDER_MASTER, groupName, builderGroup, testType);
             break;
 
         case '@DEPS FYI - chromium.org':
             var builderGroup = new BuilderGroup(BuilderGroup.DEPS_WEBKIT);
-            requestBuilderList(CHROMIUM_GPU_TESTS_BUILDER_GROUPS, isChromiumDepsFyiGpuTestRunner, CHROMIUM_GPU_FYI_BUILDER_MASTER, groupName, builderGroup);
+            requestBuilderList(CHROMIUM_GPU_TESTS_BUILDER_GROUPS, isChromiumDepsFyiGpuTestRunner, CHROMIUM_GPU_FYI_BUILDER_MASTER, groupName, builderGroup, testType);
             break;
 
         case '@ToT - chromium.org':
             var builderGroup = new BuilderGroup(BuilderGroup.TOT_WEBKIT);
-            requestBuilderList(CHROMIUM_GPU_TESTS_BUILDER_GROUPS, isChromiumTipOfTreeGpuTestRunner, CHROMIUM_WEBKIT_BUILDER_MASTER, groupName, builderGroup);
+            requestBuilderList(CHROMIUM_GPU_TESTS_BUILDER_GROUPS, isChromiumTipOfTreeGpuTestRunner, CHROMIUM_WEBKIT_BUILDER_MASTER, groupName, builderGroup, testType);
             break;
         }
         break;
@@ -247,23 +274,23 @@ function loadBuildersList(groupName, testType) {
         switch(groupName) {
         case 'Content Shell @ToT - chromium.org':
             var builderGroup = new BuilderGroup(BuilderGroup.TOT_WEBKIT);
-            requestBuilderList(LAYOUT_TESTS_BUILDER_GROUPS, isChromiumContentShellTestRunner, CHROMIUM_WEBKIT_BUILDER_MASTER, groupName, builderGroup);
+            requestBuilderList(LAYOUT_TESTS_BUILDER_GROUPS, isChromiumContentShellTestRunner, CHROMIUM_WEBKIT_BUILDER_MASTER, groupName, builderGroup, testType);
             break;
 
         case '@ToT - chromium.org':
             var builderGroup = new BuilderGroup(BuilderGroup.TOT_WEBKIT);
-            requestBuilderList(LAYOUT_TESTS_BUILDER_GROUPS, isChromiumWebkitTipOfTreeTestRunner, CHROMIUM_WEBKIT_BUILDER_MASTER, groupName, builderGroup);
+            requestBuilderList(LAYOUT_TESTS_BUILDER_GROUPS, isChromiumWebkitTipOfTreeTestRunner, CHROMIUM_WEBKIT_BUILDER_MASTER, groupName, builderGroup, testType);
             break;
 
         case '@ToT - webkit.org':
             var builderGroup = new BuilderGroup(BuilderGroup.TOT_WEBKIT);
-            requestBuilderList(LAYOUT_TESTS_BUILDER_GROUPS, isWebkitTestRunner, WEBKIT_BUILDER_MASTER, groupName, builderGroup);
+            requestBuilderList(LAYOUT_TESTS_BUILDER_GROUPS, isWebkitTestRunner, WEBKIT_BUILDER_MASTER, groupName, builderGroup, testType);
             break;
 
         case '@DEPS - chromium.org':
             var builderGroup = new BuilderGroup(BuilderGroup.DEPS_WEBKIT);
-            requestBuilderList(LAYOUT_TESTS_BUILDER_GROUPS, isChromiumWebkitDepsTestRunner, CHROMIUM_WEBKIT_BUILDER_MASTER, groupName, builderGroup);
-            requestBuilderList(LAYOUT_TESTS_BUILDER_GROUPS, isChromiumDepsAVTestRunner, CHROMIUM_PERF_AV_BUILDER_MASTER, groupName, builderGroup);
+            requestBuilderList(LAYOUT_TESTS_BUILDER_GROUPS, isChromiumWebkitDepsTestRunner, CHROMIUM_WEBKIT_BUILDER_MASTER, groupName, builderGroup, testType);
+            requestBuilderList(LAYOUT_TESTS_BUILDER_GROUPS, isChromiumDepsAVTestRunner, CHROMIUM_PERF_AV_BUILDER_MASTER, groupName, builderGroup, testType);
             break;
         }
         break;
@@ -273,13 +300,13 @@ function loadBuildersList(groupName, testType) {
         switch(groupName) {
         case '@ToT - chromium.org':
             var builderGroup = new BuilderGroup(BuilderGroup.TOT_WEBKIT);
-            requestBuilderList(TEST_SHELL_TESTS_BUILDER_GROUPS, isChromiumWebkitTipOfTreeTestRunner, CHROMIUM_WEBKIT_BUILDER_MASTER, groupName, builderGroup);
+            requestBuilderList(TEST_SHELL_TESTS_BUILDER_GROUPS, isChromiumWebkitTipOfTreeTestRunner, CHROMIUM_WEBKIT_BUILDER_MASTER, groupName, builderGroup, testType);
             break;
 
         case '@DEPS - chromium.org':
             var builderGroup = new BuilderGroup(BuilderGroup.DEPS_WEBKIT);
-            requestBuilderList(TEST_SHELL_TESTS_BUILDER_GROUPS, isChromiumWebkitDepsTestRunner, CHROMIUM_WEBKIT_BUILDER_MASTER, groupName, builderGroup);
-            requestBuilderList(TEST_SHELL_TESTS_BUILDER_GROUPS, isChromiumDepsAVTestRunner, CHROMIUM_PERF_AV_BUILDER_MASTER, groupName, builderGroup);
+            requestBuilderList(TEST_SHELL_TESTS_BUILDER_GROUPS, isChromiumWebkitDepsTestRunner, CHROMIUM_WEBKIT_BUILDER_MASTER, groupName, builderGroup, testType);
+            requestBuilderList(TEST_SHELL_TESTS_BUILDER_GROUPS, isChromiumDepsAVTestRunner, CHROMIUM_PERF_AV_BUILDER_MASTER, groupName, builderGroup, testType);
             break;
         }
         break;    
@@ -288,19 +315,19 @@ function loadBuildersList(groupName, testType) {
         switch(groupName) {
         case '@DEPS - chromium.org':
             var builderGroup = new BuilderGroup(BuilderGroup.DEPS_WEBKIT);
-            requestBuilderList(CHROMIUM_GTESTS_BUILDER_GROUPS, isChromiumDepsGTestRunner, CHROMIUM_WIN_BUILDER_MASTER, groupName, builderGroup);
-            requestBuilderList(CHROMIUM_GTESTS_BUILDER_GROUPS, isChromiumDepsGTestRunner, CHROMIUM_MAC_BUILDER_MASTER, groupName, builderGroup);
-            requestBuilderList(CHROMIUM_GTESTS_BUILDER_GROUPS, isChromiumDepsGTestRunner, CHROMIUM_LINUX_BUILDER_MASTER, groupName, builderGroup);
+            requestBuilderList(CHROMIUM_GTESTS_BUILDER_GROUPS, isChromiumDepsGTestRunner, CHROMIUM_WIN_BUILDER_MASTER, groupName, builderGroup, testType);
+            requestBuilderList(CHROMIUM_GTESTS_BUILDER_GROUPS, isChromiumDepsGTestRunner, CHROMIUM_MAC_BUILDER_MASTER, groupName, builderGroup, testType);
+            requestBuilderList(CHROMIUM_GTESTS_BUILDER_GROUPS, isChromiumDepsGTestRunner, CHROMIUM_LINUX_BUILDER_MASTER, groupName, builderGroup, testType);
             break;
 
         case '@DEPS CrOS - chromium.org':
             var builderGroup = new BuilderGroup(BuilderGroup.DEPS_WEBKIT);
-            requestBuilderList(CHROMIUM_GTESTS_BUILDER_GROUPS, isChromiumDepsCrosGTestRunner, CHROMIUMOS_BUILDER_MASTER, groupName, builderGroup);
+            requestBuilderList(CHROMIUM_GTESTS_BUILDER_GROUPS, isChromiumDepsCrosGTestRunner, CHROMIUMOS_BUILDER_MASTER, groupName, builderGroup, testType);
             break;
 
         case '@ToT - chromium.org':
             var builderGroup = new BuilderGroup(BuilderGroup.TOT_WEBKIT);
-            requestBuilderList(CHROMIUM_GTESTS_BUILDER_GROUPS, isChromiumTipOfTreeGTestRunner, CHROMIUM_WEBKIT_BUILDER_MASTER, groupName, builderGroup);
+            requestBuilderList(CHROMIUM_GTESTS_BUILDER_GROUPS, isChromiumTipOfTreeGTestRunner, CHROMIUM_WEBKIT_BUILDER_MASTER, groupName, builderGroup, testType);
             break;
         }
         break;
diff --git a/Tools/TestResultServer/static-dashboards/builders.jsonp b/Tools/TestResultServer/static-dashboards/builders.jsonp
new file mode 100644 (file)
index 0000000..a813db0
--- /dev/null
@@ -0,0 +1,1516 @@
+// This file is auto-generated by Tools/TestResultServer/generate_builders_json.py. It should not be manually modified.
+// It uses jsonp instead of proper json because we want to be able to load it from a file URL in Chrome for local testing.
+LOAD_BUILDBOT_DATA([
+    {
+        "name": "ChromiumWin", 
+        "tests": {
+            "ash_unittests": {
+                "builders": [
+                    "Win Aura"
+                ]
+            }, 
+            "aura_unittests": {
+                "builders": [
+                    "Win Aura"
+                ]
+            }, 
+            "base_unittests": {
+                "builders": [
+                    "Win7 Tests (dbg)(1)", 
+                    "Win7 Tests (2)", 
+                    "XP Tests (2)", 
+                    "Vista Tests (2)", 
+                    "XP Tests (dbg)(1)"
+                ]
+            }, 
+            "browser_tests": {
+                "builders": [
+                    "XP Tests (dbg)(5)", 
+                    "XP Tests (1)", 
+                    "Win7 Tests (dbg)(3)", 
+                    "Win7 Tests (dbg)(5)", 
+                    "Win7 Tests (2)", 
+                    "XP Tests (3)", 
+                    "Vista Tests (1)", 
+                    "Vista Tests (3)", 
+                    "XP Tests (2)", 
+                    "XP Tests (dbg)(2)", 
+                    "Win7 Tests (dbg)(6)", 
+                    "XP Tests (dbg)(6)", 
+                    "XP Tests (dbg)(4)", 
+                    "Win7 Tests (dbg)(4)", 
+                    "Win7 Tests (3)", 
+                    "Win7 Tests (dbg)(2)", 
+                    "Vista Tests (2)", 
+                    "Win7 Tests (1)", 
+                    "XP Tests (dbg)(3)", 
+                    "Win Aura"
+                ]
+            }, 
+            "cacheinvalidation_unittests": {
+                "builders": [
+                    "XP Tests (1)", 
+                    "Win7 Tests (dbg)(1)", 
+                    "Vista Tests (1)", 
+                    "Win7 Tests (1)", 
+                    "XP Tests (dbg)(1)"
+                ]
+            }, 
+            "cc_unittests": {
+                "builders": [
+                    "XP Tests (1)", 
+                    "Win7 Tests (dbg)(1)", 
+                    "Vista Tests (1)", 
+                    "Win7 Tests (1)", 
+                    "XP Tests (dbg)(1)"
+                ]
+            }, 
+            "chrome_frame_net_tests": {
+                "builders": [
+                    "Chrome Frame Tests (ie8)", 
+                    "Chrome Frame Tests (ie6)", 
+                    "Chrome Frame Tests (ie7)", 
+                    "Chrome Frame Tests (ie9)"
+                ]
+            }, 
+            "chrome_frame_tests": {
+                "builders": [
+                    "Chrome Frame Tests (ie8)", 
+                    "Chrome Frame Tests (ie6)", 
+                    "Chrome Frame Tests (ie7)", 
+                    "Chrome Frame Tests (ie9)"
+                ]
+            }, 
+            "chrome_frame_unittests": {
+                "builders": [
+                    "Chrome Frame Tests (ie8)", 
+                    "Chrome Frame Tests (ie6)", 
+                    "Chrome Frame Tests (ie7)", 
+                    "Chrome Frame Tests (ie9)"
+                ]
+            }, 
+            "compositor_unittests": {
+                "builders": [
+                    "Win Aura"
+                ]
+            }, 
+            "content_browsertests": {
+                "builders": [
+                    "XP Tests (1)", 
+                    "Vista Tests (1)", 
+                    "XP Tests (dbg)(2)", 
+                    "Win7 Tests (dbg)(2)", 
+                    "Win7 Tests (1)", 
+                    "Win Aura"
+                ]
+            }, 
+            "content_unittests": {
+                "builders": [
+                    "Win7 Tests (dbg)(1)", 
+                    "XP Tests (3)", 
+                    "Vista Tests (3)", 
+                    "Win7 Tests (3)", 
+                    "Win Aura", 
+                    "XP Tests (dbg)(1)"
+                ]
+            }, 
+            "courgette_unittests": {
+                "builders": [
+                    "XP Tests (1)", 
+                    "Win7 Tests (dbg)(1)", 
+                    "Vista Tests (1)", 
+                    "Win7 Tests (1)", 
+                    "XP Tests (dbg)(1)"
+                ]
+            }, 
+            "crypto_unittests": {
+                "builders": [
+                    "XP Tests (1)", 
+                    "Win7 Tests (dbg)(1)", 
+                    "Vista Tests (1)", 
+                    "Win7 Tests (1)", 
+                    "XP Tests (dbg)(1)"
+                ]
+            }, 
+            "googleurl_unittests": {
+                "builders": [
+                    "XP Tests (1)", 
+                    "Win7 Tests (dbg)(1)", 
+                    "Vista Tests (1)", 
+                    "Win7 Tests (1)", 
+                    "XP Tests (dbg)(1)"
+                ]
+            }, 
+            "gpu_unittests": {
+                "builders": [
+                    "XP Tests (1)", 
+                    "Win7 Tests (dbg)(1)", 
+                    "Vista Tests (1)", 
+                    "Win7 Tests (1)", 
+                    "XP Tests (dbg)(1)"
+                ]
+            }, 
+            "installer_util_unittests": {
+                "builders": [
+                    "XP Tests (1)", 
+                    "Win7 Tests (dbg)(1)", 
+                    "Vista Tests (1)", 
+                    "Win7 Tests (1)", 
+                    "XP Tests (dbg)(1)"
+                ]
+            }, 
+            "interactive_ui_tests": {
+                "builders": [
+                    "XP Tests (1)", 
+                    "Interactive Tests (dbg)", 
+                    "Vista Tests (1)", 
+                    "Win7 Tests (1)", 
+                    "Win Aura"
+                ]
+            }, 
+            "ipc_tests": {
+                "builders": [
+                    "Win7 Tests (dbg)(1)", 
+                    "XP Tests (3)", 
+                    "Vista Tests (3)", 
+                    "Win7 Tests (3)", 
+                    "XP Tests (dbg)(1)"
+                ]
+            }, 
+            "jingle_unittests": {
+                "builders": [
+                    "XP Tests (1)", 
+                    "Win7 Tests (dbg)(1)", 
+                    "Vista Tests (1)", 
+                    "Win7 Tests (1)", 
+                    "XP Tests (dbg)(1)"
+                ]
+            }, 
+            "media_unittests": {
+                "builders": [
+                    "XP Tests (1)", 
+                    "Win7 Tests (dbg)(1)", 
+                    "Vista Tests (1)", 
+                    "Win7 Tests (1)", 
+                    "XP Tests (dbg)(1)"
+                ]
+            }, 
+            "mini_installer_test": {
+                "builders": [
+                    "XP Tests (1)", 
+                    "Vista Tests (1)", 
+                    "Win7 Tests (1)"
+                ]
+            }, 
+            "net_unittests": {
+                "builders": [
+                    "Win7 Tests (2)", 
+                    "XP Tests (2)", 
+                    "XP Tests (dbg)(2)", 
+                    "Win7 Tests (dbg)(2)", 
+                    "Vista Tests (2)"
+                ]
+            }, 
+            "ppapi_unittests": {
+                "builders": [
+                    "XP Tests (1)", 
+                    "Win7 Tests (dbg)(1)", 
+                    "Vista Tests (1)", 
+                    "Win7 Tests (1)", 
+                    "XP Tests (dbg)(1)"
+                ]
+            }, 
+            "printing_unittests": {
+                "builders": [
+                    "XP Tests (1)", 
+                    "Win7 Tests (dbg)(1)", 
+                    "Vista Tests (1)", 
+                    "Win7 Tests (1)", 
+                    "XP Tests (dbg)(1)"
+                ]
+            }, 
+            "remoting_unittests": {
+                "builders": [
+                    "XP Tests (1)", 
+                    "Win7 Tests (dbg)(1)", 
+                    "Vista Tests (1)", 
+                    "Win7 Tests (1)", 
+                    "XP Tests (dbg)(1)"
+                ]
+            }, 
+            "sbox_integration_tests": {
+                "builders": [
+                    "XP Tests (1)", 
+                    "Win7 Tests (dbg)(3)", 
+                    "Vista Tests (1)", 
+                    "Win7 Tests (1)", 
+                    "XP Tests (dbg)(3)"
+                ]
+            }, 
+            "sbox_unittests": {
+                "builders": [
+                    "XP Tests (1)", 
+                    "Win7 Tests (dbg)(3)", 
+                    "Vista Tests (1)", 
+                    "Win7 Tests (1)", 
+                    "XP Tests (dbg)(3)"
+                ]
+            }, 
+            "sbox_validation_tests": {
+                "builders": [
+                    "XP Tests (1)", 
+                    "Win7 Tests (dbg)(3)", 
+                    "Vista Tests (1)", 
+                    "Win7 Tests (1)", 
+                    "XP Tests (dbg)(3)"
+                ]
+            }, 
+            "sql_unittests": {
+                "builders": [
+                    "Win7 Tests (dbg)(1)", 
+                    "XP Tests (3)", 
+                    "Vista Tests (3)", 
+                    "Win7 Tests (3)", 
+                    "XP Tests (dbg)(1)"
+                ]
+            }, 
+            "sync_integration_tests": {
+                "builders": [
+                    "Win7 Sync"
+                ]
+            }, 
+            "sync_unit_tests": {
+                "builders": [
+                    "Win7 Tests (dbg)(1)", 
+                    "XP Tests (3)", 
+                    "Vista Tests (3)", 
+                    "Win7 Tests (3)", 
+                    "XP Tests (dbg)(1)"
+                ]
+            }, 
+            "ui_unittests": {
+                "builders": [
+                    "Win7 Tests (dbg)(1)", 
+                    "XP Tests (3)", 
+                    "Vista Tests (3)", 
+                    "Win7 Tests (3)", 
+                    "XP Tests (dbg)(1)"
+                ]
+            }, 
+            "unit_tests": {
+                "builders": [
+                    "Win7 Tests (dbg)(1)", 
+                    "XP Tests (3)", 
+                    "Vista Tests (3)", 
+                    "Win7 Tests (3)", 
+                    "Win Aura", 
+                    "XP Tests (dbg)(1)"
+                ]
+            }, 
+            "views_unittests": {
+                "builders": [
+                    "Win7 Tests (dbg)(1)", 
+                    "XP Tests (3)", 
+                    "Vista Tests (3)", 
+                    "Win7 Tests (3)", 
+                    "Win Aura", 
+                    "XP Tests (dbg)(1)"
+                ]
+            }, 
+            "webkit_compositor_bindings_unittests": {
+                "builders": [
+                    "XP Tests (1)", 
+                    "Win7 Tests (dbg)(1)", 
+                    "Vista Tests (1)", 
+                    "Win7 Tests (1)", 
+                    "XP Tests (dbg)(1)"
+                ]
+            }
+        }, 
+        "url": "http://build.chromium.org/p/chromium.win"
+    }, 
+    {
+        "name": "ChromiumMac", 
+        "tests": {
+            "base_unittests": {
+                "builders": [
+                    "Mac10.7 Tests (1)", 
+                    "iOS Simulator (dbg)", 
+                    "Mac 10.7 Tests (dbg)(3)", 
+                    "Mac10.6 Tests (1)", 
+                    "Mac 10.6 Tests (dbg)(3)"
+                ]
+            }, 
+            "browser_tests": {
+                "builders": [
+                    "Mac10.6 Tests (2)", 
+                    "Mac10.7 Tests (1)", 
+                    "Mac 10.7 Tests (dbg)(1)", 
+                    "Mac10.6 Tests (3)", 
+                    "Mac 10.7 Tests (dbg)(3)", 
+                    "Mac 10.7 Tests (dbg)(2)", 
+                    "Mac10.6 Tests (1)", 
+                    "Mac 10.6 Tests (dbg)(4)", 
+                    "Mac10.7 Tests (2)", 
+                    "Mac 10.7 Tests (dbg)(4)", 
+                    "Mac 10.6 Tests (dbg)(2)", 
+                    "Mac 10.6 Tests (dbg)(3)", 
+                    "Mac10.7 Tests (3)", 
+                    "Mac 10.6 Tests (dbg)(1)"
+                ]
+            }, 
+            "cacheinvalidation_unittests": {
+                "builders": [
+                    "Mac10.7 Tests (1)", 
+                    "Mac 10.7 Tests (dbg)(1)", 
+                    "Mac10.6 Tests (1)", 
+                    "Mac 10.6 Tests (dbg)(1)"
+                ]
+            }, 
+            "cc_unittests": {
+                "builders": [
+                    "Mac10.7 Tests (1)", 
+                    "Mac 10.7 Tests (dbg)(1)", 
+                    "Mac10.6 Tests (1)", 
+                    "Mac 10.6 Tests (dbg)(1)"
+                ]
+            }, 
+            "content_browsertests": {
+                "builders": [
+                    "Mac10.7 Tests (1)", 
+                    "Mac 10.7 Tests (dbg)(1)", 
+                    "Mac10.6 Tests (1)", 
+                    "Mac 10.6 Tests (dbg)(1)"
+                ]
+            }, 
+            "content_unittests": {
+                "builders": [
+                    "Mac10.6 Tests (2)", 
+                    "Mac 10.6 Tests (dbg)(4)", 
+                    "Mac10.7 Tests (2)", 
+                    "Mac 10.7 Tests (dbg)(4)"
+                ]
+            }, 
+            "crypto_unittests": {
+                "builders": [
+                    "Mac10.7 Tests (1)", 
+                    "Mac 10.7 Tests (dbg)(1)", 
+                    "iOS Simulator (dbg)", 
+                    "Mac10.6 Tests (1)", 
+                    "Mac 10.6 Tests (dbg)(1)"
+                ]
+            }, 
+            "googleurl_unittests": {
+                "builders": [
+                    "Mac10.7 Tests (1)", 
+                    "Mac 10.7 Tests (dbg)(1)", 
+                    "iOS Simulator (dbg)", 
+                    "Mac10.6 Tests (1)", 
+                    "Mac 10.6 Tests (dbg)(1)"
+                ]
+            }, 
+            "gpu_unittests": {
+                "builders": [
+                    "Mac10.7 Tests (1)", 
+                    "Mac 10.7 Tests (dbg)(1)", 
+                    "Mac10.6 Tests (1)", 
+                    "Mac 10.6 Tests (dbg)(1)"
+                ]
+            }, 
+            "interactive_ui_tests": {
+                "builders": [
+                    "Mac10.7 Tests (1)", 
+                    "Mac 10.7 Tests (dbg)(3)", 
+                    "Mac10.6 Tests (1)", 
+                    "Mac 10.6 Tests (dbg)(3)"
+                ]
+            }, 
+            "ipc_tests": {
+                "builders": [
+                    "Mac10.6 Tests (2)", 
+                    "Mac 10.6 Tests (dbg)(4)", 
+                    "Mac10.7 Tests (2)", 
+                    "Mac 10.7 Tests (dbg)(4)"
+                ]
+            }, 
+            "jingle_unittests": {
+                "builders": [
+                    "Mac10.7 Tests (1)", 
+                    "Mac 10.7 Tests (dbg)(1)", 
+                    "Mac10.6 Tests (1)", 
+                    "Mac 10.6 Tests (dbg)(1)"
+                ]
+            }, 
+            "media_unittests": {
+                "builders": [
+                    "Mac10.7 Tests (1)", 
+                    "Mac 10.7 Tests (dbg)(2)", 
+                    "Mac10.6 Tests (1)", 
+                    "Mac 10.6 Tests (dbg)(2)"
+                ]
+            }, 
+            "net_unittests": {
+                "builders": [
+                    "Mac10.6 Tests (3)", 
+                    "Mac 10.7 Tests (dbg)(2)", 
+                    "Mac 10.6 Tests (dbg)(2)", 
+                    "Mac10.7 Tests (3)"
+                ]
+            }, 
+            "ppapi_unittests": {
+                "builders": [
+                    "Mac10.7 Tests (1)", 
+                    "Mac 10.7 Tests (dbg)(1)", 
+                    "Mac10.6 Tests (1)", 
+                    "Mac 10.6 Tests (dbg)(1)"
+                ]
+            }, 
+            "printing_unittests": {
+                "builders": [
+                    "Mac10.7 Tests (1)", 
+                    "Mac 10.7 Tests (dbg)(1)", 
+                    "Mac10.6 Tests (1)", 
+                    "Mac 10.6 Tests (dbg)(1)"
+                ]
+            }, 
+            "remoting_unittests": {
+                "builders": [
+                    "Mac10.7 Tests (1)", 
+                    "Mac 10.7 Tests (dbg)(1)", 
+                    "Mac10.6 Tests (1)", 
+                    "Mac 10.6 Tests (dbg)(1)"
+                ]
+            }, 
+            "sql_unittests": {
+                "builders": [
+                    "Mac10.6 Tests (2)", 
+                    "iOS Simulator (dbg)", 
+                    "Mac 10.6 Tests (dbg)(4)", 
+                    "Mac10.7 Tests (2)", 
+                    "Mac 10.7 Tests (dbg)(4)"
+                ]
+            }, 
+            "sync_integration_tests": {
+                "builders": [
+                    "Mac10.6 Sync"
+                ]
+            }, 
+            "sync_unit_tests": {
+                "builders": [
+                    "Mac10.6 Tests (2)", 
+                    "Mac 10.6 Tests (dbg)(4)", 
+                    "Mac10.7 Tests (2)", 
+                    "Mac 10.7 Tests (dbg)(4)"
+                ]
+            }, 
+            "ui_unittests": {
+                "builders": [
+                    "Mac10.6 Tests (2)", 
+                    "Mac 10.6 Tests (dbg)(4)", 
+                    "Mac10.7 Tests (2)", 
+                    "Mac 10.7 Tests (dbg)(4)"
+                ]
+            }, 
+            "unit_tests": {
+                "builders": [
+                    "Mac10.6 Tests (2)", 
+                    "Mac 10.6 Tests (dbg)(4)", 
+                    "Mac10.7 Tests (2)", 
+                    "Mac 10.7 Tests (dbg)(4)"
+                ]
+            }, 
+            "webkit_compositor_bindings_unittests": {
+                "builders": [
+                    "Mac10.7 Tests (1)", 
+                    "Mac 10.7 Tests (dbg)(1)", 
+                    "Mac10.6 Tests (1)", 
+                    "Mac 10.6 Tests (dbg)(1)"
+                ]
+            }
+        }, 
+        "url": "http://build.chromium.org/p/chromium.mac"
+    }, 
+    {
+        "name": "ChromiumLinux", 
+        "tests": {
+            "Instrumentation tests: Smoke, SmallTest, MediumTest, LargeTest - ChromiumTestShellTest": {
+                "builders": [
+                    "Android Tests (dbg)"
+                ]
+            }, 
+            "Instrumentation tests: Smoke, SmallTest, MediumTest, LargeTest - ContentShellTest": {
+                "builders": [
+                    "Android Tests (dbg)"
+                ]
+            }, 
+            "aura_unittests": {
+                "builders": [
+                    "Linux (aura)"
+                ]
+            }, 
+            "base_unittests": {
+                "builders": [
+                    "Linux Tests (dbg)(2)", 
+                    "Linux Tests x64", 
+                    "Linux (Precise)", 
+                    "Linux Clang (dbg)", 
+                    "Android Tests (dbg)", 
+                    "Linux (aura)"
+                ]
+            }, 
+            "browser_tests": {
+                "builders": [
+                    "Linux Tests (dbg)(1)", 
+                    "Linux Tests x64", 
+                    "Linux (Precise)"
+                ]
+            }, 
+            "cacheinvalidation_unittests": {
+                "builders": [
+                    "Linux Tests (dbg)(2)", 
+                    "Linux Tests x64", 
+                    "Linux (aura)"
+                ]
+            }, 
+            "cc_unittests": {
+                "builders": [
+                    "Linux Tests (dbg)(2)", 
+                    "Linux Tests x64", 
+                    "Android Tests (dbg)"
+                ]
+            }, 
+            "compositor_unittests": {
+                "builders": [
+                    "Linux (aura)"
+                ]
+            }, 
+            "content_browsertests": {
+                "builders": [
+                    "Linux Tests (dbg)(1)", 
+                    "Linux Tests x64", 
+                    "Linux (Precise)", 
+                    "Linux (aura)"
+                ]
+            }, 
+            "content_unittests": {
+                "builders": [
+                    "Linux Tests (dbg)(2)", 
+                    "Linux Tests x64", 
+                    "Linux Clang (dbg)", 
+                    "Android Tests (dbg)", 
+                    "Linux (aura)"
+                ]
+            }, 
+            "crypto_unittests": {
+                "builders": [
+                    "Linux Tests (dbg)(2)", 
+                    "Linux Tests x64", 
+                    "Linux Clang (dbg)", 
+                    "Linux (aura)"
+                ]
+            }, 
+            "dbus_unittests": {
+                "builders": [
+                    "Linux Tests (dbg)(2)", 
+                    "Linux Tests x64"
+                ]
+            }, 
+            "device_unittests": {
+                "builders": [
+                    "Linux Tests (dbg)(2)", 
+                    "Linux Tests x64", 
+                    "Linux Clang (dbg)", 
+                    "Linux (aura)"
+                ]
+            }, 
+            "googleurl_unittests": {
+                "builders": [
+                    "Linux Tests (dbg)(2)", 
+                    "Linux Tests x64", 
+                    "Linux (aura)"
+                ]
+            }, 
+            "gpu_unittests": {
+                "builders": [
+                    "Linux Tests (dbg)(2)", 
+                    "Linux Tests x64", 
+                    "Android Tests (dbg)", 
+                    "Linux (aura)"
+                ]
+            }, 
+            "interactive_ui_tests": {
+                "builders": [
+                    "Linux Tests (dbg)(2)", 
+                    "Linux Tests x64"
+                ]
+            }, 
+            "ipc_tests": {
+                "builders": [
+                    "Linux Tests (dbg)(2)", 
+                    "Linux Tests x64", 
+                    "Linux Clang (dbg)", 
+                    "Android Tests (dbg)", 
+                    "Linux (aura)"
+                ]
+            }, 
+            "jingle_unittests": {
+                "builders": [
+                    "Linux Tests (dbg)(2)", 
+                    "Linux Tests x64", 
+                    "Linux (aura)"
+                ]
+            }, 
+            "media_unittests": {
+                "builders": [
+                    "Linux Tests (dbg)(2)", 
+                    "Linux Tests x64", 
+                    "Android Tests (dbg)", 
+                    "Linux (aura)"
+                ]
+            }, 
+            "net_unittests": {
+                "builders": [
+                    "Linux Tests (dbg)(1)", 
+                    "Linux Tests x64", 
+                    "Android Tests (dbg)", 
+                    "Linux (aura)"
+                ]
+            }, 
+            "ppapi_unittests": {
+                "builders": [
+                    "Linux Tests (dbg)(2)", 
+                    "Linux Tests x64", 
+                    "Linux (aura)"
+                ]
+            }, 
+            "printing_unittests": {
+                "builders": [
+                    "Linux Tests (dbg)(2)", 
+                    "Linux Tests x64", 
+                    "Linux (aura)"
+                ]
+            }, 
+            "remoting_unittests": {
+                "builders": [
+                    "Linux Tests (dbg)(2)", 
+                    "Linux Tests x64", 
+                    "Linux (aura)"
+                ]
+            }, 
+            "sandbox_linux_unittests": {
+                "builders": [
+                    "Linux Tests x64", 
+                    "Linux (Precise)"
+                ]
+            }, 
+            "sql_unittests": {
+                "builders": [
+                    "Linux Tests (dbg)(2)", 
+                    "Linux Tests x64", 
+                    "Linux Clang (dbg)", 
+                    "Android Tests (dbg)", 
+                    "Linux (aura)"
+                ]
+            }, 
+            "sync_integration_tests": {
+                "builders": [
+                    "Linux Sync"
+                ]
+            }, 
+            "sync_unit_tests": {
+                "builders": [
+                    "Linux Tests (dbg)(2)", 
+                    "Linux Tests x64", 
+                    "Linux Clang (dbg)", 
+                    "Android Tests (dbg)", 
+                    "Linux (aura)"
+                ]
+            }, 
+            "ui_unittests": {
+                "builders": [
+                    "Linux Tests (dbg)(2)", 
+                    "Linux Tests x64", 
+                    "Linux Clang (dbg)", 
+                    "Android Tests (dbg)", 
+                    "Linux (aura)"
+                ]
+            }, 
+            "unit_tests": {
+                "builders": [
+                    "Linux Tests (dbg)(2)", 
+                    "Linux Tests x64", 
+                    "Linux Clang (dbg)", 
+                    "Android Tests (dbg)", 
+                    "Linux (aura)"
+                ]
+            }, 
+            "views_unittests": {
+                "builders": [
+                    "Linux (aura)"
+                ]
+            }, 
+            "webkit_compositor_bindings_unittests": {
+                "builders": [
+                    "Linux Tests (dbg)(2)", 
+                    "Linux Tests x64", 
+                    "Android Tests (dbg)"
+                ]
+            }
+        }, 
+        "url": "http://build.chromium.org/p/chromium.linux"
+    }, 
+    {
+        "name": "ChromiumChromiumOS", 
+        "tests": {
+            "ash_unittests": {
+                "builders": [
+                    "Linux ChromiumOS Tests (dbg)(1)", 
+                    "Linux ChromiumOS Tests (1)"
+                ]
+            }, 
+            "aura_unittests": {
+                "builders": [
+                    "Linux ChromiumOS Tests (dbg)(1)", 
+                    "Linux ChromiumOS Tests (1)"
+                ]
+            }, 
+            "base_unittests": {
+                "builders": [
+                    "Linux ChromiumOS Tests (dbg)(1)", 
+                    "Linux ChromiumOS Tests (1)"
+                ]
+            }, 
+            "browser_tests": {
+                "builders": [
+                    "Linux ChromiumOS Tests (2)", 
+                    "Linux ChromiumOS Tests (dbg)(2)"
+                ]
+            }, 
+            "cacheinvalidation_unittests": {
+                "builders": [
+                    "Linux ChromiumOS Tests (dbg)(1)", 
+                    "Linux ChromiumOS Tests (1)"
+                ]
+            }, 
+            "compositor_unittests": {
+                "builders": [
+                    "Linux ChromiumOS Tests (dbg)(1)", 
+                    "Linux ChromiumOS Tests (1)"
+                ]
+            }, 
+            "content_browsertests": {
+                "builders": [
+                    "Linux ChromiumOS Tests (2)", 
+                    "Linux ChromiumOS Tests (dbg)(2)"
+                ]
+            }, 
+            "content_unittests": {
+                "builders": [
+                    "Linux ChromiumOS Tests (dbg)(1)", 
+                    "Linux ChromiumOS Tests (1)"
+                ]
+            }, 
+            "crypto_unittests": {
+                "builders": [
+                    "Linux ChromiumOS Tests (dbg)(1)", 
+                    "Linux ChromiumOS Tests (1)"
+                ]
+            }, 
+            "dbus_unittests": {
+                "builders": [
+                    "Linux ChromiumOS Tests (dbg)(1)", 
+                    "Linux ChromiumOS Tests (1)"
+                ]
+            }, 
+            "googleurl_unittests": {
+                "builders": [
+                    "Linux ChromiumOS Tests (dbg)(1)", 
+                    "Linux ChromiumOS Tests (1)"
+                ]
+            }, 
+            "gpu_unittests": {
+                "builders": [
+                    "Linux ChromiumOS Tests (dbg)(1)", 
+                    "Linux ChromiumOS Tests (1)"
+                ]
+            }, 
+            "interactive_ui_tests": {
+                "builders": [
+                    "Linux ChromiumOS Tests (dbg)(3)", 
+                    "Linux ChromiumOS Tests (2)"
+                ]
+            }, 
+            "ipc_tests": {
+                "builders": [
+                    "Linux ChromiumOS Tests (dbg)(1)", 
+                    "Linux ChromiumOS Tests (1)"
+                ]
+            }, 
+            "jingle_unittests": {
+                "builders": [
+                    "Linux ChromiumOS Tests (dbg)(1)", 
+                    "Linux ChromiumOS Tests (1)"
+                ]
+            }, 
+            "media_unittests": {
+                "builders": [
+                    "Linux ChromiumOS Tests (dbg)(1)", 
+                    "Linux ChromiumOS Tests (1)"
+                ]
+            }, 
+            "net_unittests": {
+                "builders": [
+                    "Linux ChromiumOS Tests (dbg)(1)", 
+                    "Linux ChromiumOS Tests (1)"
+                ]
+            }, 
+            "ppapi_unittests": {
+                "builders": [
+                    "Linux ChromiumOS Tests (dbg)(1)", 
+                    "Linux ChromiumOS Tests (1)"
+                ]
+            }, 
+            "printing_unittests": {
+                "builders": [
+                    "Linux ChromiumOS Tests (dbg)(1)", 
+                    "Linux ChromiumOS Tests (1)"
+                ]
+            }, 
+            "remoting_unittests": {
+                "builders": [
+                    "Linux ChromiumOS Tests (dbg)(1)", 
+                    "Linux ChromiumOS Tests (1)"
+                ]
+            }, 
+            "sql_unittests": {
+                "builders": [
+                    "Linux ChromiumOS Tests (dbg)(1)", 
+                    "Linux ChromiumOS Tests (1)"
+                ]
+            }, 
+            "sync_unit_tests": {
+                "builders": [
+                    "Linux ChromiumOS Tests (dbg)(1)", 
+                    "Linux ChromiumOS Tests (1)"
+                ]
+            }, 
+            "ui_unittests": {
+                "builders": [
+                    "Linux ChromiumOS Tests (dbg)(1)", 
+                    "Linux ChromiumOS Tests (1)"
+                ]
+            }, 
+            "unit_tests": {
+                "builders": [
+                    "Linux ChromiumOS Tests (dbg)(1)", 
+                    "Linux ChromiumOS Tests (1)"
+                ]
+            }, 
+            "views_unittests": {
+                "builders": [
+                    "Linux ChromiumOS Tests (dbg)(1)", 
+                    "Linux ChromiumOS Tests (1)"
+                ]
+            }
+        }, 
+        "url": "http://build.chromium.org/p/chromium.chromiumos"
+    }, 
+    {
+        "name": "ChromiumGPU", 
+        "tests": {
+            "gl_tests": {
+                "builders": [
+                    "Win7 Debug (NVIDIA)", 
+                    "Mac Release (Intel)", 
+                    "Mac Debug (Intel)", 
+                    "Win7 Release (NVIDIA)", 
+                    "Linux Debug (NVIDIA)", 
+                    "Linux Release (NVIDIA)"
+                ]
+            }, 
+            "gles2_conform_test": {
+                "builders": [
+                    "Win7 Debug (NVIDIA)", 
+                    "Mac Release (Intel)", 
+                    "Mac Debug (Intel)", 
+                    "Win7 Release (NVIDIA)", 
+                    "Linux Debug (NVIDIA)", 
+                    "Linux Release (NVIDIA)"
+                ]
+            }, 
+            "gpu_frame_rate_test": {
+                "builders": [
+                    "Mac Release (Intel)", 
+                    "Win7 Release (NVIDIA)", 
+                    "Linux Release (NVIDIA)"
+                ]
+            }, 
+            "gpu_latency_tests": {
+                "builders": [
+                    "Mac Release (Intel)", 
+                    "Win7 Release (NVIDIA)", 
+                    "Linux Release (NVIDIA)"
+                ]
+            }, 
+            "gpu_tests": {
+                "builders": [
+                    "Win7 Debug (NVIDIA)", 
+                    "Mac Release (Intel)", 
+                    "Mac Debug (Intel)", 
+                    "Win7 Release (NVIDIA)", 
+                    "Linux Debug (NVIDIA)", 
+                    "Linux Release (NVIDIA)"
+                ]
+            }, 
+            "gpu_throughput_tests": {
+                "builders": [
+                    "Mac Release (Intel)", 
+                    "Win7 Release (NVIDIA)", 
+                    "Linux Release (NVIDIA)"
+                ]
+            }
+        }, 
+        "url": "http://build.chromium.org/p/chromium.gpu"
+    }, 
+    {
+        "name": "ChromiumGPUFYI", 
+        "tests": {
+            "content_unittests": {
+                "builders": [
+                    "Linux Audio", 
+                    "Win7 Audio"
+                ]
+            }, 
+            "gl_tests": {
+                "builders": [
+                    "Mac Release (ATI)", 
+                    "WinXP Debug (NVIDIA)", 
+                    "Linux Release (ATI)", 
+                    "Mac Retina Release", 
+                    "Win7 Release (Intel)", 
+                    "Win7 Release (ATI)", 
+                    "Linux Release (Intel)", 
+                    "Mac Retina Debug", 
+                    "WinXP Release (NVIDIA)"
+                ]
+            }, 
+            "gles2_conform_test": {
+                "builders": [
+                    "Mac Release (ATI)", 
+                    "WinXP Debug (NVIDIA)", 
+                    "Linux Release (ATI)", 
+                    "Mac Retina Release", 
+                    "Win7 Release (Intel)", 
+                    "Win7 Release (ATI)", 
+                    "Linux Release (Intel)", 
+                    "Mac Retina Debug", 
+                    "WinXP Release (NVIDIA)"
+                ]
+            }, 
+            "gpu_frame_rate_test": {
+                "builders": [
+                    "Mac Release (ATI)", 
+                    "Linux Release (ATI)", 
+                    "Mac Retina Release", 
+                    "Win7 Release (Intel)", 
+                    "Win7 Release (ATI)", 
+                    "Linux Release (Intel)", 
+                    "WinXP Release (NVIDIA)"
+                ]
+            }, 
+            "gpu_latency_tests": {
+                "builders": [
+                    "Mac Release (ATI)", 
+                    "Linux Release (ATI)", 
+                    "Mac Retina Release", 
+                    "Win7 Release (Intel)", 
+                    "Win7 Release (ATI)", 
+                    "Linux Release (Intel)", 
+                    "WinXP Release (NVIDIA)"
+                ]
+            }, 
+            "gpu_tests": {
+                "builders": [
+                    "Mac Release (ATI)", 
+                    "WinXP Debug (NVIDIA)", 
+                    "Linux Release (ATI)", 
+                    "Mac Retina Release", 
+                    "Win7 Release (Intel)", 
+                    "Win7 Release (ATI)", 
+                    "Linux Release (Intel)", 
+                    "Mac Retina Debug", 
+                    "WinXP Release (NVIDIA)"
+                ]
+            }, 
+            "gpu_throughput_tests": {
+                "builders": [
+                    "Mac Release (ATI)", 
+                    "Linux Release (ATI)", 
+                    "Mac Retina Release", 
+                    "Win7 Release (Intel)", 
+                    "Win7 Release (ATI)", 
+                    "Linux Release (Intel)", 
+                    "WinXP Release (NVIDIA)"
+                ]
+            }, 
+            "media_unittests": {
+                "builders": [
+                    "Linux Audio", 
+                    "Win7 Audio"
+                ]
+            }
+        }, 
+        "url": "http://build.chromium.org/p/chromium.gpu.fyi"
+    }, 
+    {
+        "name": "ChromiumPerfAv", 
+        "tests": {
+            "layout-tests": {
+                "builders": [
+                    "AV Win7", 
+                    "AV Linux"
+                ]
+            }, 
+            "media_tests_av_perf": {
+                "builders": [
+                    "AV Win7", 
+                    "AV Linux"
+                ]
+            }
+        }, 
+        "url": "http://build.chromium.org/p/chromium.perf_av"
+    }, 
+    {
+        "name": "ChromiumWebkit", 
+        "tests": {
+            "base_unittests": {
+                "builders": [
+                    "Android Tests (dbg)"
+                ]
+            }, 
+            "browser_tests": {
+                "builders": [
+                    "Win7 (dbg)", 
+                    "Linux Tests", 
+                    "Mac10.6 Tests", 
+                    "Mac10.8 Tests"
+                ]
+            }, 
+            "cc_unittests": {
+                "builders": [
+                    "Android Tests (dbg)"
+                ]
+            }, 
+            "chrome_frame_net_tests": {
+                "builders": [
+                    "Chrome Frame Tests"
+                ]
+            }, 
+            "chrome_frame_tests": {
+                "builders": [
+                    "Chrome Frame Tests"
+                ]
+            }, 
+            "chrome_frame_unittests": {
+                "builders": [
+                    "Chrome Frame Tests"
+                ]
+            }, 
+            "content_browsertests": {
+                "builders": [
+                    "Win7 (dbg)", 
+                    "Linux Tests", 
+                    "Mac10.6 Tests", 
+                    "Mac10.8 Tests"
+                ]
+            }, 
+            "content_unittests": {
+                "builders": [
+                    "Win7 (dbg)", 
+                    "Vista Tests", 
+                    "Linux Tests", 
+                    "Mac10.6 Tests", 
+                    "Android Tests (dbg)", 
+                    "Mac10.8 Tests"
+                ]
+            }, 
+            "dromaeo_domcoreattr_test": {
+                "builders": [
+                    "Win7 Perf", 
+                    "Mac10.6 Perf", 
+                    "Linux Perf"
+                ]
+            }, 
+            "dromaeo_domcoremodify_test": {
+                "builders": [
+                    "Win7 Perf", 
+                    "Mac10.6 Perf", 
+                    "Linux Perf"
+                ]
+            }, 
+            "dromaeo_domcorequery_test": {
+                "builders": [
+                    "Win7 Perf", 
+                    "Mac10.6 Perf", 
+                    "Linux Perf"
+                ]
+            }, 
+            "dromaeo_domcoretraverse_test": {
+                "builders": [
+                    "Win7 Perf", 
+                    "Mac10.6 Perf", 
+                    "Linux Perf"
+                ]
+            }, 
+            "dromaeo_jslibattrjquery_test": {
+                "builders": [
+                    "Win7 Perf", 
+                    "Mac10.6 Perf", 
+                    "Linux Perf"
+                ]
+            }, 
+            "dromaeo_jslibattrprototype_test": {
+                "builders": [
+                    "Win7 Perf", 
+                    "Mac10.6 Perf", 
+                    "Linux Perf"
+                ]
+            }, 
+            "dromaeo_jslibeventjquery_test": {
+                "builders": [
+                    "Win7 Perf", 
+                    "Mac10.6 Perf", 
+                    "Linux Perf"
+                ]
+            }, 
+            "dromaeo_jslibeventprototype_test": {
+                "builders": [
+                    "Win7 Perf", 
+                    "Mac10.6 Perf", 
+                    "Linux Perf"
+                ]
+            }, 
+            "dromaeo_jslibmodifyjquery_test": {
+                "builders": [
+                    "Win7 Perf", 
+                    "Mac10.6 Perf", 
+                    "Linux Perf"
+                ]
+            }, 
+            "dromaeo_jslibmodifyprototype_test": {
+                "builders": [
+                    "Win7 Perf", 
+                    "Mac10.6 Perf", 
+                    "Linux Perf"
+                ]
+            }, 
+            "dromaeo_jslibstylejquery_test": {
+                "builders": [
+                    "Win7 Perf", 
+                    "Mac10.6 Perf", 
+                    "Linux Perf"
+                ]
+            }, 
+            "dromaeo_jslibstyleprototype_test": {
+                "builders": [
+                    "Win7 Perf", 
+                    "Mac10.6 Perf", 
+                    "Linux Perf"
+                ]
+            }, 
+            "dromaeo_jslibtraversejquery_test": {
+                "builders": [
+                    "Win7 Perf", 
+                    "Mac10.6 Perf", 
+                    "Linux Perf"
+                ]
+            }, 
+            "dromaeo_jslibtraverseprototype_test": {
+                "builders": [
+                    "Win7 Perf", 
+                    "Mac10.6 Perf", 
+                    "Linux Perf"
+                ]
+            }, 
+            "gl_tests": {
+                "builders": [
+                    "GPU Win7 (NVIDIA)", 
+                    "GPU Linux (NVIDIA)", 
+                    "GPU Mac10.7", 
+                    "GPU Win7 (dbg) (NVIDIA)", 
+                    "GPU Mac10.7 (dbg)", 
+                    "GPU Linux (dbg) (NVIDIA)"
+                ]
+            }, 
+            "gpu_frame_rate_test": {
+                "builders": [
+                    "GPU Win7 (NVIDIA)", 
+                    "GPU Linux (NVIDIA)", 
+                    "GPU Mac10.7"
+                ]
+            }, 
+            "gpu_latency_tests": {
+                "builders": [
+                    "GPU Win7 (NVIDIA)", 
+                    "GPU Linux (NVIDIA)", 
+                    "GPU Mac10.7"
+                ]
+            }, 
+            "gpu_tests": {
+                "builders": [
+                    "GPU Win7 (NVIDIA)", 
+                    "GPU Linux (NVIDIA)", 
+                    "GPU Mac10.7", 
+                    "GPU Win7 (dbg) (NVIDIA)", 
+                    "GPU Mac10.7 (dbg)", 
+                    "GPU Linux (dbg) (NVIDIA)"
+                ]
+            }, 
+            "gpu_throughput_tests": {
+                "builders": [
+                    "GPU Win7 (NVIDIA)", 
+                    "GPU Linux (NVIDIA)", 
+                    "GPU Mac10.7"
+                ]
+            }, 
+            "gpu_unittests": {
+                "builders": [
+                    "Android Tests (dbg)"
+                ]
+            }, 
+            "installer_util_unittests": {
+                "builders": [
+                    "Vista Tests"
+                ]
+            }, 
+            "interactive_ui_tests": {
+                "builders": [
+                    "Win7 (dbg)", 
+                    "Linux Tests", 
+                    "Mac10.6 Tests", 
+                    "Mac10.8 Tests"
+                ]
+            }, 
+            "ipc_tests": {
+                "builders": [
+                    "Win7 (dbg)", 
+                    "Vista Tests", 
+                    "Linux Tests", 
+                    "Mac10.6 Tests", 
+                    "Android Tests (dbg)", 
+                    "Mac10.8 Tests"
+                ]
+            }, 
+            "layout-tests": {
+                "builders": [
+                    "WebKit Linux 32", 
+                    "WebKit Win7", 
+                    "WebKit Linux ASAN", 
+                    "WebKit Win7 (dbg)(2)", 
+                    "WebKit (Content Shell) Linux", 
+                    "WebKit (Content Shell) Win", 
+                    "WebKit Mac10.7 (dbg)", 
+                    "WebKit Mac10.6 (dbg)", 
+                    "WebKit Linux", 
+                    "WebKit Linux (dbg)", 
+                    "WebKit Mac10.6", 
+                    "WebKit Mac10.7", 
+                    "WebKit Linux (deps)", 
+                    "WebKit Mac10.8", 
+                    "WebKit Mac10.6 (deps)", 
+                    "WebKit (Content Shell) Mac10.6", 
+                    "WebKit Win7 (dbg)(1)", 
+                    "WebKit XP (deps)", 
+                    "WebKit XP"
+                ]
+            }, 
+            "media_unittests": {
+                "builders": [
+                    "Android Tests (dbg)"
+                ]
+            }, 
+            "memory test: test_shell": {
+                "builders": [
+                    "Linux Valgrind"
+                ]
+            }, 
+            "memory_test": {
+                "builders": [
+                    "Mac10.6 Perf"
+                ]
+            }, 
+            "mini_installer_test": {
+                "builders": [
+                    "Vista Tests"
+                ]
+            }, 
+            "net_unittests": {
+                "builders": [
+                    "Android Tests (dbg)"
+                ]
+            }, 
+            "new_tab_ui_cold_test": {
+                "builders": [
+                    "Win7 Perf", 
+                    "Mac10.6 Perf", 
+                    "Linux Perf"
+                ]
+            }, 
+            "new_tab_ui_warm_test": {
+                "builders": [
+                    "Win7 Perf", 
+                    "Mac10.6 Perf", 
+                    "Linux Perf"
+                ]
+            }, 
+            "sql_unittests": {
+                "builders": [
+                    "Win7 (dbg)", 
+                    "Vista Tests", 
+                    "Linux Tests", 
+                    "Mac10.6 Tests", 
+                    "Android Tests (dbg)", 
+                    "Mac10.8 Tests"
+                ]
+            }, 
+            "startup_test": {
+                "builders": [
+                    "Win7 Perf", 
+                    "Mac10.6 Perf", 
+                    "Linux Perf"
+                ]
+            }, 
+            "sunspider_test": {
+                "builders": [
+                    "Win7 Perf", 
+                    "Mac10.6 Perf", 
+                    "Linux Perf"
+                ]
+            }, 
+            "sync_unit_tests": {
+                "builders": [
+                    "Win7 (dbg)", 
+                    "Vista Tests", 
+                    "Linux Tests", 
+                    "Mac10.6 Tests", 
+                    "Android Tests (dbg)", 
+                    "Mac10.8 Tests"
+                ]
+            }, 
+            "tab_switching_test": {
+                "builders": [
+                    "Mac10.6 Perf"
+                ]
+            }, 
+            "test_shell_tests": {
+                "builders": [
+                    "WebKit Linux 32", 
+                    "WebKit Win7", 
+                    "WebKit Mac10.7 (dbg)", 
+                    "WebKit Mac10.6 (dbg)", 
+                    "WebKit Linux", 
+                    "WebKit Linux (dbg)", 
+                    "WebKit Mac10.6", 
+                    "WebKit Mac10.7", 
+                    "WebKit Linux (deps)", 
+                    "WebKit Mac10.8", 
+                    "WebKit Mac10.6 (deps)", 
+                    "WebKit Win7 (dbg)(1)", 
+                    "WebKit XP (deps)", 
+                    "WebKit XP"
+                ]
+            }, 
+            "ui_unittests": {
+                "builders": [
+                    "Win7 (dbg)", 
+                    "Vista Tests", 
+                    "Linux Tests", 
+                    "Mac10.6 Tests", 
+                    "Android Tests (dbg)", 
+                    "Mac10.8 Tests"
+                ]
+            }, 
+            "unit_tests": {
+                "builders": [
+                    "Win7 (dbg)", 
+                    "Vista Tests", 
+                    "Linux Tests", 
+                    "Mac10.6 Tests", 
+                    "Android Tests (dbg)", 
+                    "Mac10.8 Tests"
+                ]
+            }, 
+            "v8_benchmark_test": {
+                "builders": [
+                    "Mac10.6 Perf"
+                ]
+            }, 
+            "views_unittests": {
+                "builders": [
+                    "Win7 (dbg)", 
+                    "Vista Tests"
+                ]
+            }, 
+            "webkit_compositor_bindings_unittests": {
+                "builders": [
+                    "Android Tests (dbg)"
+                ]
+            }, 
+            "webkit_unit_tests": {
+                "builders": [
+                    "WebKit Linux 32", 
+                    "WebKit Win7", 
+                    "WebKit Android (GalaxyNexus)", 
+                    "WebKit Mac10.7 (dbg)", 
+                    "WebKit Mac10.6 (dbg)", 
+                    "WebKit Linux", 
+                    "WebKit Linux (dbg)", 
+                    "WebKit Mac10.6", 
+                    "WebKit Mac10.7", 
+                    "WebKit Linux (deps)", 
+                    "WebKit Mac10.8", 
+                    "WebKit Mac10.6 (deps)", 
+                    "WebKit Win7 (dbg)(1)", 
+                    "WebKit XP (deps)", 
+                    "WebKit XP"
+                ]
+            }
+        }, 
+        "url": "http://build.chromium.org/p/chromium.webkit"
+    }, 
+    {
+        "name": "webkit.org", 
+        "tests": {
+            "layout-tests": {
+                "builders": [
+                    "Apple Lion (Leaks)", 
+                    "Apple Lion Debug WK1 (Tests)", 
+                    "Apple Lion Debug WK2 (Tests)", 
+                    "Apple Lion Release WK1 (Tests)", 
+                    "Apple Lion Release WK2 (Tests)", 
+                    "Apple MountainLion (Leaks)", 
+                    "Apple MountainLion Debug WK1 (Tests)", 
+                    "Apple MountainLion Debug WK2 (Tests)", 
+                    "Apple MountainLion Release WK1 (Tests)", 
+                    "Apple MountainLion Release WK2 (Tests)", 
+                    "Apple Win 7 Release (Tests)", 
+                    "Apple Win XP Debug (Tests)", 
+                    "Chromium Android Release (Tests)", 
+                    "Chromium Linux Release (Tests)", 
+                    "Chromium Mac Release (Tests)", 
+                    "Chromium Win Release (Tests)", 
+                    "EFL Linux 64-bit Debug WK2", 
+                    "EFL Linux 64-bit Release", 
+                    "EFL Linux 64-bit Release WK2", 
+                    "GTK Linux 32-bit Release", 
+                    "GTK Linux 64-bit Debug", 
+                    "GTK Linux 64-bit Release", 
+                    "GTK Linux 64-bit Release WK2 (Tests)", 
+                    "Qt Linux Release", 
+                    "WinCairo Release"
+                ]
+            }
+        }, 
+        "url": "http://build.webkit.org"
+    }
+]);
diff --git a/Tools/TestResultServer/static-dashboards/builders_unittests.js b/Tools/TestResultServer/static-dashboards/builders_unittests.js
new file mode 100644 (file)
index 0000000..29c02f1
--- /dev/null
@@ -0,0 +1,41 @@
+// Copyright (C) 2012 Google Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+//    * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//    * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+//    * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+test('loading steps', 4, function() {
+    var tests = {}
+    var baseUrl = 'http://dummyurl';
+    var name = 'dummyname';
+    var master = new builders.BuilderMaster(name, baseUrl, tests);
+
+    var builder = 'dummybuilder';
+    var buildNumber = 12345;
+    equal(master.logPath(builder, buildNumber), baseUrl + '/builders/' + builder + '/builds/' + buildNumber);
+    equal(master.builderJsonPath(), baseUrl + '/json/builders');
+    equal(master.tests, tests);
+    equal(master.name, name);
+})
index 6ec0c8e4292cf578689d19ec0cd0267e8b6d7ceb..f685ad6f6bbf1767680c250463cca03f7e82e6a0 100644 (file)
@@ -425,11 +425,6 @@ function currentBuilderGroup()
     return currentBuilderGroupCategory()[g_crossDashboardState.group]
 }
 
-function builderMaster(builderName)
-{
-    return BUILDER_TO_MASTER[builderName];
-}
-
 function isTipOfTreeWebKitBuilder()
 {
     return currentBuilderGroup().isToTWebKit;
index 7589e34242ce137b1fe65cec8d2b773d2b5b70a2..d44e3e58e64e2a930dee51868e5f9376adc9fe1b 100644 (file)
@@ -1223,7 +1223,7 @@ function showPopupForBuild(e, builder, index, opt_testName)
             'WebKit') +
         '</li>';
 
-    if (master == WEBKIT_BUILDER_MASTER) {
+    if (master.name == WEBKIT_BUILDER_MASTER) {
         var revision = g_resultsByBuilder[builder].webkitRevision[index];
         html += '<li><span class=link onclick="setQueryParameter(\'revision\',' +
             revision + ')">Show results for WebKit r' + revision +
@@ -1291,7 +1291,7 @@ function htmlForTestResults(test)
         var extraClassNames = '';
         var webkitRevision = g_resultsByBuilder[builder].webkitRevision;
         var isWebkitMerge = webkitRevision[i + 1] && webkitRevision[i] != webkitRevision[i + 1];
-        if (isWebkitMerge && master != WEBKIT_BUILDER_MASTER)
+        if (isWebkitMerge && master.name != WEBKIT_BUILDER_MASTER)
             extraClassNames += ' merge';
 
         html += '<td title="' + (resultString || 'NO DATA') + '. Click for more info." class="results ' + currentResult +
@@ -1821,7 +1821,7 @@ function htmlForIndividualTestOnAllBuildersWithResultsLinks(test)
     if (isLayoutTestResults() || isGPUTestResults()) {
         if (isLayoutTestResults())
             html += ' | ' + linkHTMLToToggleState('showLargeExpectations', 'large thumbnails');
-        if (testResults && builderMaster(testResults[0].builder) == WEBKIT_BUILDER_MASTER) {
+        if (testResults && currentBuilderGroup().master().name == WEBKIT_BUILDER_MASTER) {
             var revision = g_currentState.revision || '';
             html += '<form onsubmit="setQueryParameter(\'revision\', revision.value);' +
                 'return false;">Show results for WebKit revision: ' +
@@ -2256,7 +2256,7 @@ function loadExpectationsLayoutTests(test, expectationsContainer)
     revisionContainer.textContent = "Showing results for: "
     expectationsContainer.appendChild(revisionContainer);
     for (var builder in g_builders) {
-        if (builderMaster(builder) == WEBKIT_BUILDER_MASTER) {
+        if (builderMaster(builder).name == WEBKIT_BUILDER_MASTER) {
             var latestRevision = g_currentState.revision || g_resultsByBuilder[builder].webkitRevision[0];
             var buildInfo = buildInfoForRevision(builder, latestRevision);
             var revisionInfo = document.createElement('div');
@@ -2274,7 +2274,7 @@ function loadExpectationsLayoutTests(test, expectationsContainer)
 
     for (var builder in g_builders) {
         var actualResultsBase;
-        if (builderMaster(builder) == WEBKIT_BUILDER_MASTER) {
+        if (builderMaster(builder).name == WEBKIT_BUILDER_MASTER) {
             var latestRevision = g_currentState.revision || g_resultsByBuilder[builder].webkitRevision[0];
             var buildInfo = buildInfoForRevision(builder, latestRevision);
             actualResultsBase = 'http://build.webkit.org/results/' + builder +
index 0d7f45716112788a9cd2ca319860bbd8cbd89211..05a2ca621b63318bcf580a215f10d3efead89cc5 100644 (file)
@@ -37,8 +37,23 @@ function resetGlobals()
     g_allTestsTrie = null;
     g_currentState = {};
     g_crossDashboardState = {};
+    g_testToResultsMap = {};
+
     for (var key in g_defaultCrossDashboardStateValues)
         g_crossDashboardState[key] = g_defaultCrossDashboardStateValues[key];
+
+    LOAD_BUILDBOT_DATA([{
+        name: 'ChromiumWebkit',
+        url: 'dummyurl', 
+        tests: {'layout-tests': {'builders': ['WebKit Linux', 'WebKit Linux (dbg)', 'WebKit Mac10.7', 'WebKit Win']}}
+    },
+    {
+        name: 'webkit.org',
+        url: 'dummyurl',
+        tests: {'layout-tests': {'builders': ['Apple SnowLeopard Tests', 'Qt Linux Tests', 'Chromium Mac10.7 Tests', 'GTK Win']}}
+    }]);
+    for (var group in LAYOUT_TESTS_BUILDER_GROUPS)
+        LAYOUT_TESTS_BUILDER_GROUPS[group] = null;
 }
 
 function runExpectationsTest(builder, test, expectations, modifiers)
@@ -371,9 +386,10 @@ test('htmlForIndividualTestOnAllBuildersWithResultsLinksNonexistant', 1, functio
 
 test('htmlForIndividualTestOnAllBuildersWithResultsLinks', 1, function() {
     resetGlobals();
+    loadBuildersList('@ToT - chromium.org', 'layout-tests');
+
+    var builderName = 'WebKit Linux';
     var test = 'dummytest.html';
-    var builderName = 'dummyBuilder';
-    BUILDER_TO_MASTER[builderName] = CHROMIUM_WEBKIT_BUILDER_MASTER;
     g_testToResultsMap[test] = [createResultsObjectForTest(test, builderName)];
 
     equal(htmlForIndividualTestOnAllBuildersWithResultsLinks(test),
@@ -389,8 +405,7 @@ test('htmlForIndividualTestOnAllBuildersWithResultsLinks', 1, function() {
         '</table>' +
         '<div>The following builders either don\'t run this test (e.g. it\'s skipped) or all runs passed:</div>' +
         '<div class=skipped-builder-list>' +
-            '<div class=skipped-builder>WebKit Linux</div><div class=skipped-builder>WebKit Linux (dbg)</div>' +
-            '<div class=skipped-builder>WebKit Mac10.7</div><div class=skipped-builder>WebKit Win</div>' +
+            '<div class=skipped-builder>WebKit Linux (dbg)</div><div class=skipped-builder>WebKit Mac10.7</div><div class=skipped-builder>WebKit Win</div>' +
         '</div>' +
         '<div class=expectations test=dummytest.html>' +
             '<div><span class=link onclick="setQueryParameter(\'showExpectations\', true)">Show results</span> | ' +
@@ -401,9 +416,11 @@ test('htmlForIndividualTestOnAllBuildersWithResultsLinks', 1, function() {
 
 test('htmlForIndividualTestOnAllBuildersWithResultsLinksWebkitMaster', 1, function() {
     resetGlobals();
+    g_crossDashboardState.group = '@ToT - webkit.org';
+    loadBuildersList('@ToT - webkit.org', 'layout-tests');
+
+    var builderName = 'Apple SnowLeopard Tests';
     var test = 'dummytest.html';
-    var builderName = 'dummyBuilder';
-    BUILDER_TO_MASTER[builderName] = WEBKIT_BUILDER_MASTER;
     g_testToResultsMap[test] = [createResultsObjectForTest(test, builderName)];
 
     equal(htmlForIndividualTestOnAllBuildersWithResultsLinks(test),
@@ -419,8 +436,7 @@ test('htmlForIndividualTestOnAllBuildersWithResultsLinksWebkitMaster', 1, functi
         '</table>' +
         '<div>The following builders either don\'t run this test (e.g. it\'s skipped) or all runs passed:</div>' +
         '<div class=skipped-builder-list>' +
-            '<div class=skipped-builder>WebKit Linux</div><div class=skipped-builder>WebKit Linux (dbg)</div>' +
-            '<div class=skipped-builder>WebKit Mac10.7</div><div class=skipped-builder>WebKit Win</div>' +
+            '<div class=skipped-builder>Qt Linux Tests</div><div class=skipped-builder>Chromium Mac10.7 Tests</div><div class=skipped-builder>GTK Win</div>' +
         '</div>' +
         '<div class=expectations test=dummytest.html>' +
             '<div><span class=link onclick="setQueryParameter(\'showExpectations\', true)">Show results</span> | ' +
@@ -643,57 +659,27 @@ test('addBuilderLoadErrors', 1, function() {
 });
 
 test('builderGroupIsToTWebKitAttribute', 2, function() {
-    var dummyMaster = new BuilderMaster('dummy.org', 'http://build.dummy.org');
+    var dummyMaster = new builders.BuilderMaster('Chromium', 'dummyurl', {'layout-tests': {'builders': ['WebKit Linux', 'WebKit Linux (dbg)', 'WebKit Mac10.7', 'WebKit Win']}});
     var testBuilderGroups = {
         '@ToT - dummy.org': new BuilderGroup(BuilderGroup.TOT_WEBKIT),
         '@DEPS - dummy.org': new BuilderGroup(BuilderGroup.DEPS_WEBKIT),
     }
-    testBuilderGroups['@ToT - dummy.org'].expectedGroups = 1;
-    testBuilderGroups['@DEPS - dummy.org'].expectedGroups = 1;
 
     var testJSONData = "{ \"Dummy Builder 1\": null, \"Dummy Builder 2\": null }";
-    onBuilderListLoad(testBuilderGroups, function() { return true; }, dummyMaster, '@ToT - dummy.org', {responseText: testJSONData});
+    requestBuilderList(testBuilderGroups, function() { return true; }, 'ChromiumWebkit', '@ToT - dummy.org', testBuilderGroups['@ToT - dummy.org'], 'layout-tests');
     equal(testBuilderGroups['@ToT - dummy.org'].isToTWebKit, true);
-    onBuilderListLoad(testBuilderGroups, function() { return true; }, dummyMaster, '@DEPS - dummy.org', {responseText: testJSONData});
+    requestBuilderList(testBuilderGroups, function() { return true; }, 'ChromiumWebkit', '@DEPS - dummy.org', testBuilderGroups['@DEPS - dummy.org'], 'layout-tests');
     equal(testBuilderGroups['@DEPS - dummy.org'].isToTWebKit, false);
 });
 
-test('builderGroupExpectedGroups', 4, function() {
-    var dummyMaster = new BuilderMaster('dummy.org', 'http://build.dummy.org');
-    var testBuilderGroups = {
-        '@ToT - dummy.org': new BuilderGroup(BuilderGroup.TOT_WEBKIT),
-    }
-    testBuilderGroups['@ToT - dummy.org'].expectedGroups = 3;
-
-    var testJSONData = "{ \"Dummy Builder 1\": null }";
-    equal(testBuilderGroups['@ToT - dummy.org'].expectedGroups, 3);
-    onBuilderListLoad(testBuilderGroups,  function() { return true; }, dummyMaster, '@ToT - dummy.org', {responseText: testJSONData});
-    equal(testBuilderGroups['@ToT - dummy.org'].groups, 1);
-    var testJSONData = "{ \"Dummy Builder 2\": null }";
-    onBuilderListLoad(testBuilderGroups,  function() { return true; }, dummyMaster, '@ToT - dummy.org', {responseText: testJSONData});
-    equal(testBuilderGroups['@ToT - dummy.org'].groups, 2);
-    onErrorLoadingBuilderList('http://build.dummy.org', testBuilderGroups,  '@ToT - dummy.org');
-    equal(testBuilderGroups['@ToT - dummy.org'].groups, 3);
-});
-
-test('requestBuilderListAddsBuilderGroupEntry', 2, function() {
+test('requestBuilderListAddsBuilderGroupEntry', 1, function() {
     var testBuilderGroups = { '@ToT - dummy.org': null };
+    var builderFilter = function() { return true; };
+    var builderGroup = new BuilderGroup(BuilderGroup.TOT_WEBKIT);
+    var groupName = '@ToT - dummy.org';
+    requestBuilderList(testBuilderGroups, builderFilter, 'ChromiumWebkit', groupName, builderGroup, 'layout-tests');
 
-    var requestFunction = loader.request;
-    loader.request = function() {};
-
-    try {
-        var builderFilter = null;
-        var master = { builderJsonPath: function() {} };
-        var groupName = '@ToT - dummy.org';
-        var builderGroup = { expectedGroups: 0 };
-        requestBuilderList(testBuilderGroups, builderFilter, master, groupName, builderGroup);
-
-        equal(testBuilderGroups['@ToT - dummy.org'], builderGroup);
-        equal(testBuilderGroups['@ToT - dummy.org'].expectedGroups, 1);
-    } finally {
-        loader.request = requestFunction;
-    }
+    equal(testBuilderGroups['@ToT - dummy.org'], builderGroup);
 })
 
 test('sortTests', 4, function() {
index be9e708a1b7ebf6f84bae2ca2d5710ea7a7ba05e..0d7f7efb4530796803c45acd69c60ca1daaa608e 100644 (file)
@@ -71,11 +71,6 @@ loader.Loader.prototype = {
     {
         this._loadNext();
     },
-    buildersListLoaded: function()
-    {
-        initBuilders();
-        this._loadNext();
-    },
     _loadNext: function()
     {
         var loadingStep = this._loadingSteps.shift();
@@ -88,6 +83,8 @@ loader.Loader.prototype = {
     _loadBuildersList: function()
     {
         loadBuildersList(g_crossDashboardState.group, g_crossDashboardState.testType);
+        initBuilders();
+        this._loadNext();
     },
     _loadResultsFiles: function()
     {
index e2f546c09c6fd403411fef37c34328e972bdce9e..f8b6e9e3d24676dd2b16c962de4939a857282e1e 100644 (file)
@@ -74,11 +74,14 @@ test('results files loading', 5, function() {
 
     g_builders = {"WebKit Linux": true, "WebKit Win": true};
 
+    builders.masters['ChromiumWebkit'] = {'tests': {'layout-tests': {builders: ["WebKit Linux", "WebKit Win"]}}};
+    loadBuildersList('@ToT - chromium.org', 'layout-tests');
+
     try {
         resourceLoader._loadResultsFiles();
     } finally {
         g_builders = undefined;
-        g_resultsByBuilder = undefined;
+        g_resultsByBuilder = {};
         loader.request = requestFunction;
     }
 });
index 835be21daeccd7661c79b6f6faeaa029c6f0acca..a863873c377fd7794d6cccb764ec0a82a13797c3 100644 (file)
@@ -40,28 +40,25 @@ THE POSSIBILITY OF SUCH DAMAGE.
 <link rel="stylesheet" href="flakiness_dashboard.css"></link>
 <link rel="stylesheet" href="flakiness_dashboard_tests.css"></link>
 <script src="builders.js"></script>
+<script src="builders_unittests.js"></script>
 
 <script>
-// Don't request the actual builders off the bots when running unittests.
-function loadBuildersList() {};
-function g_handleBuildersListLoaded() {};
-
 // Mimic being embedded. All our embedded checks compare window and parent.
 window.parent = null;
 </script>
 
 <script src="dashboard_base.js"></script>
+<script src="loader.js"></script>
+<script src="loader_unittests.js"></script>
 <script src="flakiness_dashboard.js"></script>
 
 <script>
 window.location.href = '#useTestData=true';
-var builderGroup = '@ToT - chromium.org';
-var builders = {'Webkit Linux': '', 'Webkit Linux (dbg)': '', 'Webkit Mac10.7': '', 'Webkit Win': ''};
-onBuilderListLoad(LAYOUT_TESTS_BUILDER_GROUPS, isChromiumWebkitTipOfTreeTestRunner, CHROMIUM_WEBKIT_BUILDER_MASTER, builderGroup, BuilderGroup.TOT_WEBKIT, builders);
-initBuilders();
 </script>
 
-<!-- FIXME: Split this up into multiple unittest.js, e.g. one for builders.js and one for dashboard_base.js. -->
 <script src="flakiness_dashboard_embedded_unittests.js"></script>
+<!-- FIXME: Split this up into multiple unittest.js, e.g. one for builders.js and one for dashboard_base.js. -->
+<script src="flakiness_dashboard_unittests.js"></script>
+
 </body>
 </html>
index 9999c71f9670c90de1482af429ec7374aa41ca5f..452d55452e490a30d5a2e3270351e45f179c75f4 100644 (file)
@@ -40,28 +40,17 @@ THE POSSIBILITY OF SUCH DAMAGE.
 <link rel="stylesheet" href="flakiness_dashboard.css"></link>
 <link rel="stylesheet" href="flakiness_dashboard_tests.css"></link>
 <script src="builders.js"></script>
-
-<script>
-// Don't request the actual builders off the bots when running unittests.
-function loadBuildersList() {};
-</script>
-
+<script src="builders_unittests.js"></script>
 <script src="dashboard_base.js"></script>
 <script src="loader.js"></script>
+<script src="loader_unittests.js"></script>
 <script src="flakiness_dashboard.js"></script>
 
 <script>
 window.location.href = '#useTestData=true';
-var groupName = '@ToT - chromium.org';
-var builders = '{"WebKit Linux": true, "WebKit Linux (dbg)": true, "WebKit Mac10.7": true, "WebKit Win": true}';
-LAYOUT_TESTS_BUILDER_GROUPS[groupName] = new BuilderGroup(BuilderGroup.TOT_WEBKIT);
-LAYOUT_TESTS_BUILDER_GROUPS[groupName].expectedGroups = 4;
-onBuilderListLoad(LAYOUT_TESTS_BUILDER_GROUPS, isChromiumWebkitTipOfTreeTestRunner, CHROMIUM_WEBKIT_BUILDER_MASTER, groupName, {responseText: builders});
-initBuilders();
 </script>
 
 <!-- FIXME: Split this up into multiple unittest.js, e.g. one for builders.js and one for dashboard_base.js. -->
 <script src="flakiness_dashboard_unittests.js"></script>
-<script src="loader_unittests.js"></script>
 </body>
 </html>
index b3fa41bc350f5c57c5c160fa7c5a1ea6ccb0ef02..4cdd9a86b49583008cd47a57bbabb51afe90ea78 100644 (file)
@@ -286,7 +286,7 @@ function updateBuildInspector(results, builder, dygraph, index)
     addRow('', '');
     var master = builderMaster(builder);
     var buildUrl = master.logPath(builder, results[BUILD_NUMBERS_KEY][index]);
-    if (master == WEBKIT_BUILDER_MASTER) {
+    if (master.name == WEBKIT_BUILDER_MASTER) {
         var resultsUrl = 'http://build.webkit.org/results/' + builder + '/r' + results[WEBKIT_REVISIONS_KEY][index] +
             ' (' + results[BUILD_NUMBERS_KEY][index] + ')';
     } else {