910e62b5创建于 1月15日历史提交
# Copyright 2021 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Definitions of builders in the chromium.gpu builder group."""

load("@chromium-luci//args.star", "args")
load("@chromium-luci//branches.star", "branches")
load("@chromium-luci//builder_config.star", "builder_config")
load("@chromium-luci//builder_health_indicators.star", "health_spec")
load("@chromium-luci//ci.star", "ci")
load("@chromium-luci//consoles.star", "consoles")
load("@chromium-luci//gn_args.star", "gn_args")
load("@chromium-luci//targets.star", "targets")
load("//lib/ci_constants.star", "ci_constants")
load("//lib/gardener_rotations.star", "gardener_rotations")
load("//lib/gpu.star", "gpu")
load("//lib/siso.star", "siso")

ci.defaults.set(
    executable = ci_constants.DEFAULT_EXECUTABLE,
    builder_group = "chromium.gpu",
    pool = gpu.ci.POOL,
    gardener_rotations = gardener_rotations.CHROMIUM_GPU,
    tree_closing = True,
    tree_closing_notifiers = gpu.ci.TREE_CLOSING_NOTIFIERS,
    contact_team_email = "chrome-gpu-infra@google.com",
    execution_timeout = ci_constants.DEFAULT_EXECUTION_TIMEOUT,
    experiments = {
        "chromium_tests.resultdb_module": 100,
    },
    health_spec = health_spec.default(),
    service_account = ci_constants.DEFAULT_SERVICE_ACCOUNT,
    shadow_service_account = ci_constants.DEFAULT_SHADOW_SERVICE_ACCOUNT,
    siso_project = siso.project.DEFAULT_TRUSTED,
    siso_remote_jobs = siso.remote_jobs.DEFAULT,
    thin_tester_cores = 2,
)

targets.builder_defaults.set(
    mixins = [
        "chromium-tester-service-account",
        "swarming_containment_auto",
        "timeout_30m",
    ],
)

targets.settings_defaults.set(
    allow_script_tests = False,
)

consoles.console_view(
    name = "chromium.gpu",
    branch_selector = [
        branches.selector.ANDROID_BRANCHES,
        branches.selector.DESKTOP_BRANCHES,
    ],
    ordering = {
        None: [
            "Windows",
            "Mac",
            "Linux",
        ],
    },
)

gpu.ci.linux_builder(
    name = "Android Release (Pixel 2)",
    branch_selector = branches.selector.ANDROID_BRANCHES,
    description_html = "Runs a subset of release GPU tests on stable Pixel 2 configs",
    builder_spec = builder_config.builder_spec(
        gclient_config = builder_config.gclient_config(
            config = "chromium",
            apply_configs = [
                "android",
            ],
        ),
        chromium_config = builder_config.chromium_config(
            config = "main_builder",
            apply_configs = [
                "download_xr_test_apks",
                "mb",
            ],
            build_config = builder_config.build_config.RELEASE,
            target_arch = builder_config.target_arch.ARM,
            target_bits = 64,
            target_platform = builder_config.target_platform.ANDROID,
        ),
        android_config = builder_config.android_config(
            config = "base_config",
        ),
    ),
    gn_args = gn_args.config(
        configs = [
            "gpu_tests",
            "android_builder",
            "release_builder",
            "try_builder",
            "remoteexec",
            "arm64",
            "static_angle",
            "android_fastbuild",
        ],
    ),
    targets = targets.bundle(
        targets = [
            "gpu_common_android_telemetry_tests",
        ],
        mixins = [
            "chromium_pixel_2_q",
        ],
    ),
    targets_settings = targets.settings(
        browser_config = targets.browser_config.ANDROID_CHROMIUM,
        os_type = targets.os_type.ANDROID,
        use_android_merge_script_by_default = False,
    ),
    console_view_entry = consoles.console_view_entry(
        category = "Android",
        short_name = "P2",
    ),
    cq_mirrors_console_view = "mirrors",
)

