summaryrefslogtreecommitdiff
path: root/Tools/TestResultServer/static-dashboards/loader.js
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/TestResultServer/static-dashboards/loader.js')
-rw-r--r--Tools/TestResultServer/static-dashboards/loader.js85
1 files changed, 53 insertions, 32 deletions
diff --git a/Tools/TestResultServer/static-dashboards/loader.js b/Tools/TestResultServer/static-dashboards/loader.js
index c74890161..9504e9317 100644
--- a/Tools/TestResultServer/static-dashboards/loader.js
+++ b/Tools/TestResultServer/static-dashboards/loader.js
@@ -31,13 +31,13 @@ var loader = loader || {};
(function() {
-var TEST_RESULTS_SERVER = 'http://test-results.appspot.com/';
+var TEST_RESULTS_SERVER = 'http://webkit-test-results.appspot.com/';
var CHROMIUM_EXPECTATIONS_URL = 'http://svn.webkit.org/repository/webkit/trunk/LayoutTests/platform/chromium/TestExpectations';
function pathToBuilderResultsFile(builderName) {
return TEST_RESULTS_SERVER + 'testfile?builder=' + builderName +
'&master=' + builderMaster(builderName).name +
- '&testtype=' + g_crossDashboardState.testType + '&name=';
+ '&testtype=' + g_history.crossDashboardState.testType + '&name=';
}
loader.request = function(url, success, error, opt_isBinaryData)
@@ -64,6 +64,32 @@ loader.Loader = function()
this._loadResultsFiles,
this._loadExpectationsFiles,
];
+
+ this._buildersThatFailedToLoad = [];
+ this._staleBuilders = [];
+ this._errors = new ui.Errors();
+ // TODO(jparent): Pass in the appropriate history obj per db.
+ this._history = g_history;
+}
+
+// TODO(aboxhall): figure out whether this is a performance bottleneck and
+// change calling code to understand the trie structure instead if necessary.
+loader.Loader._flattenTrie = function(trie, prefix)
+{
+ var result = {};
+ for (var name in trie) {
+ var fullName = prefix ? prefix + "/" + name : name;
+ var data = trie[name];
+ if ("results" in data)
+ result[fullName] = data;
+ else {
+ var partialResult = loader.Loader._flattenTrie(data, fullName);
+ for (var key in partialResult) {
+ result[key] = partialResult[key];
+ }
+ }
+ }
+ return result;
}
loader.Loader.prototype = {
@@ -71,34 +97,36 @@ loader.Loader.prototype = {
{
this._loadNext();
},
+ showErrors: function()
+ {
+ this._errors.show();
+ },
_loadNext: function()
{
var loadingStep = this._loadingSteps.shift();
if (!loadingStep) {
- resourceLoadingComplete();
+ this._addErrors();
+ this._history.initialize();
return;
}
loadingStep.apply(this);
},
_loadBuildersList: function()
{
- loadBuildersList(g_crossDashboardState.group, g_crossDashboardState.testType);
- initBuilders();
+ loadBuildersList(currentBuilderGroupName(), this._history.crossDashboardState.testType);
this._loadNext();
},
_loadResultsFiles: function()
{
- parseParameters();
-
- for (var builderName in g_builders)
+ for (var builderName in currentBuilders())
this._loadResultsFileForBuilder(builderName);
},
_loadResultsFileForBuilder: function(builderName)
{
var resultsFilename;
- if (isTreeMap())
+ if (history.isTreeMap())
resultsFilename = 'times_ms.json';
- else if (g_crossDashboardState.showAllRuns)
+ else if (this._history.crossDashboardState.showAllRuns)
resultsFilename = 'results.json';
else
resultsFilename = 'results-small.json';
@@ -114,7 +142,7 @@ loader.Loader.prototype = {
},
_handleResultsFileLoaded: function(builderName, fileData)
{
- if (isTreeMap())
+ if (history.isTreeMap())
this._processTimesJSONData(builderName, fileData);
else
this._processResultsJSONData(builderName, fileData);
@@ -151,10 +179,10 @@ loader.Loader.prototype = {
continue;
if ((Date.now() / 1000) - lastRunSeconds > ONE_DAY_SECONDS)
- g_staleBuilders.push(builderName);
+ this._staleBuilders.push(builderName);
if (json_version >= 4)
- builds[builderName][TESTS_KEY] = flattenTrie(builds[builderName][TESTS_KEY]);
+ builds[builderName][TESTS_KEY] = loader.Loader._flattenTrie(builds[builderName][TESTS_KEY]);
g_resultsByBuilder[builderName] = builds[builderName];
}
},
@@ -163,26 +191,11 @@ loader.Loader.prototype = {
console.error('Failed to load results file for ' + builderName + '.');
// FIXME: loader shouldn't depend on state defined in dashboard_base.js.
- g_buildersThatFailedToLoad.push(builderName);
+ this._buildersThatFailedToLoad.push(builderName);
// Remove this builder from builders, so we don't try to use the
// data that isn't there.
- delete g_builders[builderName];
-
- // Change the default builder name if it has been deleted.
- if (g_defaultBuilderName == builderName) {
- g_defaultBuilderName = null;
- for (var availableBuilderName in g_builders) {
- g_defaultBuilderName = availableBuilderName;
- g_defaultDashboardSpecificStateValues.builder = availableBuilderName;
- break;
- }
- if (!g_defaultBuilderName) {
- var error = 'No tests results found for ' + g_crossDashboardState.testType + '. Reload the page to try fetching it again.';
- console.error(error);
- addError(error);
- }
- }
+ delete currentBuilders()[builderName];
// Proceed as if the resource had loaded.
this._handleResourceLoad();
@@ -194,7 +207,7 @@ loader.Loader.prototype = {
},
_haveResultsFilesLoaded: function()
{
- for (var builder in g_builders) {
+ for (var builder in currentBuilders()) {
if (!g_resultsByBuilder[builder])
return false;
}
@@ -202,7 +215,7 @@ loader.Loader.prototype = {
},
_loadExpectationsFiles: function()
{
- if (!isFlakinessDashboard() && !g_crossDashboardState.useTestData) {
+ if (!isFlakinessDashboard() && !this._history.crossDashboardState.useTestData) {
this._loadNext();
return;
}
@@ -232,6 +245,14 @@ loader.Loader.prototype = {
partial(function(platformName, xhr) {
console.error('Could not load expectations file for ' + platformName);
}, platformWithExpectations));
+ },
+ _addErrors: function()
+ {
+ if (this._buildersThatFailedToLoad.length)
+ this._errors.addError('ERROR: Failed to get data from ' + this._buildersThatFailedToLoad.toString() +'.');
+
+ if (this._staleBuilders.length)
+ this._errors.addError('ERROR: Data from ' + this._staleBuilders.toString() + ' is more than 1 day stale.');
}
}