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 0acab358ee00628994ed35df12ba30b461d58e25..633df6022bc1c19eb7ba24a77f5a1f9e2f211968 100644 |
--- a/content/test/gpu/gpu_tests/context_lost.py |
+++ b/content/test/gpu/gpu_tests/context_lost.py |
@@ -102,6 +102,27 @@ class _ContextLostValidator(page_test.PageTest): |
'window.domAutomationController._succeeded'): |
raise page_test.Failure( |
'Test failed (context not restored properly?)') |
+ elif page.force_garbage_collection: |
+ # Try to corce GC to clean up any contexts not attached to the page. |
+ # 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 |
+ |
+ if not completed: |
+ raise page_test.Failure( |
+ 'Test didn\'t complete (no context restored event?)') |
+ if not tab.EvaluateJavaScript( |
+ 'window.domAutomationController._succeeded'): |
+ raise page_test.Failure( |
+ 'Test failed (context not restored properly?)') |
class WebGLContextLostFromGPUProcessExitPage(page.Page): |
def __init__(self, page_set, base_dir): |
@@ -113,6 +134,7 @@ class WebGLContextLostFromGPUProcessExitPage(page.Page): |
self.script_to_evaluate_on_commit = harness_script |
self.kill_gpu_process = True |
self.number_of_gpu_process_kills = 1 |
+ self.force_garbage_collection = False |
def RunNavigateSteps(self, action_runner): |
action_runner.RunAction(NavigateAction()) |
@@ -129,12 +151,28 @@ class WebGLContextLostFromLoseContextExtensionPage(page.Page): |
self.name = 'ContextLost.WebGLContextLostFromLoseContextExtension', |
self.script_to_evaluate_on_commit = harness_script |
self.kill_gpu_process = False |
+ self.force_garbage_collection = False |
def RunNavigateSteps(self, action_runner): |
action_runner.RunAction(NavigateAction()) |
action_runner.RunAction(WaitAction( |
{'javascript': 'window.domAutomationController._finished'})) |
+class WebGLContextLostFromQuantityPage(page.Page): |
+ def __init__(self, page_set, base_dir): |
+ super(WebGLContextLostFromQuantityPage, self).__init__( |
+ url='file://webgl.html?query=forced_quantity_loss', |
+ page_set=page_set, |
+ base_dir=base_dir) |
+ self.name = 'ContextLost.WebGLContextLostFromQuantity', |
+ self.script_to_evaluate_on_commit = harness_script |
+ self.kill_gpu_process = False |
+ self.force_garbage_collection = True |
+ |
+ def RunNavigateSteps(self, action_runner): |
+ action_runner.RunAction(NavigateAction()) |
+ action_runner.RunAction(WaitAction( |
+ {'javascript': 'window.domAutomationController._loaded'})) |
class ContextLost(test_module.Test): |
enabled = True |
@@ -150,4 +188,7 @@ class ContextLost(test_module.Test): |
serving_dirs=set([''])) |
ps.AddPage(WebGLContextLostFromGPUProcessExitPage(ps, ps.base_dir)) |
ps.AddPage(WebGLContextLostFromLoseContextExtensionPage(ps, ps.base_dir)) |
+ ps.AddPage(WebGLContextLostFromQuantityPage(ps, ps.base_dir)) |
return ps |
+ |
+ |