1 # Copyright 2014 The Chromium Authors. All rights reserved. 2 # Use of this source code is governed by a BSD-style license that can be 3 # found in the LICENSE file. 4 5 import cloud_storage_test_base 6 import optparse 7 import page_sets 8 9 10 test_harness_script = r""" 11 var domAutomationController = {}; 12 domAutomationController._succeeded = false; 13 domAutomationController._finished = false; 14 15 domAutomationController.setAutomationId = function(id) {} 16 domAutomationController.send = function(msg) { 17 domAutomationController._finished = true; 18 if (msg.toLowerCase() == "success") 19 domAutomationController._succeeded = true; 20 else 21 domAutomationController._succeeded = false; 22 } 23 24 window.domAutomationController = domAutomationController; 25 """ 26 27 def _DidTestSucceed(tab): 28 return tab.EvaluateJavaScript('domAutomationController._succeeded') 29 30 class _GpuRasterizationValidator(cloud_storage_test_base.ValidatorBase): 31 def CustomizeBrowserOptions(self, options): 32 options.AppendExtraBrowserArgs(['--force-compositing-mode', 33 '--enable-threaded-compositing', 34 '--enable-impl-side-painting', 35 '--force-gpu-rasterization', 36 '--enable-gpu-benchmarking']) 37 38 def ValidatePage(self, page, tab, results): 39 if not _DidTestSucceed(tab): 40 raise page_test.Failure('Page indicated a failure') 41 42 if not hasattr(page, 'expectations') or not page.expectations: 43 raise page_test.Failure('Expectations not specified') 44 45 if not tab.screenshot_supported: 46 raise page_test.Failure('Browser does not support screenshot capture') 47 48 screenshot = tab.Screenshot() 49 if not screenshot: 50 raise page_test.Failure('Could not capture screenshot') 51 52 device_pixel_ratio = tab.EvaluateJavaScript('window.devicePixelRatio') 53 if hasattr(page, 'test_rect'): 54 test_rect = [int(x * device_pixel_ratio) for x in page.test_rect] 55 screenshot = screenshot.Crop( 56 test_rect[0], test_rect[1], 57 test_rect[2], test_rect[3]) 58 59 self._ValidateScreenshotSamples( 60 page.display_name, 61 screenshot, 62 page.expectations, 63 device_pixel_ratio) 64 65 66 class GpuRasterization(cloud_storage_test_base.TestBase): 67 """Tests that GPU rasterization produces valid content""" 68 test = _GpuRasterizationValidator 69 page_set = page_sets.GpuRasterizationTestsPageSet 70 71 def CreatePageSet(self, options): 72 page_set = super(GpuRasterization, self).CreatePageSet(options) 73 for page in page_set.pages: 74 page.script_to_evaluate_on_commit = test_harness_script 75 return page_set 76