15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var max_sample = 0; 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Array.max = function(array) { 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return Math.max.apply( Math, array ); 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Array.min = function(array) { 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return Math.min.apply( Math, array ); 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Compute the average of an array, removing the min/max. 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Array.avg = function(array) { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var count = array.length; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var sum = 0; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var min = array[0]; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var max = array[0]; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < count; i++) { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sum += array[i]; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (array[i] < min) { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) min = array[i]; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (array[i] > max) { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) max = array[i]; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (count >= 3) { 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sum = sum - min - max; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) count -= 2; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return sum / count; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Compute the sample standard deviation of an array 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Array.stddev = function(array) { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var count = array.length; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var mean = 0; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < count; i++) { 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mean += array[i]; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mean /= count; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var variance = 0; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < count; i++) { 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var deviation = mean - array[i]; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) variance = variance + deviation * deviation; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) variance = variance / (count - 1); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return Math.sqrt(variance); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function handleFileSelect(evt) { 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var files = evt.target.files; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0, f; f = files[i]; i++) { 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var reader = new FileReader(); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reader.onload = function(evt) { 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.getElementById("testurl").value = evt.target.result; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reader.readAsText(f); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var THTAG = "th"; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var TDTAG = "td"; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var NONE_DISPLAY = "none"; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var CELL_DISPLAY = "table-cell"; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var BRIEF_VIEW = "Show More Details"; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var FULL_VIEW = "Hide Details"; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Expand or shrink the result table. 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Called when clicking button "Show More Details/Hide Details". 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function expand() { 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (document.getElementById("expand").value == BRIEF_VIEW) { 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // From biref view to detailed view. 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var headers = document.getElementsByTagName(THTAG); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var cells = document.getElementsByTagName(TDTAG); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Display the hidden metrics (both headers and data cells). 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < headers.length; i++) { 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (headers[i].style.display == NONE_DISPLAY) { 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) headers[i].style.display = CELL_DISPLAY; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (i = 0; i < cells.length; i++) { 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (cells[i].style.display == NONE_DISPLAY) { 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cells[i].style.display = CELL_DISPLAY; 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.getElementById("expand").value = FULL_VIEW; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // From detailed view to brief view. 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var headers = document.getElementsByTagName(THTAG); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var cells = document.getElementsByTagName(TDTAG); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Hide some metrics. 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < headers.length; i++) { 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (headers[i].style.display == CELL_DISPLAY) { 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) headers[i].style.display = NONE_DISPLAY; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (i = 0; i < cells.length; i++) { 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (cells[i].style.display == CELL_DISPLAY) { 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cells[i].style.display = NONE_DISPLAY; 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.getElementById("expand").value = BRIEF_VIEW; 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Use cookie to store current expand/hide status. 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var lastValue = document.getElementById("expand").value; 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.cookie = "lastValue=" + lastValue; 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Reloading the page causes table to shrink (default original status). 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Cookie remembers last status of table (in terms of expanded or shrunk). 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function restoreTable() { 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (document.cookie == "lastValue=Hide Details") { 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var headers = document.getElementsByTagName(THTAG); 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var cells = document.getElementsByTagName(TDTAG); 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < headers.length; i++) { 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (headers[i].style.display == NONE_DISPLAY) { 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) headers[i].style.display = CELL_DISPLAY; 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (i = 0; i < cells.length; i++) { 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (cells[i].style.display == NONE_DISPLAY) { 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cells[i].style.display = CELL_DISPLAY; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.getElementById("expand").value = FULL_VIEW; 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A class to store the data to plot. 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function PData() { 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.xAxis = "Iteration(s)"; 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.yAxis = ""; 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.A = []; // Two data sets for comparison. 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.B = []; 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.avgA = []; // Avg value is plotted as a line. 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.avgB = []; 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.maxA = 0; 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.maxB = 0; 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.countA = 0; // Size of the data sets. 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.countB = 0; 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.setYAxis = function(str) { 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.yAxis = str; 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.setAvg = function(arr, cha) { 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (cha == 'A') { 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var avgA = Array.avg(arr); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 1; i <= this.countA; i++) { 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.avgA.push([i, avgA]); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (cha == 'B') { 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var avgB = Array.avg(arr); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 1; i <= this.countB; i++) { 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.avgB.push([i, avgB]); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.setMax = function(arr, cha) { 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (cha == 'A') { 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.maxA = Array.max(arr); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (cha == 'B') { 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.maxB = Array.max(arr); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add an entry to the array. 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.addArr = function(val, cha) { 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (cha == 'A') { 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.countA++; 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.A.push([this.countA, val]); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (cha == 'B') { 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.countB++; 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.B.push([this.countB, val]); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Plot the graph at the specified place. 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.plot = function(placeholder) { 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $.plot(placeholder, 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) [// Line A 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data: this.A, 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) label: "A's " + this.yAxis + " in " + this.countA + " " + this.xAxis, 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) points: { 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) show: true 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) lines: { 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) show: true 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Line B 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data: this.B, 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) label: "B's " + this.yAxis + " in " + this.countB + " " + this.xAxis, 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) points: { 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) show: true 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) lines: { 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) show: true 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Line avgA 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data: this.avgA, 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) label: "A's avg " + this.yAxis, 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dashes: { 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) show: true 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Line avgB 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data: this.avgB, 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) label: "B's avg " + this.yAxis, 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dashes: { 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) show: true 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }], 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Axis and legend setup. 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { xaxis: { 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) max: this.countA > this.countB ? this.countA : this.countB, 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tickSize: 1, 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tickDecimals: 0 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) yaxis: { 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Leave some space for legend. 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) max: this.maxA > this.maxB ? this.maxA * 1.5 : this.maxB * 1.5 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) legend: { 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) backgroundOpacity: 0 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Compare the selected metric of the two selected data sets. 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function compare() { 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var checkboxArr = document.getElementsByName("checkboxArr"); 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var radioArr = document.getElementsByName("radioArr"); 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (checkAmount(checkboxArr) != 2) { 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) alert("please select two rows to compare"); 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var rowIndexArr = getSelectedIndex(checkboxArr); 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var colIndexArr = getSelectedIndex(radioArr); 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // To this point, it is for sure that rowIndexArr has two elements 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // while colIndexArr has one. 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var selectedRowA = rowIndexArr[0]; 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var selectedRowB = rowIndexArr[1]; 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var selectedCol = colIndexArr[0]; 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var extension = chrome.extension.getBackgroundPage(); 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var data = extension.results.data; 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var selectedA = getSelectedResults(data,selectedRowA,selectedCol); 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var selectedB = getSelectedResults(data,selectedRowB,selectedCol); 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var yAxis = getMetricName(selectedCol); 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Indicate A and B on selected rows. 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkboxArr[selectedRowA].parentElement.firstChild.data = "A"; 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkboxArr[selectedRowB].parentElement.firstChild.data = "B"; 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plot(selectedA, selectedB, yAxis); 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Show the comparison graph. 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function plot(A, B, axis) { 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var plotData = new PData(); 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plotData.setYAxis(axis); 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < A.length; i++) { 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plotData.addArr(A[i],'A'); 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < B.length; i++) { 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plotData.addArr(B[i],'B'); 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plotData.setAvg(A,'A'); 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plotData.setAvg(B,'B'); 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plotData.setMax(A,'A'); 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plotData.setMax(B,'B'); 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var placeholder = document.getElementById("placeholder"); 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) placeholder.style.display = ""; 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plotData.plot(placeholder); 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var METRIC = {"STARTLOAD": 0, "COMMITLOAD": 1, "DOCLOAD": 2, "PAINT": 3, 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "TOTAL": 4, "REQUESTS": 5, "CONNECTS": 6, "READKB": 7, 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "WRITEKB": 8, "READKBPS": 9, "WRITEKBPS": 10}; 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Retrieve the metric name from index. 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function getMetricName(index) { 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (index) { 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case METRIC.STARTLOAD: 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return "Start Load Time"; 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case METRIC.COMMITLOAD: 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return "Commit Load Time"; 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case METRIC.DOCLOAD: 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return "Doc Load Time"; 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case METRIC.PAINT: 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return "Paint Time"; 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case METRIC.TOTAL: 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return "Total Load Time"; 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case METRIC.REQUESTS: 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return "# Requests"; 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case METRIC.CONNECTS: 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return "# Connects"; 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case METRIC.READKB: 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return "Read KB"; 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case METRIC.WRITEKB: 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return "Write KB"; 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case METRIC.READKBPS: 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return "Read KBps"; 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case METRIC.WRITEKBPS: 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return "Write KBps"; 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return ""; 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Get the results with a specific row (data set) and column (metric). 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function getSelectedResults(arr, rowIndex, colIndex) { 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (colIndex) { 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case METRIC.STARTLOAD: 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return arr[rowIndex].startLoadResults; 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case METRIC.COMMITLOAD: 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return arr[rowIndex].commitLoadResults; 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case METRIC.DOCLOAD: 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return arr[rowIndex].docLoadResults; 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case METRIC.PAINT: 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return arr[rowIndex].paintResults; 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case METRIC.TOTAL: 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return arr[rowIndex].totalResults; 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case METRIC.REQUESTS: 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return arr[rowIndex].requests; 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case METRIC.CONNECTS: 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return arr[rowIndex].connects; 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case METRIC.READKB: 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return arr[rowIndex].KbytesRead; 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case METRIC.WRITEKB: 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return arr[rowIndex].KbytesWritten; 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case METRIC.READKBPS: 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return arr[rowIndex].readbpsResults; 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case METRIC.WRITEKBPS: 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return arr[rowIndex].writebpsResults; 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return undefined; 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Ensure only two data sets (rows) are selected. 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function checkAmount(arr) { 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var amount = 0; 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < arr.length; i++) { 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (arr[i].checked) { 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) amount++; 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return amount; 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Get the index of selected row or column. 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function getSelectedIndex(arr) { 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var selectedArr = new Array(); 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < arr.length; i++) { 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if(arr[i].checked) { 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) selectedArr.push(i); 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return selectedArr; 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Repaint or hide the chart. 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function updateChart(caller) { 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var placeholder = document.getElementById("placeholder"); 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (caller.type == "radio") { 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Other radio button is clicked. 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (placeholder.style.display == "") { 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) compare(); 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Other checkbox or clearing results is clicked. 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (placeholder.style.display == "") { 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) placeholder.style.display = "none"; 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Clear indicators besides checkbox. 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function clearIndicator() { 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var checkboxArr = document.getElementsByName("checkboxArr"); 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < checkboxArr.length; i++) { 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkboxArr[i].parentElement.firstChild.data = ""; 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Enable/Disable buttons according to checkbox change. 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function checkSelected() { 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var checkboxArr = document.getElementsByName("checkboxArr"); 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (checkAmount(checkboxArr) !=0) { 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.getElementById("clearSelected").disabled = false; 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.getElementById("compare").disabled = false; 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.getElementById("clearSelected").disabled = true; 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.getElementById("compare").disabled = true; 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Object to summarize everything 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var totals = {}; 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Compute the results for a data set. 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function computeDisplayResults(data) { 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var count = data.data.length; 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < count; i++) { 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var obj = data.data[i]; 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj.displayTime = setDisplayTime(obj.timestamp); 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var resultList = obj.totalResults; 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj.mean = Array.avg(resultList); 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj.stddev = Array.stddev(resultList); 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj.stderr = obj.stddev / Math.sqrt(obj.iterations); 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var ci = 1.96 * obj.stderr; 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj.cihigh = obj.mean + ci; 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj.cilow = obj.mean - ci; 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj.min = Array.min(resultList); 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj.max = Array.max(resultList); 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj.readbps = Array.avg(obj.readbpsResults); 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj.writebps = Array.avg(obj.writebpsResults); 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj.readKB = Array.avg(obj.KbytesRead); 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj.writeKB = Array.avg(obj.KbytesWritten); 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj.paintMean = Array.avg(obj.paintResults); 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj.startLoadMean = Array.avg(obj.startLoadResults); 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj.commitLoadMean = Array.avg(obj.commitLoadResults); 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj.docLoadMean = Array.avg(obj.docLoadResults); 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj.displayRequests = Array.avg(obj.requests); 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj.displayConnects = Array.avg(obj.connects); 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj.displaySpdySessions = Array.avg(obj.spdySessions); 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj.displayDomNum = obj.domNum; 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj.displayMaxDepth = obj.maxDepth; 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj.displayMinDepth = obj.minDepth; 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj.displayAvgDepth = obj.avgDepth; 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return count; 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Convert timestamp to readable string. 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function setDisplayTime(ts) { 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var year = ts.getFullYear(); 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var mon = ts.getMonth()+1; 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var date = ts.getDate(); 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var hrs = ts.getHours(); 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var mins = ts.getMinutes(); 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var secs = ts.getSeconds(); 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mon = ( mon < 10 ? "0" : "" ) + mon; 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) date = ( date < 10 ? "0" : "" ) + date; 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mins = ( mins < 10 ? "0" : "" ) + mins; 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) secs = ( secs < 10 ? "0" : "" ) + secs; 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (year + "/" + mon + "/" + date + " " + hrs + ":" + mins + ":" + secs); 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Subtract the results from two data sets. 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This function could be smarter about what it subtracts, 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// for now it just subtracts everything. 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns true if it was able to compare the two data sets. 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function subtractData(data, baseline) { 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var count = data.data.length; 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (baseline.data.length != count) { 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < count; i++) { 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var obj = data.data[i]; 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var obj2 = baseline.data[i]; 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The data sets are different. 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (obj.url != obj2.url || 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj.iterations != obj2.iterations) { 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj.mean -= obj2.mean; 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj.stddev -= obj2.stddev; 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj.min -= obj2.min; 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj.max -= obj2.max; 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj.readbps -= obj2.readbps; 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj.writebps -= obj2.writebps; 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj.readKB -= obj2.readKB; 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj.writeKB -= obj2.writeKB; 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj.paintMean -= obj2.paintMean; 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj.startLoadMean -= obj2.startLoadMean; 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj.commitLoadMean -= obj2.commitLoadMean; 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj.docLoadMean -= obj2.docLoadMean; 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj.displayRequests -= obj2.displayRequests; 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj.displayConnects -= obj2.displayConnects; 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) obj.displaySpdySessions -= obj2.displaySpdySessions; 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Compute totals based on a data set. 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function computeTotals(data) { 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var count = data.data.length; 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < count; i++) { 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var obj = data.data[i]; 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) totals.mean += obj.mean; 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) totals.paintMean += obj.paintMean; 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) totals.startLoadMean += obj.startLoadMean; 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) totals.commitLoadMean += obj.commitLoadMean; 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) totals.docLoadMean += obj.docLoadMean; 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Compute results for the data with an optional baseline. 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// If |baseline| is undefined, will compute the results of this 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// run. Otherwise, computes the diff between this data and the baseline. 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function computeResults(data, baseline) { 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) totals = {}; 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) totals.mean = 0; 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) totals.paintMean = 0; 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) totals.startLoadMean = 0; 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) totals.commitLoadMean = 0; 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) totals.docLoadMean = 0; 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var count = computeDisplayResults(data); 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (baseline) { 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) computeDisplayResults(baseline); 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!subtractData(data, baseline)) { 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) alert("These data sets are different"); 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.getElementById("baseline").value = ""; 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) computeTotals(data); 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) totals.url = "(" + count + " urls)"; 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (count > 0) { 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) totals.mean /= count; 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) totals.paintMean /= count; 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) totals.startLoadMean /= count; 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) totals.commitLoadMean /= count; 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) totals.docLoadMean /= count; 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Find the biggest average for our bar graph. 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) max_sample = 0; 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < data.data.length; i++) { 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (data.data[i].max > max_sample) { 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) max_sample = data.data[i].mean; 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function jsinit() { 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var extension = chrome.extension.getBackgroundPage(); 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run the template to show results 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var data = extension.results; 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get the baseline results 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var elt = document.getElementById("baseline"); 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var baseline_json = document.getElementById("baseline").value; 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var baseline; 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (baseline_json) { 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) try { 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) baseline = JSON.parse(baseline_json); 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } catch (e) { 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) alert("JSON parse error: " + e); 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Compute 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) computeResults(data, baseline); 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var context = new JsEvalContext(data); 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) context.setVariable('$width', 0); 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) context.setVariable('$samples', 0); 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var template = document.getElementById("t"); 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jstProcess(context, template); 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set the options 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.getElementById("iterations").value = extension.iterations; 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.getElementById("clearconns").checked = extension.clearConnections; 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.getElementById("clearcache").checked = extension.clearCache; 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.getElementById("enablespdy").checked = extension.enableSpdy; 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setUrl(extension.testUrl); 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!baseline) { 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var json_data = JSON.stringify(data); 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.getElementById("json").value = json_data; 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Activate loading Urls from local file. 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.getElementById('files').addEventListener('change', 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) handleFileSelect, false); 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function getWidth(mean, obj) { 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var kMinWidth = 200; 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var max_width = obj.offsetWidth; 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (max_width < kMinWidth) { 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) max_width = kMinWidth; 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return Math.floor(max_width * (mean / max_sample)); 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Apply configuration back to our extension 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function config() { 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var extension = chrome.extension.getBackgroundPage(); 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var iterations = parseInt(document.getElementById("iterations").value); 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var clearConnections = document.getElementById("clearconns").checked; 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var clearCache = document.getElementById("clearcache").checked; 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var enableSpdy = document.getElementById("enablespdy").checked; 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (iterations > 0) { 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension.iterations = iterations; 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension.clearConnections = clearConnections; 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension.clearCache = clearCache; 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension.enableSpdy = enableSpdy; 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Set the url in the benchmark url box. 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function setUrl(url) { 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.getElementById("testurl").value = url; 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Start the benchmark. 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function run() { 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!chrome.benchmarking) { 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) alert("Warning: Looks like you forgot to run chrome with " + 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " --enable-benchmarking set."); 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var extension = chrome.extension.getBackgroundPage(); 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var testUrl = document.getElementById("testurl").value; 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension.testUrl = testUrl; 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension.run(); 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function showConfirm() { 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var r = confirm("Are you sure to clear results?"); 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (r) { 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Find out the event source element. 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var evtSrc = window.event.srcElement; 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (evtSrc.value == "Clear Selected") { 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) clearSelected(); 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (evtSrc.value == "Clear All") { 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) clearResults(); 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Clear the selected results 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function clearSelected() { 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var extension = chrome.extension.getBackgroundPage(); 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var checkboxArr = document.getElementsByName("checkboxArr"); 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var rowIndexArr = getSelectedIndex(checkboxArr); 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var currIndex; 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < rowIndexArr.length; i++) { 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) currIndex = rowIndexArr[i]; 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Update the index of the original row in the modified array. 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) currIndex -= i; 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension.results.data.splice(currIndex, 1); 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.location.reload(true); 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) updateChart(this); 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jsinit(); 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Clear all the results 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function clearResults() { 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var extension = chrome.extension.getBackgroundPage(); 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension.results = {}; 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension.results.data = new Array(); 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.getElementById("json").value = ""; 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.getElementById("baseline").value = ""; 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) updateChart(this); 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jsinit(); 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Export html table into CSV format. 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function exportHtml() { 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var checkboxArr = document.getElementsByName("checkboxArr"); 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var rowNum = checkboxArr.length + 1; // # of data rows plus total-stats row. 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('#t').table2CSV(rowNum); 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Toggle display of an element 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function toggle(id) { 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var elt = document.getElementById(id); 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (elt.style.display == "none") { 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) elt.style.display = "block"; 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) elt.style.display = "none"; 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)document.addEventListener("DOMContentLoaded", function() { 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jsinit(); 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) restoreTable(); 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.querySelector('form').addEventListener('click', function() { 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) config(); 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) run(); 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('#expand')[0].addEventListener('click', function() { expand(); }); 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('#clearSelected')[0].addEventListener('click', 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function() { showConfirm(); }); 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('#clearAll')[0].addEventListener('click', function() { showConfirm(); }); 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('#exportCsv')[0].addEventListener('click', function() { exportHtml(); }); 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var checkboxArrs = document.getElementsByName('checkboxArr'); 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < checkboxArrs.length; ++i) { 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkboxArrs[i].addEventListener('click', function() { 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) updateChart(this); 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) clearIndicator(); 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkSelected(); 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var radioArrs = document.getElementsByName('radioArr'); 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (i = 0; i < radioArrs.length; ++i) { 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) radioArrs[i].addEventListener('click', function() { updateChart(this); }); 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('#compare')[0].addEventListener('click', function() { compare(); }); 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('#toggle-json')[0].addEventListener('click', 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function() { toggle('json'); }); 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('#toggle-baseline')[0].addEventListener('click', 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function() { toggle('baseline'); }); 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('#baseline')[0].addEventListener('change', function() { jsinit(); }); 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}); 752