Index: infra/bots/recipes/swarm_perf.py |
diff --git a/infra/bots/recipes/swarm_perf.py b/infra/bots/recipes/swarm_perf.py |
index 7d0d5e482a00565c266cd94dd5f35b5f00f87672..b46ba92f22361c9e3b1f199caa845201d665c610 100644 |
--- a/infra/bots/recipes/swarm_perf.py |
+++ b/infra/bots/recipes/swarm_perf.py |
@@ -23,17 +23,140 @@ DEPS = [ |
TEST_BUILDERS = { |
'client.skia': { |
'skiabot-linux-swarm-000': [ |
+ #'Perf-Android-GCC-GalaxyS3-GPU-Mali400-Arm7-Release', |
+ #'Perf-Android-GCC-Nexus5-GPU-Adreno330-Arm7-Debug', |
+ #'Perf-Android-GCC-Nexus6-GPU-Adreno420-Arm7-Release', |
+ 'Perf-Android-GCC-Nexus7-GPU-Tegra3-Arm7-Release', |
+ #'Perf-Android-GCC-NexusPlayer-GPU-PowerVR-x86-Release', |
+ #'Perf-Android-GCC-NVIDIA_Shield-GPU-TegraX1-Arm64-Debug-Vulkan', |
+ #'Perf-iOS-Clang-iPad4-GPU-SGX554-Arm7-Debug', |
+ #'Perf-Mac-Clang-MacMini6.2-CPU-AVX-x86_64-Release-GN', |
+ 'Perf-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind', |
+ 'Perf-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-VisualBench', |
'Perf-Win-MSVC-GCE-CPU-AVX2-x86_64-Release', |
'Perf-Win-MSVC-GCE-CPU-AVX2-x86_64-Debug', |
'Perf-Win8-MSVC-ShuttleB-GPU-HD4600-x86_64-Release-Trybot', |
- 'Perf-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind', |
- 'Perf-Android-GCC-Nexus7-GPU-Tegra3-Arm7-Release', |
- 'Perf-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-VisualBench', |
], |
}, |
} |
+def nanobench_flags(bot): |
+ args = ['--pre_log'] |
+ |
+ if 'GPU' in bot: |
+ args.append('--images') |
+ args.extend(['--gpuStatsDump', 'true']) |
+ |
+ if 'Android' in bot and 'GPU' in bot: |
+ args.extend(['--useThermalManager', '1,1,10,1000']) |
+ |
+ args.extend(['--scales', '1.0', '1.1']) |
+ |
+ if 'iOS' in bot: |
+ args.extend(['--skps', 'ignore_skps']) # pragma: no cover |
+ |
+ config = ['565', '8888', 'gpu', 'nonrendering', 'angle', 'hwui' ] |
+ config += [ 'f16', 'srgb' ] |
+ # The S4 crashes and the NP produces a long error stream when we run with |
+ # MSAA. |
+ if ('GalaxyS4' not in bot and |
+ 'NexusPlayer' not in bot): |
+ if 'Android' in bot: |
+ # The TegraX1 has a regular OpenGL implementation. We bench that instead |
+ # of ES. |
+ if 'TegraX1' in bot: # pragma: no cover |
+ config.remove('gpu') |
+ config.extend(['gl', 'glmsaa4', 'glnvpr4', 'glnvprdit4']) |
+ else: |
+ config.extend(['msaa4', 'nvpr4', 'nvprdit4']) |
+ else: |
+ config.extend(['msaa16', 'nvpr16', 'nvprdit16']) |
+ |
+ # Bench instanced rendering on a limited number of platforms |
+ if 'Nexus6' in bot: # pragma: no cover |
+ config.append('esinst') # esinst4 isn't working yet on Adreno. |
+ elif 'TegraX1' in bot: |
+ config.extend(['glinst', 'glinst4']) # pragma: no cover |
+ elif 'MacMini6.2' in bot: |
+ config.extend(['glinst', 'glinst16']) # pragma: no cover |
+ |
+ if 'Vulkan' in bot: |
+ config = ['vk'] # pragma: no cover |
+ |
+ args.append('--config') |
+ args.extend(config) |
+ |
+ if 'Valgrind' in bot: |
+ # Don't care about Valgrind performance. |
+ args.extend(['--loops', '1']) |
+ args.extend(['--samples', '1']) |
+ # Ensure that the bot framework does not think we have timed out. |
+ args.extend(['--keepAlive', 'true']) |
+ |
+ match = [] |
+ if 'Android' in bot: |
+ # Segfaults when run as GPU bench. Very large texture? |
+ match.append('~blurroundrect') |
+ match.append('~patch_grid') # skia:2847 |
+ match.append('~desk_carsvg') |
+ if 'NexusPlayer' in bot: |
+ match.append('~desk_unicodetable') # pragma: no cover |
+ if 'Nexus5' in bot: # pragma: no cover |
+ match.append('~keymobi_shop_mobileweb_ebay_com.skp') # skia:5178 |
+ if 'iOS' in bot: # pragma: no cover |
+ match.append('~blurroundrect') |
+ match.append('~patch_grid') # skia:2847 |
+ match.append('~desk_carsvg') |
+ match.append('~keymobi') |
+ match.append('~path_hairline') |
+ match.append('~GLInstancedArraysBench') # skia:4714 |
+ |
+ # the 32-bit GCE bots run out of memory in DM when running these large images |
+ # so defensively disable them in nanobench, too. |
+ # FIXME (scroggo): This may have just been due to SkImageDecoder's |
+ # buildTileIndex leaking memory (https://bug.skia.org/4360). That is |
+ # disabled by default for nanobench, so we may not need this. |
+ # FIXME (scroggo): Share image blacklists between dm and nanobench? |
+ if 'x86' in bot and not 'x86-64' in bot: |
+ match.append('~interlaced1.png') |
+ match.append('~interlaced2.png') |
+ match.append('~interlaced3.png') |
+ |
+ # This low-end Android bot crashes about 25% of the time while running the |
+ # (somewhat intense) shapes benchmarks. |
+ if 'Perf-Android-GCC-GalaxyS3-GPU-Mali400-Arm7-Release' in bot: |
+ match.append('~shapes_') # pragma: no cover |
+ |
+ # We do not need or want to benchmark the decodes of incomplete images. |
+ # In fact, in nanobench we assert that the full image decode succeeds. |
+ match.append('~inc0.gif') |
+ match.append('~inc1.gif') |
+ match.append('~incInterlaced.gif') |
+ match.append('~inc0.jpg') |
+ match.append('~incGray.jpg') |
+ match.append('~inc0.wbmp') |
+ match.append('~inc1.wbmp') |
+ match.append('~inc0.webp') |
+ match.append('~inc1.webp') |
+ match.append('~inc0.ico') |
+ match.append('~inc1.ico') |
+ match.append('~inc0.png') |
+ match.append('~inc1.png') |
+ match.append('~inc2.png') |
+ match.append('~inc12.png') |
+ match.append('~inc13.png') |
+ match.append('~inc14.png') |
+ match.append('~inc0.webp') |
+ match.append('~inc1.webp') |
+ |
+ if match: |
+ args.append('--match') |
+ args.extend(match) |
+ |
+ return args |
+ |
+ |
def perf_steps(api): |
"""Run Skia benchmarks.""" |
if api.vars.upload_perf_results: |
@@ -71,7 +194,7 @@ def perf_steps(api): |
skip_flag = '--nocpu' |
if skip_flag: |
args.append(skip_flag) |
- args.extend(api.vars.builder_spec['nanobench_flags']) |
+ args.extend(nanobench_flags(api.vars.builder_name)) |
if api.vars.upload_perf_results: |
json_path = api.flavor.device_path_join( |
@@ -123,21 +246,23 @@ def GenTests(api): |
'get EXTERNAL_STORAGE dir', |
stdout=api.raw_io.output('/storage/emulated/legacy')) + |
api.step_data( |
- 'adb root', |
- stdout=api.raw_io.output('restarting adbd as root')) + |
- api.step_data( |
'read SKP_VERSION', |
stdout=api.raw_io.output('42')) + |
api.step_data( |
'read SK_IMAGE_VERSION', |
stdout=api.raw_io.output('42')) + |
api.step_data( |
- 'exists skia_perf', |
- stdout=api.raw_io.output('')) + |
- api.step_data( |
'which adb', |
retcode=1) |
) |
+ if not 'Debug' in builder: |
+ test_data += api.step_data( |
+ 'exists skia_perf', |
+ stdout=api.raw_io.output('')) |
+ if not 'GalaxyS3' in builder: |
+ test_data += api.step_data( |
+ 'adb root', |
+ stdout=api.raw_io.output('restarting adbd as root')) |
return test_data |
for mastername, slaves in TEST_BUILDERS.iteritems(): |