Diff
Modified: trunk/Tools/ChangeLog (91196 => 91197)
--- trunk/Tools/ChangeLog 2011-07-18 18:18:48 UTC (rev 91196)
+++ trunk/Tools/ChangeLog 2011-07-18 18:20:11 UTC (rev 91197)
@@ -1,5 +1,22 @@
2011-07-18 Adam Barth <[email protected]>
+ Increase information garden-o-matic information density by switching to a table
+ https://bugs.webkit.org/show_bug.cgi?id=64642
+
+ Reviewed by Dimitri Glazkov.
+
+ The old layout couldn't handle the large number of failures we had
+ today. This patch switches garden-o-matic to a table-based layout,
+ which can handle many more failures gracefully. (I expect we'll need
+ more UI iterations.)
+
+ * Scripts/webkitpy/tool/servers/data/gardeningserver/main.css:
+ * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js:
+ * Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js:
+ * Scripts/webkitpy/tool/servers/data/gardeningserver/ui_unittests.js:
+
+2011-07-18 Adam Barth <[email protected]>
+
garden-o-matic should be able to determine when compile breaks
https://bugs.webkit.org/show_bug.cgi?id=64190
Modified: trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/main.css (91196 => 91197)
--- trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/main.css 2011-07-18 18:18:48 UTC (rev 91196)
+++ trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/main.css 2011-07-18 18:20:11 UTC (rev 91197)
@@ -16,16 +16,22 @@
border-collapse: collapse;
}
-td {
+td, th {
overflow: hidden;
vertical-align: top;
border-right: 1px solid #CCC;
}
-td:last-of-type {
+td:last-of-type, th:last-of-type {
border-right: 0px;
}
+th {
+ border-bottom: 1px solid #CCC;
+}
+
+/*** butterbar ***/
+
.butterbar {
background-color: #f3f3f3;
padding: 5px;
@@ -38,6 +44,8 @@
margin-left: 20px;
}
+/*** alert ***/
+
.alert {
display: none;
background-color: Cornsilk;
@@ -66,127 +74,104 @@
margin: 0px 5px;
}
-/* If we've only seen a given test failure once, we dim it so as not to distract the gardener. */
-.test[data-failure-count="1"][data-new-test="false"] {
- -webkit-transition: 1s opacity;
- opacity: 0.5;
-}
+/*** results-summary ***/
-.results {
- margin: 10px;
+table.results-summary {
+ width: auto;
+ table-layout: auto;
+ margin: 5px auto;
+ border: 1px solid #CCC;
}
-.regression {
- padding: 0 0 10px 0;
+.results-summary td, .results-summary th {
+ padding: 4px;
}
-.regression .test {
- margin: 10px 0px;
-}
-
-.regression ul {
- margin: 0;
+.results-summary ul {
+ margin: 0px;
+ padding: 0px;
list-style: none;
display: inline-block;
- padding: 0 0 0 10px;
}
-.regression li {
+.results-summary li {
display: inline-block;
margin: 0px 5px;
}
-.regression a {
+.results-summary a {
font-weight: normal;
}
-.regression .what a {
+.results-summary .what a {
text-decoration: none;
+ padding: 1px 2px;
+ color: black;
}
-.regression .what a[draggable].IMAGE\+TEXT::before {
+.results-summary .what a[draggable].IMAGE\+TEXT::after {
content: 'IMAGE+TEXT';
color: white;
background-color: Indigo;
font-size: 10px;
padding: 1px 2px;
- margin: 0 3px 0 0;
+ margin: 0 0 0 3px;
border-radius: 4px;
}
-.regression .what a[draggable].IMAGE::before {
+.results-summary .what a[draggable].IMAGE::after {
content: 'IMAGE';
color: white;
background-color: MidnightBlue;
font-size: 10px;
padding: 1px 2px;
- margin: 0 3px 0 0;
+ margin: 0 0 0 3px;
border-radius: 4px;
}
-.regression .what a[draggable].TIMEOUT::before {
+.results-summary .what a[draggable].TIMEOUT::after {
content: 'TIMEOUT';
color: white;
background-color: DarkGoldenRod;
font-size: 10px;
padding: 1px 2px;
- margin: 0 3px 0 0;
+ margin: 0 0 0 3px;
border-radius: 4px;
}
-.regression .what a[draggable].TEXT::before {
+.results-summary .what a[draggable].TEXT::after {
content: 'TEXT';
color: white;
background-color: DodgerBlue;
font-size: 10px;
padding: 1px 2px;
- margin: 0 3px 0 0;
+ margin: 0 0 0 3px;
border-radius: 4px;
}
-.regression .what a[draggable].CRASH::before {
+.results-summary .what a[draggable].CRASH::after {
content: 'CRASH';
color: white;
background-color: Tomato;
font-size: 10px;
padding: 1px 2px;
- margin: 0 3px 0 0;
+ margin: 0 0 0 3px;
border-radius: 4px;
}
-.regression .test[data-new-test="true"] .what a[draggable]::after {
+.results-summary .test[data-new-test="true"] .what a[draggable]::before {
content: '(new)';
margin: 0 3px;
}
-.regression .what a {
- padding: 1px 2px;
- border-radius: 4px;
- color: black;
+/* If we've only seen a given test failure once, we dim it so as not to distract the gardener. */
+.results-summary .test[data-failure-count="1"][data-new-test="false"] {
+ -webkit-transition: 1s opacity;
+ opacity: 0.5;
}
-.partytime {
- display: none;
- text-align:center;
-}
+/*** results-detail ***/
-.regression .where li {
- margin: 3px;
- display: inline-block;
- padding: 1px 2px;
- border-radius: 4px;
- color: #555;
-}
-
-.regression .regression-range, .regression .failure-count {
- padding: 0px 2px;
- display: inline-block;
-}
-
-.regression .failure-count {
- color: #555;
-}
-
.results-detail {
display: none;
position: fixed;
@@ -249,3 +234,10 @@
.results-detail .failure-details td {
height: 100%;
}
+
+/*** partytime ***/
+
+.partytime {
+ display: none;
+ text-align: center;
+}
Modified: trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/main.js (91196 => 91197)
--- trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/main.js 2011-07-18 18:18:48 UTC (rev 91196)
+++ trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/main.js 2011-07-18 18:20:11 UTC (rev 91197)
@@ -58,14 +58,15 @@
$('.results').append(partyTime);
partyTime.fadeIn(1200).delay(7000).fadeOut();
} else {
- var regressions = $('<div class="results-summary regression"></div>');
+ var regressions = ui.regressionsContainer();
+
$.each(unexpectedFailures, function(testName, resultNodesByBuilder) {
var testSummary = ui.summarizeTest(testName, resultNodesByBuilder);
- regressions.append(testSummary);
+ $('tbody', regressions).append(testSummary);
var builderNameList = base.keys(resultNodesByBuilder);
results.unifyRegressionRanges(builderNameList, testName, function(oldestFailingRevision, newestPassingRevision) {
- $('.regression-range', testSummary).append(ui.summarizeRegressionRange(oldestFailingRevision, newestPassingRevision));
+ $('.when', testSummary).append(ui.summarizeRegressionRange(oldestFailingRevision, newestPassingRevision));
if (!newestPassingRevision)
return;
checkout.existsAtRevision(checkout.subversionURLForTest(testName), newestPassingRevision, function(testExistedBeforeFailure) {
@@ -74,7 +75,7 @@
});
results.countFailureOccurances(builderNameList, testName, function(failureCount) {
$(testSummary).attr(config.kFailureCountAttr, failureCount);
- $('.failure-count', testSummary).text(ui.failureCount(failureCount));
+ $('.how-many', testSummary).text(ui.failureCount(failureCount));
});
});
$('.results').append(regressions);
@@ -168,7 +169,7 @@
checkBuilderStatuses();
}
-$('.regression .where a').live('click', showResultsDetail);
+$('.results-summary .where a').live('click', showResultsDetail);
$('.results-detail .actions .dismiss').live('click', hideResultsDetail);
$('.results-detail .actions .rebaseline').live('click', rebaselineResults);
Modified: trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js (91196 => 91197)
--- trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js 2011-07-18 18:18:48 UTC (rev 91196)
+++ trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js 2011-07-18 18:20:11 UTC (rev 91197)
@@ -31,19 +31,28 @@
return 'http://trac.webkit.org/changeset/' + firstRevision;
};
+ui.regressionsContainer = function()
+{
+ return $(
+ '<table class="results-summary">' +
+ '<thead>' +
+ '<tr>' +
+ '<th>Test</th><th>Bot</th><th>Regression Range</th><th>Frequency</th>' +
+ '</thead>' +
+ '<tbody></tbody>' +
+ '</table>');
+};
+
ui.summarizeTest = function(testName, resultNodesByBuilder)
{
var unexpectedResults = results.collectUnexpectedResults(resultNodesByBuilder);
var block = $(
- '<div class="test">' +
- '<span class="what"><a draggable></a></span>' +
- '<span>fails on</span>' +
- '<ul class="where"></ul>' +
- '<div class="when">' +
- '<div class="regression-range"></div>' +
- '<div class="failure-count"></div>' +
- '</div>' +
- '</div>');
+ '<tr class="test">' +
+ '<td class="what"><a draggable></a></td>' +
+ '<td class="where"><ul></ul></td>' +
+ '<td class="when"></td>' +
+ '<td class="how-many"></td>' +
+ '</tr>');
$('.what a', block).text(testName).attr('href', ui.urlForTest(testName)).attr('class', unexpectedResults.join(' '));
block.attr(config.kFailureTypesAttr, unexpectedResults);
@@ -60,7 +69,7 @@
ui.summarizeRegressionRange = function(oldestFailingRevision, newestPassingRevision)
{
if (!oldestFailingRevision || !newestPassingRevision)
- return $('<div class="regression-range">Regression Range: Unknown</div>');
+ return $('<div class="regression-range">Unknown</div>');
var impliedFirstFailingRevision = newestPassingRevision + 1;
@@ -69,7 +78,7 @@
displayNameForRevision(impliedFirstFailingRevision) :
displayNameForRevision(impliedFirstFailingRevision) + '-' + displayNameForRevision(oldestFailingRevision);
- var block = $('<div class="regression-range">Regression Range: <a></a></div>');
+ var block = $('<div class="regression-range"><a></a></div>');
$('a', block).attr('href', href).text(text)
return block;
};
@@ -93,8 +102,8 @@
if (failureCount < 1)
return '';
if (failureCount == 1)
- return '(Seen once.)';
- return '(Seen ' + failureCount + ' times.)';
+ return 'Seen once.';
+ return 'Seen ' + failureCount + ' times.';
};
ui.failureDetails = function(resultsURLs)
Modified: trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/ui_unittests.js (91196 => 91197)
--- trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/ui_unittests.js 2011-07-18 18:18:48 UTC (rev 91196)
+++ trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/ui_unittests.js 2011-07-18 18:20:11 UTC (rev 91197)
@@ -33,22 +33,22 @@
test("summarizeRegressionRange", 3, function() {
var summaryWithMultipleRevisions = ui.summarizeRegressionRange(0, 0);
summaryWithMultipleRevisions.wrap('<wrapper></wrapper>');
- equal(summaryWithMultipleRevisions.parent().html(), '<div class="regression-range">Regression Range: Unknown</div>');
+ equal(summaryWithMultipleRevisions.parent().html(), '<div class="regression-range">Unknown</div>');
var summaryWithMultipleRevisions = ui.summarizeRegressionRange(90424, 90426);
summaryWithMultipleRevisions.wrap('<wrapper></wrapper>');
- equal(summaryWithMultipleRevisions.parent().html(), '<div class="regression-range">Regression Range: <a href=""
+ equal(summaryWithMultipleRevisions.parent().html(), '<div class="regression-range"><a href=""
var summaryWithOneRevision = ui.summarizeRegressionRange(90425, 90426);
summaryWithOneRevision.wrap('<wrapper></wrapper>');
- equal(summaryWithOneRevision.parent().html(), '<div class="regression-range">Regression Range: <a href=""
+ equal(summaryWithOneRevision.parent().html(), '<div class="regression-range"><a href=""
});
test("failureCount", 4, function() {
equal(ui.failureCount(0), '');
- equal(ui.failureCount(1), '(Seen once.)');
- equal(ui.failureCount(2), '(Seen 2 times.)');
- equal(ui.failureCount(3), '(Seen 3 times.)');
+ equal(ui.failureCount(1), 'Seen once.');
+ equal(ui.failureCount(2), 'Seen 2 times.');
+ equal(ui.failureCount(3), 'Seen 3 times.');
});
test("alertMessageForCompileErrors", 1, function() {