1 <head> 2 <style> 3 tr { 4 white-space: nowrap; 5 } 6 .results { 7 text-align: right; 8 min-width: 6em; 9 color: black; 10 } 11 </style> 12 <script> 13 if (!chrome.benchmarking) { 14 alert("Warning: Looks like you forgot to run chrome with " + 15 " --enable-benchmarking set."); 16 return; 17 } 18 19 function setChildTextNode(elementId, text) { 20 document.getElementById(elementId).innerText = text; 21 } 22 23 // Tests the roundtrip time of sendRequest(). 24 function testRequest() { 25 setChildTextNode("resultsRequest", "running..."); 26 27 chrome.tabs.getSelected(null, function(tab) { 28 var timer = new chrome.Interval(); 29 timer.start(); 30 31 chrome.tabs.sendRequest(tab.id, {counter: 1}, function handler(response) { 32 if (response.counter < 1000) { 33 chrome.tabs.sendRequest(tab.id, {counter: response.counter}, handler); 34 } else { 35 timer.stop(); 36 var usec = Math.round(timer.microseconds() / response.counter); 37 setChildTextNode("resultsRequest", usec + "usec"); 38 } 39 }); 40 }); 41 } 42 43 // Tests the roundtrip time of Port.postMessage() after opening a channel. 44 function testConnect() { 45 setChildTextNode("resultsConnect", "running..."); 46 47 chrome.tabs.getSelected(null, function(tab) { 48 var timer = new chrome.Interval(); 49 timer.start(); 50 51 var port = chrome.tabs.connect(tab.id); 52 port.postMessage({counter: 1}); 53 port.onMessage.addListener(function getResp(response) { 54 if (response.counter < 1000) { 55 port.postMessage({counter: response.counter}); 56 } else { 57 timer.stop(); 58 var usec = Math.round(timer.microseconds() / response.counter); 59 setChildTextNode("resultsConnect", usec + "usec"); 60 } 61 }); 62 }); 63 } 64 </script> 65 </head> 66 <body> 67 <table> 68 <tr> 69 <td><button onclick="testRequest()">Measure sendRequest</button></td> 70 <td id="resultsRequest" class="results">(results)</td> 71 </tr> 72 <tr> 73 <td><button onclick="testConnect()">Measure postMessage</button></td> 74 <td id="resultsConnect" class="results">(results)</td> 75 </tr> 76 </table> 77 </body> 78