Commit 3b53b545 authored by Brian Sheedy's avatar Brian Sheedy Committed by Commit Bot

Refactor GPU tags

Refactors several sets of GPU expectation tags for clarity:
1. ANGLE backend tags now have an angle- prefix
2. Tags that only make sense in the context of Skia Renderer have been
   consolidated instead of having separate use/no-use tags for each
   version.

Bug: 1011107, 1111876
Change-Id: I55d68444b4aa88116666d5464c470f7433dbc6ee
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2462222
Commit-Queue: Brian Sheedy <bsheedy@chromium.org>
Reviewed-by: default avatarJamie Madill <jmadill@chromium.org>
Reviewed-by: default avatarYuly Novikov <ynovikov@chromium.org>
Cr-Commit-Position: refs/heads/master@{#816321}
parent e7f45947
......@@ -98,25 +98,25 @@ def GetGpuDriverVersion(gpu_info):
def GetANGLERenderer(gpu_info):
retval = 'no_angle'
retval = 'angle-no-backend'
if gpu_info and gpu_info.aux_attributes:
gl_renderer = gpu_info.aux_attributes.get('gl_renderer')
if gl_renderer and 'ANGLE' in gl_renderer:
if 'Direct3D11' in gl_renderer:
retval = 'd3d11'
retval = 'angle-d3d11'
elif 'Direct3D9' in gl_renderer:
retval = 'd3d9'
retval = 'angle-d3d9'
elif 'OpenGL ES' in gl_renderer:
retval = 'opengles'
retval = 'angle-opengles'
elif 'OpenGL' in gl_renderer:
retval = 'opengl'
retval = 'angle-opengl'
elif 'Metal' in gl_renderer:
retval = 'metal'
retval = 'angle-metal'
# SwiftShader first because it also contains Vulkan
elif 'SwiftShader' in gl_renderer:
retval = 'swiftshader'
retval = 'angle-swiftshader'
elif 'Vulkan' in gl_renderer:
retval = 'vulkan'
retval = 'angle-vulkan'
return retval
......@@ -138,42 +138,40 @@ def GetCommandDecoder(gpu_info):
return 'no_passthrough'
# Used to check GPU feature status to see if SkiaRenderer is enabled.
def GetSkiaRenderer(gpu_feature_status):
if gpu_feature_status and 'skia_renderer' in gpu_feature_status:
if gpu_feature_status['skia_renderer'] == 'enabled_on':
return 'skia-renderer'
return 'no-skia-renderer'
def GetSkiaRenderer(gpu_feature_status, extra_browser_args):
retval = 'no-skia-renderer'
skia_renderer_enabled = (
gpu_feature_status
and gpu_feature_status.get('skia_renderer') == 'enabled_on')
if skia_renderer_enabled:
if HasDawnSkiaRenderer(extra_browser_args):
retval = 'dawn-skia-renderer'
elif HasGlSkiaRenderer(extra_browser_args):
retval = 'gl-skia-renderer'
elif HasVulkanSkiaRenderer(gpu_feature_status):
retval = 'vulkan-skia-renderer'
return retval
# Used to check GPU feature status to see if Vulkan is enabled.
def GetVulkan(gpu_feature_status):
if gpu_feature_status and 'vulkan' in gpu_feature_status:
if gpu_feature_status['vulkan'] == 'enabled_on':
return 'use-vulkan'
return 'no-use-vulkan'
# TODO(sgilhuly): Use GPU feature status for Dawn instead of command line.
def HasDawnSkiaRenderer(extra_browser_args):
if extra_browser_args:
for arg in extra_browser_args:
if arg.startswith('--enable-features') and 'SkiaDawn' in arg:
return True
return False
# Used to parse additional options sent to the browser instance via
# '--extra-browser-args', looking for '--use-gl='.
def GetGL(extra_browser_args):
def HasGlSkiaRenderer(extra_browser_args):
if extra_browser_args:
for o in extra_browser_args:
if "--use-gl=" in o:
return 'use-gl'
return 'no-use-gl'
for arg in extra_browser_args:
if '--use-gl=' in arg:
return True
return False
# Used to parse additional options sent to the browser instance via
# '--extra-browser-args', looking for '--enable-features=SkiaDawn' which
# may be merged with additional feature flags.
# TODO(sgilhuly): Use GPU feature status for Dawn instead of command line.
def GetSkiaDawn(extra_browser_args):
if extra_browser_args:
for o in extra_browser_args:
if o.startswith('--enable-features') and "SkiaDawn" in o:
return 'use-skia-dawn'
return 'no-use-skia-dawn'
def HasVulkanSkiaRenderer(gpu_feature_status):
return gpu_feature_status and gpu_feature_status.get('vulkan') == 'enabled_on'
# used by unittests to create a mock arguments object
......
......@@ -509,19 +509,10 @@ class GpuIntegrationTest(
tags.extend([re.sub('[ _]', '-', tag) for tag in gpu_tags])
# Add tags based on GPU feature status.
skia_renderer = gpu_helper.GetSkiaRenderer(gpu_info.feature_status)
startup_args = getattr(browser, 'startup_args', None)
skia_renderer = gpu_helper.GetSkiaRenderer(gpu_info.feature_status,
startup_args)
tags.append(skia_renderer)
use_vulkan = gpu_helper.GetVulkan(gpu_info.feature_status)
tags.append(use_vulkan)
# If additional options have been set via '--extra-browser-args' check for
# those which map to expectation tags. The '_browser_backend' attribute may
# not exist in unit tests.
if hasattr(browser, 'startup_args'):
use_gl = gpu_helper.GetGL(browser.startup_args)
tags.append(use_gl)
use_skia_dawn = gpu_helper.GetSkiaDawn(browser.startup_args)
tags.append(use_skia_dawn)
return tags
@classmethod
......
......@@ -158,7 +158,7 @@ class GpuIntegrationTestUnittest(unittest.TestCase):
tag_set = _GenerateNvidiaExampleTagsForTestClassAndArgs(test_class, args)
self.assertTrue(
set([
'win', 'win10', 'd3d9', 'release', 'nvidia', 'nvidia-0x1cb3',
'win', 'win10', 'angle-d3d9', 'release', 'nvidia', 'nvidia-0x1cb3',
'no-passthrough'
]).issubset(tag_set))
return tag_set
......@@ -201,9 +201,8 @@ class GpuIntegrationTestUnittest(unittest.TestCase):
self.assertEqual(
_GetTagsToTest(browser),
set([
'win', 'win10', 'release', 'nvidia', 'nvidia-0x1cb3', 'd3d9',
'no-passthrough', 'no-swiftshader-gl', 'no-use-vulkan',
'no-skia-renderer'
'win', 'win10', 'release', 'nvidia', 'nvidia-0x1cb3', 'angle-d3d9',
'no-passthrough', 'no-swiftshader-gl', 'no-skia-renderer'
]))
def testGenerateVendorTagUsingVendorString(self):
......@@ -218,8 +217,8 @@ class GpuIntegrationTestUnittest(unittest.TestCase):
_GetTagsToTest(browser),
set([
'mac', 'mojave', 'release', 'imagination',
'imagination-PowerVR-SGX-554', 'opengles', 'passthrough',
'no-swiftshader-gl', 'no-use-vulkan', 'no-skia-renderer'
'imagination-PowerVR-SGX-554', 'angle-opengles', 'passthrough',
'no-swiftshader-gl', 'no-skia-renderer'
]))
def testGenerateVendorTagUsingDeviceString(self):
......@@ -232,8 +231,8 @@ class GpuIntegrationTestUnittest(unittest.TestCase):
_GetTagsToTest(browser),
set([
'mac', 'mojave', 'release', 'imagination',
'imagination-Triangle-Monster-3000', 'no-angle', 'no-passthrough',
'no-swiftshader-gl', 'no-use-vulkan', 'no-skia-renderer'
'imagination-Triangle-Monster-3000', 'angle-no-backend',
'no-passthrough', 'no-swiftshader-gl', 'no-skia-renderer'
]))
def testSimpleIntegrationTest(self):
......
# tags: [ android ]
# tags: [ android-nexus-5x android-nexus-5 ]
# tags: [ skia-renderer no-skia-renderer ]
# results: [ Failure RetryOnFailure Skip ]
crbug.com/1006045 [ android android-nexus-5x skia-renderer ] Maps_maps [ Failure ]
crbug.com/1009137 [ android android-nexus-5 no-skia-renderer ] Maps_maps [ RetryOnFailure ]
crbug.com/1009137 [ android android-nexus-5 ] Maps_maps [ RetryOnFailure ]
......@@ -226,7 +226,7 @@ class WebGLConformanceIntegrationTest(gpu_integration_test.GpuIntegrationTest):
# Verify that Chrome's GL backend matches if a specific one was requested
if self._gl_backend:
if (self._gl_backend == 'angle'
and gpu_helper.GetANGLERenderer(gpu_info) == 'no_angle'):
and gpu_helper.GetANGLERenderer(gpu_info) == 'angle-no-backend'):
self.fail('requested GL backend (' + self._gl_backend + ')' +
' had no effect on the browser: ' +
_GetGPUInfoErrorString(gpu_info))
......@@ -238,15 +238,15 @@ class WebGLConformanceIntegrationTest(gpu_integration_test.GpuIntegrationTest):
# GPU exepections use slightly different names for the angle backends
# than the Chrome flags
known_backend_flag_map = {
'd3d11': ['d3d11'],
'd3d9': ['d3d9'],
'opengl': ['gl'],
'opengles': ['gles'],
'metal': ['metal'],
'vulkan': ['vulkan'],
'angle-d3d11': ['d3d11'],
'angle-d3d9': ['d3d9'],
'angle-opengl': ['gl'],
'angle-opengles': ['gles'],
'angle-metal': ['metal'],
'angle-vulkan': ['vulkan'],
# Support setting VK_ICD_FILENAMES for swiftshader when requesting
# the 'vulkan' backend.
'swiftshader': ['swiftshader', 'vulkan'],
'angle-swiftshader': ['swiftshader', 'vulkan'],
}
current_angle_backend = gpu_helper.GetANGLERenderer(gpu_info)
if (current_angle_backend not in known_backend_flag_map or
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment