| <html> | |
| <head> | |
| <style> | |
| .discarded { | |
| color: #C0C0C0; | |
| } | |
| </style> | |
| <h2>Summary</h2> | |
| <dl> | |
| <script src="head.js"></script> | |
| <script> | |
| var __results = true; | |
| var cycles = 0; | |
| var s = document.location.search.substring(1); | |
| var params = s.split('&'); | |
| var iterations, pages, totalTime, fudgeTime; | |
| for (var i = 0; i < params.length; ++i) { | |
| var f = params[i].split('='); | |
| switch (f[0]) { | |
| case 'n': | |
| iterations = (f[1] - 0); | |
| break; | |
| case 'i': | |
| cycle = (f[1] - 0); | |
| break; | |
| case 'td': | |
| totalTime = (f[1] - 0); | |
| break; | |
| case 'tf': | |
| fudgeTime = (f[1] - 0); | |
| break; | |
| } | |
| } | |
| var pages = cycle / iterations; | |
| document.write("<table border=1>"); | |
| document.write("<tr><td>iterations</td><td>" + iterations + "</td></tr>"); | |
| document.write("<tr><td>pages</td><td>" + pages + "</td></tr>"); | |
| document.write("<tr><td>milliseconds</td><td>" + totalTime + "</td></tr>"); | |
| document.write("<tr><td>mean per set</td><td>" + (totalTime / iterations).toFixed(2) + "</td></tr>"); | |
| document.write("<tr><td>mean per page</td><td>" + (totalTime / iterations / pages).toFixed(2) + "</td></tr>"); | |
| document.write("<tr><td>timer lag</td><td>" + (fudgeTime).toFixed(2) + "</td></tr>"); | |
| document.write("<tr><td>timer lag per page</td><td>" + (fudgeTime / iterations / pages).toFixed(2) + "</td></tr>"); | |
| document.write("</table>"); | |
| // 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) | |
| function getArrayStats(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]; | |
| } | |
| // 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); | |
| r.errp = r.stdd / Math.sqrt((ary.length - 1) / 2) / r.mean * 100; | |
| return r; | |
| } | |
| function appendTableCol(tr, text, linkify) { | |
| var doc = tr.ownerDocument; | |
| var td = doc.createElement("TD"); | |
| if (linkify) { | |
| var anchor = doc.createElement("A"); | |
| if (text.indexOf('http://localhost:') == 0 || | |
| text.indexOf('file://') == 0) { | |
| // URLs for page cycler HTTP and file tests. | |
| anchor.href = text + "/index.html?skip=true"; | |
| } else { | |
| // For Web Page Replay, URLs are same as recorded pages. | |
| anchor.href = text; | |
| } | |
| anchor.appendChild(doc.createTextNode(text)); | |
| td.appendChild(anchor); | |
| } | |
| else | |
| td.appendChild(doc.createTextNode(text)); | |
| tr.appendChild(td); | |
| return td; | |
| } | |
| function getTimeVals() { | |
| var rawData = __get_timings().split(","); | |
| var timeVals = []; | |
| for (var i = 0; i < iterations; ++i) { | |
| for (var j = 0; j < pages; ++j) { | |
| if (!timeVals[j]) | |
| timeVals[j] = []; | |
| timeVals[j].push(parseInt(rawData[j + i*pages])); | |
| } | |
| } | |
| return timeVals; | |
| } | |
| function showReport() { | |
| var tbody = document.getElementById("tbody"); | |
| var colsums = [0,0,0,0,0]; | |
| var timeVals = getTimeVals(); | |
| for (var i = 0; i < timeVals.length; ++i) { | |
| var tr = document.createElement("TR"); | |
| appendTableCol(tr, __pages()[i], true); | |
| var r = getArrayStats(timeVals[i]); | |
| appendTableCol(tr, r.min.toFixed(2)); | |
| appendTableCol(tr, r.max.toFixed(2)); | |
| appendTableCol(tr, r.mean.toFixed(2)); | |
| appendTableCol(tr, r.stdd.toFixed(2)); | |
| appendTableCol(tr, r.errp.toFixed(2)); | |
| //appendTableCol(tr, r.chi2.toFixed(2)); | |
| for (var j = 0; j < timeVals[i].length; ++j) { | |
| var tv = timeVals[i][j]; | |
| var td = appendTableCol(tr, tv); | |
| if (j == r.indexOfMax) | |
| td.setAttribute("class", "discarded"); | |
| } | |
| colsums[0] = colsums[0] + r.min; | |
| colsums[1] = colsums[1] + r.max; | |
| colsums[2] = colsums[2] + r.mean; | |
| colsums[3] = colsums[3] + r.stdd; | |
| colsums[4] = colsums[4] + r.errp; | |
| tbody.appendChild(tr); | |
| } | |
| var tr = document.createElement("TR"); | |
| appendTableCol(tr, "totals:"); | |
| for (var k = 0; k < colsums.length; ++k) | |
| appendTableCol(tr, colsums[k].toFixed(2)); | |
| tbody.appendChild(tr); | |
| } | |
| window.onload = showReport; | |
| </script> | |
| </dl> | |
| </head> | |
| <body> | |
| <h2>Complete Statistics</h2> | |
| <table border="1"> | |
| <thead> | |
| <tr> | |
| <th>Site</th> | |
| <th>Min</th> | |
| <th>Max</th> | |
| <th>Mean</th> | |
| <th>Std.d</th> | |
| <th>Err %</th> | |
| <th colspan="10">Runs</th> | |
| </tr> | |
| </thead> | |
| <tbody id="tbody"></tbody> | |
| </table> | |
| </body> | |
| </html> |