Title: [91197] trunk/Tools
Revision
91197
Author
[email protected]
Date
2011-07-18 11:20:11 -0700 (Mon, 18 Jul 2011)

Log Message

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:

Modified Paths

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() {
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to