diff options
Diffstat (limited to 'chromium/third_party/WebKit/Tools/GardeningServer/scripts/results.js')
-rw-r--r-- | chromium/third_party/WebKit/Tools/GardeningServer/scripts/results.js | 206 |
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; }); }; |