blob: 23f838020a543247210ea974b755f5c341376b9b [file] [log] [blame]
# Copyright (c) 2015 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.
DEPS = [
'auto_bisect',
'bisect_tester',
'chromium',
'chromium_tests',
'depot_tools/gclient',
'recipe_engine/buildbucket',
'recipe_engine/json',
'recipe_engine/path',
'recipe_engine/platform',
'recipe_engine/properties',
'recipe_engine/raw_io',
'recipe_engine/step',
]
def RunSteps(api):
mastername = api.properties.get('mastername')
buildername = api.properties.get('buildername')
# TODO(akuegel): Explicitly load the builder configs instead of relying on
# builder.py from chromium_tests recipe module.
bot_config = api.chromium_tests.create_bot_config_object(
[api.chromium_tests.create_bot_id(mastername, buildername)])
api.chromium_tests.configure_build(bot_config)
api.gclient.apply_config('perf')
# TODO(robertocn): remove do_not_nest_wait_for_revision once downstream
# expectations have been fixed, and make it behave like this by default.
update_step, bot_db = api.chromium_tests.prepare_checkout(
bot_config, disable_syntax_validation=True)
api.path.c.dynamic_paths['catapult'] = api.path['start_dir'].join(
'catapult')
api.path.c.dynamic_paths['bisect_results'] = api.path['start_dir'].join(
'bisect_results')
api.auto_bisect.start_try_job(api, update_step=update_step,
bot_db=bot_db,
do_not_nest_wait_for_revision=True)
def GenTests(api):
def try_build(**kwargs):
params = dict(
project='chromium',
builder='linux_perf_bisect',
git_repo='https://chromium.googlesource.com/chromium/src',
)
params.update(kwargs)
return api.buildbucket.try_build(**params)
yield (
api.test('basic') +
try_build() +
api.properties.tryserver(
path_config='kitchen',
mastername='tryserver.chromium.perf',
buildername='linux_perf_bisect') +
api.override_step_data(
'git diff to analyze patch',
api.raw_io.stream_output('tools/auto_bisect/bisect.cfg')))
config_json = {
'command': './tools/perf/run_benchmark -v --browser=release sunspider',
'max_time_minutes': '25',
'repeat_count': '1',
'truncate_percent': '25',
'target_arch': 'ia32',
}
results_with_patch = """*RESULT dummy: dummy= [5.83,6.013,5.573]ms
Avg dummy: 5.907711ms
Sd dummy: 0.255921ms
RESULT telemetry_page_measurement_results: num_failed= 0 count
RESULT telemetry_page_measurement_results: num_errored= 0 count
View online at https://console.developers.google.com/\
m/cloudstorage/b/chromium-telemetry/o/html-results/results-with
"""
results_without_patch = """*RESULT dummy: dummy= [5.83,6.013,5.573]ms
Avg dummy: 5.907711ms
Sd dummy: 0.255921ms
RESULT telemetry_page_measurement_results: num_failed= 0 count
RESULT telemetry_page_measurement_results: num_errored= 0 count
View online at https://console.developers.google.com/\
m/cloudstorage/b/chromium-telemetry/o/html-results/results-without
"""
buildbucket_put_response = {
"results":[{
"build":{
"status": "SCHEDULED",
"created_ts": "1459200369835900",
"bucket": "user.username",
"result_details_json": "null",
"status_changed_ts": "1459200369835930",
"created_by": "user:username@example.com",
"updated_ts": "1459200369835940",
"utcnow_ts": "1459200369962370",
"parameters_json": "{\"This_has_been\": \"removed\"}",
"id": "9016911228971028736"
},
"kind": "buildbucket#resourcesItem",
"etag": "\"8uCIh8TRuYs4vPN3iWmly9SJMqw\""
}]
}
buildbucket_get_response = {
"build":{
"bucket": "master.tryserver.chromium.perf",
"id": "9009962699124567824",
"result": "SUCCESS",
"status": "COMPLETED",
"status_changed_utc": "Mon Jun 13 19:32:37 2016",
"updated_utc": "Mon Jun 13 19:32:37 2016",
"url": "http://build.chromium.org/p/tryserver.chromium.perf/builders/linux_perf_bisect/builds/6537",
"utcnow_utc": "Tue Jun 21 21:33:56 2016"
}
}
yield (
api.test('basic_perf_tryjob') +
try_build() +
api.properties.tryserver(
path_config='kitchen',
mastername='tryserver.chromium.perf',
buildername='linux_perf_bisect',
gerrit_project='chromium',
is_test=True) +
api.override_step_data(
'git diff to analyze patch',
api.raw_io.stream_output('tools/run-perf-test.cfg')) +
api.override_step_data('load config', api.json.output(config_json)) +
api.step_data('Running WITHOUT patch.gsutil exists', retcode=1) +
api.step_data(
'Running WITH patch.buildbucket.put',
stdout=api.json.output(buildbucket_put_response)) +
api.step_data(
'Running WITHOUT patch.buildbucket.put',
stdout=api.json.output(buildbucket_put_response)) +
api.step_data(
'Running WITH patch.buildbucket.get',
stdout=api.json.output(buildbucket_get_response)) +
api.step_data(
'Running WITH patch.buildbucket.get (2)',
stdout=api.json.output(buildbucket_get_response)) +
api.step_data(
'Running WITH patch.Performance Test (With Patch) 1 of 1',
api.raw_io.output_text(
str(results_with_patch), name='stdout_proxy')) +
api.step_data(
'Running WITHOUT patch.Performance Test (Without Patch) 1 of 1',
api.raw_io.output_text(
str(results_without_patch), name='stdout_proxy')) +
api.step_data(
'Notify dashboard.Post bisect results',
api.json.output({'status_code': 200})))
perf_try_json = {
'command': 'src/tools/perf/run_benchmark -v --browser=release sunspider' +
' --upload-bucket=private',
'max_time_minutes': '25',
'repeat_count': '1',
'truncate_percent': '25',
'target_arch': 'ia32',
}
yield (
api.test('basic_perf_tryjob_with_bucket') +
try_build() +
api.properties.tryserver(
path_config='kitchen',
mastername='tryserver.chromium.perf',
buildername='linux_perf_bisect',
gerrit_project='chromium',
is_test=True) +
api.override_step_data(
'git diff to analyze patch',
api.raw_io.stream_output('tools/run-perf-test.cfg')) +
api.override_step_data('load config', api.json.output(perf_try_json)) +
api.step_data('Running WITHOUT patch.gsutil exists', retcode=1) +
api.step_data(
'Running WITH patch.buildbucket.put',
stdout=api.json.output(buildbucket_put_response)) +
api.step_data(
'Running WITHOUT patch.buildbucket.put',
stdout=api.json.output(buildbucket_put_response)) +
api.step_data(
'Running WITH patch.buildbucket.get',
stdout=api.json.output(buildbucket_get_response)) +
api.step_data(
'Running WITH patch.buildbucket.get (2)',
stdout=api.json.output(buildbucket_get_response)) +
api.step_data(
'Running WITH patch.Performance Test (With Patch) 1 of 1',
stdout=api.raw_io.output_text(str(results_without_patch))) +
api.step_data(
'Running WITHOUT patch.Performance Test (Without Patch) 1 of 1',
stdout=api.raw_io.output_text(str(results_with_patch))) +
api.step_data(
'Notify dashboard.Post bisect results',
api.json.output({'status_code': 200})))
perf_try_json = {
'command': 'src/tools/perf/run_benchmark -v --browser=release sunspider',
'max_time_minutes': '25',
'repeat_count': '1',
'truncate_percent': '25',
'target_arch': 'ia32',
}
yield (
api.test('deps_perf_tryjob') +
try_build(
git_repo='https://chromium.googlesource.com/v8/v8',
) +
api.properties.tryserver(
path_config='kitchen',
mastername='tryserver.chromium.perf',
buildername='linux_perf_bisect',
patch_project='v8',
deps_revision_overrides={'src/v8': 'feeedbeed'},
gerrit_project='chromium',
is_test=True) +
api.properties(perf_try_config=perf_try_json) +
api.override_step_data(
'git diff to analyze patch', api.raw_io.stream_output('')) +
api.step_data('Running WITHOUT patch.gsutil exists', retcode=1) +
api.step_data(
'Running WITH patch.buildbucket.put',
stdout=api.json.output(buildbucket_put_response)) +
api.step_data(
'Running WITHOUT patch.buildbucket.put',
stdout=api.json.output(buildbucket_put_response)) +
api.step_data(
'Running WITH patch.buildbucket.get',
stdout=api.json.output(buildbucket_get_response)) +
api.step_data(
'Running WITH patch.buildbucket.get (2)',
stdout=api.json.output(buildbucket_get_response)) +
api.step_data(
'Running WITH patch.Performance Test (With Patch) 1 of 1',
api.raw_io.output_text(
str(results_with_patch), name='stdout_proxy')) +
api.step_data(
'Running WITHOUT patch.Performance Test (Without Patch) 1 of 1',
api.raw_io.output_text(
str(results_without_patch), name='stdout_proxy')) +
api.step_data(
'Notify dashboard.Post bisect results',
api.json.output({'status_code': 200})))
config_json.update({'metric': 'dummy/dummy'})
yield (
api.test('basic_perf_tryjob_with_metric') +
try_build() +
api.properties.tryserver(
path_config='kitchen',
mastername='tryserver.chromium.perf',
buildername='linux_perf_bisect',
gerrit_project='chromium',
is_test=True) +
api.override_step_data(
'git diff to analyze patch',
api.raw_io.stream_output('tools/run-perf-test.cfg')) +
api.override_step_data('load config', api.json.output(config_json)) +
api.step_data('Running WITHOUT patch.gsutil exists', retcode=1) +
api.step_data(
'Running WITH patch.buildbucket.put',
stdout=api.json.output(buildbucket_put_response)) +
api.step_data(
'Running WITHOUT patch.buildbucket.put',
stdout=api.json.output(buildbucket_put_response)) +
api.step_data(
'Running WITH patch.buildbucket.get',
stdout=api.json.output(buildbucket_get_response)) +
api.step_data(
'Running WITH patch.buildbucket.get (2)',
stdout=api.json.output(buildbucket_get_response)) +
api.step_data(
'Running WITH patch.Performance Test (With Patch) 1 of 1',
api.raw_io.output_text(
str(results_with_patch), name='stdout_proxy')) +
api.step_data(
'Running WITHOUT patch.Performance Test (Without Patch) 1 of 1',
api.raw_io.output_text(
str(results_with_patch), name='stdout_proxy')) +
api.step_data(
'Notify dashboard.Post bisect results',
api.json.output({'status_code': 200})))
config_valueset = config_json
config_valueset['command'] += ' --output_format=valueset'
yield (
api.test('basic_perf_tryjob_with_metric_valueset') +
try_build() +
api.properties.tryserver(
path_config='kitchen',
mastername='tryserver.chromium.perf',
buildername='linux_perf_bisect',
gerrit_project='chromium',
is_test=True) +
api.override_step_data(
'git diff to analyze patch',
api.raw_io.stream_output('tools/run-perf-test.cfg')) +
api.override_step_data(
'load config', api.json.output(config_valueset)) +
api.step_data('Running WITHOUT patch.gsutil exists', retcode=1) +
api.step_data(
'Running WITH patch.buildbucket.put',
stdout=api.json.output(buildbucket_put_response)) +
api.step_data(
'Running WITHOUT patch.buildbucket.put',
stdout=api.json.output(buildbucket_put_response)) +
api.step_data(
'Running WITH patch.buildbucket.get',
stdout=api.json.output(buildbucket_get_response)) +
api.step_data(
'Running WITH patch.buildbucket.get (2)',
stdout=api.json.output(buildbucket_get_response)) +
api.step_data(
'Running WITH patch.Performance Test (With Patch) 1 of 1',
api.raw_io.output_text(
str(results_with_patch), name='stdout_proxy')) +
api.step_data(
'Running WITHOUT patch.Performance Test (Without Patch) 1 of 1',
api.raw_io.output_text(
str(results_without_patch), name='stdout_proxy')) +
api.step_data(
'Notify dashboard.Post bisect results',
api.json.output({'status_code': 200})))
yield (
api.test('perf_tryjob_failed_test') +
try_build() +
api.properties.tryserver(
path_config='kitchen',
mastername='tryserver.chromium.perf',
buildername='linux_perf_bisect',
gerrit_project='chromium',
is_test=True) +
api.override_step_data(
'git diff to analyze patch',
api.raw_io.stream_output('tools/run-perf-test.cfg')) +
api.override_step_data('load config', api.json.output(config_json)) +
api.step_data('Running WITHOUT patch.gsutil exists', retcode=1) +
api.step_data(
'Running WITH patch.buildbucket.put',
stdout=api.json.output(buildbucket_put_response)) +
api.step_data(
'Running WITHOUT patch.buildbucket.put',
stdout=api.json.output(buildbucket_put_response)) +
api.step_data(
'Running WITH patch.buildbucket.get',
stdout=api.json.output(buildbucket_get_response)) +
api.step_data(
'Running WITH patch.buildbucket.get (2)',
stdout=api.json.output(buildbucket_get_response)) +
api.step_data(
'Running WITH patch.Performance Test (With Patch) 1 of 1',
retcode=1))
config_json.update({'good_revision': '306475', 'bad_revision': '306476'})
yield (
api.test('basic_perf_tryjob_with_revisions') +
try_build() +
api.properties.tryserver(
path_config='kitchen',
mastername='tryserver.chromium.perf',
buildername='linux_perf_bisect',
gerrit_project='chromium',
is_test=True) +
api.override_step_data(
'git diff to analyze patch',
api.raw_io.stream_output('tools/run-perf-test.cfg')) +
api.override_step_data('load config', api.json.output(config_json)) +
api.step_data(
'resolving commit_pos ' + config_json['good_revision'],
stdout=api.raw_io.output_text(
'hash:d49c331def2a3bbf3ddd0096eb51551155')) +
api.step_data(
'resolving commit_pos ' + config_json['bad_revision'],
stdout=api.raw_io.output_text(
'hash:bad49c331def2a3bbf3ddd0096eb51551155')) +
api.step_data('Running WITHOUT patch.gsutil exists', retcode=1) +
api.step_data(
'Running WITH patch.buildbucket.put',
stdout=api.json.output(buildbucket_put_response)) +
api.step_data(
'Running WITHOUT patch.buildbucket.put',
stdout=api.json.output(buildbucket_put_response)) +
api.step_data(
'Running WITH patch.buildbucket.get',
stdout=api.json.output(buildbucket_get_response)) +
api.step_data(
'Running WITH patch.buildbucket.get (2)',
stdout=api.json.output(buildbucket_get_response)) +
api.step_data(
'Running WITH patch.Performance Test (With Patch) 1 of 1',
api.raw_io.output_text(
str(results_with_patch), name='stdout_proxy')) +
api.step_data(
'Running WITHOUT patch.Performance Test (Without Patch) 1 of 1',
api.raw_io.output_text(
str(results_without_patch), name='stdout_proxy')) +
api.step_data(
'Notify dashboard.Post bisect results',
api.json.output({'status_code': 200})))
config_json = {
'max_time_minutes': '25',
'repeat_count': '1',
'truncate_percent': '25',
'target_arch': 'ia32',
}
yield (
api.test('perf_tryjob_config_error') +
try_build() +
api.properties.tryserver(
path_config='kitchen',
mastername='tryserver.chromium.perf',
buildername='linux_perf_bisect') +
api.properties(requester='abcdxyz@chromium.org') +
api.override_step_data(
'git diff to analyze patch',
api.raw_io.stream_output('tools/run-perf-test.cfg')) +
api.override_step_data('load config', api.json.output(config_json)))
yield (api.test('perf_tryjob_no_config') +
try_build() +
api.properties.tryserver(
path_config='kitchen',
mastername='tryserver.chromium.perf',
buildername='linux_perf_bisect',
gerrit_project='chromium',
is_test=True) +
api.properties(requester='commit-bot@chromium.org') +
api.override_step_data(
'git diff to analyze patch',
api.raw_io.stream_output('tools/no_benchmark_file')))