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)if (!chrome.benchmarking) {
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  alert("Warning:  Looks like you forgot to run chrome with " +
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        " --enable-benchmarking set.");
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return;
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function setChildTextNode(elementId, text) {
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  document.getElementById(elementId).innerText = text;
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests the roundtrip time of sendRequest().
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function testRequest() {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  setChildTextNode("resultsRequest", "running...");
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var timer = new chrome.Interval();
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    timer.start();
227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    var tab = tabs[0];
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    chrome.tabs.sendRequest(tab.id, {counter: 1}, function handler(response) {
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (response.counter < 1000) {
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        chrome.tabs.sendRequest(tab.id, {counter: response.counter}, handler);
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      } else {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        timer.stop();
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        var usec = Math.round(timer.microseconds() / response.counter);
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        setChildTextNode("resultsRequest", usec + "usec");
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    });
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  });
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests the roundtrip time of Port.postMessage() after opening a channel.
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function testConnect() {
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  setChildTextNode("resultsConnect", "running...");
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var timer = new chrome.Interval();
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    timer.start();
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    var port = chrome.tabs.connect(tabs[0].id);
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    port.postMessage({counter: 1});
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    port.onMessage.addListener(function getResp(response) {
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (response.counter < 1000) {
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        port.postMessage({counter: response.counter});
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      } else {
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        timer.stop();
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        var usec = Math.round(timer.microseconds() / response.counter);
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        setChildTextNode("resultsConnect", usec + "usec");
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    });
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  });
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)document.addEventListener('DOMContentLoaded', function() {
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  document.querySelector('#testRequest').addEventListener(
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'click', testRequest);
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  document.querySelector('#testConnect').addEventListener(
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'click', testConnect);
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)});