Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2693)

Unified Diff: Tools/TestResultServer/static-dashboards/flakiness_dashboard.js

Issue 359533004: Group flakiness results by blink revision (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Revert local app.yaml change Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | Tools/TestResultServer/static-dashboards/flakiness_dashboard_tests.css » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Tools/TestResultServer/static-dashboards/flakiness_dashboard.js
diff --git a/Tools/TestResultServer/static-dashboards/flakiness_dashboard.js b/Tools/TestResultServer/static-dashboards/flakiness_dashboard.js
index 3120ed478b34b09b27b5176c8aab6b6983606783..9759c2c5a2c4c0f3f7fbf496da47787d33028334 100644
--- a/Tools/TestResultServer/static-dashboards/flakiness_dashboard.js
+++ b/Tools/TestResultServer/static-dashboards/flakiness_dashboard.js
@@ -542,7 +542,7 @@ function classNameForFailureString(failure)
return failure.replace(/(\+|\ )/, '');
}
-function htmlForTestResults(test)
+function htmlForTestResults(test, blinkRevisions)
{
var html = '';
var testResults = test.rawResults.concat();
@@ -551,6 +551,10 @@ function htmlForTestResults(test)
var master = builders.master(builder);
var buildNumbers = g_resultsByBuilder[builder].buildNumbers;
+ var cells = [];
+ for (var idx = 0; idx < blinkRevisions.length; idx++)
ojan 2014/06/29 03:38:49 nit: s/idx/index
pdr. 2014/06/29 20:51:34 Done.
+ cells.push({revision: blinkRevisions[idx]});
+
var indexToReplaceCurrentResult = -1;
var indexToReplaceCurrentTime = -1;
for (var i = 0; i < buildNumbers.length; i++) {
@@ -579,9 +583,39 @@ function htmlForTestResults(test)
innerHTML = currentTime || '&nbsp;';
}
- html += '<td title="' + resultString + '. Click for more info." class="results ' + classNameForFailureString(resultString) +
+ var blink = parseInt(g_resultsByBuilder[builder][results.BLINK_REVISIONS][i], 10);
ojan 2014/06/29 03:38:48 nit: s/blink/blinkRevision
pdr. 2014/06/29 20:51:34 Done.
+
+ // Locate the empty cell corresponding to this blink revision.
+ var cellIndex = -1;
+ for (var idx = 0; idx < cells.length && cellIndex == -1; idx++) {
ojan 2014/06/29 03:38:49 I think this would read more straightforward if yo
pdr. 2014/06/29 20:51:34 Done.
+ if (cells[idx].revision == blink && !cells[idx].html)
+ cellIndex = idx;
+ }
+
+ cells[cellIndex].className = classNameForFailureString(resultString);
+ cells[cellIndex].html = '<td title="' + resultString + '. Click for more info." class="results ' + cells[cellIndex].className +
'" onclick=\'showPopupForBuild(event, "' + builder + '",' + i + ',"' + test.test + '")\'>' + innerHTML;
}
+
+ // Set nextClassName on all cells.
ojan 2014/06/29 03:38:49 Nit: unhelpful comment.
pdr. 2014/06/29 20:51:34 Done.
+ for (var idx = 1; idx < cells.length; idx++)
+ cells[idx].nextClassName = cells[idx - 1].className || cells[idx - 1].nextClassName;
+
+ // Set prevClassName on all cells.
ojan 2014/06/29 03:38:49 Nit: unhelpful comment.
pdr. 2014/06/29 20:51:34 Done.
+ for (var idx = cells.length - 2; idx >= 0; --idx)
+ cells[idx].prevClassName = cells[idx + 1].className || cells[idx + 1].prevClassName;
+
+ var numResultsToShow = buildNumbers.length;
+ for (var idx = cells.length - 1; idx >= (cells.length - numResultsToShow); --idx) {
+ if (cells[idx].html) {
+ html += cells[idx].html;
+ } else {
+ if (cells[idx].nextClassName == cells[idx].prevClassName)
+ html += '<td class="interpolatedResults results ' + cells[idx].nextClassName + '">&nbsp;</td>';
ojan 2014/06/29 03:38:49 Should put a title on these so people can understa
pdr. 2014/06/29 20:51:34 Done.
+ else
+ html += '<td>&nbsp;</td>';
+ }
+ }
return html;
}
@@ -649,7 +683,7 @@ function linkifyBugs(bugs)
return html;
}
-function htmlForSingleTestRow(test, showBuilderNames)
+function htmlForSingleTestRow(test, showBuilderNames, revisions)
{
var headers = tableHeaders();
var html = '';
@@ -667,7 +701,7 @@ function htmlForSingleTestRow(test, showBuilderNames)
else if (string.startsWith(header, 'slowest'))
html += '<td>' + (test.slowestTime ? test.slowestTime + 's' : '');
else if (string.startsWith(header, 'flakiness'))
- html += htmlForTestResults(test);
+ html += htmlForTestResults(test, revisions);
}
return html;
}
@@ -783,6 +817,40 @@ function sortTests(tests, column, order)
tests.sort(sortFunctionGetter(resultsProperty, order == BACKWARD));
}
+// Return an array of unique blink build revisions across all builders.
+// The array contains blink revisions but note that these revisions may not be
+// unique: builds of blink@r123,chrome@r567 and blink@r123,chrome@r568 will
+// result in two entries of 123 in the returned array.
+function blinkBuildRevisions(testResults)
+{
+ var revisionsCountedSet = {};
+ for (var j = 0; j < testResults.length; j++) {
+ var builder = testResults[j].builder;
+ var build = g_resultsByBuilder[builder];
+ var buildNumbers = build.buildNumbers;
+ var builderRevisionsCountedSet = {};
+ for (var i = 0; i < buildNumbers.length; i++) {
+ var blinkRevision = build[results.BLINK_REVISIONS][i];
+ builderRevisionsCountedSet[blinkRevision] = (builderRevisionsCountedSet[blinkRevision] || 0) + 1;
+ }
+
+ // Join the builder's revisions with the total revisions for all builders.
+ for (var revision in builderRevisionsCountedSet)
+ revisionsCountedSet[revision] = Math.max(revisionsCountedSet[revision] || 0, builderRevisionsCountedSet[revision]);
+ }
+
+ var revisionsArray = [];
+ for (var revision in revisionsCountedSet) {
+ for (var i = revisionsCountedSet[revision] - 1; i >= 0; --i)
+ revisionsArray.push(revision);
+ }
+
+ revisionsArray.sort(function(a, b) {
+ return (a - b);
+ });
+ return revisionsArray;
+}
+
function htmlForIndividualTestOnAllBuilders(test)
{
processTestRunsForAllBuilders();
@@ -793,10 +861,11 @@ function htmlForIndividualTestOnAllBuilders(test)
var html = '';
var shownBuilders = [];
+ var blinkRevisions = blinkBuildRevisions(testResults);
for (var j = 0; j < testResults.length; j++) {
shownBuilders.push(testResults[j].builder);
var showBuilderNames = true;
- html += htmlForSingleTestRow(testResults[j], showBuilderNames);
+ html += htmlForSingleTestRow(testResults[j], showBuilderNames, blinkRevisions);
}
var skippedBuilders = []
@@ -1261,8 +1330,9 @@ function generatePageForBuilder(builderName)
if (filteredResults.length) {
var tableRowsHTML = '';
var showBuilderNames = false;
+ var blinkRevisions = blinkBuildRevisions(testResults);
for (var i = 0; i < filteredResults.length; i++)
- tableRowsHTML += htmlForSingleTestRow(filteredResults[i], showBuilderNames)
+ tableRowsHTML += htmlForSingleTestRow(filteredResults[i], showBuilderNames, blinkRevisions)
testsHTML = htmlForTestTable(tableRowsHTML);
} else {
if (g_history.isLayoutTestResults())
« no previous file with comments | « no previous file | Tools/TestResultServer/static-dashboards/flakiness_dashboard_tests.css » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698