Home | History | Annotate | Download | only in gpu_tests
      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