e1a728416c
This is a prep stage to get coverage of this option as we move into Android code freeze. This also removes the separate ReduceOpsTaskSplitting run from the Pixel4XL. No need for it. See skbug.com/10877#c27 for information. Added this info to the Skia Gardener doc as advisory. Bug: skia:10877 Change-Id: I69475f87b29aa125e285a8914015ac6a55e3390e Cq-Include-Trybots: luci.skia.skia.primary:Test-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Debug-All-Android_Vulkan,Perf-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Release-All-Android_Vulkan_Skpbench,Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Debug-All-Android,Perf-Android-Clang-Nexus7-GPU-Tegra3-arm-Release-All-Android,Perf-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Release-All-Android,Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Debug-All-Android,Test-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Debug-All-Android,Perf-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android Reviewed-on: https://skia-review.googlesource.com/c/skia/+/377856 Reviewed-by: Eric Boren <borenet@google.com> Reviewed-by: Brian Salomon <bsalomon@google.com> Commit-Queue: Adlai Holler <adlai@google.com>
235 lines
7.4 KiB
Python
235 lines
7.4 KiB
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.
|
|
|
|
|
|
# Recipe for Skia skpbench.
|
|
|
|
|
|
import calendar
|
|
|
|
|
|
DEPS = [
|
|
'flavor',
|
|
'recipe_engine/context',
|
|
'recipe_engine/file',
|
|
'recipe_engine/path',
|
|
'recipe_engine/platform',
|
|
'recipe_engine/properties',
|
|
'recipe_engine/python',
|
|
'recipe_engine/raw_io',
|
|
'recipe_engine/step',
|
|
'recipe_engine/time',
|
|
'run',
|
|
'vars',
|
|
]
|
|
|
|
ADB_BINARY = 'adb.1.0.35'
|
|
|
|
|
|
def _run(api, title, *cmd, **kwargs):
|
|
with api.context(cwd=api.path['start_dir'].join('skia')):
|
|
return api.run(api.step, title, cmd=list(cmd), **kwargs)
|
|
|
|
|
|
def _adb(api, title, *cmd, **kwargs):
|
|
if 'infra_step' not in kwargs:
|
|
kwargs['infra_step'] = True
|
|
return _run(api, title, ADB_BINARY, *cmd, **kwargs)
|
|
|
|
|
|
def skpbench_steps(api):
|
|
"""benchmark Skia using skpbench."""
|
|
is_vulkan = 'Vulkan' in api.vars.builder_name
|
|
is_android = 'Android' in api.vars.builder_name
|
|
is_ccpr = 'CCPR' in api.vars.builder_name
|
|
is_all_paths_volatile = 'AllPathsVolatile' in api.vars.builder_name
|
|
is_mskp = 'Mskp' in api.vars.builder_name
|
|
is_ddl = 'DDL' in api.vars.builder_name
|
|
is_9x9 = '9x9' in api.vars.builder_name
|
|
|
|
api.file.ensure_directory(
|
|
'makedirs perf_dir', api.flavor.host_dirs.perf_data_dir)
|
|
|
|
if is_android:
|
|
app = api.vars.build_dir.join('skpbench')
|
|
_adb(api, 'push skpbench', 'push', app, api.flavor.device_dirs.bin_dir)
|
|
|
|
skpbench_dir = api.vars.workdir.join('skia', 'tools', 'skpbench')
|
|
table = api.path.join(api.vars.swarming_out_dir, 'table')
|
|
|
|
config = 'vk' if is_vulkan else 'gles' if is_android else 'gl'
|
|
internal_samples = 4 if is_android else 8
|
|
|
|
if is_all_paths_volatile:
|
|
config = "%smsaa%i" % (config, internal_samples)
|
|
|
|
skpbench_invocation = api.path.join(api.flavor.device_dirs.bin_dir, 'skpbench')
|
|
|
|
# skbug.com/10184
|
|
if is_vulkan and 'GalaxyS20' in api.vars.builder_name:
|
|
skpbench_invocation = "LD_LIBRARY_PATH=/data/local/tmp %s" % skpbench_invocation
|
|
|
|
skpbench_args = [
|
|
skpbench_invocation,
|
|
'--resultsfile', table,
|
|
'--config', config,
|
|
'--internalSamples', str(internal_samples),
|
|
# TODO(dogben): Track down what's causing bots to die.
|
|
'-v5']
|
|
if is_ddl:
|
|
skpbench_args += ['--ddl']
|
|
# disable the mask generation threads for simplicity's sake in DDL mode
|
|
skpbench_args += ['--gpuThreads', '0']
|
|
if is_9x9:
|
|
skpbench_args += [
|
|
'--ddlNumRecordingThreads', 9,
|
|
'--ddlTilingWidthHeight', 3]
|
|
if is_android:
|
|
skpbench_args += [
|
|
'--adb',
|
|
'--adb_binary', ADB_BINARY]
|
|
if is_ccpr:
|
|
skpbench_args += [
|
|
'--pr', 'ccpr', '--cc', '--nocache',
|
|
api.path.join(api.flavor.device_dirs.skp_dir, 'desk_*svg.skp'),
|
|
api.path.join(api.flavor.device_dirs.skp_dir, 'desk_chalkboard.skp')]
|
|
elif is_mskp:
|
|
skpbench_args += [api.flavor.device_dirs.mskp_dir]
|
|
elif is_all_paths_volatile:
|
|
skpbench_args += [
|
|
# nvpr takes every path when enabled, which isn't always the best choice
|
|
# for volatile paths.
|
|
'--pr', '~nvpr',
|
|
'--allPathsVolatile',
|
|
'--suffix', "_volatile",
|
|
api.path.join(api.flavor.device_dirs.skp_dir, 'desk_*svg.skp'),
|
|
api.path.join(api.flavor.device_dirs.skp_dir, 'desk_chalkboard.skp')]
|
|
else:
|
|
skpbench_args += [api.flavor.device_dirs.skp_dir]
|
|
|
|
if api.properties.get('reduce_ops_task_splitting') == 'true':
|
|
skpbench_args += ['--reduceOpsTaskSplitting']
|
|
|
|
api.run(api.python, 'skpbench',
|
|
script=skpbench_dir.join('skpbench.py'),
|
|
args=skpbench_args)
|
|
|
|
skiaperf_args = [
|
|
table,
|
|
'--properties',
|
|
'gitHash', api.properties['revision'],
|
|
]
|
|
if api.vars.is_trybot:
|
|
skiaperf_args.extend([
|
|
'issue', api.vars.issue,
|
|
'patchset', api.vars.patchset,
|
|
'patch_storage', api.vars.patch_storage,
|
|
])
|
|
|
|
skiaperf_args.extend(['swarming_bot_id', api.vars.swarming_bot_id])
|
|
skiaperf_args.extend(['swarming_task_id', api.vars.swarming_task_id])
|
|
|
|
now = api.time.utcnow()
|
|
ts = int(calendar.timegm(now.utctimetuple()))
|
|
json_path = api.path.join(
|
|
api.flavor.host_dirs.perf_data_dir,
|
|
'skpbench_%s_%d.json' % (api.properties['revision'], ts))
|
|
|
|
skiaperf_args.extend([
|
|
'--outfile', json_path
|
|
])
|
|
|
|
skiaperf_args.append('--key')
|
|
for k in sorted(api.vars.builder_cfg.keys()):
|
|
if not k in ['configuration', 'role', 'is_trybot']:
|
|
skiaperf_args.extend([k, api.vars.builder_cfg[k]])
|
|
|
|
api.run(api.python, 'Parse skpbench output into Perf json',
|
|
script=skpbench_dir.join('skiaperf.py'),
|
|
args=skiaperf_args)
|
|
|
|
|
|
def RunSteps(api):
|
|
api.vars.setup()
|
|
api.file.ensure_directory('makedirs tmp_dir', api.vars.tmp_dir)
|
|
|
|
# The app_name passed to api.flavor.setup() is used to determine which app
|
|
# to install on an attached device. That work is done in skpbench_steps, so
|
|
# we pass None here.
|
|
api.flavor.setup(None)
|
|
|
|
try:
|
|
mksp_mode = ('Mskp' in api.vars.builder_name)
|
|
api.flavor.install(skps=not mksp_mode, mskps=mksp_mode)
|
|
skpbench_steps(api)
|
|
finally:
|
|
api.flavor.cleanup_steps()
|
|
api.run.check_failure()
|
|
|
|
|
|
TEST_BUILDERS = [
|
|
('Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-'
|
|
'Android_Skpbench_Mskp'),
|
|
('Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-'
|
|
'Android_CCPR_Skpbench'),
|
|
('Perf-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Release-All-'
|
|
'Android_AllPathsVolatile_Skpbench'),
|
|
('Perf-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Release-All-'
|
|
'Android_Vulkan_AllPathsVolatile_Skpbench'),
|
|
'Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan_Skpbench',
|
|
('Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-'
|
|
'Vulkan_Skpbench_DDLTotal_9x9'),
|
|
('Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-'
|
|
'AllPathsVolatile_Skpbench'),
|
|
]
|
|
|
|
|
|
def GenTests(api):
|
|
for builder in TEST_BUILDERS:
|
|
test = (
|
|
api.test(builder) +
|
|
api.properties(buildername=builder,
|
|
revision='abc123',
|
|
path_config='kitchen',
|
|
swarm_out_dir='[SWARM_OUT_DIR]') +
|
|
api.path.exists(
|
|
api.path['start_dir'].join('skia'),
|
|
api.path['start_dir'].join('skia', 'infra', 'bots', 'assets',
|
|
'skp', 'VERSION'),
|
|
) +
|
|
api.step_data('get swarming bot id',
|
|
stdout=api.raw_io.output('skia-bot-123')) +
|
|
api.step_data('get swarming task id',
|
|
stdout=api.raw_io.output('123456'))
|
|
)
|
|
if 'Win' in builder and not 'LenovoYogaC630' in builder:
|
|
test += api.platform('win', 64)
|
|
yield test
|
|
|
|
b = ('Perf-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-'
|
|
'Android_Vulkan_Skpbench')
|
|
yield (
|
|
api.test('trybot') +
|
|
api.properties(buildername=b,
|
|
revision='abc123',
|
|
path_config='kitchen',
|
|
swarm_out_dir='[SWARM_OUT_DIR]',
|
|
reduce_ops_task_splitting='true') +
|
|
api.path.exists(
|
|
api.path['start_dir'].join('skia'),
|
|
api.path['start_dir'].join('skia', 'infra', 'bots', 'assets',
|
|
'skp', 'VERSION'),
|
|
) +
|
|
api.step_data('get swarming bot id',
|
|
stdout=api.raw_io.output('skia-bot-123')) +
|
|
api.step_data('get swarming task id',
|
|
stdout=api.raw_io.output('123456')) +
|
|
api.properties(patch_storage='gerrit') +
|
|
api.properties.tryserver(
|
|
buildername=b,
|
|
gerrit_project='skia',
|
|
gerrit_url='https://skia-review.googlesource.com/',
|
|
)
|
|
)
|