Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8219)

Unified Diff: chrome/common/extensions/docs/examples/extensions/benchmark/background.js

Issue 280383008: Delete benchmarking extension, remove API's ability to enable/disable SPDY (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remove benchmarking extension instead Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/common/extensions/docs/examples/extensions/benchmark/background.js
diff --git a/chrome/common/extensions/docs/examples/extensions/benchmark/background.js b/chrome/common/extensions/docs/examples/extensions/benchmark/background.js
deleted file mode 100644
index 88c3c9cca6e100793e2d30f5af897139c310e574..0000000000000000000000000000000000000000
--- a/chrome/common/extensions/docs/examples/extensions/benchmark/background.js
+++ /dev/null
@@ -1,492 +0,0 @@
-// 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.
-
-// Round a number to the 1's place.
-function formatNumber(str) {
- str += '';
- if (str == '0') {
- return 'N/A ';
- }
- var x = str.split('.');
- var x1 = x[0];
- var x2 = x.length > 1 ? '.' + x[1] : '';
- var regex = /(\d+)(\d{3})/;
- while (regex.test(x1)) {
- x1 = x1.replace(regex, '$1' + ',' + '$2');
- }
- return x1;
-}
-
-// Configuration and results are stored globally.
-window.iterations = 10;
-window.interval = 200;
-window.clearConnections = true;
-window.clearCache = true;
-window.enableSpdy = false;
-window.results = {};
-window.results.data = new Array();
-window.testUrl = "http://www.google.com/";
-window.windowId = 0;
-
-// Constant StatCounter Names
-var kTCPReadBytes = "tcp.read_bytes";
-var kTCPWriteBytes = "tcp.write_bytes";
-var kRequestCount = "HttpNetworkTransaction.Count";
-var kConnectCount = "tcp.connect";
-var kSpdySessionCount = "spdy.sessions";
-
-// The list of currently running benchmarks
-var benchmarks = new Array();
-var benchmarkIndex = 0;
-var benchmarkWindow = 0;
-
-function addBenchmark(benchmark) {
- benchmarks.push(benchmark);
- benchmarkIndex = 0; // Reset the counter when adding benchmarks.
-}
-
-// Array Remove - By John Resig (MIT Licensed)
-Array.prototype.remove = function(from, to) {
- var rest = this.slice((to || from) + 1 || this.length);
- this.length = from < 0 ? this.length + from : from;
- return this.push.apply(this, rest);
-};
-
-function removeBenchmark(benchmark) {
- var index;
- for (var index = 0; index < benchmarks.length; ++index) {
- if (benchmarks[index] == benchmark) {
- break;
- }
- }
- benchmarks.remove(index);
-
- // Preserve index ordering when removing from the list.
- if (index <= benchmarkIndex) {
- benchmarkIndex--; // Note: it is okay to drop to -1 here.
- }
-}
-
-function benchmarkStillRunning() {
- for (var index = 0; index < benchmarks.length; ++index) {
- if (benchmarks[index].isRunning()) {
- return true;
- }
- }
- return false;
-}
-
-function findBenchmark(url) {
- for (var index = 0; index < benchmarks.length; ++index) {
- // One common redirection case: if the url ends without a slash and refers
- // to a directory, it actually would be redirected to the correct one
- // (with a slash). In this case, the url returned by the JS and the one
- // stored locally do not match.
- if ((benchmarks[index].url() == url) ||
- (benchmarks[index].url() + '/' == url)) {
- return benchmarks[index];
- }
- }
- return undefined;
-}
-
-function nextBenchmark() {
- benchmarkIndex = (benchmarkIndex + 1) % benchmarks.length;
- return benchmarks[benchmarkIndex];
-}
-
-function show_options(tabs) {
- var tab = tabs[0];
- if (window.testUrl == "") {
- window.testUrl = tab.url;
- }
- var tabs = chrome.extension.getViews({"type": "tab"});
- if (tabs && tabs.length) {
- // To avoid "Uncaught TypeError: Object Window has no method
- // 'setUrl' ". Sometimes tabs are not the desired extension tabs.
- if (tabs[0].$suburl != undefined) {
- tabs[0].setUrl(testUrl);
- }
- var optionsUrl = chrome.extension.getURL("options.html");
- chrome.tabs.getAllInWindow(null, function(all) {
- for (var i = 0; i < all.length; i++) {
- if (all[i].url == optionsUrl) {
- chrome.tabs.update(all[i].id, {selected: true});
- return;
- }
- }
- });
- } else {
- chrome.tabs.create({"url":"options.html"});
- }
-}
-
-chrome.browserAction.onClicked.addListener(show_options);
-
-function Benchmark() {
- var runCount_ = 0;
- var count_;
- var totalTime_;
- var me_ = this;
- var current_;
- var initialRequestCount_;
- var initialReadBytes_;
- var initialWriteBytes_;
-
- // Start a test run
- this.start = function(url) {
- // Check if a run is already in progress.
- if (me_.isRunning()) {
- return;
- }
-
- console.log("Benchmark testing url: " + url);
-
- // Add this benchmark to the list of benchmarks running.
- addBenchmark(this);
-
- runCount_ = window.iterations;
- count_ = 0;
- totalTime_ = 0;
-
- current_ = {};
- current_.url = url;
- current_.timestamp = new Date();
- current_.viaSpdy = false;
- current_.startLoadResults = new Array(); // times to start
- current_.commitLoadResults = new Array(); // times to commit
- current_.docLoadResults = new Array(); // times to docload
- current_.paintResults = new Array(); // times to paint
- current_.totalResults = new Array(); // times to complete load
- current_.KbytesRead = new Array();
- current_.KbytesWritten = new Array();
- current_.readbpsResults = new Array();
- current_.writebpsResults = new Array();
- current_.totalTime = 0;
- current_.iterations = 0;
- current_.requests = new Array();
- current_.connects = new Array();
- current_.spdySessions = new Array();
- current_.domNum = 0;
- current_.maxDepth = 0;
- current_.minDepth = 0;
- current_.avgDepth = 0;
- };
-
- // Is the benchmark currently in progress.
- this.isRunning = function() {
- return runCount_ > 0;
- };
-
- // The url which this benchmark is running.
- this.url = function() { return current_.url; }
-
- // Called when the test run completes.
- this.finish = function() {
- removeBenchmark(this);
-
- // If we're the last benchmark, close the window.
- if (benchmarks.length == 0) {
- chrome.tabs.remove(benchmarkWindow.id);
- benchmarkWindow = 0;
- chrome.tabs.query({active: true, currentWindow: true}, show_options);
- }
- };
-
- // Update the UI after a test run.
- this.displayResults = function() {
- var score = 0;
- if (count_ > 0) {
- score = totalTime_ / count_;
- var text = score.toFixed(1) + "ms avg";
- chrome.browserAction.setTitle({"title": text});
- }
- if (runCount_) {
- chrome.browserAction.setBadgeText({"text": "" + runCount_});
- chrome.browserAction.setBadgeBackgroundColor({"color": [255, 0, 0, 255]});
- } else {
- chrome.browserAction.setBadgeText({"text": "" + score.toFixed()});
- chrome.browserAction.setBadgeBackgroundColor({"color": [0, 255, 0, 255]});
- }
-
- // Reload the page after each run to show immediate results.
- var tabs = chrome.extension.getViews({"type": "tab"});
- if (tabs && tabs.length) {
- tabs[0].location.reload(true);
- }
- };
-
- // Called before starting a page load.
- this.pageStart = function() {
- initialReadBytes_ = chrome.benchmarking.counter(kTCPReadBytes);
- initialWriteBytes_ = chrome.benchmarking.counter(kTCPWriteBytes);
- initialRequestCount_ = chrome.benchmarking.counter(kRequestCount);
- initialConnectCount_ = chrome.benchmarking.counter(kConnectCount);
- initialSpdySessionCount_ = chrome.benchmarking.counter(kSpdySessionCount);
- };
-
- this.openNextPage = function() {
- var benchmark = nextBenchmark();
- benchmark.pageStart();
- chrome.tabs.create({"url": benchmark.url(),"selected": true},
- function(tab) {
- benchmarkWindow = tab;
- // script.js only executes on tested pages
- // not the ones opened by the user.
- chrome.tabs.executeScript(tab.id, {file: "script.js"});
- });
- };
-
- this.prepareToOpenPage = function() {
- // After the previous page is closed, this function will apply
- // any settings needed to prepare for opening a new page.
- // Note: the previous page must be closed, otherwie, the cache
- // clearing and connection clearing may not be thorough.
-
- if (window.clearCache) {
- chrome.benchmarking.clearCache();
- }
-
- if (window.clearConnections) {
- chrome.benchmarking.closeConnections();
- }
-
- if (window.enableSpdy) {
- chrome.benchmarking.enableSpdy(true);
- } else {
- chrome.benchmarking.enableSpdy(false);
- }
-
- // Go back to the browser so that tasks can run.
- setTimeout(me_.openNextPage, window.interval);
- };
-
- this.closePage = function() {
- chrome.tabs.remove(benchmarkWindow.id, function() {
- me_.prepareToOpenPage();
- });
- };
-
- // Run a single page in the benchmark
- this.runPage = function() {
- if (benchmarkWindow) {
- // To avoid the error "Error during tabs.remove: No tab with id xx"
- // while debugging, due to user manually closing the benchmark tab.
- chrome.tabs.getAllInWindow(null, function(all) {
- for (var i = 0; i < all.length; i++) {
- if (all[i].id == benchmarkWindow.id) {
- me_.closePage();
- return;
- };
- };
- me_.prepareToOpenPage();
- });
- } else {
- me_.prepareToOpenPage();
- }
- };
-
- // Called when a page finishes loading.
- this.pageFinished = function(load_times, domNum, depths) {
-
- // Make sure the content can be fetched via spdy if it is enabled.
- if (window.enableSpdy && !load_times.wasFetchedViaSpdy) {
- alert("Can not fetch current url via spdy.\n" +
- "Ending current test.");
- me_.finish();
- // Move on to next benchmarked pages.
- if (benchmarks.length > 0) {
- if (window.clearConnections) {
- chrome.benchmarking.closeConnections();
- }
- setTimeout(me_.runPage, 100);
- }
- return;
- }
-
- // If last fetch was via spdy, current fetch should use spdy too. Same
- // for vise versa.
- if (current_.iterations > 0 &&
- current_.viaSpdy != load_times.wasFetchedViaSpdy) {
- alert("Error: viaSpdy for current fetch is different from last fetch!\n" +
- "Ending current test.");
- // Current data set is invalid: remove from the result array.
- var currIndex;
- currIndex = window.results.data.indexOf(current_, 0);
- window.results.data.splice(currIndex, 1);
- me_.displayResults();
- me_.finish();
- if (benchmarks.length > 0) {
- if (window.clearConnections) {
- chrome.benchmarking.closeConnections();
- }
- setTimeout(me_.runPage, 100);
- }
- return;
- }
-
- var requested = load_times.requestTime;
- var started = load_times.startLoadTime;
- var startLoadTime =
- Math.round((load_times.startLoadTime - requested) * 1000.0);
- var commitLoadTime =
- Math.round((load_times.commitLoadTime - started) * 1000.0);
- var docLoadTime =
- Math.round((load_times.finishDocumentLoadTime - started) * 1000.0);
- var paintTime =
- Math.round((load_times.firstPaintTime - started) * 1000.0);
- var totalTime =
- Math.round((load_times.finishLoadTime - started) * 1000.0);
- var firstPaintAfterLoadTime =
- Math.round((load_times.firstPaintAfterLoadTime - started) * 1000.0);
-
- if (paintTime < 0) {
- // If the user navigates away from the test while it is running,
- // paint may not occur. Also, some lightweight pages, such as the
- // google home page, never trigger a paint measurement via the chrome
- // page load timer.
- // In this case, the time-to-first paint is effectively the same as the
- // time to onLoad().
- paintTime = totalTime;
- }
-
- // For our toolbar counters
- totalTime_ += totalTime;
- count_++;
-
- // Get the index of current benchmarked page in the result array.
- var currIndex;
- currIndex = window.results.data.indexOf(current_, 0);
-
- // Record the result
- current_.viaSpdy = load_times.wasFetchedViaSpdy;
- current_.iterations++;
- current_.startLoadResults.push(startLoadTime);
- current_.commitLoadResults.push(commitLoadTime);
- current_.docLoadResults.push(docLoadTime);
- current_.paintResults.push(paintTime);
- current_.totalResults.push(totalTime);
- var bytesRead = chrome.benchmarking.counter(kTCPReadBytes) -
- initialReadBytes_;
- var bytesWrite = chrome.benchmarking.counter(kTCPWriteBytes) -
- initialWriteBytes_;
- current_.KbytesRead.push(bytesRead / 1024);
- current_.KbytesWritten.push(bytesWrite / 1024);
- current_.readbpsResults.push(bytesRead * 8 / totalTime);
- current_.writebpsResults.push(bytesWrite * 8 / totalTime);
- current_.requests.push(chrome.benchmarking.counter(kRequestCount) -
- initialRequestCount_);
- current_.connects.push(chrome.benchmarking.counter(kConnectCount) -
- initialConnectCount_);
- current_.spdySessions.push(chrome.benchmarking.counter(kSpdySessionCount) -
- initialSpdySessionCount_);
- current_.totalTime += totalTime;
- current_.domNum = domNum;
- current_.maxDepth = depths[0];
- current_.minDepth = depths[1];
- current_.avgDepth = depths[2];
-
- // Insert or update the result data after each run.
- if (currIndex == -1) {
- window.results.data.push(current_);
- } else {
- window.results.data[currIndex] = current_;
- }
-
- if (--runCount_ == 0) {
- me_.finish();
- }
-
- // If there are more tests, schedule them
- if (runCount_ > 0 || benchmarks.length > 0) {
- if (window.clearConnections) {
- chrome.benchmarking.closeConnections();
- }
- setTimeout(me_.runPage, 100);
- }
-
- // Update the UI
- me_.displayResults();
- };
-}
-
-chrome.runtime.onConnect.addListener(function(port) {
- port.onMessage.addListener(function(data) {
- if (data.message == "load") {
- var benchmark = findBenchmark(data.url);
- if (benchmark == undefined && benchmarkStillRunning()) {
- alert("Error: Loaded url(" + data.url + ") is not the same as what " +
- "you set in url box. This could happen if the request is " +
- "redirected. Please use the redirected url for testing.");
- // Stop the test here.
- benchmarks = [];
- }
- if (benchmark != undefined && benchmark.isRunning()) {
- benchmark.pageFinished(data.values, data.domNum, data.domDepths);
- }
- }
- });
-});
-
-function run() {
- if (window.clearCache) {
- // Show a warning if we will try to clear the cache between runs
- // but will also be reusing the same WebKit instance (i.e. Chrome
- // is in single-process mode) because the WebKit cache might not get
- // completely cleared between runs.
- if (chrome.benchmarking.isSingleProcess()) {
- alert("Warning: the WebKit cache may not be cleared correctly " +
- "between runs because Chrome is running in single-process mode.");
- }
- }
- benchmarks = [];
- var urls = testUrl.split(",");
- for (var i = 0; i < urls.length; i++) {
-
- // Remove extra space at the beginning or end of a url.
- urls[i] = removeSpace(urls[i]);
-
- // Alert about and ignore blank page which does not get loaded.
- if (urls[i] == "about:blank") {
- alert("blank page loaded!");
- } else if (!checkScheme(urls[i])) {
- // Alert about url that is not in scheme http:// or https://.
- alert(urls[i] + " does not start with http:// or https://.");
- } else {
- var benchmark = new Benchmark();
- benchmark.start(urls[i]); // XXXMB - move to constructor
- }
- }
- benchmarks[0].runPage();
-}
-
-// Remove extra whitespace in the beginning or end of a url string.
-function removeSpace(url) {
- var tempUrl = url;
- while (tempUrl.charAt(tempUrl.length-1) == " ") {
- tempUrl = tempUrl.substring(0, tempUrl.length-1);
- };
- while (tempUrl.charAt(0) == " ") {
- tempUrl = tempUrl.substring(1, tempUrl.length);
- };
- return tempUrl;
-}
-
-// Check whether a Url starts with http:// or https://.
-function checkScheme(url) {
- var httpStr = "http://";
- var httpsStr = "https://";
- var urlSubStr1 = url.substring(0, httpStr.length);
- var urlSubStr2 = url.substring(0, httpsStr.length);
-
- if ( (urlSubStr1 == httpStr) || (urlSubStr2 == httpsStr) ) {
- return true;
- }
- return false;
-}
-
-// Run at startup
-chrome.windows.getCurrent(function(currentWindow) {
- window.windowId = currentWindow.id;
-});

Powered by Google App Engine
This is Rietveld 408576698