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

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

Issue 18261009: Have repeats understand "time" (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixing perf tests Created 7 years, 5 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
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 8e20cec1ca85975a9e8be541e80b1ecb70fb2d90..9820a18476bde8f306d4dec6b82598bcbdb09b0b 100644
--- a/tools/telemetry/telemetry/page/page_runner.py
+++ b/tools/telemetry/telemetry/page/page_runner.py
@@ -17,6 +17,7 @@ from telemetry.core import exceptions
from telemetry.core import util
from telemetry.core import wpr_modes
from telemetry.page import page_filter as page_filter_module
+from telemetry.page import page_runner_repeat
from telemetry.page import page_test
@@ -72,7 +73,6 @@ class _RunState(object):
if self.first_page[page]:
self.first_page[page] = False
- test.WillRunPageSet(self.tab)
def StopBrowser(self):
if self.tab:
@@ -92,7 +92,7 @@ class _RunState(object):
if not self.profiler_dir:
self.profiler_dir = tempfile.mkdtemp()
output_file = os.path.join(self.profiler_dir, page.url_as_file_safe_name)
- if options.page_repeat != 1 or options.pageset_repeat != 1:
+ if options.repeat_options.IsRepeating():
output_file = _GetSequentialFileName(output_file)
self.browser.StartProfiling(options.profiler, output_file)
@@ -148,6 +148,58 @@ def _LogStackTrace(title, browser):
logging.warning('%s%s', title, stack_trace)
+def _PrepareAndRunPage(test, page_set, expectations, options, page,
+ credentials_path, possible_browser, results, state):
+ if options.wpr_mode != wpr_modes.WPR_RECORD:
+ if page.archive_path and os.path.isfile(page.archive_path):
+ possible_browser.options.wpr_mode = wpr_modes.WPR_REPLAY
+ else:
+ possible_browser.options.wpr_mode = wpr_modes.WPR_OFF
+ results_for_current_run = results
+ if state.first_page[page] and test.discard_first_result:
+ # If discarding results, substitute a dummy object.
+ results_for_current_run = type(results)()
+ results_for_current_run.StartTest(page)
+ tries = 3
+ while tries:
+ try:
+ state.StartBrowser(test, page_set, page, possible_browser,
+ credentials_path, page.archive_path)
+
+ _WaitForThermalThrottlingIfNeeded(state.browser.platform)
+
+ if options.profiler:
+ state.StartProfiling(page, options)
+
+ expectation = expectations.GetExpectationForPage(
+ state.browser.platform, page)
+
+ try:
+ _RunPage(test, page, state.tab, expectation,
+ results_for_current_run, options)
+ _CheckThermalThrottling(state.browser.platform)
+ except exceptions.TabCrashException:
+ _LogStackTrace('Tab crashed: %s' % page.url, state.browser)
+ state.StopBrowser()
+
+ if options.profiler:
+ state.StopProfiling()
+
+ if test.NeedsBrowserRestartAfterEachRun(state.tab):
+ state.StopBrowser()
+
+ break
+ except exceptions.BrowserGoneException:
+ _LogStackTrace('Browser crashed', state.browser)
+ logging.warning('Lost connection to browser. Retrying.')
+ state.StopBrowser()
+ tries -= 1
+ if not tries:
+ logging.error('Lost connection to browser 3 times. Failing.')
+ raise
+ results_for_current_run.StopTest(page)
+
+
def Run(test, page_set, expectations, options):
"""Runs a given test against a given page_set with the given options."""
results = test.PrepareResults(options)
@@ -181,61 +233,35 @@ def Run(test, page_set, expectations, options):
for page in pages:
test.CustomizeBrowserOptionsForPage(page, possible_browser.options)
+ for page in list(pages):
+ if not test.CanRunForPage(page):
+ logging.warning('Skipping test: it cannot run for %s', page.url)
+ results.AddSkip(page, 'Test cannot run')
+ pages.remove(page)
+
+ if not pages:
+ return results
+
state = _RunState()
# TODO(dtu): Move results creation and results_for_current_run into RunState.
- results_for_current_run = results
try:
- for page in pages:
- if options.wpr_mode != wpr_modes.WPR_RECORD:
- if page.archive_path and os.path.isfile(page.archive_path):
- possible_browser.options.wpr_mode = wpr_modes.WPR_REPLAY
- else:
- possible_browser.options.wpr_mode = wpr_modes.WPR_OFF
- results_for_current_run = results
- if state.first_page[page] and test.discard_first_result:
- # If discarding results, substitute a dummy object.
- results_for_current_run = type(results)()
- results_for_current_run.StartTest(page)
- tries = 3
- while tries:
- try:
- state.StartBrowser(test, page_set, page, possible_browser,
- credentials_path, page.archive_path)
-
- _WaitForThermalThrottlingIfNeeded(state.browser.platform)
-
- if options.profiler:
- state.StartProfiling(page, options)
-
- expectation = expectations.GetExpectationForPage(
- state.browser.platform, page)
-
- try:
- _RunPage(test, page, state.tab, expectation,
- results_for_current_run, options)
- _CheckThermalThrottling(state.browser.platform)
- except exceptions.TabCrashException:
- _LogStackTrace('Tab crashed: %s' % page.url, state.browser)
- state.StopBrowser()
-
- if options.profiler:
- state.StopProfiling()
-
- if test.NeedsBrowserRestartAfterEachRun(state.tab):
- state.StopBrowser()
-
- break
- except exceptions.BrowserGoneException:
- _LogStackTrace('Browser crashed', state.browser)
- logging.warning('Lost connection to browser. Retrying.')
- state.StopBrowser()
- tries -= 1
- if not tries:
- logging.error('Lost connection to browser 3 times. Failing.')
- raise
- results_for_current_run.StopTest(page)
- test.DidRunPageSet(state.tab, results_for_current_run)
+ test.WillRunTest(state.tab)
+ repeat_state = page_runner_repeat.PageRunnerRepeatState(
+ options.repeat_options)
+
+ repeat_state.WillRunPageSet()
+ while repeat_state.ShouldRepeatPageSet():
+ for page in pages:
+ repeat_state.WillRunPage()
+ while repeat_state.ShouldRepeatPage():
+ # execute test on page
+ _PrepareAndRunPage(test, page_set, expectations, options, page,
+ credentials_path, possible_browser, results, state)
+ repeat_state.DidRunPage()
+ repeat_state.DidRunPageSet()
+
+ test.DidRunTest(state.tab, results)
finally:
state.StopBrowser()
@@ -255,10 +281,8 @@ def _ShuffleAndFilterPageSet(page_set, options):
if options.pageset_shuffle:
random.Random().shuffle(pages)
- return [page
- for _ in xrange(int(options.pageset_repeat))
- for page in pages
- for _ in xrange(int(options.page_repeat))]
+
+ return pages
def _CheckArchives(page_set, pages, results):
@@ -320,11 +344,6 @@ def _CheckArchives(page_set, pages, results):
def _RunPage(test, page, tab, expectation, results, options):
- if not test.CanRunForPage(page):
- logging.warning('Skipping test: it cannot run for %s', page.url)
- results.AddSkip(page, 'Test cannot run')
- return
-
logging.info('Running %s' % page.url)
page_state = PageState()
« no previous file with comments | « tools/telemetry/telemetry/core/repeat_options.py ('k') | tools/telemetry/telemetry/page/page_runner_repeat.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698