# GENERATED FILE - DO NOT EDIT.
# Generated by generate_test_spec_json.py using data from waterfalls.pyl and Chromium's mixins.pyl
#
# Copyright 2025 The Dawn & Tint Authors
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this
#    list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice,
#    this list of conditions and the following disclaimer in the documentation
#    and/or other materials provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its
#    contributors may be used to endorse or promote products derived from
#    this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# This is a .pyl, or "Python Literal", file. You can treat it just like a
# .json file, with the following exceptions:
# * all keys must be quoted (use single quotes, please);
# * comments are allowed, using '#' syntax; and
# * trailing commas are allowed.
#
# For more info see Chromium's mixins.pyl in testing/buildbot.

{ 'chromium-tester-service-account': { 'fail_if_unused': False,
                                       'swarming': { 'service_account': 'chromium-tester@chops-service-accounts.iam.gserviceaccount.com'}},
  'gpu-swarming-pool': { 'fail_if_unused': False,
                         'swarming': { 'dimensions': { 'pool': 'chromium.tests.gpu'}}},
  'linux-jammy': { 'fail_if_unused': False,
                   'swarming': {'dimensions': {'os': 'Ubuntu-22.04'}}},
  'no_gpu': { 'fail_if_unused': False,
              'swarming': {'dimensions': {'gpu': 'none'}}},
  'result_adapter_gtest_json': {'resultdb': {'result_format': 'gtest_json'}},
  'swarming_containment_auto': { 'fail_if_unused': False,
                                 'swarming': {'containment_type': 'AUTO'}},
  'x86-64': { 'fail_if_unused': False,
              'swarming': {'dimensions': {'cpu': 'x86-64'}}}}
