Index: tools/telemetry/support/html_output/results-template.html |
diff --git a/tools/telemetry/support/html_output/results-template.html b/tools/telemetry/support/html_output/results-template.html |
index 69ad6b80bc52a512e2c6063085d9f091f6dfe003..f66698d19dc95dfc1b032125e8922bdb19c496db 100644 |
--- a/tools/telemetry/support/html_output/results-template.html |
+++ b/tools/telemetry/support/html_output/results-template.html |
@@ -598,8 +598,9 @@ function createTable(tests, runs, shouldIgnoreMemory, referenceIndex, useLargeLi |
testNames.sort().map(function (testName) { |
var test = tests[testName]; |
- if (test.isMemoryTest() != shouldIgnoreMemory) |
- createTableRow(runs, test, referenceIndex, useLargeLinePlots); |
+ if (test.isMemoryTest() != shouldIgnoreMemory) { |
+ new TableRow(runs, test, referenceIndex, useLargeLinePlots); |
Sami
2014/10/20 16:24:47
I assume the upcoming CL will keep a reference to
picksi1
2014/10/24 15:04:59
The object created will be used a lot in the follo
|
+ } |
}); |
$('.closeButton').click(function(event) { |
@@ -682,111 +683,115 @@ 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(runs, test, referenceIndex, useLargeLinePlots) { |
- var tableRow = $('<tr><td class="test collapsed"' + (test.isImportant ? ' style="font-weight:bold"' : '') + '>' + test.name() + '</td><td class="unit">' + test.unit() + '</td></tr>'); |
- |
- function markupForRun(result, referenceResult) { |
- var comparisonCell = ''; |
- var hiddenValue = ''; |
- var shouldCompare = result !== referenceResult; |
- if (shouldCompare && referenceResult) { |
- var percentDifference = referenceResult.percentDifference(result); |
- var better = test.biggerIsBetter() ? percentDifference > 0 : percentDifference < 0; |
- var comparison = ''; |
- var className = 'comparison'; |
- if (referenceResult.isStatisticallySignificant(result)) { |
- comparison = formatPercentage(Math.abs(percentDifference)) + (better ? ' Better' : ' Worse '); |
- className += better ? ' better' : ' worse'; |
- } |
- hiddenValue = '<span style="display: none">|' + comparison + '</span>'; |
- comparisonCell = '<td class="' + className + '">' + comparison + '</td>'; |
- } else if (shouldCompare) |
- comparisonCell = '<td class="comparison"></td>'; |
- |
- var values = result.values(); |
- var warning = ''; |
- var regressionAnalysis = ''; |
- if (result.histogramValues) { |
- // Don't calculate regression result for histograms. |
- } |
- else if (values && values.length > 3) { |
- regressionResult = linearRegression(values); |
- regressionAnalysis = 'slope=' + toFixedWidthPrecision(regressionResult.slope) |
- + ', R^2=' + toFixedWidthPrecision(regressionResult.rSquared); |
- if (regressionResult.rSquared > 0.6 && Math.abs(regressionResult.slope) > 0.01) { |
- warning = ' <span class="regression-warning" title="Detected a time dependency with ' + regressionAnalysis + '">' + warningSign + ' </span>'; |
- } |
- } |
- |
- var statistics = 'σ=' + toFixedWidthPrecision(result.confidenceIntervalDelta()) + ', min=' + toFixedWidthPrecision(result.min()) |
- + ', max=' + toFixedWidthPrecision(result.max()) + '\n' + regressionAnalysis; |
+function TableRow(runs, test, referenceIndex, useLargeLinePlots) { |
+ this.runs = runs; |
+ this.test = test; |
+ this.referenceIndex = referenceIndex; |
+ this.useLargeLinePlots = useLargeLinePlots; |
- // 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="confidenceIntervalDelta" title="' + statistics + '">± ' |
- + formatPercentage(result.confidenceIntervalDeltaRatio()) + warning + '</td>' + comparisonCell; |
- } |
- |
- function markupForMissingRun(isReference) { |
- return '<td colspan="' + (isReference ? 2 : 3) + '" class="missing">Missing</td>'; |
- } |
+ this.tableRow = $('<tr><td class="test collapsed"' + (this.test.isImportant ? ' style="font-weight:bold"' : '') + '>' + this.test.name() + '</td><td class="unit">' + this.test.unit() + '</td></tr>'); |
var runIndex = 0; |
- var results = test.results(); |
+ var results = this.test.results(); |
var referenceResult = undefined; |
var resultIndexMap = {}; |
for (var i = 0; i < results.length; i++) { |
- while (runs[runIndex] !== results[i].run()) |
+ while (this.runs[runIndex] !== results[i].run()) |
runIndex++; |
- if (runIndex == referenceIndex) |
+ if (runIndex == this.referenceIndex) |
referenceResult = results[i]; |
resultIndexMap[runIndex] = i; |
} |
- for (var i = 0; i < runs.length; i++) { |
+ for (var i = 0; i < this.runs.length; i++) { |
var resultIndex = resultIndexMap[i]; |
if (resultIndex == undefined) |
- tableRow.append(markupForMissingRun(i == referenceIndex)); |
+ this.tableRow.append(this.markupForMissingRun(i == this.referenceIndex)); |
else |
- tableRow.append(markupForRun(results[resultIndex], referenceResult)); |
+ this.tableRow.append(this.markupForRun(results[resultIndex], this.referenceResult)); |
} |
- $('#container').children('tbody').last().append(tableRow); |
+ $('#container').children('tbody').last().append(this.tableRow); |
- function toggle() { |
- var firstCell = tableRow.children('td').first(); |
- if (firstCell.children('section').length) { |
- firstCell.children('section').remove(); |
- tableRow.children('td').css({'padding-bottom': ''}); |
- tableRow.children('td').first().addClass('collapsed'); |
- tableRow.children('td').first().removeClass('expanded'); |
- } else { |
- var plot = createPlot(firstCell, test, useLargeLinePlots); |
- plot.css({'position': 'absolute', 'z-index': 2}); |
- var offset = tableRow.offset(); |
- offset.left += 1; |
- offset.top += tableRow.outerHeight(); |
- plot.offset(offset); |
- tableRow.children('td').css({'padding-bottom': plot.outerHeight() + 5}); |
- tableRow.children('td').first().removeClass('collapsed'); |
- tableRow.children('td').first().addClass('expanded'); |
+ if (this.test.isImportant && window.isFirstImportantRow) { |
+ window.isFirstImportantRow = false; |
+ this.toggle(); |
+ } |
+ |
+ var owningObject = this; |
+ this.tableRow.click(function(event) { |
+ if (event.target != owningObject.tableRow[0] && event.target.parentNode != owningObject.tableRow[0]) { |
+ return; |
} |
+ event.preventDefault(); |
+ owningObject.toggle(); |
+ }); |
+} |
- return false; |
- }; |
+TableRow.prototype.markupForRun = function(result, referenceResult) { |
+ var comparisonCell = ''; |
+ var hiddenValue = ''; |
+ var shouldCompare = result !== referenceResult; |
+ if (shouldCompare && referenceResult) { |
+ var percentDifference = referenceResult.percentDifference(result); |
+ var better = this.test.biggerIsBetter() ? percentDifference > 0 : percentDifference < 0; |
+ var comparison = ''; |
+ var className = 'comparison'; |
+ if (referenceResult.isStatisticallySignificant(result)) { |
+ comparison = formatPercentage(Math.abs(percentDifference)) + (better ? ' Better' : ' Worse '); |
+ className += better ? ' better' : ' worse'; |
+ } |
+ hiddenValue = '<span style="display: none">|' + comparison + '</span>'; |
+ comparisonCell = '<td class="' + className + '">' + comparison + '</td>'; |
+ } else if (shouldCompare) |
+ comparisonCell = '<td class="comparison"></td>'; |
+ |
+ var values = result.values(); |
+ var warning = ''; |
+ var regressionAnalysis = ''; |
+ if (result.histogramValues) { |
+ // Don't calculate regression result for histograms. |
+ } else if (values && values.length > 3) { |
+ regressionResult = linearRegression(values); |
+ regressionAnalysis = 'slope=' + toFixedWidthPrecision(regressionResult.slope) |
+ + ', R^2=' + toFixedWidthPrecision(regressionResult.rSquared); |
+ if (regressionResult.rSquared > 0.6 && Math.abs(regressionResult.slope) > 0.01) { |
+ warning = ' <span class="regression-warning" title="Detected a time dependency with ' + regressionAnalysis + '">' + warningSign + ' </span>'; |
+ } |
+ } |
- tableRow.click(function(event) { |
- if (event.target != tableRow[0] && event.target.parentNode != tableRow[0]) |
- return; |
+ var statistics = 'σ=' + toFixedWidthPrecision(result.confidenceIntervalDelta()) + ', min=' + toFixedWidthPrecision(result.min()) |
+ + ', max=' + toFixedWidthPrecision(result.max()) + '\n' + regressionAnalysis; |
- event.preventDefault(); |
+ // 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="confidenceIntervalDelta" title="' + statistics + '">± ' |
+ + formatPercentage(result.confidenceIntervalDeltaRatio()) + warning + '</td>' + comparisonCell; |
+} |
- toggle(); |
- }); |
+TableRow.prototype.markupForMissingRun = function(isReference) { |
+ return '<td colspan="' + (isReference ? 2 : 3) + '" class="missing">Missing</td>'; |
+} |
- if (test.isImportant && window.isFirstImportantRow) { |
- window.isFirstImportantRow = false; |
- toggle(); |
+TableRow.prototype.toggle = function() { |
+ var firstCell = this.tableRow.children('td').first(); |
+ if (firstCell.children('section').length) { |
+ firstCell.children('section').remove(); |
+ this.tableRow.children('td').css({'padding-bottom': ''}); |
+ this.tableRow.children('td').first().addClass('collapsed'); |
+ this.tableRow.children('td').first().removeClass('expanded'); |
+ } else { |
+ var plot = createPlot(firstCell, this.test, this.useLargeLinePlots); |
+ plot.css({'position': 'absolute', 'z-index': 2}); |
+ var offset = this.tableRow.offset(); |
+ offset.left += 1; |
+ offset.top += this.tableRow.outerHeight(); |
+ plot.offset(offset); |
+ this.tableRow.children('td').css({'padding-bottom': plot.outerHeight() + 5}); |
+ this.tableRow.children('td').first().removeClass('collapsed'); |
+ this.tableRow.children('td').first().addClass('expanded'); |
} |
+ |
+ return false; |
} |
function init() { |