1#!/usr/bin/env python 2# Copyright (C) 2010 Google Inc. All rights reserved. 3# 4# Redistribution and use in source and binary forms, with or without 5# modification, are permitted provided that the following conditions are 6# met: 7# 8# * Redistributions of source code must retain the above copyright 9# notice, this list of conditions and the following disclaimer. 10# * Redistributions in binary form must reproduce the above 11# copyright notice, this list of conditions and the following disclaimer 12# in the documentation and/or other materials provided with the 13# distribution. 14 15# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 16# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 17# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 18# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 19# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 20# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 21# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 22# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 23# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 25# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 27import sys 28 29import chromium_linux 30import chromium_mac 31import chromium_win 32 33from webkitpy.layout_tests.port import test_files 34 35 36def get(platform=None, port_name='chromium-gpu', **kwargs): 37 """Some tests have slightly different results when run while using 38 hardware acceleration. In those cases, we prepend an additional directory 39 to the baseline paths.""" 40 platform = platform or sys.platform 41 if port_name == 'chromium-gpu': 42 if platform in ('cygwin', 'win32'): 43 port_name = 'chromium-gpu-win' 44 elif platform == 'linux2': 45 port_name = 'chromium-gpu-linux' 46 elif platform == 'darwin': 47 port_name = 'chromium-gpu-mac' 48 else: 49 raise NotImplementedError('unsupported platform: %s' % platform) 50 51 if port_name.startswith('chromium-gpu-linux'): 52 return ChromiumGpuLinuxPort(port_name=port_name, **kwargs) 53 if port_name.startswith('chromium-gpu-mac'): 54 return ChromiumGpuMacPort(port_name=port_name, **kwargs) 55 if port_name.startswith('chromium-gpu-win'): 56 return ChromiumGpuWinPort(port_name=port_name, **kwargs) 57 raise NotImplementedError('unsupported port: %s' % port_name) 58 59 60# FIXME: These should really be a mixin class. 61 62def _set_gpu_options(port): 63 port._graphics_type = 'gpu' 64 if port.get_option('accelerated_compositing') is None: 65 port._options.accelerated_compositing = True 66 if port.get_option('accelerated_2d_canvas') is None: 67 port._options.accelerated_2d_canvas = True 68 69 # FIXME: Remove this after http://codereview.chromium.org/5133001/ is enabled 70 # on the bots. 71 if port.get_option('builder_name') is not None and not ' - GPU' in port._options.builder_name: 72 port._options.builder_name += ' - GPU' 73 74 75def _tests(port, paths): 76 if not paths: 77 paths = ['compositing', 'platform/chromium/compositing', 'media'] 78 if not port.name().startswith('chromium-gpu-mac'): 79 # Canvas is not yet accelerated on the Mac, so there's no point 80 # in running the tests there. 81 paths += ['fast/canvas', 'canvas/philip'] 82 # invalidate_rect.html tests a bug in the compositor. 83 # See https://bugs.webkit.org/show_bug.cgi?id=53117 84 paths += ['plugins/invalidate_rect.html'] 85 return test_files.find(port, paths) 86 87 88class ChromiumGpuLinuxPort(chromium_linux.ChromiumLinuxPort): 89 def __init__(self, port_name='chromium-gpu-linux', **kwargs): 90 chromium_linux.ChromiumLinuxPort.__init__(self, port_name=port_name, **kwargs) 91 _set_gpu_options(self) 92 93 def baseline_path(self): 94 # GPU baselines aren't yet versioned. 95 return self._webkit_baseline_path('chromium-gpu-linux') 96 97 def baseline_search_path(self): 98 # Mimic the Linux -> Win expectations fallback in the ordinary Chromium port. 99 return (map(self._webkit_baseline_path, ['chromium-gpu-linux', 'chromium-gpu-win', 'chromium-gpu']) + 100 chromium_linux.ChromiumLinuxPort.baseline_search_path(self)) 101 102 def default_child_processes(self): 103 return 1 104 105 def tests(self, paths): 106 return _tests(self, paths) 107 108 109class ChromiumGpuMacPort(chromium_mac.ChromiumMacPort): 110 def __init__(self, port_name='chromium-gpu-mac', **kwargs): 111 chromium_mac.ChromiumMacPort.__init__(self, port_name=port_name, **kwargs) 112 _set_gpu_options(self) 113 114 def baseline_path(self): 115 # GPU baselines aren't yet versioned. 116 return self._webkit_baseline_path('chromium-gpu-mac') 117 118 def baseline_search_path(self): 119 return (map(self._webkit_baseline_path, ['chromium-gpu-mac', 'chromium-gpu']) + 120 chromium_mac.ChromiumMacPort.baseline_search_path(self)) 121 122 def default_child_processes(self): 123 return 1 124 125 def tests(self, paths): 126 return _tests(self, paths) 127 128 129class ChromiumGpuWinPort(chromium_win.ChromiumWinPort): 130 def __init__(self, port_name='chromium-gpu-win', **kwargs): 131 chromium_win.ChromiumWinPort.__init__(self, port_name=port_name, **kwargs) 132 _set_gpu_options(self) 133 134 def baseline_path(self): 135 # GPU baselines aren't yet versioned. 136 return self._webkit_baseline_path('chromium-gpu-win') 137 138 def baseline_search_path(self): 139 return (map(self._webkit_baseline_path, ['chromium-gpu-win', 'chromium-gpu']) + 140 chromium_win.ChromiumWinPort.baseline_search_path(self)) 141 142 def default_child_processes(self): 143 return 1 144 145 def tests(self, paths): 146 return _tests(self, paths) 147