Add pyl files to generate the tests config.

The config is only added for the bot luci.webrtc.ci:"Linux64 Release" as a proof of concept.

Bug: webrtc:13899
Change-Id: I5ac37da5f63ca4b1c346dffe43e635b2c55e0c01
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/257160
Reviewed-by: Christoffer Jansson <jansson@google.com>
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Commit-Queue: Jeremy Leconte <jleconte@google.com>
Cr-Commit-Position: refs/heads/main@{#36417}
This commit is contained in:
Jeremy Leconte 2022-04-04 07:58:40 +02:00 committed by WebRTC LUCI CQ
parent c9e796dffc
commit 0c4059c4c8
11 changed files with 879 additions and 0 deletions

43
infra/specs/PRESUBMIT.py Normal file
View File

@ -0,0 +1,43 @@
# Copyright (c) 2022 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS. All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.
def _HasLocalChanges(input_api):
ret = input_api.subprocess.call(['git', 'diff', '--quiet'])
return ret != 0
def CheckPatchFormatted(input_api, output_api):
results = []
file_filter = lambda x: x.LocalPath().endswith('.pyl')
affected_files = input_api.AffectedFiles(include_deletes=False,
file_filter=file_filter)
for f in affected_files:
cmd = ['yapf', '-i', f.AbsoluteLocalPath()]
if input_api.subprocess.call(cmd):
results.append(output_api.PresubmitError('Error calling "' + cmd + '"'))
if _HasLocalChanges(input_api):
msg = ('Diff found after running "yapf -i" on modified .pyl files.\n'
'Please commit or discard the new changes.')
results.append(output_api.PresubmitError(msg))
return results
def CheckChangeOnUpload(input_api, output_api):
results = []
results.extend(CheckPatchFormatted(input_api, output_api))
return results
def CheckChangeOnCommit(input_api, output_api):
results = []
results.extend(CheckPatchFormatted(input_api, output_api))
return results

View File

@ -0,0 +1,413 @@
{
"AAAAA1 AUTOGENERATED FILE DO NOT EDIT": {},
"AAAAA2 See generate_buildbot_json.py to make changes": {},
"Linux64 Release": {
"isolated_scripts": [
{
"isolate_name": "audio_decoder_unittests",
"merge": {
"args": [],
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
},
"name": "audio_decoder_unittests",
"resultdb": {
"result_format": "json"
},
"swarming": {
"can_use_on_swarming_builders": true,
"dimension_sets": [
{
"cpu": "x86-64",
"os": "Ubuntu-18.04"
}
]
},
"test_id_prefix": "ninja://modules/audio_coding:audio_decoder_unittests/"
},
{
"isolate_name": "common_audio_unittests",
"merge": {
"args": [],
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
},
"name": "common_audio_unittests",
"resultdb": {
"result_format": "json"
},
"swarming": {
"can_use_on_swarming_builders": true,
"dimension_sets": [
{
"cpu": "x86-64",
"os": "Ubuntu-18.04"
}
]
},
"test_id_prefix": "ninja://common_audio:common_audio_unittests/"
},
{
"isolate_name": "common_video_unittests",
"merge": {
"args": [],
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
},
"name": "common_video_unittests",
"resultdb": {
"result_format": "json"
},
"swarming": {
"can_use_on_swarming_builders": true,
"dimension_sets": [
{
"cpu": "x86-64",
"os": "Ubuntu-18.04"
}
]
},
"test_id_prefix": "ninja://common_video:common_video_unittests/"
},
{
"isolate_name": "dcsctp_unittests",
"merge": {
"args": [],
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
},
"name": "dcsctp_unittests",
"resultdb": {
"result_format": "json"
},
"swarming": {
"can_use_on_swarming_builders": true,
"dimension_sets": [
{
"cpu": "x86-64",
"os": "Ubuntu-18.04"
}
]
},
"test_id_prefix": "ninja://net/dcsctp:dcsctp_unittests/"
},
{
"isolate_name": "low_bandwidth_audio_test",
"merge": {
"args": [],
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
},
"name": "low_bandwidth_audio_test",
"resultdb": {
"result_format": "json"
},
"swarming": {
"can_use_on_swarming_builders": true,
"dimension_sets": [
{
"cpu": "x86-64",
"os": "Ubuntu-18.04"
}
]
},
"test_id_prefix": "ninja://audio:low_bandwidth_audio_test/"
},
{
"isolate_name": "modules_tests",
"merge": {
"args": [],
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
},
"name": "modules_tests",
"resultdb": {
"result_format": "json"
},
"swarming": {
"can_use_on_swarming_builders": true,
"dimension_sets": [
{
"cpu": "x86-64",
"os": "Ubuntu-18.04"
}
],
"shards": 2
},
"test_id_prefix": "ninja://modules:modules_tests/"
},
{
"isolate_name": "modules_unittests",
"merge": {
"args": [],
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
},
"name": "modules_unittests",
"resultdb": {
"result_format": "json"
},
"swarming": {
"can_use_on_swarming_builders": true,
"dimension_sets": [
{
"cpu": "x86-64",
"os": "Ubuntu-18.04"
}
],
"shards": 6
},
"test_id_prefix": "ninja://modules:modules_unittests/"
},
{
"isolate_name": "peerconnection_unittests",
"merge": {
"args": [],
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
},
"name": "peerconnection_unittests",
"resultdb": {
"result_format": "json"
},
"swarming": {
"can_use_on_swarming_builders": true,
"dimension_sets": [
{
"cpu": "x86-64",
"os": "Ubuntu-18.04"
}
],
"shards": 4
},
"test_id_prefix": "ninja://pc:peerconnection_unittests/"
},
{
"isolate_name": "rtc_media_unittests",
"merge": {
"args": [],
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
},
"name": "rtc_media_unittests",
"resultdb": {
"result_format": "json"
},
"swarming": {
"can_use_on_swarming_builders": true,
"dimension_sets": [
{
"cpu": "x86-64",
"os": "Ubuntu-18.04"
}
]
},
"test_id_prefix": "ninja://media:rtc_media_unittests/"
},
{
"isolate_name": "rtc_pc_unittests",
"merge": {
"args": [],
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
},
"name": "rtc_pc_unittests",
"resultdb": {
"result_format": "json"
},
"swarming": {
"can_use_on_swarming_builders": true,
"dimension_sets": [
{
"cpu": "x86-64",
"os": "Ubuntu-18.04"
}
]
},
"test_id_prefix": "ninja://pc:rtc_pc_unittests/"
},
{
"isolate_name": "rtc_stats_unittests",
"merge": {
"args": [],
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
},
"name": "rtc_stats_unittests",
"resultdb": {
"result_format": "json"
},
"swarming": {
"can_use_on_swarming_builders": true,
"dimension_sets": [
{
"cpu": "x86-64",
"os": "Ubuntu-18.04"
}
]
},
"test_id_prefix": "ninja://stats:rtc_stats_unittests/"
},
{
"isolate_name": "rtc_unittests",
"merge": {
"args": [],
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
},
"name": "rtc_unittests",
"resultdb": {
"result_format": "json"
},
"swarming": {
"can_use_on_swarming_builders": true,
"dimension_sets": [
{
"cpu": "x86-64",
"os": "Ubuntu-18.04"
}
],
"shards": 6
},
"test_id_prefix": "ninja://:rtc_unittests/"
},
{
"isolate_name": "system_wrappers_unittests",
"merge": {
"args": [],
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
},
"name": "system_wrappers_unittests",
"resultdb": {
"result_format": "json"
},
"swarming": {
"can_use_on_swarming_builders": true,
"dimension_sets": [
{
"cpu": "x86-64",
"os": "Ubuntu-18.04"
}
]
},
"test_id_prefix": "ninja://system_wrappers:system_wrappers_unittests/"
},
{
"isolate_name": "test_support_unittests",
"merge": {
"args": [],
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
},
"name": "test_support_unittests",
"resultdb": {
"result_format": "json"
},
"swarming": {
"can_use_on_swarming_builders": true,
"dimension_sets": [
{
"cpu": "x86-64",
"os": "Ubuntu-18.04"
}
]
},
"test_id_prefix": "ninja://test:test_support_unittests/"
},
{
"isolate_name": "tools_unittests",
"merge": {
"args": [],
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
},
"name": "tools_unittests",
"resultdb": {
"result_format": "json"
},
"swarming": {
"can_use_on_swarming_builders": true,
"dimension_sets": [
{
"cpu": "x86-64",
"os": "Ubuntu-18.04"
}
]
},
"test_id_prefix": "ninja://rtc_tools:tools_unittests/"
},
{
"isolate_name": "video_capture_tests",
"merge": {
"args": [],
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
},
"name": "video_capture_tests",
"resultdb": {
"result_format": "json"
},
"swarming": {
"can_use_on_swarming_builders": true,
"dimension_sets": [
{
"cpu": "x86-64",
"os": "Ubuntu-18.04",
"pool": "WebRTC-baremetal"
}
]
},
"test_id_prefix": "ninja://modules/video_capture:video_capture_tests/"
},
{
"isolate_name": "video_engine_tests",
"merge": {
"args": [],
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
},
"name": "video_engine_tests",
"resultdb": {
"result_format": "json"
},
"swarming": {
"can_use_on_swarming_builders": true,
"dimension_sets": [
{
"cpu": "x86-64",
"os": "Ubuntu-18.04"
}
],
"shards": 4
},
"test_id_prefix": "ninja://:video_engine_tests/"
},
{
"isolate_name": "voip_unittests",
"merge": {
"args": [],
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
},
"name": "voip_unittests",
"resultdb": {
"result_format": "json"
},
"swarming": {
"can_use_on_swarming_builders": true,
"dimension_sets": [
{
"cpu": "x86-64",
"os": "Ubuntu-18.04"
}
]
},
"test_id_prefix": "ninja://:voip_unittests/"
},
{
"isolate_name": "webrtc_nonparallel_tests",
"merge": {
"args": [],
"script": "//testing/merge_scripts/standard_isolated_script_merge.py"
},
"name": "webrtc_nonparallel_tests",
"resultdb": {
"result_format": "json"
},
"swarming": {
"can_use_on_swarming_builders": true,
"dimension_sets": [
{
"cpu": "x86-64",
"os": "Ubuntu-18.04"
}
]
},
"test_id_prefix": "ninja://:webrtc_nonparallel_tests/"
}
]
}
}

View File

@ -0,0 +1,89 @@
#!/usr/bin/env vpython3
# Copyright (c) 2022 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS. All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.
"""Script to generate the test spec JSON files and the mixins.pyl file from the
ADDITIONAL_MIXINS dictonary. Calls Chromium's generate_buildbot_json.
"""
import json
import os
import sys
_SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__))
_SRC_DIR = os.path.dirname(os.path.dirname(_SCRIPT_DIR))
sys.path.insert(0, _SRC_DIR)
sys.path.insert(0, os.path.join(_SRC_DIR, 'testing', 'buildbot'))
from testing.buildbot import generate_buildbot_json
# Add custom mixins here.
ADDITIONAL_MIXINS = {
'result_adapter': {
'resultdb': {
'result_format': 'json'
},
},
}
MIXIN_FILE_NAME = os.path.join(_SCRIPT_DIR, 'mixins.pyl')
MIXINS_PYL_TEMPLATE = """\
# GENERATED FILE - DO NOT EDIT.
# Generated by {script_name} using data from
# {data_source}
#
# Copyright (c) 2022 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS. All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.
{mixin_data}
"""
def main():
chromium_args = generate_buildbot_json.BBJSONGenerator.parse_args(argv=None)
chromium_generator = generate_buildbot_json.BBJSONGenerator(chromium_args)
chromium_generator.load_configuration_files()
override_args = ['--pyl-files-dir', _SCRIPT_DIR]
webrtc_args = generate_buildbot_json.BBJSONGenerator.parse_args(override_args)
webrtc_generator = generate_buildbot_json.BBJSONGenerator(webrtc_args)
webrtc_generator.load_configuration_files()
webrtc_generator.resolve_configuration_files()
seen_mixins = set()
for waterfall in webrtc_generator.waterfalls:
seen_mixins = seen_mixins.union(waterfall.get('mixins', set()))
for bot_name, tester in waterfall['machines'].items():
del bot_name
seen_mixins = seen_mixins.union(tester.get('mixins', set()))
for suite in webrtc_generator.test_suites.values():
for test in suite.values():
seen_mixins = seen_mixins.union(test.get('mixins', set()))
found_mixins = ADDITIONAL_MIXINS.copy()
for mixin in seen_mixins:
if mixin not in found_mixins:
found_mixins[mixin] = chromium_generator.mixins[mixin]
format_data = {
'script_name': os.path.basename(__file__),
'data_source': 'waterfall.pyl and Chromium\'s mixins.pyl',
'mixin_data': json.dumps(dict(sorted(found_mixins.items())), indent=2),
}
with open(MIXIN_FILE_NAME, 'w') as f:
f.write(MIXINS_PYL_TEMPLATE.format(**format_data))
f.close()
return webrtc_generator.main()
if __name__ == '__main__': # pragma: no cover
sys.exit(main())