gpu.ci.linux_builder(
    name = "GPU Linux Builder",
    branch_selector = branches.selector.LINUX_BRANCHES,
    description_html = "Builds release Linux x64 binaries for GPU testing",
    builder_spec = builder_config.builder_spec(
        gclient_config = builder_config.gclient_config(
            config = "chromium",
            apply_configs = [
                "use_clang_coverage",
                # This is not necessary for this builder itself, but is
                # necessary in order to keep configs in sync with
                # "ci/Linux Builder" in order for mirroring to work correctly.
                "chromium_with_telemetry_dependencies",
            ],
        ),
        chromium_config = builder_config.chromium_config(
            config = "chromium",
            apply_configs = [
                "mb",
            ],
            build_config = builder_config.build_config.RELEASE,
            target_bits = 64,
            target_platform = builder_config.target_platform.LINUX,
        ),
    ),
    gn_args = gn_args.config(
        configs = [
            "gpu_tests",
            "release_builder",
            "try_builder",
            "remoteexec",
            "linux",
            "x64",
        ],
    ),
    targets = targets.bundle(),
    console_view_entry = consoles.console_view_entry(
        category = "Linux",
    ),
    cq_mirrors_console_view = "mirrors",
)

gpu.ci.linux_builder(
    name = "GPU Linux Builder (dbg)",
    description_html = "Builds debug Linux x64 binaries for GPU testing",
    builder_spec = builder_config.builder_spec(
        gclient_config = builder_config.gclient_config(
            config = "chromium",
        ),
        chromium_config = builder_config.chromium_config(
            config = "chromium",
            apply_configs = [
                "mb",
            ],
            build_config = builder_config.build_config.DEBUG,
            target_bits = 64,
            target_platform = builder_config.target_platform.LINUX,
        ),
    ),
    gn_args = gn_args.config(
        configs = [
            "gpu_tests",
            "debug_builder",
            "remoteexec",
            "linux",
            "x64",
        ],
    ),
    targets = targets.bundle(),
    gardener_rotations = args.ignore_default(None),
    tree_closing = False,
    console_view_entry = consoles.console_view_entry(
        category = "Linux",
    ),
)

gpu.ci.mac_builder(
    name = "GPU Mac Builder",
    branch_selector = branches.selector.MAC_BRANCHES,
    description_html = "Builds release Mac x64 binaries for GPU testing",
    builder_spec = builder_config.builder_spec(
        gclient_config = builder_config.gclient_config(
            config = "chromium",
            apply_configs = [
                # This is not necessary for this builder itself, but is
                # necessary in order to keep configs in sync with
                # "ci/Mac Builder" in order for mirroring to work correctly.
                "chromium_with_telemetry_dependencies",
                "use_clang_coverage",
            ],
        ),
        chromium_config = builder_config.chromium_config(
            config = "chromium",
            apply_configs = [
                "mb",
            ],
            build_config = builder_config.build_config.RELEASE,
            target_arch = builder_config.target_arch.INTEL,
            target_bits = 64,
            target_platform = builder_config.target_platform.MAC,
        ),
    ),
    gn_args = gn_args.config(
        configs = [
            "gpu_tests",
            "release_builder",
            "try_builder",
            "remoteexec",
            "x64",
            "mac",
        ],
    ),
    targets = targets.bundle(),
    console_view_entry = consoles.console_view_entry(
        category = "Mac",
    ),
    cq_mirrors_console_view = "mirrors",
)

