// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. var totalTime; var fudgeTime; var elapsedTime; var endTime; var iterations; var cycle; var results = false; var TIMEOUT = 15; /** * Returns the value of the given property stored in the cookie. * @param {string} name The property name. * @return {string} The value of the given property, or empty string * if the property was not found. */ function __get_cookie(name) { var cookies = document.cookie.split('; '); for (var i = 0; i < cookies.length; ++i) { var t = cookies[i].split('='); if ((t[0] == name) && t[1]) return t[1]; } return ''; } function __get_timings() { if (sessionStorage == null) return __get_cookie("__pc_timings"); else { if (sessionStorage.getItem("__pc_timings") == null) return ""; else return sessionStorage["__pc_timings"]; } } function __set_timings(timings) { if (sessionStorage == null) document.cookie = "__pc_timings=" + timings + "; path=/"; else sessionStorage["__pc_timings"]=timings; } /** * Starts the next test cycle or redirects the browser to the results page. */ function nextCycleOrResults() { // Call GC twice to cleanup JS heap before starting a new test. if (window.gc) { window.gc(); window.gc(); } var timings = elapsedTime; var oldTimings = __get_timings(); if (oldTimings != '') timings = oldTimings + ',' + timings; __set_timings(timings); var tLag = Date.now() - endTime - TIMEOUT; if (tLag > 0) fudgeTime += tLag; var doc; if (cycle == iterations) { document.cookie = '__pc_done=1; path=/'; doc = '../../common/report.html'; if (window.console) { console.log("Pages: [" + __get_cookie('__pc_pages') + "]"); console.log("times: [" + __get_timings() + "]"); } } else { doc = 'index.html'; } var url = doc + '?n=' + iterations + '&i=' + cycle + '&td=' + totalTime + '&tf=' + fudgeTime; document.location.href = url; } /** * Computes various running times and updates the stats reported at the end. * @param {!number} cycleTime The running time of the test cycle. */ function testComplete(cycleTime) { if (results) return; var oldTotalTime = 0; var cycleEndTime = Date.now(); var cycleFudgeTime = 0; var s = document.location.search; if (s) { var params = s.substring(1).split('&'); for (var i = 0; i < params.length; i++) { var f = params[i].split('='); switch (f[0]) { case 'skip': return; // No calculation, just viewing case 'n': iterations = f[1]; break; case 'i': cycle = f[1] - 0 + 1; break; case 'td': oldTotalTime = f[1] - 0; break; case 'tf': cycleFudgeTime = f[1] - 0; break; } } } elapsedTime = cycleTime; totalTime = oldTotalTime + elapsedTime; endTime = cycleEndTime; fudgeTime = cycleFudgeTime; setTimeout(nextCycleOrResults, TIMEOUT); }