| OLD | NEW |
| 1 # Copyright 2013 The Chromium Authors. All rights reserved. | 1 # Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 | 5 |
| 6 from master import master_config | 6 from master import master_config |
| 7 from master.factory import annotator_factory | 7 from master.factory import annotator_factory |
| 8 | 8 |
| 9 import collections |
| 10 |
| 9 defaults = {} | 11 defaults = {} |
| 10 | 12 |
| 11 helper = master_config.Helper(defaults) | 13 helper = master_config.Helper(defaults) |
| 12 B = helper.Builder | 14 B = helper.Builder |
| 13 F = helper.Factory | 15 F = helper.Factory |
| 16 T = helper.Triggerable |
| 14 | 17 |
| 15 # TODO(kbr): it would be better if this waterfall were refactored so | 18 # TODO(kbr): it would be better if this waterfall were refactored so |
| 16 # that we could access the slaves_list here. | 19 # that we could access the slaves_list here. |
| 17 gpu_bot_info = [ | 20 gpu_slave_info = [ |
| 18 { | 21 { |
| 19 'builder': 'GPU Win Builder', | 22 'builder': 'GPU Win Builder', |
| 20 'factory_id': 'f_gpu_win_builder_rel', | 23 'factory_id': 'f_gpu_win_builder_rel', |
| 21 'recipe': 'gpu/build_and_upload', | 24 'recipe': 'gpu/build_and_upload', |
| 22 'build_config': 'Release', | 25 'build_config': 'Release', |
| 23 }, | 26 }, |
| 24 { | 27 { |
| 25 'builder': 'GPU Win Builder (dbg)', | 28 'builder': 'GPU Win Builder (dbg)', |
| 26 'factory_id': 'f_gpu_win_builder_dbg', | 29 'factory_id': 'f_gpu_win_builder_dbg', |
| 27 'recipe': 'gpu/build_and_upload', | 30 'recipe': 'gpu/build_and_upload', |
| 28 'build_config': 'Debug', | 31 'build_config': 'Debug', |
| 29 }, | 32 }, |
| 30 { | 33 { |
| 31 'builder': 'GPU Win7 (NVIDIA)', | 34 'builder': 'GPU Win7 (NVIDIA)', |
| 32 'factory_id': 'f_gpu_win_rel', | 35 'factory_id': 'f_gpu_win_rel', |
| 33 'recipe': 'gpu/build_and_test', | 36 'recipe': 'gpu/download_and_test', |
| 34 'build_config': 'Release', | 37 'build_config': 'Release', |
| 35 'perf_id': 'gpu-webkit-win7-nvidia', | 38 'perf_id': 'gpu-webkit-win7-nvidia', |
| 39 'triggered_by': 'GPU Win Builder', |
| 36 }, | 40 }, |
| 37 { | 41 { |
| 38 'builder': 'GPU Win7 (dbg) (NVIDIA)', | 42 'builder': 'GPU Win7 (dbg) (NVIDIA)', |
| 39 'factory_id': 'f_gpu_win_dbg', | 43 'factory_id': 'f_gpu_win_dbg', |
| 40 'recipe': 'gpu/build_and_test', | 44 'recipe': 'gpu/download_and_test', |
| 41 'build_config': 'Debug', | 45 'build_config': 'Debug', |
| 46 'triggered_by': 'GPU Win Builder (dbg)', |
| 42 }, | 47 }, |
| 43 { | 48 { |
| 44 'builder': 'GPU Mac Builder', | 49 'builder': 'GPU Mac Builder', |
| 45 'factory_id': 'f_gpu_mac_builder_rel', | 50 'factory_id': 'f_gpu_mac_builder_rel', |
| 46 'recipe': 'gpu/build_and_upload', | 51 'recipe': 'gpu/build_and_upload', |
| 47 'build_config': 'Release', | 52 'build_config': 'Release', |
| 48 }, | 53 }, |
| 49 { | 54 { |
| 50 'builder': 'GPU Mac Builder (dbg)', | 55 'builder': 'GPU Mac Builder (dbg)', |
| 51 'factory_id': 'f_gpu_mac_builder_dbg', | 56 'factory_id': 'f_gpu_mac_builder_dbg', |
| 52 'recipe': 'gpu/build_and_upload', | 57 'recipe': 'gpu/build_and_upload', |
| 53 'build_config': 'Debug', | 58 'build_config': 'Debug', |
| 54 }, | 59 }, |
| 55 { | 60 { |
| 56 'builder': 'GPU Mac10.7', | 61 'builder': 'GPU Mac10.7', |
| 57 'factory_id': 'f_gpu_mac_rel', | 62 'factory_id': 'f_gpu_mac_rel', |
| 58 'recipe': 'gpu/build_and_test', | 63 'recipe': 'gpu/download_and_test', |
| 59 'build_config': 'Release', | 64 'build_config': 'Release', |
| 60 'perf_id': 'gpu-webkit-mac', | 65 'perf_id': 'gpu-webkit-mac', |
| 66 'triggered_by': 'GPU Mac Builder', |
| 61 }, | 67 }, |
| 62 { | 68 { |
| 63 'builder': 'GPU Mac10.7 (dbg)', | 69 'builder': 'GPU Mac10.7 (dbg)', |
| 64 'factory_id': 'f_gpu_mac_dbg', | 70 'factory_id': 'f_gpu_mac_dbg', |
| 65 'recipe': 'gpu/build_and_test', | 71 'recipe': 'gpu/download_and_test', |
| 66 'build_config': 'Debug', | 72 'build_config': 'Debug', |
| 73 'triggered_by': 'GPU Mac Builder (dbg)', |
| 67 }, | 74 }, |
| 68 { | 75 { |
| 69 'builder': 'GPU Linux Builder', | 76 'builder': 'GPU Linux Builder', |
| 70 'factory_id': 'f_gpu_linux_builder_rel', | 77 'factory_id': 'f_gpu_linux_builder_rel', |
| 71 'recipe': 'gpu/build_and_upload', | 78 'recipe': 'gpu/build_and_upload', |
| 72 'build_config': 'Release', | 79 'build_config': 'Release', |
| 73 }, | 80 }, |
| 74 { | 81 { |
| 75 'builder': 'GPU Linux Builder (dbg)', | 82 'builder': 'GPU Linux Builder (dbg)', |
| 76 'factory_id': 'f_gpu_linux_builder_dbg', | 83 'factory_id': 'f_gpu_linux_builder_dbg', |
| 77 'recipe': 'gpu/build_and_upload', | 84 'recipe': 'gpu/build_and_upload', |
| 78 'build_config': 'Debug', | 85 'build_config': 'Debug', |
| 79 }, | 86 }, |
| 80 { | 87 { |
| 81 'builder': 'GPU Linux (NVIDIA)', | 88 'builder': 'GPU Linux (NVIDIA)', |
| 82 'factory_id': 'f_gpu_linux_rel', | 89 'factory_id': 'f_gpu_linux_rel', |
| 83 'recipe': 'gpu/build_and_test', | 90 'recipe': 'gpu/download_and_test', |
| 84 'build_config': 'Release', | 91 'build_config': 'Release', |
| 85 'perf_id': 'gpu-webkit-linux-nvidia', | 92 'perf_id': 'gpu-webkit-linux-nvidia', |
| 93 'triggered_by': 'GPU Linux Builder', |
| 86 }, | 94 }, |
| 87 { | 95 { |
| 88 'builder': 'GPU Linux (dbg) (NVIDIA)', | 96 'builder': 'GPU Linux (dbg) (NVIDIA)', |
| 89 'factory_id': 'f_gpu_linux_dbg', | 97 'factory_id': 'f_gpu_linux_dbg', |
| 90 'recipe': 'gpu/build_and_test', | 98 'recipe': 'gpu/download_and_test', |
| 91 'build_config': 'Debug', | 99 'build_config': 'Debug', |
| 100 'triggered_by': 'GPU Linux Builder (dbg)', |
| 92 }, | 101 }, |
| 93 ] | 102 ] |
| 94 | 103 |
| 95 m_annotator = annotator_factory.AnnotatorFactory() | 104 m_annotator = annotator_factory.AnnotatorFactory() |
| 96 | 105 |
| 97 defaults['category'] = 'gpu' | 106 defaults['category'] = 'gpu' |
| 98 | 107 |
| 99 for bot in gpu_bot_info: | 108 # Maps the parent builder to a set of the names of the builders it triggers. |
| 109 trigger_map = collections.defaultdict(list) |
| 110 # Maps the name of the parent builder to the (synthesized) name of its |
| 111 # trigger, wrapped in a list. |
| 112 trigger_name_map = {} |
| 113 next_group_id = 0 |
| 114 # Note this code is very similar to that in recipe_master_helper.py. |
| 115 # Unfortunately due to the different structure of this waterfall it's |
| 116 # impossible to share the code. |
| 117 def BuilderExists(builder_name): |
| 118 for s in gpu_slave_info: |
| 119 if s['builder'] == builder_name: |
| 120 return True |
| 121 return False |
| 122 |
| 123 for slave in gpu_slave_info: |
| 124 builder = slave['builder'] |
| 125 parent_builder = slave.get('triggered_by') |
| 126 if parent_builder is not None: |
| 127 if not BuilderExists(parent_builder): |
| 128 raise Exception('Could not find parent builder %s for builder %s' % |
| 129 (parent_builder, builder)) |
| 130 trigger_map[parent_builder].append(builder) |
| 131 if parent_builder not in trigger_name_map: |
| 132 trigger_name_map[parent_builder] = 'trigger_group_%d' % next_group_id |
| 133 next_group_id += 1 |
| 134 |
| 135 # Create triggers |
| 136 for trigger_name in trigger_name_map.values(): |
| 137 T(trigger_name) |
| 138 |
| 139 # Set up bots |
| 140 for slave in gpu_slave_info: |
| 100 factory_properties = { | 141 factory_properties = { |
| 101 'test_results_server': 'test-results.appspot.com', | 142 'test_results_server': 'test-results.appspot.com', |
| 102 'generate_gtest_json': True, | 143 'generate_gtest_json': True, |
| 103 'build_config': bot['build_config'], | 144 'build_config': slave['build_config'], |
| 104 'top_of_tree_blink': True | 145 'top_of_tree_blink': True |
| 105 } | 146 } |
| 106 if 'perf_id' in bot: | 147 if 'perf_id' in slave: |
| 107 factory_properties['show_perf_results'] = True | 148 factory_properties['show_perf_results'] = True |
| 108 factory_properties['perf_id'] = bot['perf_id'] | 149 factory_properties['perf_id'] = slave['perf_id'] |
| 109 B(bot['builder'], bot['factory_id'], scheduler='global_scheduler') | 150 name = slave['builder'] |
| 110 F(bot['factory_id'], m_annotator.BaseFactory( | 151 scheduler = 'global_scheduler' |
| 111 bot['recipe'], | 152 if 'triggered_by' in slave: |
| 112 factory_properties)) | 153 scheduler = trigger_name_map[slave['triggered_by']] |
| 154 B(name, slave['factory_id'], scheduler=scheduler) |
| 155 F(slave['factory_id'], m_annotator.BaseFactory( |
| 156 slave['recipe'], |
| 157 factory_properties, |
| 158 [trigger_name_map[name]] if name in trigger_name_map else None)) |
| 113 | 159 |
| 114 | 160 |
| 115 def Update(_config, _active_master, c): | 161 def Update(_config, _active_master, c): |
| 116 return helper.Update(c) | 162 return helper.Update(c) |
| OLD | NEW |