View File

@ -0,0 +1,148 @@
# Copyright (c) 2022 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS. All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.
# gn_isolate_map.pyl - A mapping of Ninja build target names to GN labels and
# test type classifications for the tests that are run on the bots.
#
# This file is based on testing/buildbot/gn_isolate_map.pyl for Chromium, but
# is covering WebRTC stand-alone tests instead.
# See https://cs.chromium.org/chromium/src/testing/buildbot/gn_isolate_map.pyl
# for more detailed documentation.
{
"All": {
"label": "//:All",
"type": "additional_compile_target",
},
"AppRTCMobile_test_apk": {
"label": "//examples:AppRTCMobile_test_apk",
"type": "console_test_launcher",
},
"android_junit_tests": {
"label": "//:android_junit_tests",
"type": "junit_test",
},
"android_examples_junit_tests": {
"label": "//examples:android_examples_junit_tests",
"type": "junit_test",
},
"android_sdk_junit_tests": {
"label": "//sdk/android:android_sdk_junit_tests",
"type": "junit_test",
},
"apprtcmobile_tests": {
"label": "//examples:apprtcmobile_tests",
"type": "console_test_launcher",
},
"audio_decoder_unittests": {
"label": "//modules/audio_coding:audio_decoder_unittests",
"type": "console_test_launcher",
},
"common_audio_unittests": {
"label": "//common_audio:common_audio_unittests",
"type": "console_test_launcher",
},
"common_video_unittests": {
"label": "//common_video:common_video_unittests",
"type": "console_test_launcher",
},
"dcsctp_unittests": {
"label": "//net/dcsctp:dcsctp_unittests",
"type": "console_test_launcher",
},
"android_instrumentation_test_apk": {
"label": "//sdk/android:android_instrumentation_test_apk",
"type": "console_test_launcher",
},
"low_bandwidth_audio_test": {
"label": "//audio:low_bandwidth_audio_test",
"type": "console_test_launcher",
"args": [
"--quick",
],
},
"low_bandwidth_audio_perf_test": {
"label": "//audio:low_bandwidth_audio_perf_test",
"type": "script",
"script": "//audio/test/low_bandwidth_audio_test.py",
"args": [
".",
"--remove",
],
},
"modules_tests": {
"label": "//modules:modules_tests",
"type": "console_test_launcher",
},
"modules_unittests": {
"label": "//modules:modules_unittests",
"type": "windowed_test_launcher",
},
"peerconnection_unittests": {
"label": "//pc:peerconnection_unittests",
"type": "console_test_launcher",
},
"rtc_media_unittests": {
"label": "//media:rtc_media_unittests",
"type": "console_test_launcher",
},
"rtc_pc_unittests": {
"label": "//pc:rtc_pc_unittests",
"type": "console_test_launcher",
},
"rtc_stats_unittests": {
"label": "//stats:rtc_stats_unittests",
"type": "console_test_launcher",
},
"rtc_unittests": {
"label": "//:rtc_unittests",
"type": "console_test_launcher",
},
"sdk_framework_unittests": {
"label": "//sdk:sdk_framework_unittests",
"type": "console_test_launcher",
},
"sdk_unittests": {
"label": "//sdk:sdk_unittests",
"type": "console_test_launcher",
},
"system_wrappers_unittests": {
"label": "//system_wrappers:system_wrappers_unittests",
"type": "console_test_launcher",
},
"test_support_unittests": {
"label": "//test:test_support_unittests",
"type": "console_test_launcher",
},
"tools_unittests": {
"label": "//rtc_tools:tools_unittests",
"type": "console_test_launcher",
},
"video_capture_tests": {
"label": "//modules/video_capture:video_capture_tests",
"type": "non_parallel_console_test_launcher",
# TODO(bugs.webrtc.org/9292): remove use_webcam and the ensure script.
"use_webcam": True,
},
"video_engine_tests": {
"label": "//:video_engine_tests",
"type": "console_test_launcher",
},
"voip_unittests": {
"label": "//:voip_unittests",
"type": "console_test_launcher",
},
"webrtc_nonparallel_tests": {
"label": "//:webrtc_nonparallel_tests",
"type": "non_parallel_console_test_launcher",
},
"webrtc_perf_tests": {
"label": "//:webrtc_perf_tests",
"type": "raw",
},
}