gpu.ci.mac_builder(
    name = "GPU Mac Builder (dbg)",
    description_html = "Builds debug Mac x64 binaries for GPU testing",
    builder_spec = builder_config.builder_spec(
        gclient_config = builder_config.gclient_config(
            config = "chromium",
        ),
        chromium_config = builder_config.chromium_config(
            config = "chromium",
            apply_configs = [
                "mb",
            ],
            build_config = builder_config.build_config.DEBUG,
            target_bits = 64,
            target_platform = builder_config.target_platform.MAC,
        ),
    ),
    gn_args = gn_args.config(
        configs = [
            "gpu_tests",
            "debug_builder",
            "remoteexec",
            "x64",
            "mac",
        ],
    ),
    targets = targets.bundle(),
    tree_closing = False,
    console_view_entry = consoles.console_view_entry(
        category = "Mac",
    ),
)

gpu.ci.windows_builder(
    name = "GPU Win x64 Builder",
    branch_selector = branches.selector.WINDOWS_BRANCHES,
    description_html = "Builds release x64 Windows binaries for GPU testing",
    builder_spec = builder_config.builder_spec(
        gclient_config = builder_config.gclient_config(
            config = "chromium",
            apply_configs = [
                # This is not necessary for this builder itself, but is
                # necessary in order to keep configs in sync with
                # "ci/Mac Builder" in order for mirroring to work correctly.
                "chromium_with_telemetry_dependencies",
                "use_clang_coverage",
            ],
        ),
        chromium_config = builder_config.chromium_config(
            config = "chromium",
            apply_configs = [
                "mb",
            ],
            build_config = builder_config.build_config.RELEASE,
            target_bits = 64,
            target_platform = builder_config.target_platform.WIN,
        ),
    ),
    gn_args = gn_args.config(
        configs = [
            "gpu_tests",
            "release_builder",
            "try_builder",
            "remoteexec",
            "resource_allowlisting",
            "win",
            "x64",
        ],
    ),
    console_view_entry = consoles.console_view_entry(
        category = "Windows",
    ),
    cq_mirrors_console_view = "mirrors",
)

gpu.ci.windows_builder(
    name = "GPU Win x64 Builder (dbg)",
    description_html = "Builds debug Windows x64 binaries for GPU testing",
    builder_spec = builder_config.builder_spec(
        gclient_config = builder_config.gclient_config(
            config = "chromium",
        ),
        chromium_config = builder_config.chromium_config(
            config = "chromium",
            apply_configs = [
                "mb",
            ],
            build_config = builder_config.build_config.DEBUG,
            target_bits = 64,
            target_platform = builder_config.target_platform.WIN,
        ),
    ),
    gn_args = gn_args.config(
        configs = [
            "gpu_tests",
            "debug_builder",
            "remoteexec",
            "win",
            "x64",
        ],
    ),
    tree_closing = False,
    console_view_entry = consoles.console_view_entry(
        category = "Windows",
    ),
    # TODO(crbug.com/413285147): Restore this to the default once sync/compile
    # times are reduced.
    execution_timeout = 6 * time.hour,
)

ci.thin_tester(
    name = "Linux Debug (NVIDIA)",
    description_html = "Runs a subset of debug GPU tests on stable Linux/NVIDIA GTX 1660 configs",
    parent = "GPU Linux Builder (dbg)",
    builder_spec = builder_config.builder_spec(
        execution_mode = builder_config.execution_mode.TEST,
        gclient_config = builder_config.gclient_config(
            config = "chromium",
        ),
        chromium_config = builder_config.chromium_config(
            config = "chromium",
            apply_configs = [
                "mb",
            ],
            build_config = builder_config.build_config.DEBUG,
            target_bits = 64,
            target_platform = builder_config.target_platform.LINUX,
        ),
    ),
    targets = targets.bundle(
        targets = [
            "gpu_desktop_passthrough_gtests",
            "gpu_common_linux_telemetry_tests",
        ],
        mixins = [
            "linux_nvidia_gtx_1660_stable",
            # TODO(crbug.com/331756538): Specify the puppet_production mixin
            # once testing is moved to Ubuntu 22.
        ],
        per_test_modifications = {
            "tab_capture_end2end_tests": targets.remove(
                reason = "Run these only on Release bots.",
            ),
        },
    ),
    targets_settings = targets.settings(
        browser_config = targets.browser_config.DEBUG,
        os_type = targets.os_type.LINUX,
    ),
    gardener_rotations = args.ignore_default(None),
    tree_closing = False,
    console_view_entry = consoles.console_view_entry(
        category = "Linux",
    ),
)

