mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
113 lines
2.9 KiB
JavaScript
113 lines
2.9 KiB
JavaScript
|
// Constructor
|
||
|
function Report(pages) {
|
||
|
this.pages = pages;
|
||
|
this.timeVals = new Array(pages.length); // matrix of times
|
||
|
for (var i = 0; i < this.timeVals.length; ++i) {
|
||
|
this.timeVals[i] = new Array;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// returns an object with the following properties:
|
||
|
// min : min value of array elements
|
||
|
// max : max value of array elements
|
||
|
// mean : mean value of array elements
|
||
|
// vari : variance computation
|
||
|
// stdd : standard deviation, sqrt(vari)
|
||
|
// indexOfMax : index of max element (the element that is
|
||
|
// removed from the mean computation)
|
||
|
Report.prototype.getArrayStats = function(ary) {
|
||
|
var r = {};
|
||
|
r.min = ary[0];
|
||
|
r.max = ary[0];
|
||
|
r.indexOfMax = 0;
|
||
|
var sum = 0;
|
||
|
for (var i = 0; i < ary.length; ++i) {
|
||
|
if (ary[i] < r.min) {
|
||
|
r.min = ary[i];
|
||
|
} else if (ary[i] > r.max) {
|
||
|
r.max = ary[i];
|
||
|
r.indexOfMax = i;
|
||
|
}
|
||
|
sum = sum + ary[i];
|
||
|
}
|
||
|
|
||
|
// median
|
||
|
sorted_ary = ary.concat();
|
||
|
sorted_ary.sort();
|
||
|
// remove longest run
|
||
|
sorted_ary.pop();
|
||
|
if (sorted_ary.length%2) {
|
||
|
r.median = sorted_ary[(sorted_ary.length-1)/2];
|
||
|
}else{
|
||
|
var n = Math.floor(sorted_ary.length / 2);
|
||
|
r.median = (sorted_ary[n] + sorted_ary[n + 1]) / 2;
|
||
|
}
|
||
|
|
||
|
// ignore max value when computing mean and stddev
|
||
|
r.mean = (sum - r.max) / (ary.length - 1);
|
||
|
|
||
|
r.vari = 0;
|
||
|
for (var i = 0; i < ary.length; ++i) {
|
||
|
if (i == r.indexOfMax)
|
||
|
continue;
|
||
|
var d = r.mean - ary[i];
|
||
|
r.vari = r.vari + d * d;
|
||
|
}
|
||
|
|
||
|
r.vari = r.vari / (ary.length - 1);
|
||
|
r.stdd = Math.sqrt(r.vari);
|
||
|
return r;
|
||
|
}
|
||
|
|
||
|
Report.prototype.getReport = function() {
|
||
|
var all = new Array();
|
||
|
var counter = 0;
|
||
|
|
||
|
for (var i = 0; i < this.timeVals.length; ++i) {
|
||
|
for (var j = 0; j < this.timeVals[i].length; ++j) {
|
||
|
all[counter] = this.timeVals[i][j];
|
||
|
++counter;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// avg and avg median are cumulative for all the pages
|
||
|
var avgs = new Array();
|
||
|
var medians = new Array();
|
||
|
for (var i = 0; i < this.timeVals.length; ++i) {
|
||
|
avgs[i] = this.getArrayStats(this.timeVals[i]).mean;
|
||
|
medians[i] = this.getArrayStats(this.timeVals[i]).median;
|
||
|
}
|
||
|
var avg = this.getArrayStats(avgs).mean;
|
||
|
var avgmed = this.getArrayStats(medians).mean;
|
||
|
|
||
|
var r = this.getArrayStats(all);
|
||
|
|
||
|
var report = '';
|
||
|
|
||
|
report +=
|
||
|
"(tinderbox dropping follows)\n"+
|
||
|
"_x_x_mozilla_page_load,"+avgmed+","+r.max+","+r.min+"\n"+
|
||
|
"_x_x_mozilla_page_load_details,avgmedian|"+avgmed+"|average|"+avg.toFixed(2)+"|minimum|"+r.min+"|maximum|"+r.max+"|stddev|"+r.stdd.toFixed(2)+":"
|
||
|
|
||
|
for (var i = 0; i < this.timeVals.length; ++i) {
|
||
|
r = this.getArrayStats(this.timeVals[i]);
|
||
|
report +=
|
||
|
'|'+
|
||
|
i+';'+
|
||
|
pages[i]+';'+
|
||
|
r.median+';'+
|
||
|
r.mean+';'+
|
||
|
r.min+';'+
|
||
|
r.max
|
||
|
for (var j = 0; j < this.timeVals[i].length; ++j) {
|
||
|
report +=
|
||
|
';'+this.timeVals[i][j]
|
||
|
}
|
||
|
}
|
||
|
return report;
|
||
|
}
|
||
|
|
||
|
Report.prototype.recordTime = function(pageIndex, ms) {
|
||
|
this.timeVals[pageIndex].push(ms);
|
||
|
}
|