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

Unified Diff: tools/telemetry/telemetry/page/page_runner.py

Issue 652813002: [Telemetry] Merge _PageState to _RunState in page_runner.py (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/telemetry/telemetry/page/page_runner.py
diff --git a/tools/telemetry/telemetry/page/page_runner.py b/tools/telemetry/telemetry/page/page_runner.py
index d576254f6ca038a80eda399000521b488909f4b8..ebae4a8c657cd0d5e31a68fa535ae462348d436d 100644
--- a/tools/telemetry/telemetry/page/page_runner.py
+++ b/tools/telemetry/telemetry/page/page_runner.py
@@ -28,12 +28,16 @@ from telemetry.value import skip
class _RunState(object):
- def __init__(self):
+ def __init__(self, test):
self.browser = None
self._append_to_existing_wpr = False
self._last_archive_path = None
self._first_browser = True
+ self._test = test
+ self._did_login_for_current_page = False
+ self._current_page = None
+ self._current_tab = None
self.profiler_dir = None
def StartBrowserIfNeeded(self, test, page_set, page, possible_browser,
@@ -113,6 +117,44 @@ class _RunState(object):
if started_browser:
self.browser.tabs[0].WaitForDocumentReadyStateToBeComplete()
+ def PreparePage(self, page):
+ self._current_page = page
+ self._current_tab = self._test.TabForPage(page, self.browser)
+ if self._current_page.is_file:
+ self.browser.SetHTTPServerDirectories(
+ self._current_page.page_set.serving_dirs |
+ set([self._current_page.serving_dir]))
+
+ if self._current_page.credentials:
+ if not self.browser.credentials.LoginNeeded(
+ self._current_tab, self._current_page.credentials):
+ raise page_test.Failure('Login as ' + self.page.credentials + ' failed')
+ self._did_login_for_current_page = True
+
+ if self._test.clear_cache_before_each_run:
+ self._current_tab.ClearCache(force=True)
+
+ def ImplicitPageNavigation(self):
+ """Executes the implicit navigation that occurs for every page iteration.
+
+ This function will be called once per page before any actions are executed.
+ """
+ self._test.WillNavigateToPage(self._current_page, self._current_tab)
+ self._test.RunNavigateSteps(self._current_page, self._current_tab)
+ self._test.DidNavigateToPage(self._current_page, self._current_tab)
+
+ def RunPage(self, results):
+ self._test.RunPage(self._current_page, self._current_tab, results)
+ util.CloseConnections(self._current_tab)
+
+ def CleanUpPage(self):
+ self._test.CleanUpAfterPage(self._current_page, self._current_tab)
+ if self._current_page.credentials and self._did_login_for_current_page:
+ self.browser.credentials.LoginNoLongerNeeded(
+ self._current_tab, self._current_page.credentials)
+ self._current_page = None
+ self._current_tab = None
+
def StopBrowser(self):
if self.browser:
self.browser.Close()
@@ -139,43 +181,6 @@ class _RunState(object):
self.browser.platform.profiling_controller.Stop()
-class _PageState(object):
- def __init__(self, page, tab):
- self.page = page
- self.tab = tab
-
- self._did_login = False
-
- def PreparePage(self, test):
- if self.page.is_file:
- self.tab.browser.SetHTTPServerDirectories(
- self.page.page_set.serving_dirs | set([self.page.serving_dir]))
-
- if self.page.credentials:
- if not self.tab.browser.credentials.LoginNeeded(
- self.tab, self.page.credentials):
- raise page_test.Failure('Login as ' + self.page.credentials + ' failed')
- self._did_login = True
-
- if test.clear_cache_before_each_run:
- self.tab.ClearCache(force=True)
-
- def ImplicitPageNavigation(self, test):
- """Executes the implicit navigation that occurs for every page iteration.
-
- This function will be called once per page before any actions are executed.
- """
- test.WillNavigateToPage(self.page, self.tab)
- test.RunNavigateSteps(self.page, self.tab)
- test.DidNavigateToPage(self.page, self.tab)
-
- def CleanUpPage(self, test):
- test.CleanUpAfterPage(self.page, self.tab)
- if self.page.credentials and self._did_login:
- self.tab.browser.credentials.LoginNoLongerNeeded(
- self.tab, self.page.credentials)
-
-
def AddCommandLineArgs(parser):
page_filter.PageFilter.AddCommandLineArgs(parser)
results_options.AddResultsOptions(parser)
@@ -226,7 +231,7 @@ def ProcessCommandLineArgs(parser, args):
parser.error('--pageset-repeat must be a positive integer.')
-def _PrepareAndRunPage(test, page_set, expectations, finder_options,
+def _RunPageAndRetryRunIfNeeded(test, page_set, expectations, finder_options,
browser_options, page, possible_browser, results, state):
if finder_options.use_live_sites:
browser_options.wpr_mode = wpr_modes.WPR_OFF
@@ -262,7 +267,7 @@ def _PrepareAndRunPage(test, page_set, expectations, finder_options,
state.StartProfiling(page, finder_options)
try:
- _RunPage(test, page, state, expectation, results)
+ _RunPageAndProcessErrorIfNeeded(page, state, expectation, results)
_CheckThermalThrottling(state.browser.platform)
except exceptions.TabCrashException as e:
if test.is_multi_tab_test:
@@ -369,7 +374,7 @@ def Run(test, page_set, expectations, finder_options, results):
if not pages:
return
- state = _RunState()
+ state = _RunState(test)
pages_with_discarded_first_result = set()
max_failures = finder_options.max_failures # command-line gets priority
if max_failures is None:
@@ -384,7 +389,7 @@ def Run(test, page_set, expectations, finder_options, results):
for _ in xrange(finder_options.page_repeat):
results.WillRunPage(page)
try:
- _PrepareAndRunPage(
+ _RunPageAndRetryRunIfNeeded(
test, page_set, expectations, finder_options, browser_options,
page, possible_browser, results, state)
finally:
@@ -458,14 +463,12 @@ def _CheckArchives(page_set, pages, results):
return valid_pages
-def _RunPage(test, page, state, expectation, results):
+def _RunPageAndProcessErrorIfNeeded(page, state, expectation, results):
if expectation == 'skip':
logging.debug('Skipping test: Skip expectation for %s', page.url)
results.AddValue(skip.SkipValue(page, 'Skipped by test expectations'))
return
- page_state = _PageState(page, test.TabForPage(page, state.browser))
-
def ProcessError():
if expectation == 'fail':
msg = 'Expected exception while running %s' % page.url
@@ -475,10 +478,9 @@ def _RunPage(test, page, state, expectation, results):
exception_formatter.PrintFormattedException(msg=msg)
try:
- page_state.PreparePage(test)
- page_state.ImplicitPageNavigation(test)
- test.RunPage(page, page_state.tab, results)
- util.CloseConnections(page_state.tab)
+ state.PreparePage(page)
+ state.ImplicitPageNavigation()
+ state.RunPage(results)
except page_test.TestNotSupportedOnPlatformFailure:
raise
except page_test.Failure:
@@ -506,7 +508,7 @@ def _RunPage(test, page, state, expectation, results):
if expectation == 'fail':
logging.warning('%s was expected to fail, but passed.\n', page.url)
finally:
- page_state.CleanUpPage(test)
+ state.CleanUpPage()
def _WaitForThermalThrottlingIfNeeded(platform):
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698