ci.thin_tester(
    name = "Linux Release (NVIDIA)",
    branch_selector = branches.selector.LINUX_BRANCHES,
    description_html = "Runs a subset of release GPU tests on stable Linux/NVIDIA GTX 1660 configs",
    parent = "ci/GPU Linux Builder",
    builder_spec = builder_config.builder_spec(
        execution_mode = builder_config.execution_mode.TEST,
        gclient_config = builder_config.gclient_config(
            config = "chromium",
            apply_configs = [
                "use_clang_coverage",
            ],
        ),
        chromium_config = builder_config.chromium_config(
            config = "chromium",
            apply_configs = [
                "mb",
            ],
            build_config = builder_config.build_config.RELEASE,
            target_bits = 64,
            target_platform = builder_config.target_platform.LINUX,
        ),
    ),
    targets = targets.bundle(
        targets = [
            "gpu_desktop_passthrough_gtests",
            "gpu_common_linux_telemetry_tests",
        ],
        mixins = [
            "linux_nvidia_gtx_1660_stable",
            # TODO(crbug.com/331756538): Specify the puppet_production mixin
            # once testing is moved to Ubuntu 22.
        ],
        per_test_modifications = {
            "tab_capture_end2end_tests": targets.remove(
                reason = "Disabled due to dbus crashes crbug.com/927465",
            ),
        },
    ),
    targets_settings = targets.settings(
        browser_config = targets.browser_config.RELEASE,
        os_type = targets.os_type.LINUX,
    ),
    console_view_entry = consoles.console_view_entry(
        category = "Linux",
    ),
    cq_mirrors_console_view = "mirrors",
)

ci.thin_tester(
    name = "Mac Debug (Intel)",
    description_html = "Runs a subset of debug GPU tests on stable Mac/Intel UHD 630 Mac Mini configs",
    parent = "GPU Mac Builder (dbg)",
    builder_spec = builder_config.builder_spec(
        execution_mode = builder_config.execution_mode.TEST,
        gclient_config = builder_config.gclient_config(
            config = "chromium",
        ),
        chromium_config = builder_config.chromium_config(
            config = "chromium",
            apply_configs = [
                "mb",
            ],
            build_config = builder_config.build_config.DEBUG,
            target_bits = 64,
            target_platform = builder_config.target_platform.MAC,
        ),
    ),
    targets = targets.bundle(
        targets = [
            "gpu_desktop_passthrough_gtests",
            "gpu_common_metal_passthrough_graphite_telemetry_tests",
        ],
        mixins = [
            "mac_mini_intel_gpu_stable",
            "puppet_production",
        ],
        per_test_modifications = {
            "pixel_skia_gold_metal_passthrough_graphite_test": targets.mixin(
                swarming = targets.swarming(
                    shards = 2,
                ),
            ),
            "tab_capture_end2end_tests": targets.remove(
                reason = "Run these only on Release bots.",
            ),
        },
    ),
    targets_settings = targets.settings(
        browser_config = targets.browser_config.DEBUG,
        os_type = targets.os_type.MAC,
    ),
    gardener_rotations = args.ignore_default(None),
    tree_closing = False,
    console_view_entry = consoles.console_view_entry(
        category = "Mac",
    ),
)

