Chromium Code Reviews| Index: masters/master.chromium.webkit/master_gpu_latest_cfg.py |
| diff --git a/masters/master.chromium.webkit/master_gpu_latest_cfg.py b/masters/master.chromium.webkit/master_gpu_latest_cfg.py |
| index 77c96fa17e0e6c03991fc5e7cd25881c38543c41..96ea2d170d6f7e6afd92a3b9b46fceca253d681c 100644 |
| --- a/masters/master.chromium.webkit/master_gpu_latest_cfg.py |
| +++ b/masters/master.chromium.webkit/master_gpu_latest_cfg.py |
| @@ -6,15 +6,18 @@ |
| from master import master_config |
| from master.factory import annotator_factory |
| +import collections |
| + |
| defaults = {} |
| helper = master_config.Helper(defaults) |
| B = helper.Builder |
| F = helper.Factory |
| +T = helper.Triggerable |
| # TODO(kbr): it would be better if this waterfall were refactored so |
| # that we could access the slaves_list here. |
| -gpu_bot_info = [ |
| +gpu_slave_info = [ |
| { |
| 'builder': 'GPU Win Builder', |
| 'factory_id': 'f_gpu_win_builder_rel', |
| @@ -30,15 +33,17 @@ gpu_bot_info = [ |
| { |
| 'builder': 'GPU Win7 (NVIDIA)', |
| 'factory_id': 'f_gpu_win_rel', |
| - 'recipe': 'gpu/build_and_test', |
| + 'recipe': 'gpu/download_and_test', |
| 'build_config': 'Release', |
| 'perf_id': 'gpu-webkit-win7-nvidia', |
| + 'triggered_by': 'GPU Win Builder', |
| }, |
| { |
| 'builder': 'GPU Win7 (dbg) (NVIDIA)', |
| 'factory_id': 'f_gpu_win_dbg', |
| - 'recipe': 'gpu/build_and_test', |
| + 'recipe': 'gpu/download_and_test', |
| 'build_config': 'Debug', |
| + 'triggered_by': 'GPU Win Builder (dbg)', |
| }, |
| { |
| 'builder': 'GPU Mac Builder', |
| @@ -55,15 +60,17 @@ gpu_bot_info = [ |
| { |
| 'builder': 'GPU Mac10.7', |
| 'factory_id': 'f_gpu_mac_rel', |
| - 'recipe': 'gpu/build_and_test', |
| + 'recipe': 'gpu/download_and_test', |
| 'build_config': 'Release', |
| 'perf_id': 'gpu-webkit-mac', |
| + 'triggered_by': 'GPU Mac Builder', |
| }, |
| { |
| 'builder': 'GPU Mac10.7 (dbg)', |
| 'factory_id': 'f_gpu_mac_dbg', |
| - 'recipe': 'gpu/build_and_test', |
| + 'recipe': 'gpu/download_and_test', |
| 'build_config': 'Debug', |
| + 'triggered_by': 'GPU Mac Builder (dbg)', |
| }, |
| { |
| 'builder': 'GPU Linux Builder', |
| @@ -80,15 +87,17 @@ gpu_bot_info = [ |
| { |
| 'builder': 'GPU Linux (NVIDIA)', |
| 'factory_id': 'f_gpu_linux_rel', |
| - 'recipe': 'gpu/build_and_test', |
| + 'recipe': 'gpu/download_and_test', |
| 'build_config': 'Release', |
| 'perf_id': 'gpu-webkit-linux-nvidia', |
| + 'triggered_by': 'GPU Linux Builder', |
| }, |
| { |
| 'builder': 'GPU Linux (dbg) (NVIDIA)', |
| 'factory_id': 'f_gpu_linux_dbg', |
| - 'recipe': 'gpu/build_and_test', |
| + 'recipe': 'gpu/download_and_test', |
| 'build_config': 'Debug', |
| + 'triggered_by': 'GPU Linux Builder (dbg)', |
| }, |
| ] |
| @@ -96,20 +105,58 @@ m_annotator = annotator_factory.AnnotatorFactory() |
| defaults['category'] = 'gpu' |
| -for bot in gpu_bot_info: |
| +polling_builders = [] |
| +# Maps the parent builder to a set of the names of the builders it triggers. |
| +trigger_map = collections.defaultdict(list) |
| +# Maps the name of the parent builder to the (synthesized) name of its |
| +# trigger, wrapped in a list. |
| +trigger_name_map = {} |
| +next_group_id = 0 |
| +# Note this code is very similar to that in recipe_master_helper.py. |
| +# Unfortunately due to the different structure of this waterfall it's |
| +# impossible to share the code. |
| +def BuilderExists(name): |
| + for s in gpu_slave_info: |
| + if s['builder'] == name: |
| + return True |
| + return False |
| + |
| +for slave in gpu_slave_info: |
| + builder = slave['builder'] |
| + parent_builder = slave.get('triggered_by') |
| + if parent_builder is not None: |
| + if not BuilderExists(parent_builder): |
| + raise Exception('Could not find parent builder %s for builder %s' % |
| + (parent_builder, builder)) |
| + trigger_map[parent_builder].append(builder) |
| + if parent_builder not in trigger_name_map: |
| + trigger_name_map[parent_builder] = 'trigger_group_%d' % next_group_id |
| + next_group_id += 1 |
| + else: |
| + polling_builders.append(builder) |
|
ghost stip (do not use)
2013/11/16 01:15:28
don't need polling_builders
Ken Russell (switch to Gerrit)
2013/11/16 01:25:06
Done.
|
| + |
| +# Create triggers |
| +for trigger_name in trigger_name_map.values(): |
| + T(trigger_name) |
| + |
| +# Set up bots |
| +for slave in gpu_slave_info: |
| factory_properties = { |
| 'test_results_server': 'test-results.appspot.com', |
| 'generate_gtest_json': True, |
| - 'build_config': bot['build_config'], |
| + 'build_config': slave['build_config'], |
| 'top_of_tree_blink': True |
| } |
| - if 'perf_id' in bot: |
| + if 'perf_id' in slave: |
| factory_properties['show_perf_results'] = True |
| - factory_properties['perf_id'] = bot['perf_id'] |
| - B(bot['builder'], bot['factory_id'], scheduler='global_scheduler') |
| - F(bot['factory_id'], m_annotator.BaseFactory( |
| - bot['recipe'], |
| - factory_properties)) |
| + factory_properties['perf_id'] = slave['perf_id'] |
| + builder_name = slave['builder'] |
| + scheduler = 'global_scheduler' |
| + if 'triggered_by' in slave: |
| + scheduler = trigger_name_map[slave['triggered_by']] |
| + B(builder_name, slave['factory_id'], scheduler=scheduler) |
| + F(slave['factory_id'], m_annotator.BaseFactory(slave['recipe'], |
| + factory_properties)) |
|
ghost stip (do not use)
2013/11/16 01:15:28
add trigger if builder_name in trigger_name_map
Ken Russell (switch to Gerrit)
2013/11/16 01:25:06
Thanks for catching that. That would have been a b
|
| def Update(_config, _active_master, c): |