| <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> |