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 79d6b7b0249e8f3c582e4f0fcf472e740251227b..fa5c347cfffc56a19c375ae1cdf5c0f1c1b3bd95 100644 |
--- a/tools/telemetry/telemetry/page/page_runner.py |
+++ b/tools/telemetry/telemetry/page/page_runner.py |
@@ -2,7 +2,6 @@ |
# Use of this source code is governed by a BSD-style license that can be |
# found in the LICENSE file. |
-import collections |
import logging |
import optparse |
import os |
@@ -36,7 +35,6 @@ class _RunState(object): |
self._append_to_existing_wpr = False |
self._last_archive_path = None |
self._first_browser = True |
- self.first_page = collections.defaultdict(lambda: True) |
self.profiler_dir = None |
def StartBrowserIfNeeded(self, test, page_set, page, possible_browser, |
@@ -246,7 +244,7 @@ def _PrepareAndRunPage(test, page_set, expectations, finder_options, |
max_attempts = test.attempts |
attempt_num = 0 |
while attempt_num < max_attempts: |
- attempt_num = attempt_num + 1 |
+ attempt_num += 1 |
try: |
results.WillAttemptPageRun(attempt_num, max_attempts) |
@@ -345,20 +343,16 @@ def Run(test, page_set, expectations, finder_options, results): |
sys.exit(-1) |
if not possible_browser: |
sys.stderr.write( |
- 'No browser found. Available browsers:\n' + |
- '\n'.join(browser_finder.GetAllAvailableBrowserTypes(finder_options)) + |
- '\n') |
+ 'No browser found. Available browsers:\n%s\n' % |
+ '\n'.join(browser_finder.GetAllAvailableBrowserTypes(finder_options))) |
sys.exit(-1) |
browser_options = possible_browser.finder_options.browser_options |
browser_options.browser_type = possible_browser.browser_type |
test.CustomizeBrowserOptions(browser_options) |
- should_run = decorators.IsEnabled(test, possible_browser) |
- |
- should_run = should_run or finder_options.run_disabled_tests |
- |
- if not should_run: |
+ if (not decorators.IsEnabled(test, possible_browser) and |
+ not finder_options.run_disabled_tests): |
logging.warning('You are trying to run a disabled test.') |
logging.warning('Pass --also-run-disabled-tests to squelch this message.') |
return |
@@ -404,72 +398,54 @@ def Run(test, page_set, expectations, finder_options, results): |
return |
state = _RunState() |
- # TODO(dtu): Move results creation and results_for_current_run into RunState. |
- |
- max_failures = None |
- if not test.max_failures is None: |
- max_failures = test.max_failures |
- if not finder_options.max_failures is None: |
- # Support overriding this from the command line. |
- max_failures = finder_options.max_failures |
+ pages_with_discarded_first_result = set() |
+ max_failures = finder_options.max_failures # command-line gets priority |
+ if max_failures is None: |
+ max_failures = test.max_failures # may be None |
try: |
test.WillRunTest(finder_options) |
- for _ in xrange(0, finder_options.pageset_repeat): |
+ for _ in xrange(finder_options.pageset_repeat): |
for page in pages: |
if test.IsExiting(): |
break |
- |
- for _ in xrange(0, finder_options.page_repeat): |
+ for _ in xrange(finder_options.page_repeat): |
results.WillRunPage(page) |
try: |
_PrepareAndRunPage( |
test, page_set, expectations, finder_options, browser_options, |
page, credentials_path, possible_browser, results, state) |
finally: |
- discard_run = False |
- if state.first_page[page]: |
- state.first_page[page] = False |
- if test.discard_first_result: |
- discard_run = True |
+ discard_run = (test.discard_first_result and |
+ page not in pages_with_discarded_first_result) |
+ if discard_run: |
+ pages_with_discarded_first_result.add(page) |
results.DidRunPage(page, discard_run=discard_run) |
- if (not max_failures is None and |
- len(results.failures) > max_failures): |
+ if max_failures is not None and len(results.failures) > max_failures: |
logging.error('Too many failures. Aborting.') |
test.RequestExit() |
- |
finally: |
test.DidRunTest(state.browser, results) |
state.StopBrowser() |
- return |
- |
def _ShuffleAndFilterPageSet(page_set, finder_options): |
if finder_options.pageset_shuffle_order_file: |
return page_set.ReorderPageSet(finder_options.pageset_shuffle_order_file) |
- |
pages = [page for page in page_set.pages[:] |
if not page.disabled and page_filter.PageFilter.IsSelected(page)] |
- |
if finder_options.pageset_shuffle: |
- random.Random().shuffle(pages) |
- |
+ random.shuffle(pages) |
return pages |
def _CheckArchives(page_set, pages, results): |
"""Returns a subset of pages that are local or have WPR archives. |
- Logs warnings if any are missing.""" |
- page_set_has_live_sites = False |
- for page in pages: |
- if not page.is_local: |
- page_set_has_live_sites = True |
- break |
- |
- # Potential problems with the entire page set. |
- if page_set_has_live_sites: |
+ Logs warnings if any are missing. |
+ """ |
+ # Warn of any problems with the entire page set. |
+ if any(not p.is_local for p in pages): |
if not page_set.archive_data_file: |
logging.warning('The page set is missing an "archive_data_file" ' |
'property. Skipping any live sites. To include them, ' |
@@ -480,19 +456,17 @@ def _CheckArchives(page_set, pages, results): |
'.gclient using http://goto/read-src-internal, ' |
'or create a new archive using record_wpr.') |
- # Potential problems with individual pages. |
+ # Warn of any problems with individual pages and return valid pages. |
pages_missing_archive_path = [] |
pages_missing_archive_data = [] |
- |
+ valid_pages = [] |
for page in pages: |
- if page.is_local: |
- continue |
- |
- if not page.archive_path: |
+ if not page.is_local and not page.archive_path: |
pages_missing_archive_path.append(page) |
- elif not os.path.isfile(page.archive_path): |
+ elif not page.is_local and not os.path.isfile(page.archive_path): |
pages_missing_archive_data.append(page) |
- |
+ else: |
+ valid_pages.append(page) |
if pages_missing_archive_path: |
logging.warning('The page set archives for some pages do not exist. ' |
'Skipping those pages. To fix this, record those pages ' |
@@ -504,15 +478,12 @@ def _CheckArchives(page_set, pages, results): |
'Skipping those pages. To fix this, record those pages ' |
'using record_wpr. To ignore this warning and run ' |
'against live sites, pass the flag --use-live-sites.') |
- |
for page in pages_missing_archive_path + pages_missing_archive_data: |
results.WillRunPage(page) |
results.AddValue(failure.FailureValue.FromMessage( |
page, 'Page set archive doesn\'t exist.')) |
results.DidRunPage(page) |
- |
- return [page for page in pages if page not in |
- pages_missing_archive_path + pages_missing_archive_data] |
+ return valid_pages |
def _RunPage(test, page, state, expectation, results): |