ci.thin_tester(
    name = "Mac Release (Intel)",
    branch_selector = branches.selector.MAC_BRANCHES,
    description_html = "Runs a subset of release GPU tests on stable Mac/Intel UHD 630 Mac Mini configs",
    parent = "ci/GPU Mac Builder",
    builder_spec = builder_config.builder_spec(
        execution_mode = builder_config.execution_mode.TEST,
        gclient_config = builder_config.gclient_config(
            config = "chromium",
        ),
        chromium_config = builder_config.chromium_config(
            config = "chromium",
            apply_configs = [
                "mb",
            ],
            build_config = builder_config.build_config.RELEASE,
            target_bits = 64,
            target_platform = builder_config.target_platform.MAC,
        ),
    ),
    targets = targets.bundle(
        targets = [
            "gpu_desktop_passthrough_gtests",
            "gpu_common_metal_passthrough_graphite_telemetry_tests",
        ],
        mixins = [
            "mac_mini_intel_gpu_stable",
            "puppet_production",
        ],
    ),
    targets_settings = targets.settings(
        browser_config = targets.browser_config.RELEASE,
        os_type = targets.os_type.MAC,
    ),
    console_view_entry = consoles.console_view_entry(
        category = "Mac",
    ),
    cq_mirrors_console_view = "mirrors",
)

ci.thin_tester(
    name = "Mac Retina Debug (AMD)",
    description_html = "Runs a subset of debug GPU tests on stable Mac/AMD Macbook Pro configs",
    parent = "GPU Mac Builder (dbg)",
    builder_spec = builder_config.builder_spec(
        execution_mode = builder_config.execution_mode.TEST,
        gclient_config = builder_config.gclient_config(
            config = "chromium",
        ),
        chromium_config = builder_config.chromium_config(
            config = "chromium",
            apply_configs = [
                "mb",
            ],
            build_config = builder_config.build_config.DEBUG,
            target_bits = 64,
            target_platform = builder_config.target_platform.MAC,
        ),
    ),
    targets = targets.bundle(
        targets = [
            "gpu_desktop_passthrough_gtests",
            "gpu_common_metal_passthrough_graphite_telemetry_tests",
        ],
        mixins = [
            "mac_retina_amd_gpu_stable",
            "puppet_production",
        ],
        per_test_modifications = {
            "pixel_skia_gold_metal_passthrough_graphite_test": targets.per_test_modification(
                mixins = targets.mixin(
                    swarming = targets.swarming(
                        shards = 2,
                    ),
                ),
            ),
            "tab_capture_end2end_tests": targets.remove(
                reason = "Run these only on Release bots.",
            ),
        },
    ),
    targets_settings = targets.settings(
        browser_config = targets.browser_config.DEBUG,
        os_type = targets.os_type.MAC,
    ),
    tree_closing = False,
    console_view_entry = consoles.console_view_entry(
        category = "Mac",
    ),
)

ci.thin_tester(
    name = "Mac Retina Release (AMD)",
    branch_selector = branches.selector.MAC_BRANCHES,
    description_html = "Runs a subset of release GPU tests on stable Mac/AMD Macbook Pro configs",
    parent = "ci/GPU Mac Builder",
    builder_spec = builder_config.builder_spec(
        execution_mode = builder_config.execution_mode.TEST,
        gclient_config = builder_config.gclient_config(
            config = "chromium",
        ),
        chromium_config = builder_config.chromium_config(
            config = "chromium",
            apply_configs = [
                "mb",
            ],
            build_config = builder_config.build_config.RELEASE,
            target_bits = 64,
            target_platform = builder_config.target_platform.MAC,
        ),
    ),
    targets = targets.bundle(
        targets = [
            "gpu_desktop_passthrough_gtests",
            "gpu_common_metal_passthrough_graphite_telemetry_tests",
        ],
        mixins = [
            "mac_retina_amd_gpu_stable",
            "puppet_production",
        ],
    ),
    targets_settings = targets.settings(
        browser_config = targets.browser_config.RELEASE,
        os_type = targets.os_type.MAC,
    ),
    console_view_entry = consoles.console_view_entry(
        category = "Mac",
    ),
    cq_mirrors_console_view = "mirrors",
)

