Modified: trunk/PerformanceTests/ChangeLog (130710 => 130711)
--- trunk/PerformanceTests/ChangeLog 2012-10-09 01:39:20 UTC (rev 130710)
+++ trunk/PerformanceTests/ChangeLog 2012-10-09 01:43:08 UTC (rev 130711)
@@ -1,5 +1,20 @@
2012-10-08 Ryosuke Niwa <[email protected]>
+ 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 <[email protected]>
+
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
Modified: trunk/PerformanceTests/resources/results-template.html (130710 => 130711)
--- trunk/PerformanceTests/resources/results-template.html 2012-10-09 01:39:20 UTC (rev 130710)
+++ trunk/PerformanceTests/resources/results-template.html 2012-10-09 01:43:08 UTC (rev 130711)
@@ -94,6 +94,10 @@
color: #c66;
}
+td.missing {
+ text-align: center;
+}
+
.checkbox {
display: inline-block;
background: #eee;
@@ -174,7 +178,7 @@
createLoadedJQuery(localPath),
function () {
loadScript(remotePath + '/' + jQuery,
- createLoadedJQuery(localPath),
+ createLoadedJQuery(remotePath),
function () { alert("Failed to load jQuery."); });
});
})();
@@ -394,7 +398,7 @@
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 @@
+ '<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 @@
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,9 +481,32 @@
// 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 + '">± '
- + 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);
tableRow.click(function (event) {
@@ -505,16 +534,6 @@
}
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 @@
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>