Perf. test results page is broken when runs have different sets of tests
authorrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 9 Oct 2012 01:43:08 +0000 (01:43 +0000)
committerrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 9 Oct 2012 01:43:08 +0000 (01:43 +0000)
https://bugs.webkit.org/show_bug.cgi?id=98691

Reviewed by Daniel Bates.

Add "missing" columns for tests that are missing some runs.

Also fix regressions from the previous patch:
- Make reference run switch work again
- Load jquery plugins from the remote server when the jquery is loaded from the remote server.

* resources/results-template.html:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@130711 268f45cc-cd09-0410-ab3c-d52691b4dbfc

PerformanceTests/ChangeLog
PerformanceTests/resources/results-template.html

index ad2d566..740dc75 100644 (file)
@@ -1,5 +1,20 @@
 2012-10-08  Ryosuke Niwa  <rniwa@webkit.org>
 
+        Perf. test results page is broken when runs have different sets of tests
+        https://bugs.webkit.org/show_bug.cgi?id=98691
+
+        Reviewed by Daniel Bates.
+
+        Add "missing" columns for tests that are missing some runs.
+
+        Also fix regressions from the previous patch:
+        - Make reference run switch work again
+        - Load jquery plugins from the remote server when the jquery is loaded from the remote server.
+
+        * resources/results-template.html:
+
+2012-10-08  Ryosuke Niwa  <rniwa@webkit.org>
+
         Perf test pesults page takes forever to load on a machine with a slow Internet connection
         https://bugs.webkit.org/show_bug.cgi?id=98561
 
index 5944c00..9fdb7b9 100644 (file)
@@ -94,6 +94,10 @@ td.worse {
     color: #c66;
 }
 
+td.missing {
+    text-align: center;
+}
+
 .checkbox {
     display: inline-block;
     background: #eee;
@@ -174,7 +178,7 @@ Reference <span id="reference" class="checkbox"></span>
         createLoadedJQuery(localPath),
         function () {
             loadScript(remotePath + '/' + jQuery,
-                createLoadedJQuery(localPath),
+                createLoadedJQuery(remotePath),
                 function () { alert("Failed to load jQuery."); });
         });
 })();
@@ -394,7 +398,7 @@ function createTable(tests, runs, shouldIgnoreMemory, referenceIndex) {
     testNames.sort().map(function (testName) {
         var test = tests[testName];
         if (test.isMemoryTest() != shouldIgnoreMemory)
-            createTableRow(test, test.results()[referenceIndex]);
+            createTableRow(runs, test, referenceIndex);
     });
 
     $('#container').tablesorter({widgets: ['zebra']});
@@ -438,13 +442,14 @@ var warningSign = '<svg viewBox="0 0 100 100" style="width: 18px; height: 18px;
     + '<circle cx="50" cy="73" r="6" fill="white" />'
     + '</svg>';
 
-function createTableRow(test, referenceResult) {
+function createTableRow(runs, test, referenceIndex) {
     var tableRow = $('<tr><td class="test">' + test.name() + '</td><td class="unit">' + test.unit() + '</td></tr>');
 
-    tableRow.append(test.results().map(function (result, index) {
-        var secondCell = '';
+    function markupForRun(result, referenceResult) {
+        var comparisonCell = '';
         var hiddenValue = '';
-        if (result !== referenceResult) {
+        var shouldCompare = result !== referenceResult;
+        if (shouldCompare && referenceResult) {
             var percentDifference = referenceResult.percentDifference(result);
             var better = test.smallerIsBetter() ? percentDifference < 0 : percentDifference > 0;
             var comparison = '';
@@ -454,8 +459,9 @@ function createTableRow(test, referenceResult) {
                 className += better ? ' better' : ' worse';
             }
             hiddenValue = '<span style="display: none">|' + comparison + '</span>';
-            secondCell = '</td><td class="' + className + '">' + comparison;
-        }
+            comparisonCell = '<td class="' + className + '">' + comparison + '</td>';
+        } else if (shouldCompare)
+            comparisonCell = '<td class="comparison"></td>';
 
         var values = result.values();
         var warning = '';
@@ -475,8 +481,31 @@ function createTableRow(test, referenceResult) {
         // Tablesorter doesn't know about the second cell so put the comparison in the invisible element.
         return '<td class="result" title="' + statistics + '">' + toFixedWidthPrecision(result.mean()) + hiddenValue
             + '</td><td class="stdev" title="' + statistics + '">&plusmn; '
-            + formatPercentage(result.stdevRatio()) + warning + secondCell + '</td>';
-    }).reduce(function (markup, cell) { return markup + cell; }, ''));
+            + formatPercentage(result.stdevRatio()) + warning + '</td>' + comparisonCell;
+    }
+
+    function markupForMissingRun(isReference) {
+        return '<td colspan="' + (isReference ? 2 : 3) + '" class="missing">Missing</td>';
+    }
+
+    var runIndex = 0;
+    var results = test.results();
+    var referenceResult = undefined;
+    var resultIndexMap = {};
+    for (var i = 0; i < results.length; i++) {
+        while (runs[runIndex] !== results[i].run())
+            runIndex++;
+        if (runIndex == referenceIndex)
+            referenceResult = results[i];
+        resultIndexMap[runIndex] = i;
+    }
+    for (var i = 0; i < runs.length; i++) {
+        var resultIndex = resultIndexMap[i];
+        if (resultIndex == undefined)
+            tableRow.append(markupForMissingRun(i == referenceIndex));
+        else
+            tableRow.append(markupForRun(results[resultIndex], referenceResult));
+    }
 
     $('#container').children('tbody').last().append(tableRow);
 
@@ -505,16 +534,6 @@ function createTableRow(test, referenceResult) {
 }
 
 function init() {
-    $('.checkbox').each(function (index, checkbox) {
-        $(checkbox).children('span').click(function (event) {
-            if ($(this).hasClass('checked'))
-                return;
-            $(checkbox).children('span').removeClass('checked');
-            $(this).addClass('checked');
-            $(checkbox).trigger('change', $(this));
-        });
-    });
-
     $.tablesorter.addParser({
         id: 'comparison',
         is: function(s) {
@@ -556,6 +575,16 @@ function init() {
         referenceIndex = parseInt(checkedElement.getAttribute('value'));
         createTable(tests, runs, shouldIgnoreMemory, referenceIndex);
     });
+
+    $('.checkbox').each(function (index, checkbox) {
+        $(checkbox).children('span').click(function (event) {
+            if ($(this).hasClass('checked'))
+                return;
+            $(checkbox).children('span').removeClass('checked');
+            $(this).addClass('checked');
+            $(checkbox).trigger('change', $(this));
+        });
+    });
 }
 
 </script>