ci.thin_tester(
    name = "Win10 x64 Debug (NVIDIA)",
    description_html = "Runs a subset of debug GPU tests on stable Windows 10/NVIDIA GTX 1660 configs",
    parent = "GPU Win x64 Builder (dbg)",
    builder_spec = builder_config.builder_spec(
        execution_mode = builder_config.execution_mode.TEST,
        gclient_config = builder_config.gclient_config(
            config = "chromium",
        ),
        chromium_config = builder_config.chromium_config(
            config = "chromium",
            apply_configs = [
                "mb",
            ],
            build_config = builder_config.build_config.DEBUG,
            target_bits = 64,
            target_platform = builder_config.target_platform.WIN,
        ),
    ),
    targets = targets.bundle(
        targets = [
            "gpu_win_gtests",
            "gpu_common_win_telemetry_tests",
        ],
        mixins = [
            "win10_nvidia_gtx_1660_stable",
            "puppet_production",
        ],
        per_test_modifications = {
            "pixel_skia_gold_passthrough_test": targets.per_test_modification(
                mixins = targets.mixin(
                    args = [
                        # TODO(crbug.com/382422293): Remove when fixed
                        "--jobs=1",
                    ],
                ),
                replacements = targets.replacements(
                    args = {
                        # Magic substitution happens after regular replacement, so remove it
                        # now since we are manually applying the number of jobs above.
                        targets.magic_args.GPU_PARALLEL_JOBS: None,
                    },
                ),
            ),
            "trace_test": targets.mixin(
                # TODO(crbug.com/453961754): fix slowdown in trace_test and remove this sharding
                swarming = targets.swarming(
                    shards = 2,
                ),
            ),
        },
    ),
    targets_settings = targets.settings(
        browser_config = targets.browser_config.DEBUG_X64,
        os_type = targets.os_type.WINDOWS,
    ),
    tree_closing = False,
    console_view_entry = consoles.console_view_entry(
        category = "Windows",
    ),
)

ci.thin_tester(
    name = "Win10 x64 Release (NVIDIA)",
    branch_selector = branches.selector.WINDOWS_BRANCHES,
    description_html = "Runs a subset of release GPU tests on stable Windows 10/NVIDIA GTX 1660 configs",
    parent = "ci/GPU Win x64 Builder",
    builder_spec = builder_config.builder_spec(
        execution_mode = builder_config.execution_mode.TEST,
        gclient_config = builder_config.gclient_config(
            config = "chromium",
            apply_configs = [
                "use_clang_coverage",
            ],
        ),
        chromium_config = builder_config.chromium_config(
            config = "chromium",
            apply_configs = [
                "mb",
            ],
            build_config = builder_config.build_config.RELEASE,
            target_bits = 64,
            target_platform = builder_config.target_platform.WIN,
        ),
    ),
    targets = targets.bundle(
        targets = [
            "gpu_win_gtests",
            "gpu_common_win_telemetry_tests",
        ],
        mixins = [
            "win10_nvidia_gtx_1660_stable",
            "puppet_production",
            "retry_only_failed_tests",
        ],
        per_test_modifications = {
            "pixel_skia_gold_passthrough_test": targets.per_test_modification(
                mixins = targets.mixin(
                    args = [
                        # TODO(crbug.com/382422293): Remove when fixed
                        "--jobs=1",
                    ],
                ),
                replacements = targets.replacements(
                    args = {
                        # Magic substitution happens after regular replacement, so remove it
                        # now since we are manually applying the number of jobs above.
                        targets.magic_args.GPU_PARALLEL_JOBS: None,
                    },
                ),
            ),
        },
    ),
    targets_settings = targets.settings(
        browser_config = targets.browser_config.RELEASE_X64,
        os_type = targets.os_type.WINDOWS,
    ),
    console_view_entry = consoles.console_view_entry(
        category = "Windows",
    ),
    cq_mirrors_console_view = "mirrors",
)