Changeset 90924 in webkit


Ignore:
Timestamp:
Jul 13, 2011 10:01:38 AM (13 years ago)
Author:
abarth@webkit.org
Message:

Refine garden-o-matic status pane
https://bugs.webkit.org/show_bug.cgi?id=64442

Reviewed by Dimitri Glazkov.

This patch makes two improvements to the status pane:

1) We only query the server for failure types that we're expecting.

This dramatically reduces the number of HTTP requests, making
loading the status pane faster.

2) The status pane now displays which test and which builder it is

showing results for.

  • Scripts/webkitpy/tool/servers/data/gardeningserver/config.js:
  • Scripts/webkitpy/tool/servers/data/gardeningserver/index.html:
  • Scripts/webkitpy/tool/servers/data/gardeningserver/main.css:
  • Scripts/webkitpy/tool/servers/data/gardeningserver/main.js:
  • Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:
  • Scripts/webkitpy/tool/servers/data/gardeningserver/results_unittests.js:
  • Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js:
Location:
trunk/Tools
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/Tools/ChangeLog

    r90923 r90924  
     12011-07-13  Adam Barth  <abarth@webkit.org>
     2
     3        Refine garden-o-matic status pane
     4        https://bugs.webkit.org/show_bug.cgi?id=64442
     5
     6        Reviewed by Dimitri Glazkov.
     7
     8        This patch makes two improvements to the status pane:
     9
     10        1) We only query the server for failure types that we're expecting.
     11           This dramatically reduces the number of HTTP requests, making
     12           loading the status pane faster.
     13
     14        2) The status pane now displays which test and which builder it is
     15           showing results for.
     16
     17        * Scripts/webkitpy/tool/servers/data/gardeningserver/config.js:
     18        * Scripts/webkitpy/tool/servers/data/gardeningserver/index.html:
     19        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.css:
     20        * Scripts/webkitpy/tool/servers/data/gardeningserver/main.js:
     21        * Scripts/webkitpy/tool/servers/data/gardeningserver/results.js:
     22        * Scripts/webkitpy/tool/servers/data/gardeningserver/results_unittests.js:
     23        * Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js:
     24
    1252011-07-13  Adam Barth  <abarth@webkit.org>
    226
  • trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/config.js

    r90923 r90924  
    2222config.kTestNameAttr = 'data-test-name';
    2323config.kBuilderNameAttr = 'data-builder-name';
     24config.kFailureCountAttr = 'data-failure-count';
     25config.kFailureTypesAttr = 'data-failure-types';
    2426
    2527})();
  • trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/index.html

    r90923 r90924  
    1414<div class="results"></div>
    1515<div class="results-detail">
    16 <div class="toolbar"><a class="dismiss" href="#">Close</a></div><div class="content"></div></div>
     16<div class="toolbar"><span class="status"></span> <a class="dismiss" href="#">Close</a></div><div class="content"></div></div>
    1717<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
    1818<script src="config.js"></script>
  • trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/main.css

    r90923 r90924  
    165165.results-detail .toolbar {
    166166    border-top: 1px solid #CCC;
    167     text-align: right;
    168167    border-bottom: 1px solid #CCC;
    169168}
    170169
    171 .results-detail .dismiss {
     170.results-detail .toolbar .status {
     171    display: inline-block;
     172    padding: 5px;
     173}
     174
     175.results-detail .toolbar .dismiss {
     176    float: right;
    172177    display: inline-block;
    173178    padding: 5px;
     
    193198}
    194199
     200.results-detail .failure-details img {
     201  width: 100%;
     202  height: auto;
     203}
     204
    195205.results-detail .failure-details td {
    196206    height: 100%;
  • trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/main.js

    r90923 r90924  
    4444                });
    4545                results.countFailureOccurances(builderNameList, testName, function(failureCount) {
    46                     $(testSummary).attr('data-failure-count', failureCount);
     46                    $(testSummary).attr(config.kFailureCountAttr, failureCount);
    4747                    $('.failure-count', testSummary).text(ui.failureCount(failureCount));
    4848                });
     
    5757function showResultsDetail()
    5858{
     59    var testBlock = $(this).parents('.test');
    5960    var builderName = $(this).attr(config.kBuilderNameAttr);
    60     var testName = $('.what', $(this).parents('.test')).text();
     61    var testName = $('.what', testBlock).text();
     62    var failureTypeList = testBlock.attr(config.kFailureTypesAttr).split(' ');
    6163
    6264    var content = $('.results-detail .content');
     
    6668    displayOnButterbar('Loading results');
    6769
    68     results.fetchResultsURLs(builderName, testName, function(resultsURLs) {
     70    results.fetchResultsURLs(builderName, testName, failureTypeList, function(resultsURLs) {
     71        var status = $('.results-detail .toolbar .status');
     72
    6973        function appendResults() {
     74            status.text(testName + ' [' + builderName + ']');
    7075            content.append(ui.failureDetails(resultsURLs));
    7176            $('.results', content).attr(config.kBuilderNameAttr, builderName);
     
    7681        if (children.length && $('.results-detail').is(":visible")) {
    7782            // The results-detail pane is already open. Let's do a quick cross-fade.
     83            status.fadeOut('fast');
    7884            children.fadeOut('fast', function() {
    7985                content.empty();
    8086                appendResults();
     87                status.fadeIn('fast');
    8188                content.children().hide().fadeIn('fast', dismissButterbar);
    8289            });
  • trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/results.js

    r90923 r90924  
    1111var kLayoutTestResultsServer = 'http://build.chromium.org/f/chromium/layout_test_results/';
    1212var kLayoutTestResultsPath = '/results/layout-test-results/';
    13 
    14 // FIXME: Add support for the rest of the result types.
    15 var kPossibleSuffixList = [
    16     '-expected.png',
    17     '-actual.png',
    18     '-diff.png',
    19     // '-expected.txt',
    20     // '-actual.txt',
    21     '-diff.txt',
    22     '-crash-log.txt',
    23     // '-wdiff.html',
    24     // '-pretty-diff.html',
    25     // '-expected.html',
    26     // '-expected-mismatch.html',
    27     // '-expected.wav',
    28     // '-actual.wav',
    29     // ... and possibly more.
    30 ];
    3113
    3214var PASS = 'PASS';
     
    3921var kFailingResults = [TIMEOUT, TEXT, CRASH, IMAGE, IMAGE_TEXT];
    4022
     23var kExpectedImageSuffix = '-expected.png';
     24var kActualImageSuffix = '-actual.png';
     25var kImageDiffSuffix = '-diff.png';
     26var kTextDiffSuffix = '-diff.txt';
     27var kCrashLogSuffix = '-crash-log.txt';
     28
     29var kPreferredSuffixOrder = [
     30    kExpectedImageSuffix,
     31    kActualImageSuffix,
     32    kImageDiffSuffix,
     33    kTextDiffSuffix,
     34    kCrashLogSuffix,
     35    // FIXME: Add support for the rest of the result types.
     36];
     37
    4138// Kinds of results.
    4239results.kActualKind = 'actual';
     
    6865        name: testName,
    6966    };
     67}
     68
     69function possibleSuffixListFor(failureTypeList)
     70{
     71    var suffixList = [];
     72
     73    function pushImageSuffixes()
     74    {
     75        suffixList.push(kExpectedImageSuffix);
     76        suffixList.push(kActualImageSuffix);
     77        suffixList.push(kImageDiffSuffix);
     78    }
     79
     80    function pushTextSuffixes()
     81    {
     82        // '-expected.txt',
     83        // '-actual.txt',
     84        suffixList.push(kTextDiffSuffix);
     85        // '-wdiff.html',
     86        // '-pretty-diff.html',
     87    }
     88
     89    $.each(failureTypeList, function(index, failureType) {
     90        switch(failureType) {
     91            case IMAGE:
     92                pushImageSuffixes();
     93                break;
     94            case TEXT:
     95                pushTextSuffixes();
     96                break;
     97            case IMAGE_TEXT:
     98                pushImageSuffixes();
     99                pushTextSuffixes();
     100                break;
     101            case CRASH:
     102                suffixList.push(kCrashLogSuffix);
     103                break;
     104            default:
     105                // FIXME: Add support for the rest of the result types.
     106                // '-expected.html',
     107                // '-expected-mismatch.html',
     108                // '-expected.wav',
     109                // '-actual.wav',
     110                // ... and possibly more.
     111                break;
     112        }
     113    });
     114
     115    return suffixList;
    70116}
    71117
     
    362408{
    363409    var sortedURLs = [];
    364     $.each(kPossibleSuffixList, function(i, suffix) {
     410    $.each(kPreferredSuffixOrder, function(i, suffix) {
    365411        $.each(urls, function(j, url) {
    366412            if (!base.endsWith(url, suffix))
     
    374420}
    375421
    376 results.fetchResultsURLs = function(builderName, testName, callback)
     422results.fetchResultsURLs = function(builderName, testName, failureTypeList, callback)
    377423{
    378424    var stem = resultsDirectoryURL(builderName);
    379425    var testNameStem = base.trimExtension(testName);
    380426
     427    var suffixList = possibleSuffixListFor(failureTypeList);
     428
    381429    var resultURLs = [];
    382     var requestsInFlight = kPossibleSuffixList.length;
     430    var requestsInFlight = suffixList.length;
    383431
    384432    function checkComplete()
     
    388436    }
    389437
    390     $.each(kPossibleSuffixList, function(index, suffix) {
     438    $.each(suffixList, function(index, suffix) {
    391439        var url = stem + testNameStem + suffix;
    392440        base.probe(url, {
  • trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/results_unittests.js

    r90923 r90924  
    343343
    344344    simulator.runTest(function() {
    345         results.fetchResultsURLs("Mock Builder", "userscripts/another-test.html", function(resultURLs) {
     345        results.fetchResultsURLs("Mock Builder", "userscripts/another-test.html", ['IMAGE', 'CRASH'], function(resultURLs) {
    346346            deepEqual(resultURLs, [
    347                 "http://build.chromium.org/f/chromium/layout_test_results/Mock_Builder/results/layout-test-results/userscripts/another-test-diff.txt",
    348347                "http://build.chromium.org/f/chromium/layout_test_results/Mock_Builder/results/layout-test-results/userscripts/another-test-crash-log.txt"
    349348            ]);
     
    355354        "http://build.chromium.org/f/chromium/layout_test_results/Mock_Builder/results/layout-test-results/userscripts/another-test-actual.png",
    356355        "http://build.chromium.org/f/chromium/layout_test_results/Mock_Builder/results/layout-test-results/userscripts/another-test-diff.png",
    357         "http://build.chromium.org/f/chromium/layout_test_results/Mock_Builder/results/layout-test-results/userscripts/another-test-diff.txt",
    358356        "http://build.chromium.org/f/chromium/layout_test_results/Mock_Builder/results/layout-test-results/userscripts/another-test-crash-log.txt"
    359357    ]);
  • trunk/Tools/Scripts/webkitpy/tool/servers/data/gardeningserver/ui.js

    r90923 r90924  
    3939        '</div>');
    4040    $('.what a', block).text(testName).attr('href', ui.urlForTest(testName)).attr('class', unexpectedResults.join(' '));
     41    block.attr(config.kFailureTypesAttr, unexpectedResults);
    4142
    4243    var where = $('.where', block);
Note: See TracChangeset for help on using the changeset viewer.