summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/WebKit/Tools/GardeningServer/scripts/results.js
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/WebKit/Tools/GardeningServer/scripts/results.js')
-rw-r--r--chromium/third_party/WebKit/Tools/GardeningServer/scripts/results.js206
1 files changed, 85 insertions, 121 deletions
diff --git a/chromium/third_party/WebKit/Tools/GardeningServer/scripts/results.js b/chromium/third_party/WebKit/Tools/GardeningServer/scripts/results.js
index 34cb3ebdb9e..2e59d03492e 100644
--- a/chromium/third_party/WebKit/Tools/GardeningServer/scripts/results.js
+++ b/chromium/third_party/WebKit/Tools/GardeningServer/scripts/results.js
@@ -74,16 +74,11 @@ results.kDiffKind = 'diff';
results.kUnknownKind = 'unknown';
// Types of tests.
-results.kImageType = 'image'
-results.kAudioType = 'audio'
-results.kTextType = 'text'
+results.kImageType = 'image';
+results.kAudioType = 'audio';
+results.kTextType = 'text';
// FIXME: There are more types of tests.
-function layoutTestResultsURL(platform)
-{
- return config.kPlatforms[platform].layoutTestResultsURL;
-}
-
function possibleSuffixListFor(failureTypeList)
{
var suffixList = [];
@@ -170,43 +165,30 @@ results.failureTypeList = function(failureBlob)
return failureBlob.split(' ');
};
-results.directoryForBuilder = function(builderName)
-{
- return config.kPlatforms[config.currentPlatform].resultsDirectoryNameFromBuilderName(builderName);
-}
-
-function resultsDirectoryURL(platform, builderName)
+function resultsDirectoryURL(builderName)
{
if (config.useLocalResults)
return '/localresult?path=';
- return layoutTestResultsURL(platform) + '/' + results.directoryForBuilder(builderName) + '/results/layout-test-results/';
-}
-
-function resultsPrefixListingURL(platform, builderName, marker)
-{
- var url = layoutTestResultsURL(platform) + '/?prefix=' + results.directoryForBuilder(builderName) + '/&delimiter=/';
- if (marker)
- return url + '&marker=' + marker;
- return url;
+ return config.layoutTestResultsURL + '/' + config.resultsDirectoryNameFromBuilderName(builderName) + '/results/layout-test-results/';
}
-function resultsDirectoryURLForBuildNumber(platform, builderName, buildNumber)
+function resultsDirectoryURLForBuildNumber(builderName, buildNumber)
{
- return layoutTestResultsURL(platform) + '/' + results.directoryForBuilder(builderName) + '/' + buildNumber + '/' ;
+ return config.layoutTestResultsURL + '/' + config.resultsDirectoryNameFromBuilderName(builderName) + '/' + buildNumber + '/' ;
}
-function resultsSummaryURL(platform, builderName)
+function resultsSummaryURL(builderName)
{
- return resultsDirectoryURL(platform, builderName) + kResultsName;
+ return resultsDirectoryURL(builderName) + kResultsName;
}
-function resultsSummaryURLForBuildNumber(platform, builderName, buildNumber)
+function resultsSummaryURLForBuildNumber(builderName, buildNumber)
{
- return resultsDirectoryURLForBuildNumber(platform, builderName, buildNumber) + kResultsName;
+ return resultsDirectoryURLForBuildNumber(builderName, buildNumber) + kResultsName;
}
-var g_resultsCache = new base.AsynchronousCache(function (key, callback) {
- net.jsonp(key, callback);
+var g_resultsCache = new base.AsynchronousCache(function(key) {
+ return net.jsonp(key);
});
results.ResultAnalyzer = base.extends(Object, {
@@ -248,7 +230,7 @@ results.ResultAnalyzer = base.extends(Object, {
{
return this._isUnexpected;
}
-})
+});
function isExpectedFailure(resultNode)
{
@@ -323,39 +305,23 @@ results.collectUnexpectedResults = function(dictionaryOfResultNodes)
};
// Callback data is [{ buildNumber:, url: }]
-function historicalResultsLocations(platform, builderName, callback)
+function historicalResultsLocations(builderName)
{
- var historicalResultsData = [];
-
- function parseListingDocument(prefixListingDocument) {
- $(prefixListingDocument).find("Prefix").each(function() {
- var buildString = this.textContent.replace(results.directoryForBuilder(builderName) + '/', '');
- if (buildString.match(/\d+\//)) {
- var buildNumber = parseInt(buildString);
- var resultsData = {
- 'buildNumber': buildNumber,
- 'url': resultsSummaryURLForBuildNumber(platform, builderName, buildNumber)
- };
- historicalResultsData.unshift(resultsData);
- }
- });
- var nextMarker = $(prefixListingDocument).find('NextMarker').get();
- if (nextMarker.length) {
- var nextListingURL = resultsPrefixListingURL(platform, builderName, nextMarker[0].textContent);
- net.get(nextListingURL, parseListingDocument);
- } else {
- callback(historicalResultsData);
+ return builders.mostRecentBuildForBuilder(builderName).then(function (mostRecentBuildNumber) {
+ var resultsLocations = [];
+ // Return the builds in reverse chronological order in order to load the most recent data first.
+ for (var buildNumber = mostRecentBuildNumber; buildNumber > mostRecentBuildNumber - 100; --buildNumber) {
+ resultsLocations.push({
+ 'buildNumber': buildNumber,
+ 'url': resultsDirectoryURLForBuildNumber(builderName, buildNumber) + "failing_results.json"
+ });
}
- }
-
- builders.mostRecentBuildForBuilder(platform, builderName, function (mostRecentBuildNumber) {
- var marker = results.directoryForBuilder(builderName) + "/" + (mostRecentBuildNumber - 100) + "/";
- var listingURL = resultsPrefixListingURL(platform, builderName, marker);
- net.get(listingURL, parseListingDocument);
+ return resultsLocations;
});
}
-function walkHistory(platform, builderName, testName, callback)
+// This will repeatedly call continueCallback(revision, resultNode) until it returns false.
+function walkHistory(builderName, testName, continueCallback)
{
var indexOfNextKeyToFetch = 0;
var keyList = [];
@@ -369,13 +335,13 @@ function walkHistory(platform, builderName, testName, callback)
var resultsURL = keyList[indexOfNextKeyToFetch].url;
++indexOfNextKeyToFetch;
- g_resultsCache.get(resultsURL, function(resultsTree) {
+ g_resultsCache.get(resultsURL).then(function(resultsTree) {
if ($.isEmptyObject(resultsTree)) {
continueWalk();
return;
}
var resultNode = results.resultNodeForTest(resultsTree, testName);
- var revision = parseInt(resultsTree['blink_revision'])
+ var revision = parseInt(resultsTree['blink_revision']);
if (isNaN(revision))
revision = 0;
processResultNode(revision, resultNode);
@@ -384,43 +350,43 @@ function walkHistory(platform, builderName, testName, callback)
function processResultNode(revision, resultNode)
{
- var shouldContinue = callback(revision, resultNode);
+ var shouldContinue = continueCallback(revision, resultNode);
if (!shouldContinue)
return;
continueWalk();
}
- historicalResultsLocations(platform, builderName, function(resultsLocations) {
+ historicalResultsLocations(builderName).then(function(resultsLocations) {
keyList = resultsLocations;
continueWalk();
});
}
-results.regressionRangeForFailure = function(builderName, testName, callback)
-{
- var oldestFailingRevision = 0;
- var newestPassingRevision = 0;
+results.regressionRangeForFailure = function(builderName, testName) {
+ return new Promise(function(resolve, reject) {
+ var oldestFailingRevision = 0;
+ var newestPassingRevision = 0;
- // FIXME: should treat {platform, builderName} as a tuple
- walkHistory(config.currentPlatform, builderName, testName, function(revision, resultNode) {
- if (!revision) {
- callback(oldestFailingRevision, newestPassingRevision);
- return false;
- }
- if (!resultNode) {
+ walkHistory(builderName, testName, function(revision, resultNode) {
+ if (!revision) {
+ resolve([oldestFailingRevision, newestPassingRevision]);
+ return false;
+ }
+ if (!resultNode) {
+ newestPassingRevision = revision;
+ resolve([oldestFailingRevision, newestPassingRevision]);
+ return false;
+ }
+ if (isUnexpectedFailure(resultNode)) {
+ oldestFailingRevision = revision;
+ return true;
+ }
+ if (!oldestFailingRevision)
+ return true; // We need to keep looking for a failing revision.
newestPassingRevision = revision;
- callback(oldestFailingRevision, newestPassingRevision);
+ resolve([oldestFailingRevision, newestPassingRevision]);
return false;
- }
- if (isUnexpectedFailure(resultNode)) {
- oldestFailingRevision = revision;
- return true;
- }
- if (!oldestFailingRevision)
- return true; // We need to keep looking for a failing revision.
- newestPassingRevision = revision;
- callback(oldestFailingRevision, newestPassingRevision);
- return false;
+ });
});
};
@@ -449,23 +415,24 @@ function mergeRegressionRanges(regressionRanges)
return mergedRange;
}
-results.unifyRegressionRanges = function(builderNameList, testName, callback)
-{
+results.unifyRegressionRanges = function(builderNameList, testName) {
var regressionRanges = {};
- var tracker = new base.RequestTracker(builderNameList.length, function() {
- var mergedRange = mergeRegressionRanges(regressionRanges);
- callback(mergedRange.oldestFailingRevision, mergedRange.newestPassingRevision);
- });
-
+ var rangePromises = [];
$.each(builderNameList, function(index, builderName) {
- results.regressionRangeForFailure(builderName, testName, function(oldestFailingRevision, newestPassingRevision) {
- var range = {};
- range.oldestFailingRevision = oldestFailingRevision;
- range.newestPassingRevision = newestPassingRevision;
- regressionRanges[builderName] = range;
- tracker.requestComplete();
- });
+ rangePromises.push(results.regressionRangeForFailure(builderName, testName)
+ .then(function(result) {
+ var oldestFailingRevision = result[0];
+ var newestPassingRevision = result[1];
+ var range = {};
+ range.oldestFailingRevision = oldestFailingRevision;
+ range.newestPassingRevision = newestPassingRevision;
+ regressionRanges[builderName] = range;
+ }));
+ });
+ return Promise.all(rangePromises).then(function() {
+ var mergedRange = mergeRegressionRanges(regressionRanges);
+ return [mergedRange.oldestFailingRevision, mergedRange.newestPassingRevision];
});
};
@@ -512,46 +479,43 @@ function sortResultURLsBySuffix(urls)
});
});
if (sortedURLs.length != urls.length)
- throw "sortResultURLsBySuffix failed to return the same number of URLs."
+ throw "sortResultURLsBySuffix failed to return the same number of URLs.";
return sortedURLs;
}
-results.fetchResultsURLs = function(failureInfo, callback)
+results.fetchResultsURLs = function(failureInfo)
{
var testNameStem = base.trimExtension(failureInfo.testName);
- var urlStem = resultsDirectoryURL(config.currentPlatform, failureInfo.builderName);
+ var urlStem = resultsDirectoryURL(failureInfo.builderName);
var suffixList = possibleSuffixListFor(failureInfo.failureTypeList);
var resultURLs = [];
- var tracker = new base.RequestTracker(suffixList.length, function() {
- callback(sortResultURLsBySuffix(resultURLs));
- });
+ var probePromises = [];
$.each(suffixList, function(index, suffix) {
var url = urlStem + testNameStem + suffix;
- net.probe(url, {
- success: function() {
+ probePromises.push(net.probe(url).then(
+ function() {
resultURLs.push(url);
- tracker.requestComplete();
},
- error: function() {
- tracker.requestComplete();
- },
- });
+ function() {}));
+ });
+ return Promise.all(probePromises).then(function() {
+ return sortResultURLsBySuffix(resultURLs);
});
};
-results.fetchResultsByBuilder = function(builderNameList, callback)
+results.fetchResultsByBuilder = function(builderNameList)
{
var resultsByBuilder = {};
- var tracker = new base.RequestTracker(builderNameList.length, function() {
- callback(resultsByBuilder);
- });
+ var fetchPromises = [];
$.each(builderNameList, function(index, builderName) {
- var resultsURL = resultsSummaryURL(config.currentPlatform, builderName);
- net.jsonp(resultsURL, function(resultsTree) {
+ var resultsURL = resultsSummaryURL(builderName);
+ fetchPromises.push(net.jsonp(resultsURL).then(function(resultsTree) {
resultsByBuilder[builderName] = resultsTree;
- tracker.requestComplete();
- });
+ }));
+ });
+ return Promise.all(fetchPromises).then(function() {
+ return resultsByBuilder;
});
};