// Copyright 2010 The Closure Library Authors. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS-IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. goog.provide('goog.testing.benchmark'); goog.setTestOnly('goog.testing.benchmark'); goog.require('goog.dom'); goog.require('goog.dom.TagName'); goog.require('goog.testing.PerformanceTable'); goog.require('goog.testing.PerformanceTimer'); goog.require('goog.testing.TestCase'); /** * Run the benchmarks. * @private */ goog.testing.benchmark.run_ = function() { // Parse the 'times' query parameter if it's set. var times = 200; var search = window.location.search; var timesMatch = search.match(/(?:\?|&)times=([^?&]+)/i); if (timesMatch) { times = Number(timesMatch[1]); } var prefix = 'benchmark'; // First, get the functions. var testSources = goog.testing.TestCase.getGlobals(); var benchmarks = {}; var names = []; for (var i = 0; i < testSources.length; i++) { var testSource = testSources[i]; for (var name in testSource) { if ((new RegExp('^' + prefix)).test(name)) { var ref; try { ref = testSource[name]; } catch (ex) { // NOTE(brenneman): When running tests from a file:// URL on Firefox // 3.5 for Windows, any reference to window.sessionStorage raises // an "Operation is not supported" exception. Ignore any exceptions // raised by simply accessing global properties. ref = undefined; } if (goog.isFunction(ref)) { benchmarks[name] = ref; names.push(name); } } } } document.body.appendChild( goog.dom.createTextNode( 'Running ' + names.length + ' benchmarks ' + times + ' times each.')); document.body.appendChild(goog.dom.createElement(goog.dom.TagName.BR)); names.sort(); // Build a table and timer. var performanceTimer = new goog.testing.PerformanceTimer(times); performanceTimer.setDiscardOutliers(true); var performanceTable = new goog.testing.PerformanceTable(document.body, performanceTimer, 2); // Next, run the benchmarks. for (var i = 0; i < names.length; i++) { performanceTable.run(benchmarks[names[i]], names[i]); } }; /** * Onload handler that runs the benchmarks. * @param {Event} e The event object. */ window.onload = function(e) { goog.testing.benchmark.run_(); };