1cb93a386Sopenharmony_ci# Copyright 2016 The Chromium Authors. All rights reserved. 2cb93a386Sopenharmony_ci# Use of this source code is governed by a BSD-style license that can be 3cb93a386Sopenharmony_ci# found in the LICENSE file. 4cb93a386Sopenharmony_ci 5cb93a386Sopenharmony_ci 6cb93a386Sopenharmony_ci# Recipe module for Skia Swarming perf. 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ci 9cb93a386Sopenharmony_ciimport calendar 10cb93a386Sopenharmony_ciimport json 11cb93a386Sopenharmony_ciimport os 12cb93a386Sopenharmony_ci 13cb93a386Sopenharmony_ciPYTHON_VERSION_COMPATIBILITY = "PY2+3" 14cb93a386Sopenharmony_ci 15cb93a386Sopenharmony_ciDEPS = [ 16cb93a386Sopenharmony_ci 'env', 17cb93a386Sopenharmony_ci 'flavor', 18cb93a386Sopenharmony_ci 'recipe_engine/file', 19cb93a386Sopenharmony_ci 'recipe_engine/json', 20cb93a386Sopenharmony_ci 'recipe_engine/path', 21cb93a386Sopenharmony_ci 'recipe_engine/platform', 22cb93a386Sopenharmony_ci 'recipe_engine/properties', 23cb93a386Sopenharmony_ci 'recipe_engine/raw_io', 24cb93a386Sopenharmony_ci 'recipe_engine/step', 25cb93a386Sopenharmony_ci 'recipe_engine/time', 26cb93a386Sopenharmony_ci 'run', 27cb93a386Sopenharmony_ci 'vars', 28cb93a386Sopenharmony_ci] 29cb93a386Sopenharmony_ci 30cb93a386Sopenharmony_ci 31cb93a386Sopenharmony_cidef perf_steps(api): 32cb93a386Sopenharmony_ci """Run Skia benchmarks.""" 33cb93a386Sopenharmony_ci do_upload = api.properties.get('do_upload') == 'true' 34cb93a386Sopenharmony_ci images = api.properties.get('images') == 'true' 35cb93a386Sopenharmony_ci resources = api.properties.get('resources') == 'true' 36cb93a386Sopenharmony_ci skps = api.properties.get('skps') == 'true' 37cb93a386Sopenharmony_ci svgs = api.properties.get('svgs') == 'true' 38cb93a386Sopenharmony_ci texttraces = api.properties.get('texttraces') == 'true' 39cb93a386Sopenharmony_ci 40cb93a386Sopenharmony_ci api.flavor.install( 41cb93a386Sopenharmony_ci resources=resources, 42cb93a386Sopenharmony_ci skps=skps, 43cb93a386Sopenharmony_ci images=images, 44cb93a386Sopenharmony_ci svgs=svgs, 45cb93a386Sopenharmony_ci texttraces=texttraces, 46cb93a386Sopenharmony_ci ) 47cb93a386Sopenharmony_ci 48cb93a386Sopenharmony_ci if do_upload: 49cb93a386Sopenharmony_ci api.flavor.create_clean_device_dir( 50cb93a386Sopenharmony_ci api.flavor.device_dirs.perf_data_dir) 51cb93a386Sopenharmony_ci 52cb93a386Sopenharmony_ci # Find nanobench flags. 53cb93a386Sopenharmony_ci args = json.loads(api.properties['nanobench_flags']) 54cb93a386Sopenharmony_ci props = json.loads(api.properties['nanobench_properties']) 55cb93a386Sopenharmony_ci swarming_bot_id = api.vars.swarming_bot_id 56cb93a386Sopenharmony_ci swarming_task_id = api.vars.swarming_task_id 57cb93a386Sopenharmony_ci if do_upload: 58cb93a386Sopenharmony_ci args.append('--properties') 59cb93a386Sopenharmony_ci # Map iteration order is arbitrary; in order to maintain a consistent step 60cb93a386Sopenharmony_ci # ordering, sort by key. 61cb93a386Sopenharmony_ci for k in sorted(props.keys()): 62cb93a386Sopenharmony_ci v = props[k] 63cb93a386Sopenharmony_ci if v == '${SWARMING_BOT_ID}': 64cb93a386Sopenharmony_ci v = swarming_bot_id 65cb93a386Sopenharmony_ci elif v == '${SWARMING_TASK_ID}': 66cb93a386Sopenharmony_ci v = swarming_task_id 67cb93a386Sopenharmony_ci if v != '': 68cb93a386Sopenharmony_ci args.extend([k, v]) 69cb93a386Sopenharmony_ci 70cb93a386Sopenharmony_ci # Paths to required resources. 71cb93a386Sopenharmony_ci if resources: 72cb93a386Sopenharmony_ci args.extend(['-i', api.flavor.device_dirs.resource_dir]) 73cb93a386Sopenharmony_ci if skps: 74cb93a386Sopenharmony_ci args.extend(['--skps', api.flavor.device_dirs.skp_dir]), 75cb93a386Sopenharmony_ci if images: 76cb93a386Sopenharmony_ci args.extend(['--images', api.flavor.device_path_join( 77cb93a386Sopenharmony_ci api.flavor.device_dirs.images_dir, 'nanobench')]) 78cb93a386Sopenharmony_ci if texttraces: 79cb93a386Sopenharmony_ci assert api.flavor.device_dirs.texttraces_dir 80cb93a386Sopenharmony_ci args.extend(['--texttraces', api.flavor.device_dirs.texttraces_dir]) 81cb93a386Sopenharmony_ci if svgs: 82cb93a386Sopenharmony_ci args.extend(['--svgs', api.flavor.device_dirs.svg_dir]) 83cb93a386Sopenharmony_ci if do_upload: 84cb93a386Sopenharmony_ci now = api.time.utcnow() 85cb93a386Sopenharmony_ci ts = int(calendar.timegm(now.utctimetuple())) 86cb93a386Sopenharmony_ci json_path = api.flavor.device_path_join( 87cb93a386Sopenharmony_ci api.flavor.device_dirs.perf_data_dir, 88cb93a386Sopenharmony_ci 'nanobench_%s_%d.json' % (api.properties['revision'], ts)) 89cb93a386Sopenharmony_ci args.extend(['--outResultsFile', json_path]) 90cb93a386Sopenharmony_ci 91cb93a386Sopenharmony_ci api.run(api.flavor.step, 'nanobench', cmd=args, 92cb93a386Sopenharmony_ci abort_on_failure=False) 93cb93a386Sopenharmony_ci 94cb93a386Sopenharmony_ci # Copy results to swarming out dir. 95cb93a386Sopenharmony_ci if do_upload: 96cb93a386Sopenharmony_ci api.file.ensure_directory( 97cb93a386Sopenharmony_ci 'makedirs perf_dir', 98cb93a386Sopenharmony_ci api.flavor.host_dirs.perf_data_dir) 99cb93a386Sopenharmony_ci api.flavor.copy_directory_contents_to_host( 100cb93a386Sopenharmony_ci api.flavor.device_dirs.perf_data_dir, 101cb93a386Sopenharmony_ci api.flavor.host_dirs.perf_data_dir) 102cb93a386Sopenharmony_ci 103cb93a386Sopenharmony_ci 104cb93a386Sopenharmony_cidef RunSteps(api): 105cb93a386Sopenharmony_ci api.vars.setup() 106cb93a386Sopenharmony_ci api.file.ensure_directory('makedirs tmp_dir', api.vars.tmp_dir) 107cb93a386Sopenharmony_ci api.flavor.setup('nanobench') 108cb93a386Sopenharmony_ci 109cb93a386Sopenharmony_ci try: 110cb93a386Sopenharmony_ci perf_steps(api) 111cb93a386Sopenharmony_ci finally: 112cb93a386Sopenharmony_ci api.flavor.cleanup_steps() 113cb93a386Sopenharmony_ci api.run.check_failure() 114cb93a386Sopenharmony_ci 115cb93a386Sopenharmony_ci 116cb93a386Sopenharmony_ciTEST_BUILDERS = [ 117cb93a386Sopenharmony_ci 'Perf-Android-Clang-Nexus7-CPU-Tegra3-arm-Debug-All-Android', 118cb93a386Sopenharmony_ci ('Perf-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All' 119cb93a386Sopenharmony_ci '-Valgrind_SK_CPU_LIMIT_SSE41'), 120cb93a386Sopenharmony_ci 'Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-ANGLE', 121cb93a386Sopenharmony_ci] 122cb93a386Sopenharmony_ci 123cb93a386Sopenharmony_ci 124cb93a386Sopenharmony_cidef GenTests(api): 125cb93a386Sopenharmony_ci for builder in TEST_BUILDERS: 126cb93a386Sopenharmony_ci props = dict( 127cb93a386Sopenharmony_ci buildername=builder, 128cb93a386Sopenharmony_ci nanobench_flags='["nanobench","--example","--flags"]', 129cb93a386Sopenharmony_ci nanobench_properties=('{"key1":"value1","key2":"",' 130cb93a386Sopenharmony_ci '"bot":"${SWARMING_BOT_ID}",' 131cb93a386Sopenharmony_ci '"task":"${SWARMING_TASK_ID}"}'), 132cb93a386Sopenharmony_ci path_config='kitchen', 133cb93a386Sopenharmony_ci resources='true', 134cb93a386Sopenharmony_ci revision='abc123', 135cb93a386Sopenharmony_ci swarm_out_dir='[SWARM_OUT_DIR]' 136cb93a386Sopenharmony_ci ) 137cb93a386Sopenharmony_ci if 'Valgrind' not in builder and 'Debug' not in builder: 138cb93a386Sopenharmony_ci props['do_upload'] = 'true' 139cb93a386Sopenharmony_ci if 'GPU' not in builder: 140cb93a386Sopenharmony_ci props['images'] = 'true' 141cb93a386Sopenharmony_ci if 'iOS' not in builder: 142cb93a386Sopenharmony_ci props['skps'] = 'true' 143cb93a386Sopenharmony_ci if 'Valgrind' not in builder: 144cb93a386Sopenharmony_ci props['svgs'] = 'true' 145cb93a386Sopenharmony_ci if 'Android' in builder and 'CPU' in builder: 146cb93a386Sopenharmony_ci props['texttraces'] = 'true' 147cb93a386Sopenharmony_ci test = ( 148cb93a386Sopenharmony_ci api.test(builder) + 149cb93a386Sopenharmony_ci api.properties(**props) + 150cb93a386Sopenharmony_ci api.path.exists( 151cb93a386Sopenharmony_ci api.path['start_dir'].join('skia'), 152cb93a386Sopenharmony_ci api.path['start_dir'].join('skia', 'infra', 'bots', 'assets', 153cb93a386Sopenharmony_ci 'skimage', 'VERSION'), 154cb93a386Sopenharmony_ci api.path['start_dir'].join('skia', 'infra', 'bots', 'assets', 155cb93a386Sopenharmony_ci 'skp', 'VERSION'), 156cb93a386Sopenharmony_ci api.path['start_dir'].join('tmp', 'uninteresting_hashes.txt') 157cb93a386Sopenharmony_ci ) + 158cb93a386Sopenharmony_ci api.step_data('get swarming bot id', 159cb93a386Sopenharmony_ci stdout=api.raw_io.output('skia-bot-123')) + 160cb93a386Sopenharmony_ci api.step_data('get swarming task id', 161cb93a386Sopenharmony_ci stdout=api.raw_io.output('123456')) 162cb93a386Sopenharmony_ci ) 163cb93a386Sopenharmony_ci if 'Win' in builder: 164cb93a386Sopenharmony_ci test += api.platform('win', 64) 165cb93a386Sopenharmony_ci 166cb93a386Sopenharmony_ci yield test 167