summaryrefslogtreecommitdiffstats
path: root/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/model.js
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/model.js')
-rw-r--r--Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/model.js247
1 files changed, 0 insertions, 247 deletions
diff --git a/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/model.js b/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/model.js
deleted file mode 100644
index 3c3f85243..000000000
--- a/Tools/BuildSlaveSupport/build.webkit.org-config/public_html/TestFailures/scripts/model.js
+++ /dev/null
@@ -1,247 +0,0 @@
-/*
- * 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:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. 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.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS 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 APPLE INC. OR ITS 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.
- */
-
-var model = model || {};
-
-(function () {
-
-var kCommitLogLength = 50;
-
-model.state = {};
-model.state.failureAnalysisByTest = {};
-model.state.rebaselineQueue = [];
-model.state.expectationsUpdateQueue = [];
-
-function findAndMarkRevertedRevisions(commitDataList)
-{
- var revertedRevisions = {};
- $.each(commitDataList, function(index, commitData) {
- if (commitData.revertedRevision)
- revertedRevisions[commitData.revertedRevision] = true;
- });
- $.each(commitDataList, function(index, commitData) {
- if (commitData.revision in revertedRevisions)
- commitData.wasReverted = true;
- });
-}
-
-function fuzzyFind(testName, commitData)
-{
- var indexOfLastDot = testName.lastIndexOf('.');
- var stem = indexOfLastDot == -1 ? testName : testName.substr(0, indexOfLastDot);
- return commitData.message.indexOf(stem) != -1;
-}
-
-function heuristicallyNarrowRegressionRange(failureAnalysis)
-{
- var commitDataList = model.state.recentCommits;
- var commitDataIndex = commitDataList.length - 1;
-
- for(var revision = failureAnalysis.newestPassingRevision + 1; revision <= failureAnalysis.oldestFailingRevision; ++revision) {
- while (commitDataIndex >= 0 && commitDataList[commitDataIndex].revision < revision)
- --commitDataIndex;
- var commitData = commitDataList[commitDataIndex];
- if (commitData.revision != revision)
- continue;
- if (fuzzyFind(failureAnalysis.testName, commitData)) {
- failureAnalysis.oldestFailingRevision = revision;
- failureAnalysis.newestPassingRevision = revision - 1;
- return;
- }
- }
-}
-
-model.queueForRebaseline = function(failureInfo)
-{
- model.state.rebaselineQueue.push(failureInfo);
-};
-
-model.takeRebaselineQueue = function()
-{
- var queue = model.state.rebaselineQueue;
- model.state.rebaselineQueue = [];
- return queue;
-};
-
-model.queueForExpectationUpdate = function(failureInfo)
-{
- model.state.expectationsUpdateQueue.push(failureInfo);
-};
-
-model.takeExpectationUpdateQueue = function()
-{
- var queue = model.state.expectationsUpdateQueue;
- model.state.expectationsUpdateQueue = [];
- return queue;
-};
-
-var g_commitIndex = {};
-
-model.updateRecentCommits = function(callback)
-{
- trac.recentCommitData('trunk', kCommitLogLength, function(commitDataList) {
- model.state.recentCommits = commitDataList;
- updateCommitIndex();
- findAndMarkRevertedRevisions(model.state.recentCommits);
- callback();
- });
-};
-
-function updateCommitIndex()
-{
- model.state.recentCommits.forEach(function(commitData) {
- g_commitIndex[commitData.revision] = commitData;
- });
-}
-
-model.commitDataListForRevisionRange = function(fromRevision, toRevision)
-{
- var result = [];
- for (var revision = fromRevision; revision <= toRevision; ++revision) {
- var commitData = g_commitIndex[revision];
- if (commitData)
- result.push(commitData);
- }
- return result;
-};
-
-model.buildersInFlightForRevision = function(revision)
-{
- var builders = {};
- Object.keys(model.state.resultsByBuilder).forEach(function(builderName) {
- var results = model.state.resultsByBuilder[builderName];
- if (parseInt(results.revision) < revision)
- builders[builderName] = { actual: 'BUILDING' };
- });
- return builders;
-};
-
-model.latestRevision = function()
-{
- return model.state.recentCommits[0].revision;
-}
-
-model.latestRevisionWithNoBuildersInFlight = function()
-{
- var revision = 0;
- Object.keys(model.state.resultsByBuilder).forEach(function(builderName) {
- var results = model.state.resultsByBuilder[builderName];
- if (!results.revision)
- return;
- var testedRevision = parseInt(results.revision);
- revision = revision ? Math.min(revision, testedRevision) : testedRevision;
- });
- return revision;
-}
-
-model.updateResultsByBuilder = function(callback)
-{
- var platformBuilders = config.currentBuilders();
- results.fetchResultsByBuilder(Object.keys(platformBuilders), function(resultsByBuilder) {
- model.state.resultsByBuilder = resultsByBuilder;
- callback();
- });
-};
-
-model.analyzeUnexpectedFailures = function(callback, completionCallback)
-{
- var unexpectedFailures = results.unexpectedFailuresByTest(model.state.resultsByBuilder);
-
- $.each(model.state.failureAnalysisByTest, function(testName, failureAnalysis) {
- if (!(testName in unexpectedFailures))
- delete model.state.failureAnalysisByTest[testName];
- });
-
- var tracker = new base.RequestTracker(Object.keys(unexpectedFailures).length, completionCallback);
- $.each(unexpectedFailures, function(testName, resultNodesByBuilder) {
- var builderNameList = Object.keys(resultNodesByBuilder);
- results.unifyRegressionRanges(builderNameList, testName, function(oldestFailingRevision, newestPassingRevision) {
- var failureAnalysis = {
- 'testName': testName,
- 'resultNodesByBuilder': resultNodesByBuilder,
- 'oldestFailingRevision': oldestFailingRevision,
- 'newestPassingRevision': newestPassingRevision,
- };
-
- heuristicallyNarrowRegressionRange(failureAnalysis);
-
- var previousFailureAnalysis = model.state.failureAnalysisByTest[testName];
- if (previousFailureAnalysis
- && previousFailureAnalysis.oldestFailingRevision <= failureAnalysis.oldestFailingRevision
- && previousFailureAnalysis.newestPassingRevision >= failureAnalysis.newestPassingRevision) {
- failureAnalysis.oldestFailingRevision = previousFailureAnalysis.oldestFailingRevision;
- failureAnalysis.newestPassingRevision = previousFailureAnalysis.newestPassingRevision;
- }
-
- model.state.failureAnalysisByTest[testName] = failureAnalysis;
-
- callback(failureAnalysis);
- tracker.requestComplete();
- });
- });
-};
-
-model.unexpectedFailureInfoForTestName = function(testName)
-{
- var resultsByTest = results.unexpectedFailuresByTest(model.state.resultsByBuilder);
-
- return Object.keys(resultsByTest[testName]).map(function(builderName) {
- return results.failureInfoForTestAndBuilder(resultsByTest, testName, builderName);
- });
-};
-
-model.analyzeUnexpectedSuccesses = function(callback)
-{
- var unexpectedSuccesses = results.unexpectedSuccessesByTest(model.state.resultsByBuilder);
- $.each(unexpectedSuccesses, function(testName, resultNodesByBuilder) {
- var successAnalysis = {
- 'testName': testName,
- 'resultNodesByBuilder': resultNodesByBuilder,
- };
-
- // FIXME: Consider looking at the history to see how long this test
- // has been unexpectedly passing.
-
- callback(successAnalysis);
- });
-};
-
-model.analyzeexpectedFailures = function(callback)
-{
- var expectedFailures = results.expectedFailuresByTest(model.state.resultsByBuilder);
- $.each(expectedFailures, function(testName, resultNodesByBuilder) {
- var failureAnalysis = {
- 'testName': testName,
- 'resultNodesByBuilder': resultNodesByBuilder,
- };
-
- // FIXME: Consider looking at the history to see how long this test
- // has been failing.
-
- callback(failureAnalysis);
- });
-};
-
-})();