Index: content/test/gpu/gpu_tests/context_lost.py |
diff --git a/content/test/gpu/gpu_tests/context_lost.py b/content/test/gpu/gpu_tests/context_lost.py |
index 89eabfba0eabf9c771926738c19f54f9c9358a4b..97603ef8e44b0c606250d7c633b5b1d7a3e5a342 100644 |
--- a/content/test/gpu/gpu_tests/context_lost.py |
+++ b/content/test/gpu/gpu_tests/context_lost.py |
@@ -66,6 +66,15 @@ class _ContextLostValidator(page_test.PageTest): |
options.AppendExtraBrowserArgs('--enable-gpu-benchmarking') |
def ValidateAndMeasurePage(self, page, tab, results): |
+ def WaitForPageToFinish(): |
+ print "Waiting for page to finish." |
+ try: |
+ util.WaitFor(lambda: tab.EvaluateJavaScript( |
+ 'window.domAutomationController._finished'), wait_timeout) |
+ return True |
+ except util.TimeoutException: |
+ return False |
+ |
if page.kill_gpu_process: |
# Doing the GPU process kill operation cooperatively -- in the |
# same page's context -- is much more stressful than restarting |
@@ -97,13 +106,7 @@ class _ContextLostValidator(page_test.PageTest): |
print 'Tab crashed while navigating to chrome://gpucrash' |
# Activate the original tab and wait for completion. |
tab.Activate() |
- completed = False |
- try: |
- util.WaitFor(lambda: tab.EvaluateJavaScript( |
- 'window.domAutomationController._finished'), wait_timeout) |
- completed = True |
- except util.TimeoutException: |
- pass |
+ completed = WaitForPageToFinish() |
if page.check_crash_count: |
if not tab.browser.supports_system_info: |
@@ -160,14 +163,7 @@ class _ContextLostValidator(page_test.PageTest): |
# This method seem unreliable, so the page will also attempt to force |
# GC through excessive allocations. |
tab.CollectGarbage() |
- completed = False |
- try: |
- print "Waiting for page to finish." |
- util.WaitFor(lambda: tab.EvaluateJavaScript( |
- 'window.domAutomationController._finished'), wait_timeout) |
- completed = True |
- except util.TimeoutException: |
- pass |
+ completed = WaitForPageToFinish() |
if not completed: |
raise page_test.Failure( |
@@ -176,15 +172,25 @@ class _ContextLostValidator(page_test.PageTest): |
'window.domAutomationController._succeeded'): |
raise page_test.Failure( |
'Test failed (context not restored properly?)') |
+ elif page.hide_tab_and_lose_context: |
+ if not tab.browser.supports_tab_control: |
+ raise page_test.Failure('Browser must support tab control') |
+ |
+ # Test losing a context in a hidden tab. This test passes if the tab |
+ # doesn't crash. |
+ dummy_tab = tab.browser.tabs.New() |
+ tab.EvaluateJavaScript('loseContextUsingExtension()') |
+ tab.Activate() |
+ |
+ completed = WaitForPageToFinish() |
+ |
+ if not completed: |
+ raise page_test.Failure('Test didn\'t complete') |
+ if not tab.EvaluateJavaScript( |
+ 'window.domAutomationController._succeeded'): |
+ raise page_test.Failure('Test failed') |
else: |
- completed = False |
- try: |
- print "Waiting for page to finish." |
- util.WaitFor(lambda: tab.EvaluateJavaScript( |
- 'window.domAutomationController._finished'), wait_timeout) |
- completed = True |
- except util.TimeoutException: |
- pass |
+ completed = WaitForPageToFinish() |
if not completed: |
raise page_test.Failure('Test didn\'t complete') |
@@ -206,6 +212,7 @@ class GPUProcessCrashesExactlyOnce(page.Page): |
self.number_of_gpu_process_kills = 2 |
self.check_crash_count = True |
self.force_garbage_collection = False |
+ self.hide_tab_and_lose_context = False |
picksi1
2014/09/12 09:05:25
It looks like this has already landed, but as an o
Sami
2014/09/12 09:56:28
Right, what I'd really want to do here is have a c
|
def RunNavigateSteps(self, action_runner): |
action_runner.NavigateToPage(self) |
@@ -224,6 +231,7 @@ class WebGLContextLostFromGPUProcessExitPage(page.Page): |
self.check_crash_count = False |
self.number_of_gpu_process_kills = 1 |
self.force_garbage_collection = False |
+ self.hide_tab_and_lose_context = False |
def RunNavigateSteps(self, action_runner): |
action_runner.NavigateToPage(self) |
@@ -242,12 +250,33 @@ class WebGLContextLostFromLoseContextExtensionPage(page.Page): |
self.kill_gpu_process = False |
self.check_crash_count = False |
self.force_garbage_collection = False |
+ self.hide_tab_and_lose_context = False |
def RunNavigateSteps(self, action_runner): |
action_runner.NavigateToPage(self) |
action_runner.WaitForJavaScriptCondition( |
'window.domAutomationController._finished') |
+ |
+class WebGLContextLostInHiddenTabPage(page.Page): |
+ def __init__(self, page_set, base_dir): |
+ super(WebGLContextLostInHiddenTabPage, self).__init__( |
+ url='file://webgl.html?query=kill_after_notification', |
+ page_set=page_set, |
+ base_dir=base_dir, |
+ name='ContextLost.WebGLContextLostInHiddenTab') |
+ self.script_to_evaluate_on_commit = harness_script |
+ self.kill_gpu_process = False |
+ self.check_crash_count = False |
+ self.force_garbage_collection = False |
+ self.hide_tab_and_lose_context = True |
+ |
+ def RunNavigateSteps(self, action_runner): |
+ action_runner.NavigateToPage(self) |
+ action_runner.WaitForJavaScriptCondition( |
+ 'window.domAutomationController._loaded') |
+ |
+ |
class WebGLContextLostFromQuantityPage(page.Page): |
def __init__(self, page_set, base_dir): |
super(WebGLContextLostFromQuantityPage, self).__init__( |
@@ -259,6 +288,7 @@ class WebGLContextLostFromQuantityPage(page.Page): |
self.kill_gpu_process = False |
self.check_crash_count = False |
self.force_garbage_collection = True |
+ self.hide_tab_and_lose_context = False |
def RunNavigateSteps(self, action_runner): |
action_runner.NavigateToPage(self) |
@@ -276,6 +306,7 @@ class WebGLContextLostFromSelectElementPage(page.Page): |
self.kill_gpu_process = False |
self.check_crash_count = False |
self.force_garbage_collection = False |
+ self.hide_tab_and_lose_context = False |
def RunNavigateSteps(self, action_runner): |
action_runner.NavigateToPage(self) |
@@ -302,4 +333,5 @@ class ContextLost(benchmark_module.Benchmark): |
ps.AddPage(WebGLContextLostFromLoseContextExtensionPage(ps, ps.base_dir)) |
ps.AddPage(WebGLContextLostFromQuantityPage(ps, ps.base_dir)) |
ps.AddPage(WebGLContextLostFromSelectElementPage(ps, ps.base_dir)) |
+ ps.AddPage(WebGLContextLostInHiddenTabPage(ps, ps.base_dir)) |
return ps |