| Index: client/site_tests/power_LoadTest/extension/background.html
|
| diff --git a/client/site_tests/power_LoadTest/extension/background.html b/client/site_tests/power_LoadTest/extension/background.html
|
| index 2e603a08224b7fc051710219a0355e8bf4662066..d499b233b14ac2d247de4916d7254e589c0fa7b9 100755
|
| --- a/client/site_tests/power_LoadTest/extension/background.html
|
| +++ b/client/site_tests/power_LoadTest/extension/background.html
|
| @@ -13,19 +13,16 @@ found in the LICENSE file.
|
|
|
| <script>
|
|
|
| -// Test normally takes 60 mins. Set time_ratio to 10 to
|
| -// speed up the test 10x. This reduces the amount of time
|
| -// spent on each task.
|
| var cycle_tabs = {};
|
| -var failed_loads = [0];
|
| -var successful_loads = [0];
|
| +var cycles = {};
|
| var time_ratio = 3600 * 1000 / test_time_ms; // default test time is 1 hour
|
| var preexisting_windows = [];
|
| -
|
| +
|
| chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
|
| if (sender.tab.id in cycle_tabs) {
|
| - successful_loads[0]++;
|
| - if (request.action == "should_scroll") {
|
| + cycle = cycle_tabs[sender.tab.id];
|
| + cycle.successful_loads++;
|
| + if (request.action == "should_scroll" && cycle.focus) {
|
| sendResponse({"should_scroll": should_scroll,
|
| "should_scroll_up": should_scroll_up,
|
| "scroll_loop": scroll_loop,
|
| @@ -43,6 +40,28 @@ function close_preexisting_windows() {
|
| preexisting_windows.length = 0;
|
| }
|
|
|
| +function cycle_navigate(cycle) {
|
| + cycle_tabs[cycle.id] = cycle;
|
| + var url = cycle.urls[cycle.idx];
|
| + chrome.tabs.update(cycle.id, {'url': url, 'selected': true});
|
| + cycle.idx = (cycle.idx + 1) % cycle.urls.length;
|
| + if (cycle.timeout < cycle.delay && cycle.timeout > 0) {
|
| + cycle.timer = setTimeout(cycle_check_timeout, cycle.timeout, cycle);
|
| + } else {
|
| + cycle.timer = setTimeout(cycle_navigate, cycle.delay, cycle);
|
| + }
|
| +}
|
| +
|
| +function cycle_check_timeout(cycle) {
|
| + if (cycle.id in cycle_tabs) {
|
| + cycle.failed_loads++;
|
| + cycle_navigate(cycle);
|
| + } else {
|
| + cycle.timer = setTimeout(cycle_navigate, cycle.delay - cycle.timeout,
|
| + cycle);
|
| + }
|
| +}
|
| +
|
| function launch_task(task) {
|
| if (task.type == 'window' && task.tabs) {
|
| var url = task.tabs[0];
|
| @@ -52,28 +71,29 @@ function launch_task(task) {
|
| chrome.tabs.create({'windowId': win.id, url: task.tabs[i]});
|
| }
|
| setTimeout(chrome.windows.remove, task.duration / time_ratio, win.id);
|
| - })
|
| + });
|
| } else if (task.type == 'cycle' && task.urls) {
|
| - var url = task.urls[0];
|
| - var idx = 0;
|
| - chrome.windows.create({'url': url}, function (win) {
|
| + chrome.windows.create({'url': 'about:blank'}, function (win) {
|
| close_preexisting_windows();
|
| chrome.tabs.getSelected(win.id, function(tab) {
|
| - cycle_tabs[tab.id] = task.scroll_interval;
|
| - var cycleTask = setInterval(function(urls, tab_id) {
|
| - if (tab_id in cycle_tabs && urls.length > 1) {
|
| - failed_loads[0] += 1;
|
| - }
|
| - console.log('suc/fail: ' + successful_loads[0] + '/' +
|
| - failed_loads[0]);
|
| - cycle_tabs[tab_id] = task.scroll_interval;
|
| - idx = (idx + 1) % urls.length;
|
| - chrome.tabs.update(tab_id, {'url': urls[idx], 'selected': true})
|
| - }, task.delay, task.urls, tab.id);
|
| - setTimeout(function(win_id) {
|
| - clearInterval(cycleTask);
|
| + var cycle = {
|
| + 'timeout': task.timeout,
|
| + 'name': task.name,
|
| + 'delay': task.delay,
|
| + 'urls': task.urls,
|
| + 'id': tab.id,
|
| + 'idx': 0,
|
| + 'timer': null,
|
| + 'focus': !!task.focus,
|
| + 'successful_loads': 0,
|
| + 'failed_loads': 0
|
| + };
|
| + cycles[task.name] = cycle;
|
| + cycle_navigate(cycle);
|
| + setTimeout(function(cycle, win_id) {
|
| + clearTimeout(cycle.timer);
|
| chrome.windows.remove(win_id);
|
| - }, task.duration / time_ratio, win.id);
|
| + }, task.duration / time_ratio, cycle, win.id);
|
| });
|
| });
|
| }
|
| @@ -88,12 +108,20 @@ function close_browser() {
|
| }
|
|
|
| function send_status() {
|
| + var post = ["status=good"];
|
| +
|
| + for (var name in cycles) {
|
| + var cycle = cycles[name];
|
| + post.push(name + "_successful_loads=" + cycle.successful_loads);
|
| + post.push(name + "_failed_loads=" + cycle.failed_loads);
|
| + }
|
| +
|
| var log_url = 'http://localhost:8001/status';
|
| var req = new XMLHttpRequest();
|
| req.open('POST', log_url, true);
|
| req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
|
| - req.send("status=good&succeeded=" + successful_loads[0] + "&failed="
|
| - + failed_loads[0]);
|
| + req.send(post.join("&"));
|
| + console.log(post.join("&"));
|
| }
|
|
|
|
|
|
|