| Index: scripts/slave/recipes/skia/swarm_trigger.py
|
| diff --git a/scripts/slave/recipes/skia/swarm_trigger.py b/scripts/slave/recipes/skia/swarm_trigger.py
|
| index 6378aefbe5c0b048e68742a8c8cfc57713ebce83..8539f004ccceca2eb24b233d8d4c8533d0c66de7 100644
|
| --- a/scripts/slave/recipes/skia/swarm_trigger.py
|
| +++ b/scripts/slave/recipes/skia/swarm_trigger.py
|
| @@ -14,10 +14,12 @@ DEPS = [
|
| 'depot_tools/git',
|
| 'depot_tools/tryserver',
|
| 'file',
|
| + 'gsutil',
|
| 'recipe_engine/path',
|
| 'recipe_engine/properties',
|
| 'recipe_engine/python',
|
| 'recipe_engine/raw_io',
|
| + 'recipe_engine/time',
|
| 'skia',
|
| 'skia_swarming',
|
| ]
|
| @@ -28,6 +30,9 @@ TEST_BUILDERS = {
|
| 'skiabot-linux-swarm-012': [
|
| 'Test-Ubuntu-GCC-ShuttleA-GPU-GTX550Ti-x86_64-Release-Valgrind',
|
| ],
|
| + 'skiabot-linux-swarm-013': [
|
| + 'Test-Ubuntu-Clang-GCE-CPU-AVX2-x86_64-Coverage-Trybot',
|
| + ],
|
| },
|
| 'client.skia.fyi': {
|
| 'skiabot-linux-housekeeper-003': [
|
| @@ -164,8 +169,11 @@ def trigger_task(api, task_name, builder, builder_spec, got_revision,
|
| 'WORKDIR': api.path['slave_build'],
|
| }
|
|
|
| + isolate_file = '%s_skia.isolate' % task_name
|
| + if 'Coverage' == builder_cfg['configuration']:
|
| + isolate_file = 'coverage_skia.isolate'
|
| return api.skia_swarming.isolate_and_trigger_task(
|
| - infrabots_dir.join('%s_skia.isolate' % task_name),
|
| + infrabots_dir.join(isolate_file),
|
| isolate_base_dir,
|
| '%s_skia' % task_name,
|
| isolate_vars,
|
| @@ -247,6 +255,8 @@ def get_timeouts(builder_cfg):
|
| if 'Valgrind' in builder_cfg.get('extra_config', ''):
|
| expiration = 2*24*60*60
|
| hard_timeout = 9*60*60
|
| + elif 'Coverage' == builder_cfg['configuration']:
|
| + hard_timeout = 3*60*60
|
| return expiration, hard_timeout
|
|
|
|
|
| @@ -321,8 +331,9 @@ def test_steps_trigger(api, builder_spec, got_revision, infrabots_dir,
|
| hard_timeout=hard_timeout)
|
|
|
|
|
| -def test_steps_collect(api, task, upload_dm_results, got_revision, is_trybot):
|
| - """Collect the DM results from Swarming."""
|
| +def test_steps_collect(api, task, upload_dm_results, got_revision, is_trybot,
|
| + builder_cfg):
|
| + """Collect the test results from Swarming."""
|
| # Wait for tests to finish, download the results.
|
| api.file.rmtree('results_dir', task.task_output_dir, infra_step=True)
|
| api.skia_swarming.collect_swarming_task(task)
|
| @@ -350,6 +361,81 @@ def test_steps_collect(api, task, upload_dm_results, got_revision, is_trybot):
|
| env=api.skia.gsutil_env('chromium-skia-gm.boto'),
|
| infra_step=True)
|
|
|
| + if builder_cfg['configuration'] == 'Coverage':
|
| + upload_coverage_results(api, task, got_revision, is_trybot)
|
| +
|
| +
|
| +def upload_coverage_results(api, task, got_revision, is_trybot):
|
| + results_dir = task.task_output_dir.join('0')
|
| + git_timestamp = api.git.get_timestamp(test_data='1408633190',
|
| + infra_step=True)
|
| +
|
| + # Upload raw coverage data.
|
| + cov_file_basename = '%s.cov' % got_revision
|
| + cov_file = results_dir.join(cov_file_basename)
|
| + now = api.time.utcnow()
|
| + gs_json_path = '/'.join((
|
| + str(now.year).zfill(4), str(now.month).zfill(2),
|
| + str(now.day).zfill(2), str(now.hour).zfill(2),
|
| + api.properties['buildername'],
|
| + str(api.properties['buildnumber'])))
|
| + if is_trybot:
|
| + gs_json_path = '/'.join(('trybot', gs_json_path,
|
| + str(api.properties['issue'])))
|
| + api.gsutil.upload(
|
| + name='upload raw coverage data',
|
| + source=cov_file,
|
| + bucket='skia-infra',
|
| + dest='/'.join(('coverage-raw-v1', gs_json_path,
|
| + cov_file_basename)),
|
| + env={'AWS_CREDENTIAL_FILE': None, 'BOTO_CONFIG': None},
|
| + )
|
| +
|
| + # Transform the nanobench_${git_hash}.json file received from swarming bot
|
| + # into the nanobench_${git_hash}_${timestamp}.json file
|
| + # upload_bench_results.py expects.
|
| + src_nano_file = results_dir.join('nanobench_%s.json' % got_revision)
|
| + dst_nano_file = results_dir.join(
|
| + 'nanobench_%s_%s.json' % (got_revision, git_timestamp))
|
| + api.file.copy('nanobench JSON', src_nano_file, dst_nano_file,
|
| + infra_step=True)
|
| + api.file.remove('old nanobench JSON', src_nano_file)
|
| +
|
| + # Upload nanobench JSON data.
|
| + gsutil_path = api.path['depot_tools'].join(
|
| + 'third_party', 'gsutil', 'gsutil')
|
| + upload_args = [api.properties['buildername'], api.properties['buildnumber'],
|
| + results_dir, got_revision, gsutil_path]
|
| + if is_trybot:
|
| + upload_args.append(api.properties['issue'])
|
| + api.python(
|
| + 'upload nanobench coverage results',
|
| + script=api.skia.resource('upload_bench_results.py'),
|
| + args=upload_args,
|
| + cwd=api.path['checkout'],
|
| + env=api.skia.gsutil_env('chromium-skia-gm.boto'),
|
| + infra_step=True)
|
| +
|
| + # Transform the coverage_by_line_${git_hash}.json file received from
|
| + # swarming bot into a coverage_by_line_${git_hash}_${timestamp}.json file.
|
| + src_lbl_file = results_dir.join('coverage_by_line_%s.json' % got_revision)
|
| + dst_lbl_file_basename = 'coverage_by_line_%s_%s.json' % (
|
| + got_revision, git_timestamp)
|
| + dst_lbl_file = results_dir.join(dst_lbl_file_basename)
|
| + api.file.copy('Line-by-line coverage JSON', src_lbl_file, dst_lbl_file,
|
| + infra_step=True)
|
| + api.file.remove('old line-by-line coverage JSON', src_lbl_file)
|
| +
|
| + # Upload line-by-line coverage data.
|
| + api.gsutil.upload(
|
| + name='upload line-by-line coverage data',
|
| + source=dst_lbl_file,
|
| + bucket='skia-infra',
|
| + dest='/'.join(('coverage-json-v1', gs_json_path,
|
| + dst_lbl_file_basename)),
|
| + env={'AWS_CREDENTIAL_FILE': None, 'BOTO_CONFIG': None},
|
| + )
|
| +
|
|
|
| def RunSteps(api):
|
| got_revision = checkout_steps(api)
|
| @@ -364,8 +450,11 @@ def RunSteps(api):
|
|
|
| recipes_hash = isolate_recipes(api)
|
|
|
| - compile_hash = compile_steps_swarm(api, builder_spec, got_revision,
|
| - infrabots_dir, [recipes_hash])
|
| + do_compile_steps = builder_spec.get('do_compile_steps', True)
|
| + compile_hash = None
|
| + if do_compile_steps:
|
| + compile_hash = compile_steps_swarm(api, builder_spec, got_revision,
|
| + infrabots_dir, [recipes_hash])
|
|
|
| do_test_steps = builder_spec['do_test_steps']
|
| do_perf_steps = builder_spec['do_perf_steps']
|
| @@ -373,7 +462,9 @@ def RunSteps(api):
|
| if not (do_test_steps or do_perf_steps):
|
| return
|
|
|
| - extra_hashes = [recipes_hash, compile_hash]
|
| + extra_hashes = [recipes_hash]
|
| + if compile_hash:
|
| + extra_hashes.append(compile_hash)
|
|
|
| api.skia.download_skps(api.path['slave_build'].join('tmp'),
|
| api.path['slave_build'].join('skps'),
|
| @@ -393,7 +484,7 @@ def RunSteps(api):
|
| is_trybot = builder_cfg['is_trybot']
|
| if test_task:
|
| test_steps_collect(api, test_task, builder_spec['upload_dm_results'],
|
| - got_revision, is_trybot)
|
| + got_revision, is_trybot, builder_cfg)
|
| if perf_task:
|
| perf_steps_collect(api, perf_task, builder_spec['upload_perf_results'],
|
| got_revision, is_trybot)
|
| @@ -418,9 +509,10 @@ def test_for_bot(api, builder, mastername, slavename, testname=None):
|
| test += api.properties(issue=500,
|
| patchset=1,
|
| rietveld='https://codereview.chromium.org')
|
| - test += api.step_data(
|
| - 'upload new .isolated file for compile_skia',
|
| - stdout=api.raw_io.output('def456 XYZ.isolated'))
|
| + if 'Coverage' not in builder:
|
| + test += api.step_data(
|
| + 'upload new .isolated file for compile_skia',
|
| + stdout=api.raw_io.output('def456 XYZ.isolated'))
|
| if 'Test' in builder:
|
| test += api.step_data(
|
| 'upload new .isolated file for test_skia',
|
|
|