blob: 4327074ec472d9b527911f1960234a485915d998 [file] [log] [blame]
#!/usr/bin/env python
# Copyright 2016 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Script to generate chromium.gpu.json and chromium.gpu.fyi.json in
the src/testing/buildbot directory. Maintaining these files by hand is
too unwieldy.
"""
import copy
import json
import os
import string
import sys
THIS_DIR = os.path.dirname(os.path.abspath(__file__))
SRC_DIR = os.path.dirname(os.path.dirname(os.path.dirname(THIS_DIR)))
# "Types" of waterfalls and bots. A bot's type is the union of its own
# type and the type of its waterfall. Predicates can apply to these
# sets in order to run tests only on a certain subset of the bots.
class Types(object):
GPU = 'gpu'
GPU_FYI = 'gpu_fyi'
OPTIONAL = 'optional'
V8_FYI = 'v8_fyi'
# The predicate functions receive a list of types as input and
# determine whether the test should run on the given bot.
class Predicates(object):
@staticmethod
def DEFAULT(x):
# By default, tests run on the chromium.gpu and chromium.gpu.fyi
# waterfalls, but not on the optional tryservers or on the
# client.v8.fyi waterfall.
return Types.OPTIONAL not in x and Types.V8_FYI not in x
@staticmethod
def FYI_ONLY(x):
# This predicate is more complex than desired because the optional
# tryservers are considered to be on the chromium.gpu.fyi
# waterfall.
return Types.GPU_FYI in x and Types.OPTIONAL not in x
@staticmethod
def FYI_AND_OPTIONAL(x):
return Predicates.FYI_ONLY(x) or Types.OPTIONAL in x
@staticmethod
def FYI_OPTIONAL_AND_V8(x):
return Predicates.FYI_AND_OPTIONAL(x) or Types.V8_FYI in x
@staticmethod
def DEFAULT_PLUS_V8(x):
return Predicates.DEFAULT(x) or Types.V8_FYI in x
WATERFALL = {
'name': 'chromium.gpu',
'type': Types.GPU,
'builders': {
'GPU Win Builder' : {},
'GPU Win Builder (dbg)' : {},
'GPU Mac Builder' : {},
'GPU Mac Builder (dbg)' : {},
'GPU Linux Builder' : {},
'GPU Linux Builder (dbg)' : {},
},
'testers': {
'Win7 Release (NVIDIA)': {
'swarming_dimensions': [
{
'gpu': '10de:104a',
'os': 'Windows-2008ServerR2-SP1'
},
],
'build_config': 'Release',
'swarming': True,
'os_type': 'win',
},
'Win7 Debug (NVIDIA)': {
'swarming_dimensions': [
{
'gpu': '10de:104a',
'os': 'Windows-2008ServerR2-SP1'
},
],
'build_config': 'Debug',
'swarming': True,
'os_type': 'win',
},
'Mac Release (Intel)': {
'swarming_dimensions': [
{
'gpu': '8086:0a2e',
'os': 'Mac-10.12'
},
],
'build_config': 'Release',
'swarming': True,
'os_type': 'mac',
},
'Mac Debug (Intel)': {
'swarming_dimensions': [
{
'gpu': '8086:0a2e',
'os': 'Mac-10.12'
},
],
'build_config': 'Debug',
'swarming': True,
'os_type': 'mac',
},
'Mac Retina Release (AMD)': {
'swarming_dimensions': [
{
'gpu': '1002:6821',
'hidpi': '1',
'os': 'Mac'
},
],
'build_config': 'Release',
'swarming': True,
'os_type': 'mac',
},
'Mac Retina Debug (AMD)': {
'swarming_dimensions': [
{
'gpu': '1002:6821',
'hidpi': '1',
'os': 'Mac'
},
],
'build_config': 'Debug',
'swarming': True,
'os_type': 'mac',
},
'Linux Release (NVIDIA)': {
'swarming_dimensions': [
{
'gpu': '10de:104a',
'os': 'Ubuntu'
},
],
'build_config': 'Release',
'swarming': True,
'os_type': 'linux',
},
'Linux Debug (NVIDIA)': {
'swarming_dimensions': [
{
'gpu': '10de:104a',
'os': 'Ubuntu'
},
],
'build_config': 'Debug',
'swarming': True,
'os_type': 'linux',
},
}
}
FYI_WATERFALL = {
'name': 'chromium.gpu.fyi',
'type': Types.GPU_FYI,
'builders': {
'GPU Win Builder' : {},
'GPU Win Builder (dbg)' : {},
'GPU Win x64 Builder' : {},
'GPU Win x64 Builder (dbg)' : {},
'GPU Mac Builder' : {},
'GPU Mac Builder (dbg)' : {},
'GPU Linux Builder' : {},
'GPU Linux Builder (dbg)' : {},
'Linux ChromiumOS Builder' : {
'additional_compile_targets' : [ "All" ]
},
'Linux ChromiumOS Ozone Builder' : {
'additional_compile_targets' : [ "All" ]
},
},
'testers': {
'Win7 Release (NVIDIA)': {
'swarming_dimensions': [
{
'gpu': '10de:104a',
'os': 'Windows-2008ServerR2-SP1'
},
],
'build_config': 'Release',
'swarming': True,
'os_type': 'win',
},
'Win7 Debug (NVIDIA)': {
'swarming_dimensions': [
{
'gpu': '10de:104a',
'os': 'Windows-2008ServerR2-SP1'
},
],
'build_config': 'Debug',
'swarming': True,
'os_type': 'win',
},
'Win10 Release (NVIDIA)': {
'swarming_dimensions': [
{
'gpu': '10de:104a',
'os': 'Windows-10'
},
],
'build_config': 'Release',
'swarming': True,
'os_type': 'win',
},
'Win10 Debug (NVIDIA)': {
'swarming_dimensions': [
{
'gpu': '10de:104a',
'os': 'Windows-10'
},
],
'build_config': 'Debug',
'swarming': True,
'os_type': 'win',
},
'Win7 Release (AMD)': {
'swarming_dimensions': [
{
'gpu': '1002:6613',
'os': 'Windows-2008ServerR2-SP1'
},
],
'build_config': 'Release',
'swarming': True,
'os_type': 'win',
},
'Win7 Debug (AMD)': {
'swarming_dimensions': [
{
'gpu': '1002:6613',
'os': 'Windows-2008ServerR2-SP1'
},
],
'build_config': 'Debug',
'swarming': True,
'os_type': 'win',
},
'Win7 Release (Intel)': {
'swarming_dimensions': [
{
'gpu': '8086:041a',
'os': 'Windows-2008ServerR2-SP1'
},
],
'build_config': 'Release',
# This bot is a one-off and doesn't have similar slaves in the
# swarming pool.
'swarming': False,
'os_type': 'win',
},
'Win7 Release (NVIDIA GeForce 730)': {
'swarming_dimensions': [
{
'gpu': '10de:0f02',
'os': 'Windows-2008ServerR2-SP1'
},
],
'build_config': 'Release',
# This bot is a one-off and doesn't have similar slaves in the
# swarming pool.
'swarming': False,
'os_type': 'win',
},
'Win10 Release (Intel HD 530)': {
'swarming_dimensions': [
{
'gpu': '8086:1912',
'os': 'Windows-10',
},
],
'build_config': 'Release',
# This bot is a one-off and doesn't have similar slaves in the
# swarming pool.
'swarming': False,
'os_type': 'win',
},
'Win10 Debug (Intel HD 530)': {
'swarming_dimensions': [
{
'gpu': '8086:1912',
'os': 'Windows-10',
},
],
'build_config': 'Debug',
# This bot is a one-off and doesn't have similar slaves in the
# swarming pool.
'swarming': False,
'os_type': 'win',
},
'Win10 Release (NVIDIA Quadro M2000)': {
'swarming_dimensions': [
{
'gpu': '10de:1430',
'os': 'Windows-10'
},
],
'build_config': 'Release',
# This bot is a one-off and doesn't have similar slaves in the
# swarming pool.
'swarming': False,
'os_type': 'win',
},
'Win7 Release (AMD R5 230)': {
'swarming_dimensions': [
{
'gpu': '1002:6779',
'os': 'Windows-2008ServerR2-SP1'
},
],
'build_config': 'Release',
# This bot is a one-off and doesn't have similar slaves in the
# swarming pool.
'swarming': False,
'os_type': 'win',
},
'Win7 x64 Release (NVIDIA)': {
'swarming_dimensions': [
{
'gpu': '10de:104a',
'os': 'Windows-2008ServerR2-SP1'
},
],
'build_config': 'Release_x64',
'swarming': True,
'os_type': 'win',
},
'Win7 x64 Debug (NVIDIA)': {
'swarming_dimensions': [
{
'gpu': '10de:104a',
'os': 'Windows-2008ServerR2-SP1'
},
],
'build_config': 'Debug_x64',
'swarming': True,
'os_type': 'win',
},
'Mac Release (Intel)': {
'swarming_dimensions': [
{
'gpu': '8086:0a2e',
'os': 'Mac-10.12'
},
],
'build_config': 'Release',
'swarming': True,
'os_type': 'mac',
},
'Mac Debug (Intel)': {
'swarming_dimensions': [
{
'gpu': '8086:0a2e',
'os': 'Mac-10.12'
},
],
'build_config': 'Debug',
'swarming': True,
'os_type': 'mac',
},
'Mac Pro Release (AMD)': {
'swarming_dimensions': [
{
'gpu': '1002:679e',
'os': 'Mac-10.10'
},
],
'build_config': 'Release',
# This bot is a one-off and doesn't have similar slaves in the
# swarming pool.
'swarming': False,
'os_type': 'mac',
},
'Mac Pro Debug (AMD)': {
'swarming_dimensions': [
{
'gpu': '1002:679e',
'os': 'Mac-10.10'
},
],
'build_config': 'Debug',
# This bot is a one-off and doesn't have similar slaves in the
# swarming pool.
'swarming': False,
'os_type': 'mac',
},
'Mac Retina Release (NVIDIA)': {
'swarming_dimensions': [
{
'gpu': '10de:0fe9',
'hidpi': '1',
'os': 'Mac'
},
],
'build_config': 'Release',
'swarming': True,
'os_type': 'mac',
},
'Mac Retina Debug (NVIDIA)': {
'swarming_dimensions': [
{
'gpu': '10de:0fe9',
'hidpi': '1',
'os': 'Mac'
},
],
'build_config': 'Debug',
'swarming': True,
'os_type': 'mac',
},
'Mac Retina Release (AMD)': {
'swarming_dimensions': [
{
'gpu': '1002:6821',
'hidpi': '1',
'os': 'Mac'
},
],
'build_config': 'Release',
'swarming': True,
'os_type': 'mac',
},
'Mac Retina Debug (AMD)': {
'swarming_dimensions': [
{
'gpu': '1002:6821',
'hidpi': '1',
'os': 'Mac'
},
],
'build_config': 'Debug',
'swarming': True,
'os_type': 'mac',
},
'Mac Experimental Retina Release (AMD)': {
'swarming_dimensions': [
{
'gpu': '1002:6821',
'hidpi': '1',
'os': 'Mac'
},
],
'build_config': 'Release',
# This bot is a one-off for testing purposes.
'swarming': False,
'os_type': 'mac',
},
'Mac Experimental Retina Release (NVIDIA)': {
'swarming_dimensions': [
{
'gpu': '10de:0fe9',
'hidpi': '1',
'os': 'Mac'
},
],
'build_config': 'Release',
# This bot is a one-off for testing purposes.
'swarming': False,
'os_type': 'mac',
},
'Mac GPU ASAN Release': {
# This bot spawns jobs on multiple GPU types.
'swarming_dimensions': [
{
'gpu': '8086:0a2e',
'os': 'Mac-10.12'
},
{
'gpu': '1002:6821',
'hidpi': '1',
'os': 'Mac'
},
],
'build_config': 'Release',
'swarming': True,
'os_type': 'mac',
'is_asan': True,
},
'Linux Release (NVIDIA)': {
'swarming_dimensions': [
{
'gpu': '10de:104a',
'os': 'Ubuntu'
},
],
'build_config': 'Release',
'swarming': True,
'os_type': 'linux',
},
'Linux Release (Intel Graphics Stack)': {
'swarming_dimensions': [
{
'gpu': '8086:041a',
'os': 'Ubuntu'
},
],
'build_config': 'Release',
# This bot is a one-off and doesn't have similar slaves in the
# swarming pool.
'swarming': False,
'os_type': 'linux',
},
'Linux Release (AMD R5 230)': {
'swarming_dimensions': [
{
'gpu': '1002:6779',
'os': 'Ubuntu'
},
],
'build_config': 'Release',
# This bot is a one-off and doesn't have similar slaves in the
# swarming pool.
'swarming': False,
'os_type': 'linux',
},
'Linux Release (NVIDIA GeForce 730)': {
'swarming_dimensions': [
{
'gpu': '10de:0f02',
'os': 'Ubuntu'
},
],
'build_config': 'Release',
# This bot is a one-off and doesn't have similar slaves in the
# swarming pool.
'swarming': False,
'os_type': 'linux',
},
'Linux Debug (NVIDIA)': {
'swarming_dimensions': [
{
'gpu': '10de:104a',
'os': 'Ubuntu'
},
],
'build_config': 'Debug',
'swarming': True,
'os_type': 'linux',
},
'Linux Release (Intel HD 530)': {
'swarming_dimensions': [
{
'gpu': '8086:1912',
'os': 'Ubuntu'
},
],
'build_config': 'Release',
# This bot is a one-off and doesn't have similar slaves in the
# swarming pool.
'swarming': False,
'os_type': 'linux',
},
'Linux Debug (Intel HD 530)': {
'swarming_dimensions': [
{
'gpu': '8086:1912',
'os': 'Ubuntu'
},
],
'build_config': 'Debug',
# This bot is a one-off and doesn't have similar slaves in the
# swarming pool.
'swarming': False,
'os_type': 'linux',
},
'Linux Release (AMD R7 240)': {
'swarming_dimensions': [
{
'gpu': '1002:6613',
'os': 'Ubuntu'
},
],
'build_config': 'Release',
# This bot is a one-off and doesn't have similar slaves in the
# swarming pool.
'swarming': False,
'os_type': 'linux',
},
'Android Release (Nexus 5)': {
'swarming_dimensions': [
{
# There are no PCI IDs on Android.
# This is a hack to get the script working.
'gpu': '0000:0000',
'os': 'Android'
},
],
'build_config': 'android-chromium',
# This bot is a one-off and doesn't have similar slaves in the
# swarming pool.
'swarming': False,
'os_type': 'android',
},
'Android Release (Nexus 5X)': {
'swarming_dimensions': [
{
'device_type': 'bullhead',
'device_os': 'M',
'os': 'Android'
},
],
'build_config': 'android-chromium',
'swarming': True,
'os_type': 'android',
},
'Android Release (Nexus 6)': {
'swarming_dimensions': [
{
# There are no PCI IDs on Android.
# This is a hack to get the script working.
'gpu': '0000:0000',
'os': 'Android'
},
],
'build_config': 'android-chromium',
# This bot is a one-off and doesn't have similar slaves in the
# swarming pool.
'swarming': False,
'os_type': 'android',
},
'Android Release (Nexus 6P)': {
'swarming_dimensions': [
{
# There are no PCI IDs on Android.
# This is a hack to get the script working.
'gpu': '0000:0000',
'os': 'Android'
},
],
'build_config': 'android-chromium',
# This bot is a one-off and doesn't have similar slaves in the
# swarming pool.
'swarming': False,
'os_type': 'android',
},
'Android Release (Nexus 9)': {
'swarming_dimensions': [
{
# There are no PCI IDs on Android.
# This is a hack to get the script working.
'gpu': '0000:0000',
'os': 'Android'
},
],
'build_config': 'android-chromium',
# This bot is a one-off and doesn't have similar slaves in the
# swarming pool.
'swarming': False,
'os_type': 'android',
},
'Android Release (Pixel C)': {
'swarming_dimensions': [
{
# There are no PCI IDs on Android.
# This is a hack to get the script working.
'gpu': '0000:0000',
'os': 'Android'
},
],
'build_config': 'android-chromium',
# This bot is a one-off and doesn't have similar slaves in the
# swarming pool.
'swarming': False,
'os_type': 'android',
},
# The following "optional" testers don't actually exist on the
# waterfall. They are present here merely to specify additional
# tests which aren't on the main tryservers. Unfortunately we need
# a completely different (redundant) bot specification to handle
# this.
'Optional Win7 Release (NVIDIA)': {
'swarming_dimensions': [
{
'gpu': '10de:104a',
'os': 'Windows-2008ServerR2-SP1'
},
],
'build_config': 'Release',
'swarming': True,
'os_type': 'win',
'type': Types.OPTIONAL,
},
'Optional Win7 Release (AMD)': {
'swarming_dimensions': [
{
'gpu': '1002:6613',
'os': 'Windows-2008ServerR2-SP1'
},
],
'build_config': 'Release',
'swarming': True,
'os_type': 'win',
'type': Types.OPTIONAL,
},
'Optional Mac Release (Intel)': {
'swarming_dimensions': [
{
'gpu': '8086:0a2e',
'os': 'Mac-10.12'
},
],
'build_config': 'Release',
'swarming': True,
'os_type': 'mac',
'type': Types.OPTIONAL,
},
'Optional Mac Retina Release (NVIDIA)': {
'swarming_dimensions': [
{
'gpu': '10de:0fe9',
'hidpi': '1',
'os': 'Mac'
},
],
'build_config': 'Release',
'swarming': True,
'os_type': 'mac',
'type': Types.OPTIONAL,
},
'Optional Mac Retina Release (AMD)': {
'swarming_dimensions': [
{
'gpu': '1002:6821',
'hidpi': '1',
'os': 'Mac'
},
],
'build_config': 'Release',
'swarming': True,
'os_type': 'mac',
'type': Types.OPTIONAL,
},
# BEGIN obsolete Mac bots -- remove after waterfall restarted successfully.
'Optional Mac 10.10 Release (Intel)': {
'swarming_dimensions': [
{
'gpu': '8086:0a2e',
'os': 'Mac-10.12'
},
],
'build_config': 'Release',
'swarming': True,
'os_type': 'mac',
'type': Types.OPTIONAL,
},
'Optional Mac Retina Release': {
'swarming_dimensions': [
{
'gpu': '10de:0fe9',
'hidpi': '1',
'os': 'Mac'
},
],
'build_config': 'Release',
'swarming': True,
'os_type': 'mac',
'type': Types.OPTIONAL,
},
'Optional Mac 10.10 Retina Release (AMD)': {
'swarming_dimensions': [
{
'gpu': '1002:6821',
'hidpi': '1',
'os': 'Mac'
},
],
'build_config': 'Release',
'swarming': True,
'os_type': 'mac',
'type': Types.OPTIONAL,
},
# END obsolete Mac bots -- remove after waterfall restarted successfully.
'Optional Linux Release (NVIDIA)': {
'swarming_dimensions': [
{
'gpu': '10de:104a',
'os': 'Ubuntu'
},
],
'build_config': 'Release',
'swarming': True,
'os_type': 'linux',
'type': Types.OPTIONAL,
},
}
}
V8_FYI_WATERFALL = {
'name': 'client.v8.fyi',
'type': Types.V8_FYI,
'prologue': {
"V8 Android GN (dbg)": {
"additional_compile_targets": [
"chrome_public_apk"
],
"gtest_tests": []
},
"V8 Linux GN": {
"additional_compile_targets": [
"accessibility_unittests",
"aura_unittests",
"browser_tests",
"cacheinvalidation_unittests",
"capture_unittests",
"cast_unittests",
"cc_unittests",
"chromedriver_unittests",
"components_browsertests",
"components_unittests",
"content_browsertests",
"content_unittests",
"crypto_unittests",
"dbus_unittests",
"device_unittests",
"display_unittests",
"events_unittests",
"extensions_browsertests",
"extensions_unittests",
"gcm_unit_tests",
"gfx_unittests",
"gn_unittests",
"google_apis_unittests",
"gpu_ipc_service_unittests",
"gpu_unittests",
"interactive_ui_tests",
"ipc_tests",
"jingle_unittests",
"media_unittests",
"media_blink_unittests",
"mojo_common_unittests",
"mojo_public_bindings_unittests",
"mojo_public_system_unittests",
"mojo_system_unittests",
"nacl_loader_unittests",
"net_unittests",
"pdf_unittests",
"ppapi_unittests",
"printing_unittests",
"remoting_unittests",
"sandbox_linux_unittests",
"skia_unittests",
"sql_unittests",
"storage_unittests",
"sync_integration_tests",
"ui_base_unittests",
"ui_touch_selection_unittests",
"unit_tests",
"url_unittests",
"views_unittests",
"wm_unittests"
]
}
},
'testers': {
'Win Release (NVIDIA)': {
'swarming_dimensions': [
{
'gpu': '10de:104a',
'os': 'Windows-2008ServerR2-SP1'
},
],
'build_config': 'Release',
'swarming': True,
'os_type': 'win',
},
'Mac Release (Intel)': {
'swarming_dimensions': [
{
'gpu': '8086:0a2e',
'os': 'Mac-10.12'
},
],
'build_config': 'Release',
'swarming': True,
'os_type': 'mac',
},
'Linux Release (NVIDIA)': {
'swarming_dimensions': [
{
'gpu': '10de:104a',
'os': 'Ubuntu'
},
],
'build_config': 'Release',
'swarming': True,
'os_type': 'linux',
},
}
}
COMMON_GTESTS = {
'angle_deqp_egl_tests': {
'tester_configs': [
{
# Run this on the FYI waterfall and optional tryservers.
'predicate': Predicates.FYI_AND_OPTIONAL,
# Run only on the Win7 Release NVIDIA 32- and 64-bit bots
# (and trybots) for the time being, at least until more capacity is
# added.
# TODO(jmadill): Run on the Linux Release NVIDIA bots.
'build_configs': ['Release', 'Release_x64'],
'swarming_dimension_sets': [
{
'gpu': '10de:104a',
'os': 'Windows-2008ServerR2-SP1'
}
],
},
],
'args': [
'--test-launcher-batch-limit=400'
]
},
'angle_deqp_gles2_d3d11_tests': {
'tester_configs': [
{
# Run this on the FYI waterfall and optional tryservers.
'predicate': Predicates.FYI_AND_OPTIONAL,
# Run only on the Win7 NVIDIA/AMD R7 240 32- and 64-bit bots (and
# trybots) for the time being, at least until more capacity is
# added.
'build_configs': ['Release', 'Release_x64'],
'swarming_dimension_sets': [
# NVIDIA Win 7
{
'gpu': '10de:104a',
'os': 'Windows-2008ServerR2-SP1'
},
# AMD Win 7
{
'gpu': '1002:6613',
'os': 'Windows-2008ServerR2-SP1'
},
],
},
],
'desktop_swarming': {
'shards': 4,
},
'test': 'angle_deqp_gles2_tests',
'args': [
'--test-launcher-batch-limit=400',
'--deqp-egl-display-type=angle-d3d11'
]
},
'angle_deqp_gles2_gl_tests': {
'tester_configs': [
{
# Run this on the FYI waterfall and optional tryservers.
'predicate': Predicates.FYI_AND_OPTIONAL,
# Run only on the Linux Release NVIDIA 32- and 64-bit bots (and
# trybots) for the time being, at least until more capacity is added.
'build_configs': ['Release', 'Release_x64'],
'swarming_dimension_sets': [
# NVIDIA Linux
{
'gpu': '10de:104a',
'os': 'Ubuntu'
},
],
},
],
'desktop_swarming': {
'shards': 4,
},
'test': 'angle_deqp_gles2_tests',
'args': [
'--test-launcher-batch-limit=400',
'--deqp-egl-display-type=angle-gl'
]
},
'angle_deqp_gles2_gles_tests': {
'tester_configs': [
{
# Run this on the FYI waterfall and optional tryservers.
'predicate': Predicates.FYI_AND_OPTIONAL,
# Run on Nexus 5X swarmed bots.
'build_configs': ['android-chromium'],
'swarming_dimension_sets': [
# Nexus 5X
{
'device_type': 'bullhead',
'device_os': 'M',
'os': 'Android'
}
],
},
],
'test': 'angle_deqp_gles2_tests',
# Only pass the display type to desktop. The Android runner doesn't support
# passing args to the executable but only one display type is supported on
# Android anyways.
'desktop_args': [
'--test-launcher-batch-limit=400',
'--deqp-egl-display-type=angle-gles'
],
'android_args': ['--enable-xml-result-parsing']
},
'angle_deqp_gles3_d3d11_tests': {
'tester_configs': [
{
# TODO(jmadill): Run this on ANGLE roll tryservers.
'predicate': Predicates.FYI_ONLY,
# Run only on the NVIDIA and AMD Win7 bots (and trybots) for the time
# being, at least until more capacity is added.
'build_configs': ['Release'],
'swarming_dimension_sets': [
# NVIDIA Win 7
{
'gpu': '10de:104a',
'os': 'Windows-2008ServerR2-SP1'
},
# AMD Win 7
{
'gpu': '1002:6613',
'os': 'Windows-2008ServerR2-SP1'
}
],
}
],
'swarming': {
'shards': 12,
},
'test': 'angle_deqp_gles3_tests',
'args': [
'--test-launcher-batch-limit=400',
'--deqp-egl-display-type=angle-d3d11'
]
},
'angle_deqp_gles3_gl_tests': {
'tester_configs': [
{
# TODO(jmadill): Run this on ANGLE roll tryservers.
'predicate': Predicates.FYI_ONLY,
# Run only on the Linux Release NVIDIA 32-bit bots (and trybots) for
# the time being, at least until more capacity is added.
'build_configs': ['Release'],
'swarming_dimension_sets': [
# NVIDIA Linux
{
'gpu': '10de:104a',
'os': 'Ubuntu'
}
],
}
],
'swarming': {
'shards': 12,
},
'test': 'angle_deqp_gles3_tests',
'args': [
'--test-launcher-batch-limit=400',
'--deqp-egl-display-type=angle-gl'
]
},
'angle_deqp_gles31_d3d11_tests': {
'tester_configs': [
{
'predicate': Predicates.FYI_ONLY,
# Run on the Win Release NVIDIA bots.
'build_configs': ['Release'],
'swarming_dimension_sets': [
{
'gpu': '10de:104a',
'os': 'Windows-2008ServerR2-SP1'
}
],
}
],
'swarming': {
# TODO(geofflang): Increase the number of shards as more tests start to
# pass and runtime increases.
'shards': 4,
},
'test': 'angle_deqp_gles31_tests',
'args': [
'--test-launcher-batch-limit=400',
'--deqp-egl-display-type=angle-d3d11'
]
},
'angle_deqp_gles31_gl_tests': {
'tester_configs': [
{
'predicate': Predicates.FYI_ONLY,
# Run on the Win Release NVIDIA bots.
'build_configs': ['Release'],
'swarming_dimension_sets': [
{
'gpu': '10de:104a',
'os': 'Windows-2008ServerR2-SP1'
},
{
'gpu': '10de:104a',
'os': 'Ubuntu'
}
],
}
],
'swarming': {
# TODO(geofflang): Increase the number of shards as more tests start to
# pass and runtime increases.
'shards': 4,
},
'test': 'angle_deqp_gles31_tests',
'args': [
'--test-launcher-batch-limit=400',
'--deqp-egl-display-type=angle-gl'
]
},
# Until we have more capacity, run angle_end2end_tests only on the
# FYI waterfall, the ANGLE trybots (which mirror the FYI waterfall),
# and the optional trybots (mainly used during ANGLE rolls).
'angle_end2end_tests': {
'tester_configs': [
{
'predicate': Predicates.FYI_AND_OPTIONAL,
},
],
'disabled_tester_configs': [
{
'names': [
# TODO(ynovikov) Investigate why the test breaks on older devices.
'Android Release (Nexus 5)',
'Android Release (Nexus 6)',
'Android Release (Nexus 9)',
# These tests are flaky on old AMD.
# TODO(jmadill): Enably flaky test retries only on this config.
'Win7 Release (AMD R5 230)',
],
},
],
'desktop_args': [
'--use-gpu-in-tests',
# ANGLE test retries deliberately disabled to prevent flakiness.
# http://crbug.com/669196
'--test-launcher-retry-limit=0'
]
},
# white_box tests should run where end2end tests run
'angle_white_box_tests': {
'tester_configs': [
{
'predicate': Predicates.FYI_AND_OPTIONAL,
# There are only Windows white box tests for now.
# Enable on more configs when there will be relevant tests.
'os_types': ['win'],
},
],
'desktop_args': [
# ANGLE test retries deliberately disabled to prevent flakiness.
# http://crbug.com/669196
'--test-launcher-retry-limit=0'
]
},
'angle_unittests': {
'desktop_args': [
'--use-gpu-in-tests',
# ANGLE test retries deliberately disabled to prevent flakiness.
# http://crbug.com/669196
'--test-launcher-retry-limit=0'
]
},
# Until the media-only tests are extracted from content_unittests,
# and audio_unittests and content_unittests can be run on the commit
# queue with --require-audio-hardware-for-testing, run them only on
# the FYI waterfall.
#
# Note that the transition to the Chromium recipe has forced the
# removal of the --require-audio-hardware-for-testing flag for the
# time being. See crbug.com/574942.
'audio_unittests': {
'tester_configs': [
{
'predicate': Predicates.FYI_ONLY,
}
],
# Don't run these tests on Android.
'disabled_tester_configs': [
{
'os_types': ['android'],
},
],
'args': ['--use-gpu-in-tests']
},
# TODO(kbr): content_unittests is killing the Linux GPU swarming
# bots. crbug.com/582094 . It's not useful now anyway until audio
# hardware is deployed on the swarming bots, so stop running it
# everywhere.
# 'content_unittests': {},
'gl_tests': {
'disabled_tester_configs': [
{
'names': [
# TODO(kbr): investigate inability to recognize this
# configuration in the various tests. crbug.com/624621
'Android Release (Pixel C)',
],
},
],
'desktop_args': ['--use-gpu-in-tests']
},
'gl_unittests': {
'desktop_args': ['--use-gpu-in-tests']
},
# The gles2_conform_tests are closed-source and deliberately only run
# on the FYI waterfall and the optional tryservers.
'gles2_conform_test': {
'tester_configs': [
{
# Run this on the FYI waterfall and optional tryservers.
'predicate': Predicates.FYI_AND_OPTIONAL,
}
],
# Don't run these tests on Android.
'disabled_tester_configs': [
{
'os_types': ['android'],
},
],
'args': ['--use-gpu-in-tests']
},
'gles2_conform_d3d9_test': {
'tester_configs': [
{
# Run this on the FYI waterfall and optional tryservers.
'predicate': Predicates.FYI_AND_OPTIONAL,
'os_types': ['win'],
}
],
'args': [
'--use-gpu-in-tests',
'--use-angle=d3d9',
],
'test': 'gles2_conform_test',
},
'gles2_conform_gl_test': {
'tester_configs': [
{
# Run this on the FYI waterfall and optional tryservers.
'predicate': Predicates.FYI_AND_OPTIONAL,
'os_types': ['win'],
}
],
'args': [
'--use-gpu-in-tests',
'--use-angle=gl',
'--disable-gpu-sandbox',
],
'test': 'gles2_conform_test',
},
# Face and barcode detection unit tests, which currently only run on
# Mac OS, and require physical hardware.
'service_unittests': {
'tester_configs': [
{
# Run this on the FYI waterfall and optional tryservers.
'predicate': Predicates.FYI_AND_OPTIONAL,
'os_types': ['mac'],
},
],
'disabled_tester_configs': [
{
'swarming_dimension_sets': [
# These tests fail on the Mac Pros.
{
'gpu': '1002:679e',
},
],
},
],
'args': [
'--gtest_filter=*Detection*',
'--use-gpu-in-tests'
]
},
'swiftshader_unittests': {
'tester_configs': [
{
# Run this on the FYI waterfall and optional tryservers.
'predicate': Predicates.FYI_AND_OPTIONAL,
'os_types': ['win', 'linux'],
},
],
},
'tab_capture_end2end_tests': {
'tester_configs': [
{
'build_configs': ['Release', 'Release_x64'],
}
],
# Don't run these tests on Android.
'disabled_tester_configs': [
{
'os_types': ['android'],
},
],
'override_compile_targets': [
'tab_capture_end2end_tests_run',
],
},
'video_decode_accelerator_unittest': {
'tester_configs': [
{
'os_types': ['win']
},
],
'args': [
'--use-test-data-path',
'--test_video_data=test-25fps.h264:320:240:250:258:::1',
],
},
}
# This requires a hack because the isolate's name is different than
# the executable's name. On the few non-swarmed testers, this causes
# the executable to not be found. It would be better if the Chromium
# recipe supported running isolates locally. crbug.com/581953
NON_SWARMED_GTESTS = {
'tab_capture_end2end_tests': {
'swarming': {
'can_use_on_swarming_builders': False
},
# Don't run these tests on Android.
'disabled_tester_configs': [
{
'os_types': ['android'],
},
],
'test': 'browser_tests',
'args': [
'--enable-gpu',
'--test-launcher-jobs=1',
'--gtest_filter=CastStreamingApiTestWithPixelOutput.EndToEnd*:' + \
'TabCaptureApiPixelTest.EndToEnd*'
],
'swarming': {
'can_use_on_swarming_builders': False,
},
}
}
# These tests use Telemetry's new browser_test_runner, which is a much
# simpler harness for correctness testing.
TELEMETRY_GPU_INTEGRATION_TESTS = {
'context_lost': {
'tester_configs': [
{
'predicate': Predicates.DEFAULT_PLUS_V8,
},
]
},
'depth_capture': {
'tester_configs': [
{
'predicate': Predicates.DEFAULT_PLUS_V8,
},
]
},
'gpu_process_launch_tests': {
'target_name': 'gpu_process',
'tester_configs': [
{
'predicate': Predicates.DEFAULT_PLUS_V8,
}
],
},
'hardware_accelerated_feature': {
'tester_configs': [
{
'predicate': Predicates.DEFAULT_PLUS_V8,
},
],
},
'maps_pixel_test': {
'target_name': 'maps',
'args': [
'--os-type',
'${os_type}',
'--build-revision',
'${got_revision}',
'--test-machine-name',
'${buildername}',
],
'tester_configs': [
{
'predicate': Predicates.DEFAULT_PLUS_V8,
},
],
},
'pixel_test': {
'target_name': 'pixel',
'args': [
'--refimg-cloud-storage-bucket',
'chromium-gpu-archive/reference-images',
'--os-type',
'${os_type}',
'--build-revision',
'${got_revision}',
'--test-machine-name',
'${buildername}',
],
'non_precommit_args': [
'--upload-refimg-to-cloud-storage',
],
'precommit_args': [
'--download-refimg-from-cloud-storage',
],
'tester_configs': [
{
'predicate': Predicates.DEFAULT_PLUS_V8,
},
],
},
'screenshot_sync': {
'tester_configs': [
{
'predicate': Predicates.DEFAULT_PLUS_V8,
},
],
},
'trace_test': {
'tester_configs': [
{
'predicate': Predicates.DEFAULT_PLUS_V8,
},
],
},
'webgl_conformance': {
'tester_configs': [
{
'predicate': Predicates.DEFAULT_PLUS_V8,
},
],
'asan_args': ['--is-asan'],
},
'webgl_conformance_d3d9_tests': {
'tester_configs': [
{
# Run this on the FYI waterfall and optional tryservers.
'predicate': Predicates.FYI_AND_OPTIONAL,
'os_types': ['win'],
}
],
'target_name': 'webgl_conformance',
'extra_browser_args': [
'--use-angle=d3d9',
],
'asan_args': ['--is-asan'],
},
'webgl_conformance_gl_tests': {
'tester_configs': [
{
# Run this on the FYI waterfall and optional tryservers.
'predicate': Predicates.FYI_AND_OPTIONAL,
'os_types': ['win'],
}
],
'disabled_tester_configs': [
{
'swarming_dimension_sets': [
# crbug.com/555545 and crbug.com/649824:
# Disable webgl_conformance_gl_tests on some Win/AMD cards.
# Always fails on older cards, flaky on newer cards.
# Note that these must match the GPUs exactly; wildcard
# matches (i.e., only device ID) aren't supported!
{
'gpu': '1002:6779',
'os': 'Windows-2008ServerR2-SP1'
},
{
'gpu': '1002:6613',
'os': 'Windows-2008ServerR2-SP1'
},
# BUG 590951: Disable webgl_conformance_gl_tests on Win/Intel
{
'gpu': '8086:041a',
'os': 'Windows-2008ServerR2-SP1'
},
{
'gpu': '8086:0412',
'os': 'Windows-2008ServerR2-SP1'
},
],
},
],
'target_name': 'webgl_conformance',
'extra_browser_args': [
'--use-angle=gl',
],
'asan_args': ['--is-asan'],
},
'webgl_conformance_angle_tests': {
'tester_configs': [
{
# Run this on the FYI waterfall and optional tryservers.
'predicate': Predicates.FYI_AND_OPTIONAL,
'os_types': ['linux'],
}
],
'target_name': 'webgl_conformance',
'extra_browser_args': [
'--use-gl=angle',
],
'asan_args': ['--is-asan'],
},
'webgl_conformance_d3d11_passthrough': {
'tester_configs': [
{
# Run this on the FYI waterfall and optional tryservers.
'predicate': Predicates.FYI_AND_OPTIONAL,
'os_types': ['win'],
}
],
'target_name': 'webgl_conformance',
'extra_browser_args': [
'--use-angle=d3d11',
'--use-passthrough-cmd-decoder',
# TODO(geofflang): Remove --disable-es3-apis once crbug.com/671217 is
# complete.
'--disable-es3-apis',
# TODO(geofflang): --disable-es3-gl-context is required because of
# crbug.com/680522
'--disable-es3-gl-context',
],
'asan_args': ['--is-asan'],
},
'webgl2_conformance_tests': {
'tester_configs': [
{
# The WebGL 2.0 conformance tests take over an hour to run on
# the Debug bots, which is too long.
'build_configs': ['Release', 'Release_x64'],
'predicate': Predicates.FYI_OPTIONAL_AND_V8,
},
],
'disabled_tester_configs': [
{
'names': [
# http://crbug.com/599451: this test is currently too slow
# to run on x64 in Debug mode. Need to shard the tests.
'Win7 x64 Debug (NVIDIA)',
],
# Don't run these tests on Android yet.
'os_types': ['android'],
},
],
'target_name': 'webgl_conformance',
'args': [
'--webgl-conformance-version=2.0.1',
# The current working directory when run via isolate is
# out/Debug or out/Release. Reference this file relatively to
# it.
'--read-abbreviated-json-results-from=' + \
'../../content/test/data/gpu/webgl2_conformance_tests_output.json',
],
'asan_args': ['--is-asan'],
'swarming': {
# These tests currently take about an hour and fifteen minutes
# to run. Split them into roughly 5-minute shards.
'shards': 15,
},
},
'webgl2_conformance_angle_tests': {
'tester_configs': [
{
# The WebGL 2.0 conformance tests take over an hour to run on
# the Debug bots, which is too long.
'build_configs': ['Release'],
'predicate': Predicates.FYI_ONLY,
# Only run on the NVIDIA Release and Intel Release Linux bots.
'swarming_dimension_sets': [
{
'gpu': '10de:104a',
'os': 'Ubuntu'
},
{
'gpu': '8086:0412',
'os': 'Ubuntu'
},
{
'gpu': '8086:1912',
'os': 'Ubuntu'
},
],
},
],
'target_name': 'webgl_conformance',
'extra_browser_args': [
'--use-gl=angle',
],
'args': [
'--webgl-conformance-version=2.0.1',
# The current working directory when run via isolate is
# out/Debug or out/Release. Reference this file relatively to
# it.
'--read-abbreviated-json-results-from=' + \
'../../content/test/data/gpu/webgl2_conformance_tests_output.json',
],
'asan_args': ['--is-asan'],
'swarming': {
# These tests currently take about an hour and fifteen minutes
# to run. Split them into roughly 5-minute shards.
'shards': 15,
},
},
'webgl2_conformance_gl_tests': {
'tester_configs': [
{
# The WebGL 2.0 conformance tests take over an hour to run on
# the Debug bots, which is too long.
'build_configs': ['Release'],
'predicate': Predicates.FYI_ONLY,
# Only run on the NVIDIA Release Windows bots.
'swarming_dimension_sets': [
{
'gpu': '10de:104a',
'os': 'Windows-2008ServerR2-SP1'
},
],
},
],
'target_name': 'webgl_conformance',
'extra_browser_args': [
'--use-angle=gl',
],
'args': [
'--webgl-conformance-version=2.0.1',
# The current working directory when run via isolate is
# out/Debug or out/Release. Reference this file relatively to
# it.
'--read-abbreviated-json-results-from=' + \
'../../content/test/data/gpu/webgl2_conformance_tests_output.json',
],
'asan_args': ['--is-asan'],
'swarming': {
# These tests currently take about an hour and fifteen minutes
# to run. Split them into roughly 5-minute shards.
'shards': 15,
},
},
}
# These isolated tests don't use telemetry. They need to be placed in the
# isolated_scripts section of the generated json.
NON_TELEMETRY_ISOLATED_SCRIPT_TESTS = {
# We run angle_perftests on the ANGLE CQ to ensure the tests don't crash.
'angle_perftests': {
'tester_configs': [
{
'predicate': Predicates.FYI_AND_OPTIONAL,
# Run on the Win/Linux Release NVIDIA bots.
'build_configs': ['Release'],
'swarming_dimension_sets': [
{
'gpu': '10de:104a',
'os': 'Windows-2008ServerR2-SP1'
},
{
'gpu': '10de:104a',
'os': 'Ubuntu'
}
],
},
],
},
}
def substitute_args(tester_config, args):
"""Substitutes the ${os_type} variable in |args| from the
tester_config's "os_type" property.
"""
substitutions = {
'os_type': tester_config['os_type']
}
return [string.Template(arg).safe_substitute(substitutions) for arg in args]
def matches_swarming_dimensions(tester_config, dimension_sets):
for dimensions in dimension_sets:
for cur_dims in tester_config['swarming_dimensions']:
if set(dimensions.items()).issubset(cur_dims.items()):
return True
return False
def is_android(tester_config):
return tester_config['os_type'] == 'android'
def is_asan(tester_config):
return tester_config.get('is_asan', False)
# Returns a list describing the type of this tester. It may include
# both the type of the bot as well as the waterfall.
def get_tester_type(tester_config):
result = []
if 'type' in tester_config:
result.append(tester_config['type'])
result.append(tester_config['parent']['type'])
return result
def tester_config_matches_tester(tester_name, tester_config, tc,
check_waterfall):
if check_waterfall:
if not tc.get('predicate', Predicates.DEFAULT)(
get_tester_type(tester_config)):
return False
if 'names' in tc:
# Give priority to matching the tester_name.
if tester_name in tc['names']:
return True
if not tester_name in tc['names']:
return False
if 'os_types' in tc:
if not tester_config['os_type'] in tc['os_types']:
return False
if 'build_configs' in tc:
if not tester_config['build_config'] in tc['build_configs']:
return False
if 'swarming_dimension_sets' in tc:
if not matches_swarming_dimensions(tester_config,
tc['swarming_dimension_sets']):
return False
return True
def should_run_on_tester(tester_name, tester_config, test_config):
# Check if this config is disabled on this tester
if 'disabled_tester_configs' in test_config:
for dtc in test_config['disabled_tester_configs']:
if tester_config_matches_tester(tester_name, tester_config, dtc, False):
return False
if 'tester_configs' in test_config:
for tc in test_config['tester_configs']:
if tester_config_matches_tester(tester_name, tester_config, tc, True):
return True
return False
else:
# If tester_configs is unspecified, run nearly all tests by default,
# but let tester_config_matches_tester filter out any undesired
# tests, such as ones that should only run on the Optional bots.
return tester_config_matches_tester(tester_name, tester_config, {}, True)
def remove_tester_configs_from_result(result):
if 'tester_configs' in result:
# Don't print the tester_configs in the JSON.
result.pop('tester_configs')
if 'disabled_tester_configs' in result:
# Don't print the disabled_tester_configs in the JSON.
result.pop('disabled_tester_configs')
def generate_gtest(tester_name, tester_config, test, test_config):
if not should_run_on_tester(tester_name, tester_config, test_config):
return None
result = copy.deepcopy(test_config)
if 'test' in result:
result['name'] = test
else:
result['test'] = test
if (not tester_config['swarming']) and test in NON_SWARMED_GTESTS:
# Need to override this result.
result = copy.deepcopy(NON_SWARMED_GTESTS[test])
result['name'] = test
else:
if not 'swarming' in result:
result['swarming'] = {}
result['swarming'].update({
'can_use_on_swarming_builders': tester_config['swarming'],
'dimension_sets': tester_config['swarming_dimensions']
})
if is_android(tester_config):
# Override the isolate target to get rid of any "_apk" suffix
# that would be added by the recipes.
if 'test' in result:
result['override_isolate_target'] = result['test']
else:
result['override_isolate_target'] = result['name']
# Integrate with the unified logcat system.
result['swarming'].update({
'cipd_packages': [
{
'cipd_package': 'infra/tools/luci/logdog/butler/${platform}',
'location': 'bin',
'revision': 'git_revision:25755a2c316937ee44a6432163dc5e2f9c85cf58'
}
],
'output_links': [
{
'link': [
'https://luci-logdog.appspot.com/v/?s',
'=android%2Fswarming%2Flogcats%2F',
'${TASK_ID}%2F%2B%2Funified_logcats'
],
'name': 'shard #${SHARD_INDEX} logcats'
}
]
})
if 'desktop_args' in result:
if not is_android(tester_config):
if not 'args' in result:
result['args'] = []
result['args'] += result['desktop_args']
# Don't put the desktop args in the JSON.
result.pop('desktop_args')
if 'android_args' in result:
if is_android(tester_config):
if not 'args' in result:
result['args'] = []
result['args'] += result['android_args']
# Don't put the android args in the JSON.
result.pop('android_args')
if 'desktop_swarming' in result:
if not is_android(tester_config):
result['swarming'].update(result['desktop_swarming'])
# Don't put the desktop_swarming in the JSON.
result.pop('desktop_swarming')
# Remove the tester_configs and disabled_tester_configs, if present,
# from the result.
remove_tester_configs_from_result(result)
# This flag only has an effect on the Linux bots that run tests
# locally (as opposed to via Swarming), which are only those couple
# on the chromium.gpu.fyi waterfall. Still, there is no harm in
# specifying it everywhere.
result['use_xvfb'] = False
return result
def generate_gtests(tester_name, tester_config, test_dictionary):
# The relative ordering of some of the tests is important to
# minimize differences compared to the handwritten JSON files, since
# Python's sorts are stable and there are some tests with the same
# key (see gles2_conform_d3d9_test and similar variants). Avoid
# losing the order by avoiding coalescing the dictionaries into one.
gtests = []
for test_name, test_config in sorted(test_dictionary.iteritems()):
test = generate_gtest(tester_name, tester_config,
test_name, test_config)
if test:
# generate_gtest may veto the test generation on this platform.
gtests.append(test)
return gtests
def generate_isolated_test(tester_name, tester_config, test, test_config,
extra_browser_args, isolate_name,
override_compile_targets, prefix_args):
if not should_run_on_tester(tester_name, tester_config, test_config):
return None
test_args = ['-v']
extra_browser_args_string = ""
if extra_browser_args != None:
extra_browser_args_string += ' '.join(extra_browser_args)
if 'extra_browser_args' in test_config:
extra_browser_args_string += ' ' + ' '.join(
test_config['extra_browser_args'])
if extra_browser_args_string != "":
test_args.append('--extra-browser-args=' + extra_browser_args_string)
if 'args' in test_config:
test_args.extend(substitute_args(tester_config, test_config['args']))
if 'desktop_args' in test_config and not is_android(tester_config):
test_args.extend(substitute_args(tester_config,
test_config['desktop_args']))
if 'android_args' in test_config and is_android(tester_config):
test_args.extend(substitute_args(tester_config,
test_config['android_args']))
if 'asan_args' in test_config and is_asan(tester_config):
test_args.extend(substitute_args(tester_config,
test_config['asan_args']))
# The step name must end in 'test' or 'tests' in order for the
# results to automatically show up on the flakiness dashboard.
# (At least, this was true some time ago.) Continue to use this
# naming convention for the time being to minimize changes.
step_name = test
if not (step_name.endswith('test') or step_name.endswith('tests')):
step_name = '%s_tests' % step_name
# Prepend GPU-specific flags.
swarming = {
'can_use_on_swarming_builders': tester_config['swarming'],
'dimension_sets': tester_config['swarming_dimensions']
}
if 'swarming' in test_config:
swarming.update(test_config['swarming'])
result = {
'args': prefix_args + test_args,
'isolate_name': isolate_name,
'name': step_name,
'swarming': swarming,
}
if override_compile_targets != None:
result['override_compile_targets'] = override_compile_targets
if 'non_precommit_args' in test_config:
result['non_precommit_args'] = test_config['non_precommit_args']
if 'precommit_args' in test_config:
result['precommit_args'] = test_config['precommit_args']
return result
def generate_telemetry_test(tester_name, tester_config,
test, test_config):
extra_browser_args = ['--enable-logging=stderr', '--js-flags=--expose-gc']
benchmark_name = test_config.get('target_name') or test
prefix_args = [
benchmark_name,
'--show-stdout',
'--browser=%s' % tester_config['build_config'].lower()
]
return generate_isolated_test(tester_name, tester_config, test,
test_config, extra_browser_args,
'telemetry_gpu_integration_test',
['telemetry_gpu_integration_test_run'],
prefix_args)
def generate_telemetry_tests(tester_name, tester_config,
test_dictionary):
isolated_scripts = []
for test_name, test_config in sorted(test_dictionary.iteritems()):
test = generate_telemetry_test(
tester_name, tester_config, test_name, test_config)
if test:
isolated_scripts.append(test)
return isolated_scripts
def generate_non_telemetry_isolated_test(tester_name, tester_config,
test, test_config):
return generate_isolated_test(tester_name, tester_config, test,
test_config,
None, test, None, [])
def generate_non_telemetry_isolated_tests(tester_name, tester_config,
test_dictionary):
isolated_scripts = []
for test_name, test_config in sorted(test_dictionary.iteritems()):
test = generate_non_telemetry_isolated_test(
tester_name, tester_config, test_name, test_config)
if test:
isolated_scripts.append(test)
return isolated_scripts
def install_parent_links(waterfall):
# Make the testers point back to the top-level waterfall so that we
# can ask about its properties when determining whether a given test
# should run on a given waterfall.
for name, config in waterfall.get('testers', {}).iteritems():
config['parent'] = waterfall
def generate_all_tests(waterfall, filename):
tests = {}
for builder, config in waterfall.get('prologue', {}).iteritems():
tests[builder] = config
for builder, config in waterfall.get('builders', {}).iteritems():
tests[builder] = config
for name, config in waterfall['testers'].iteritems():
gtests = generate_gtests(name, config, COMMON_GTESTS)
isolated_scripts = \
generate_telemetry_tests(
name, config, TELEMETRY_GPU_INTEGRATION_TESTS) + \
generate_non_telemetry_isolated_tests(name, config,
NON_TELEMETRY_ISOLATED_SCRIPT_TESTS)
tests[name] = {
'gtest_tests': sorted(gtests, key=lambda x: x['test']),
'isolated_scripts': sorted(isolated_scripts, key=lambda x: x['name'])
}
tests['AAAAA1 AUTOGENERATED FILE DO NOT EDIT'] = {}
tests['AAAAA2 See generate_buildbot_json.py to make changes'] = {}
with open(os.path.join(SRC_DIR, 'testing', 'buildbot', filename), 'wb') as fp:
json.dump(tests, fp, indent=2, separators=(',', ': '), sort_keys=True)
fp.write('\n')
def main():
install_parent_links(FYI_WATERFALL)
install_parent_links(WATERFALL)
install_parent_links(V8_FYI_WATERFALL)
generate_all_tests(FYI_WATERFALL, 'chromium.gpu.fyi.json')
generate_all_tests(WATERFALL, 'chromium.gpu.json')
generate_all_tests(V8_FYI_WATERFALL, 'client.v8.fyi.json')
return 0
if __name__ == "__main__":
sys.exit(main())