33
infra/specs/mixins.pyl Normal file
View File

@ -0,0 +1,33 @@
# GENERATED FILE - DO NOT EDIT.
# Generated by generate_buildbot_json.py using data from
# waterfall.pyl and Chromium's mixins.pyl
#
# Copyright (c) 2022 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS. All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.
{
"linux-bionic": {
"swarming": {
"dimensions": {
"os": "Ubuntu-18.04"
}
}
},
"result_adapter": {
"resultdb": {
"result_format": "json"
}
},
"x86-64": {
"swarming": {
"dimensions": {
"cpu": "x86-64"
}
}
}
}

11
infra/specs/setup.cfg Normal file
View File

@ -0,0 +1,11 @@
# Copyright (c) 2022 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS. All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.
# This is the style settings used when running yapf on .pyl files.
[yapf]
continuation_indent_width = 2

View File

@ -0,0 +1,9 @@
# Copyright (c) 2022 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS. All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.
{}

View File

@ -0,0 +1,93 @@
# Copyright (c) 2022 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS. All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.
{
'basic_suites': {
'desktop_tests': {
'audio_decoder_unittests': {},
'common_audio_unittests': {},
'common_video_unittests': {},
'dcsctp_unittests': {},
'low_bandwidth_audio_test': {},
'modules_tests': {
'swarming': {
'shards': 2
},
},
'modules_unittests': {
'swarming': {
'shards': 6
},
},
'peerconnection_unittests': {
'swarming': {
'shards': 4
},
},
'rtc_media_unittests': {},
'rtc_pc_unittests': {},
'rtc_stats_unittests': {},
'rtc_unittests': {
'swarming': {
'shards': 6
},
},
'system_wrappers_unittests': {},
'test_support_unittests': {},
'tools_unittests': {},
'video_engine_tests': {
'swarming': {
'shards': 4
},
},
'voip_unittests': {},
'webrtc_nonparallel_tests': {},
},
'video_capture_tests_baremetal': {
# Run video_capture_tests on the baremetal pool for the video camera.
'video_capture_tests': {
'swarming': {
'dimension_sets': [{
'pool': 'WebRTC-baremetal'
}],
},
}
},
'webrtc_perf_tests_baremetal': {
# Run webrtc_perf_tests on the baremetal pool to test the WebRTC machines.
'webrtc_perf_tests': {
'args': [
'--force_fieldtrials=WebRTC-QuickPerfTest/Enabled/',
'--nologs',
'--gtest_output=json:${ISOLATED_OUTDIR}/gtest_output.json',
],
'remove_mixins': ['result_adapter'],
'resultdb': {
'result_format': 'gtest_json',
'result_file': '${ISOLATED_OUTDIR}/gtest_output.json',
},
'swarming': {
'dimension_sets': [{
'pool': 'WebRTC-baremetal'
}],
},
}
},
},
'compound_suites': {
'desktop_and_video_capture_tests': [
'desktop_tests',
'video_capture_tests_baremetal',
],
'desktop_and_video_capture_and_webrtc_perf_tests': [
'desktop_tests',
'video_capture_tests_baremetal',
'webrtc_perf_tests_baremetal',
],
},
}

View File

@ -0,0 +1,8 @@
{
"webrtc": {
"exclusions": [
"DEPS",
"infra/specs/.*"
]
}
}

9
infra/specs/variants.pyl Normal file
View File

@ -0,0 +1,9 @@
# Copyright (c) 2022 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS. All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.
{}

View File

@ -0,0 +1,23 @@
# Copyright (c) 2022 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS. All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.
[
{
'name': 'client.webrtc',
'mixins': [],
'machines': {
'Linux64 Release': {
'os_type': 'linux',
'mixins': ['linux-bionic', 'x86-64', 'result_adapter'],
'test_suites': {
'isolated_scripts': 'desktop_and_video_capture_tests',
},
},
},
},
]