Index: tools/telemetry/telemetry/page_runner.py |
diff --git a/tools/telemetry/telemetry/page_runner.py b/tools/telemetry/telemetry/page_runner.py |
index 18b01acf23536e6c4bbcc529fbd8fc0c7c5c8e08..5ac8cd4c62831b91d8e44ea0918934069773ed70 100644 |
--- a/tools/telemetry/telemetry/page_runner.py |
+++ b/tools/telemetry/telemetry/page_runner.py |
@@ -8,6 +8,7 @@ import traceback |
import urlparse |
import random |
+from telemetry import browser_gone_exception |
from telemetry import page_set_url_builder |
from telemetry import page_test |
from telemetry import tab_crash_exception |
@@ -111,23 +112,34 @@ http://goto/read-src-internal, or create a new archive using --record. |
state = _RunState() |
try: |
for page in pages: |
- if not state.browser: |
- self._SetupBrowser(state, test, possible_browser, credentials_path, |
- archive_path) |
- if not state.tab: |
- state.tab = state.browser.ConnectToNthTab(0) |
- if options.trace_dir: |
- self._SetupTracingTab(state) |
- |
- try: |
- self._RunPage(options, page, state.tab, test, results) |
- except tab_crash_exception.TabCrashException: |
- # If we don't support tab control, just restart the browser. |
- # TODO(dtu): Create a new tab: crbug.com/155077, crbug.com/159852 |
- state.Close() |
- |
- if options.trace_dir and state.trace_tab: |
- self._EndTracing(state, options, page) |
+ tries = 3 |
+ while tries: |
+ try: |
+ if not state.browser: |
+ self._SetupBrowser(state, test, possible_browser, |
+ credentials_path, archive_path) |
+ if not state.tab: |
+ state.tab = state.browser.ConnectToNthTab(0) |
+ if options.trace_dir: |
+ self._SetupTracingTab(state) |
+ |
+ try: |
+ self._RunPage(options, page, state.tab, test, results) |
+ except tab_crash_exception.TabCrashException: |
+ # If we don't support tab control, just restart the browser. |
+ # TODO(dtu): Create a new tab: crbug.com/155077, crbug.com/159852 |
+ state.Close() |
+ |
+ if options.trace_dir and state.trace_tab: |
+ self._EndTracing(state, options, page) |
+ break |
+ except browser_gone_exception.BrowserGoneException: |
+ logging.warning('Lost connection to browser. Retrying.') |
+ state.Close() |
+ tries -= 1 |
+ if not tries: |
+ logging.error('Lost connection to browser 3 times. Failing.') |
+ raise |
finally: |
state.Close() |
@@ -150,6 +162,8 @@ http://goto/read-src-internal, or create a new archive using --record. |
logging.warning('Tab crashed: %s', page.url) |
results.AddFailure(page, ex, traceback.format_exc()) |
raise |
+ except browser_gone_exception.BrowserGoneException: |
+ raise browser_gone_exception.BrowserGoneException() |
nduca
2012/12/04 23:35:44
should this mark the page as failing?
tonyg
2012/12/05 00:01:27
No, we are retrying it with hopes it will succeed.
|
except Exception, ex: |
logging.error('Unexpected failure while running %s: %s', |
page.url, traceback.format_exc()) |
@@ -174,6 +188,8 @@ http://goto/read-src-internal, or create a new archive using --record. |
logging.warning('Tab crashed: %s', page.url) |
results.AddFailure(page, ex, traceback.format_exc()) |
raise |
+ except browser_gone_exception.BrowserGoneException: |
+ raise browser_gone_exception.BrowserGoneException() |
nduca
2012/12/04 23:35:44
addfailure/
|
except Exception, ex: |
logging.error('Unexpected failure while running %s: %s', |
page.url, traceback.format_exc()) |
@@ -294,5 +310,8 @@ http://goto/read-src-internal, or create a new archive using --record. |
def _CleanUpPage(self, page, tab, page_state): # pylint: disable=R0201 |
if page.credentials and page_state.did_login: |
tab.browser.credentials.LoginNoLongerNeeded(tab, page.credentials) |
- tab.runtime.Evaluate("""window.chrome && chrome.benchmarking && |
- chrome.benchmarking.closeConnections()""") |
+ try: |
nduca
2012/12/04 23:35:44
mental note --- whatever @bulach comes up with to
|
+ tab.runtime.Evaluate("""window.chrome && chrome.benchmarking && |
+ chrome.benchmarking.closeConnections()""") |
+ except Exception: |
+ pass |