Index: tools/perf/page_sets/idle_multi_tab_cases.py |
diff --git a/tools/perf/page_sets/idle_multi_tab_cases.py b/tools/perf/page_sets/idle_multi_tab_cases.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..a8e8c90bc642d69eed61222a68e7720a67280eef |
--- /dev/null |
+++ b/tools/perf/page_sets/idle_multi_tab_cases.py |
@@ -0,0 +1,67 @@ |
+# Copyright 2015 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. |
+ |
+import os |
+ |
+from telemetry.page import page_set as page_set_module |
+ |
+from page_sets import top_pages |
+from page_sets import top_7_stress |
+ |
+ |
+def _SpawnTab(action_runner): |
+ return action_runner.EvaluateJavaScript('__telemetry_spawn_tab()') |
+ |
+ |
+def _CloseTab(action_runner, tab): |
+ action_runner.EvaluateJavaScript('__telemetry_close_tab(' + str(tab) + ')') |
+ |
+ |
+def _CreateIdleMultiTabPageClass(base_page_cls, base_js): |
+ class DerivedIdleMultiTabPage(base_page_cls): # pylint: disable=W0232 |
+ |
+ def RunPageInteractions(self, action_runner): |
+ MAX_TABS = 10 |
+ action_runner.ExecuteJavaScript(base_js) |
+ tabs = {} |
+ # Slowly open tabs. |
+ for tab in xrange(MAX_TABS): |
+ tabs[tab] = _SpawnTab(action_runner) |
+ action_runner.Wait(1) |
+ action_runner.Wait(20) |
+ # Slowly close tabs. |
+ for tab in xrange(MAX_TABS): |
+ _CloseTab(action_runner, tabs[tab]) |
+ action_runner.Wait(1) |
+ action_runner.Wait(30) |
+ # Quickly open tabs. |
+ for tab in xrange(MAX_TABS): |
+ tabs[tab] = _SpawnTab(action_runner) |
+ action_runner.Wait(20) |
+ # Quickly close tabs. |
+ for tab in xrange(MAX_TABS): |
+ _CloseTab(action_runner, tabs[tab]) |
+ action_runner.Wait(30) |
+ return DerivedIdleMultiTabPage |
+ |
+ |
+class IdleMultiTabCasesPageSet(page_set_module.PageSet): |
+ |
+ """ Pages for testing GC efficiency on idle pages. """ |
+ |
+ def __init__(self): |
+ super(IdleMultiTabCasesPageSet, self).__init__( |
+ user_agent_type='desktop', |
+ archive_data_file='data/top_25.json', |
+ bucket=page_set_module.PARTNER_BUCKET) |
+ with open(os.path.join(os.path.dirname(__file__), |
+ 'idle_multi_tab_cases.js')) as f: |
+ base_js = f.read() |
+ pages = [ |
+ top_pages.GoogleDocPage, |
+ top_7_stress.GmailPage, |
+ top_7_stress.GooglePlusPage, |
+ ] |
+ for page in pages: |
+ self.AddUserStory(_CreateIdleMultiTabPageClass(page, base_js)(self)) |