1 # Copyright 2016 The Chromium Authors. All rights reserved. 2 # Use of this source code is governed by a BSD-style license that can be 3 # found in the LICENSE file. 4 5 6 # Recipe for Skia skpbench. 7 8 9 import calendar 10 11 12 DEPS = [ 13 'core', 14 'flavor', 15 'recipe_engine/context', 16 'recipe_engine/file', 17 'recipe_engine/path', 18 'recipe_engine/properties', 19 'recipe_engine/python', 20 'recipe_engine/raw_io', 21 'recipe_engine/step', 22 'recipe_engine/time', 23 'run', 24 'vars', 25 ] 26 27 ADB_BINARY = 'adb.1.0.35' 28 29 30 def _run(api, title, *cmd, **kwargs): 31 with api.context(cwd=api.vars.skia_dir): 32 return api.run(api.step, title, cmd=list(cmd), **kwargs) 33 34 35 def _adb(api, title, *cmd, **kwargs): 36 if 'infra_step' not in kwargs: 37 kwargs['infra_step'] = True 38 return _run(api, title, ADB_BINARY, *cmd, **kwargs) 39 40 41 def skpbench_steps(api): 42 """benchmark Skia using skpbench.""" 43 app = api.vars.skia_out.join(api.vars.configuration, 'skpbench') 44 _adb(api, 'push skpbench', 'push', app, api.vars.android_bin_dir) 45 46 skpbench_dir = api.vars.slave_dir.join('skia', 'tools', 'skpbench') 47 table = api.path.join(api.vars.swarming_out_dir, 'table') 48 49 if 'Vulkan' in api.vars.builder_name: 50 config = 'vk' 51 else: 52 config = 'gles' 53 54 skpbench_args = [ 55 api.path.join(api.vars.android_bin_dir, 'skpbench'), 56 '--adb', 57 '--adb_binary', ADB_BINARY, 58 '--resultsfile', table, 59 '--config', config, 60 # TODO(dogben): Track down what's causing bots to die. 61 '-v5'] 62 if 'CCPR' in api.vars.builder_name: 63 skpbench_args += [ 64 '--pr', 'ccpr', 65 '--nocache', 66 api.path.join(api.vars.android_data_dir, 'skps/desk_*svg.skp'), 67 api.path.join(api.vars.android_data_dir, 'skps/desk_chalkboard.skp')] 68 else: 69 skpbench_args += [ 70 api.path.join(api.vars.android_data_dir, 'skps')] 71 72 api.run(api.python, 'skpbench', 73 script=skpbench_dir.join('skpbench.py'), 74 args=skpbench_args) 75 76 skiaperf_args = [ 77 table, 78 '--properties', 79 'gitHash', api.vars.got_revision, 80 ] 81 if api.vars.is_trybot: 82 skiaperf_args.extend([ 83 'issue', api.vars.issue, 84 'patchset', api.vars.patchset, 85 'patch_storage', api.vars.patch_storage, 86 ]) 87 88 skiaperf_args.extend(['swarming_bot_id', api.vars.swarming_bot_id]) 89 skiaperf_args.extend(['swarming_task_id', api.vars.swarming_task_id]) 90 91 now = api.time.utcnow() 92 ts = int(calendar.timegm(now.utctimetuple())) 93 api.file.ensure_directory('makedirs perf_dir', api.vars.perf_data_dir) 94 json_path = api.path.join( 95 api.vars.perf_data_dir, 96 'skpbench_%s_%d.json' % (api.vars.got_revision, ts)) 97 98 skiaperf_args.extend([ 99 '--outfile', json_path 100 ]) 101 102 keys_blacklist = ['configuration', 'role', 'is_trybot'] 103 skiaperf_args.append('--key') 104 for k in sorted(api.vars.builder_cfg.keys()): 105 if not k in keys_blacklist: 106 skiaperf_args.extend([k, api.vars.builder_cfg[k]]) 107 108 api.run(api.python, 'Parse skpbench output into Perf json', 109 script=skpbench_dir.join('skiaperf.py'), 110 args=skiaperf_args) 111 112 113 def RunSteps(api): 114 api.core.setup() 115 try: 116 api.flavor.install(skps=True) 117 skpbench_steps(api) 118 finally: 119 api.flavor.cleanup_steps() 120 api.run.check_failure() 121 122 123 TEST_BUILDERS = [ 124 'Perf-Android-Clang-PixelC-GPU-TegraX1-arm64-Release-All-Android_Skpbench', 125 ('Perf-Android-Clang-PixelC-GPU-TegraX1-arm64-Release-All-' 126 'Android_Vulkan_Skpbench'), 127 ('Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-' 128 'Android_CCPR_Skpbench'), 129 ] 130 131 132 def GenTests(api): 133 for builder in TEST_BUILDERS: 134 test = ( 135 api.test(builder) + 136 api.properties(buildername=builder, 137 revision='abc123', 138 path_config='kitchen', 139 swarm_out_dir='[SWARM_OUT_DIR]') + 140 api.path.exists( 141 api.path['start_dir'].join('skia'), 142 api.path['start_dir'].join('skia', 'infra', 'bots', 'assets', 143 'skp', 'VERSION'), 144 ) + 145 api.step_data('get swarming bot id', 146 stdout=api.raw_io.output('skia-bot-123')) + 147 api.step_data('get swarming task id', 148 stdout=api.raw_io.output('123456')) 149 ) 150 151 yield test 152 153 b = ('Perf-Android-Clang-PixelC-GPU-TegraX1-arm64-Release-All-' 154 'Android_Skpbench') 155 yield ( 156 api.test('trybot') + 157 api.properties(buildername=b, 158 revision='abc123', 159 path_config='kitchen', 160 swarm_out_dir='[SWARM_OUT_DIR]') + 161 api.path.exists( 162 api.path['start_dir'].join('skia'), 163 api.path['start_dir'].join('skia', 'infra', 'bots', 'assets', 164 'skp', 'VERSION'), 165 ) + 166 api.step_data('get swarming bot id', 167 stdout=api.raw_io.output('skia-bot-123')) + 168 api.step_data('get swarming task id', 169 stdout=api.raw_io.output('123456')) + 170 api.properties(patch_storage='gerrit') + 171 api.properties.tryserver( 172 buildername=b, 173 gerrit_project='skia', 174 gerrit_url='https://skia-review.googlesource.com/', 175 ) 176 ) 177