+2015-05-22 Ryosuke Niwa <rniwa@webkit.org>
+
+ Show results and status before revisions for A/B testing results
+ https://bugs.webkit.org/show_bug.cgi?id=145327
+
+ Reviewed by Chris Dumez.
+
+ Place the results and the status columns before the columns for revisions.
+ Also show the absolute difference as well as the relative difference between the averages of A and B.
+
+ * public/v2/app.js:
+ (App.TestGroupPane._populate):
+ (App.TestGroupPane._computeStatisticalSignificance):
+ * public/v2/index.html:
+
2015-05-20 Ryosuke Niwa <rniwa@webkit.org>
Build fix after r184591.
this.set('configurations', configurations);
+ var probabilityFormatter = d3.format('.2p');
var comparisons = [];
for (var i = 0; i < configurations.length - 1; i++) {
var summary1 = configurations[i].summary;
for (var j = i + 1; j < configurations.length; j++) {
var summary2 = configurations[j].summary;
+
+ var valueDelta = testResults.deltaFormatter(summary2.value - summary1.value);
+ var relativeDelta = d3.format('+.2p')((summary2.value - summary1.value) / summary1.value);
+
+ var stat = this._computeStatisticalSignificance(summary1.measuredValues, summary2.measuredValues);
comparisons.push({
label: summary1.configLetter + ' / ' + summary2.configLetter,
- result: this._computeStatisticalSignificance(summary1.measuredValues, summary2.measuredValues)
+ difference: isNaN(summary1.value) || isNaN(summary2.value) ? 'N/A' : valueDelta + ' (' + relativeDelta + ') ',
+ result: stat,
});
}
}
var details = ' (t=' + tFormatter(statistics.t) + ' df=' + tFormatter(statistics.degreesOfFreedom) + ')';
if (!statistics.range[0])
- return 'Not statistically significant' + details;
+ return 'Not significant' + details;
var lowerLimit = probabilityFormatter(statistics.range[0]);
if (!statistics.range[1])
- return 'Statistical significance > ' + lowerLimit + details;
+ return 'Significance > ' + lowerLimit + details;
- return lowerLimit + ' < Statistical significance < ' + probabilityFormatter(statistics.range[1]) + details;
+ return lowerLimit + ' < Significance < ' + probabilityFormatter(statistics.range[1]) + details;
},
_updateReferenceChart: function ()
{
<thead>
<tr>
<td colspan="2">Configuration</td>
+ <td>Results</td>
+ <td>Status</td>
{{#each repositories}}
<td>{{name}}</td>
{{/each}}
- <td>Results</td>
- <td>Status</td>
</tr>
</thead>
{{#each configurations}}
<tbody>
<tr>
<td colspan="2">{{label}}</td>
+ <td>{{difference}}</td>
+ <td>{{result}}</td>
{{#with ../this}}
{{#each repositories}}
<td></td>
{{/each}}
{{/with}}
- <td colspan="2">{{result}}</td>
</tr>
</tbody>
{{/each}}
</script>
<script type="text/x-handlebars" data-template-name="testGroupRow">
- {{#each revisionList}}
- <td>{{this}}</td>
- {{/each}}
<td>
{{#if value}}
- {{box-plot range=valueRange value=value delta=confidenceIntervalDelta}}
+ {{box-plot range=valueRange value=value delta=delta}}
{{/if}}
{{formattedValue}}
</td>
<td>
<a {{bind-attr href=url title=buildLabel}}>{{statusLabel}}</a>
</td>
+ {{#each revisionList}}
+ <td>{{this}}</td>
+ {{/each}}
</script>
<script type="text/x-handlebars" data-template-name="testGroupForm">