Changeset 133328 in webkit
- Timestamp:
- Nov 2, 2012, 12:02:30 PM (13 years ago)
- Location:
- trunk/Tools
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Tools/ChangeLog
r133326 r133328 1 2012-11-02 Dirk Pranke <dpranke@chromium.org> 2 3 webkit-patch analyze-baselines output is weak 4 https://bugs.webkit.org/show_bug.cgi?id=100998 5 6 Reviewed by Ojan Vafai. 7 8 Currently analyze-baselines prints a list of baselines that have 9 the same checksum per line, but the format is hard to read; 10 this patch cleans up the output to print by directory instead 11 and use the same format I recently added for debugging optimize-baselines, 12 then refactors the code so that we share and adds tests for 13 analyze-baselines (which was untested). 14 15 Also, I got rid of a couple of unnecessarily-hardcoded port names, 16 and modified the baseline optimizer to log the current world when 17 optimize fails. 18 19 * Scripts/webkitpy/common/checkout/baselineoptimizer.py: 20 (BaselineOptimizer.read_results_by_directory): 21 (BaselineOptimizer.write_by_directory): 22 (BaselineOptimizer.optimize): 23 * Scripts/webkitpy/tool/commands/rebaseline.py: 24 (OptimizeBaselines.execute): 25 (AnalyzeBaselines.__init__): 26 (AnalyzeBaselines._write): 27 (AnalyzeBaselines._analyze_baseline): 28 (AnalyzeBaselines.execute): 29 * Scripts/webkitpy/tool/commands/rebaseline_unittest.py: 30 (_FakeOptimizer): 31 (_FakeOptimizer.read_results_by_directory): 32 (TestAnalyzeBaselines): 33 (TestAnalyzeBaselines.setUp): 34 (TestAnalyzeBaselines.test_default): 35 (TestAnalyzeBaselines.test_missing_baselines): 36 1 37 2012-11-02 Adam Barth <abarth@webkit.org> 2 38 -
trunk/Tools/Scripts/webkitpy/common/checkout/baselineoptimizer.py
r132959 r133328 82 82 self._directories = reduce(set.union, map(set, self._hypergraph.values())) 83 83 84 def _read_results_by_directory(self, baseline_name):84 def read_results_by_directory(self, baseline_name): 85 85 results_by_directory = {} 86 86 for directory in self._directories: … … 123 123 124 124 def _find_optimal_result_placement(self, baseline_name): 125 results_by_directory = self. _read_results_by_directory(baseline_name)125 results_by_directory = self.read_results_by_directory(baseline_name) 126 126 results_by_port_name = self._results_by_port_name(results_by_directory) 127 127 port_names_by_result = _invert_dictionary(results_by_port_name) … … 182 182 except KeyError as e: 183 183 # FIXME: KeyErrors get raised if we're missing baselines. We should handle this better. 184 return results_by_directory184 return {} 185 185 186 186 def _find_in_fallbackpath(self, fallback_path, current_result, results_by_directory): … … 241 241 242 242 def directories_by_result(self, baseline_name): 243 results_by_directory = self. _read_results_by_directory(baseline_name)243 results_by_directory = self.read_results_by_directory(baseline_name) 244 244 return _invert_dictionary(results_by_directory) 245 246 def write_by_directory(self, results_by_directory, writer, indent): 247 for path in sorted(results_by_directory): 248 writer("%s%s: %s" % (indent, self._platform(path), results_by_directory[path][0:6])) 245 249 246 250 def optimize(self, baseline_name): … … 251 255 if new_results_by_directory: 252 256 _log.debug(" %s: (already optimal)" % basename) 253 for path in sorted(results_by_directory): 254 result = results_by_directory[path] 255 _log.debug(" %s: %s" % (self._platform(path), result[0:6])) 257 self.write_by_directory(results_by_directory, _log.debug, " ") 256 258 else: 257 259 _log.debug(" %s: (no baselines found)" % basename) 258 260 return True 259 261 if self._filtered_results_by_port_name(results_by_directory) != self._filtered_results_by_port_name(new_results_by_directory): 260 _log.warning("Optimization failed") 262 _log.warning(" %s: optimization failed" % basename) 263 self.write_by_directory(results_by_directory, _log.warning, " ") 261 264 return False 262 265 263 266 _log.debug(" %s:" % basename) 264 267 _log.debug(" Before: ") 265 for path in sorted(results_by_directory): 266 result = results_by_directory[path] 267 _log.debug(" %s: %s" % (self._platform(path), result[0:6])) 268 self.write_by_directory(results_by_directory, _log.debug, " ") 268 269 _log.debug(" After: ") 269 for path in sorted(new_results_by_directory): 270 result = new_results_by_directory[path] 271 _log.debug(" %s: %s" % (self._platform(path), result[0:6])) 270 self.write_by_directory(new_results_by_directory, _log.debug, " ") 272 271 273 272 self._move_baselines(baseline_name, results_by_directory, new_results_by_directory) -
trunk/Tools/Scripts/webkitpy/common/checkout/baselineoptimizer_unittest.py
r131699 r133328 43 43 # We override this method for testing so we don't have to construct an 44 44 # elaborate mock file system. 45 def _read_results_by_directory(self, baseline_name):45 def read_results_by_directory(self, baseline_name): 46 46 return self._mock_results_by_directory 47 47 -
trunk/Tools/Scripts/webkitpy/tool/commands/rebaseline.py
r133061 r133328 209 209 self._baseline_suffix_list = options.suffixes.split(',') 210 210 self._baseline_optimizer = BaselineOptimizer(tool) 211 self._port = tool.port_factory.get("chromium-win-win7") # FIXME: This should be selectable. 212 211 self._port = tool.port_factory.get() 213 212 for test_name in self._port.tests(args): 214 213 _log.info("Optimizing %s" % test_name) … … 222 221 223 222 def __init__(self): 224 return super(AnalyzeBaselines, self).__init__(options=[self.suffixes_option])225 226 def _print(self, baseline_name, directories_by_result):227 for result, directories in directories_by_result.items():228 if len(directories) <= 1:229 continue 230 results_names = [self._tool.filesystem.join(directory, baseline_name) for directory in directories]231 print ' '.join(results_names)232 233 def _analyze_baseline(self, test_name):223 super(AnalyzeBaselines, self).__init__(options=[ 224 self.suffixes_option, 225 optparse.make_option('--missing', action='store_true', default=False, help='show missing baselines as well'), 226 ]) 227 self._optimizer_class = BaselineOptimizer # overridable for testing 228 229 def _write(self, msg): 230 print msg 231 232 def _analyze_baseline(self, options, test_name): 234 233 for suffix in self._baseline_suffix_list: 235 234 baseline_name = _baseline_name(self._tool.filesystem, test_name, suffix) 236 directories_by_result = self._baseline_optimizer.directories_by_result(baseline_name) 237 self._print(baseline_name, directories_by_result) 235 results_by_directory = self._baseline_optimizer.read_results_by_directory(baseline_name) 236 if results_by_directory: 237 self._write("%s:" % baseline_name) 238 self._baseline_optimizer.write_by_directory(results_by_directory, self._write, " ") 239 elif options.missing: 240 self._write("%s: (no baselines found)" % baseline_name) 238 241 239 242 def execute(self, options, args, tool): 240 243 self._baseline_suffix_list = options.suffixes.split(',') 241 self._baseline_optimizer = BaselineOptimizer(tool) 242 self._port = tool.port_factory.get("chromium-win-win7") # FIXME: This should be selectable. 243 244 self._baseline_optimizer = self._optimizer_class(tool) 245 self._port = tool.port_factory.get() 244 246 for test_name in self._port.tests(args): 245 self._analyze_baseline( test_name)247 self._analyze_baseline(options, test_name) 246 248 247 249 -
trunk/Tools/Scripts/webkitpy/tool/commands/rebaseline_unittest.py
r133061 r133328 30 30 31 31 from webkitpy.common.system.outputcapture import OutputCapture 32 from webkitpy.common.checkout.baselineoptimizer import BaselineOptimizer 33 from webkitpy.common.net.buildbot.buildbot_mock import MockBuilder 34 from webkitpy.common.system.executive_mock import MockExecutive2 32 35 from webkitpy.thirdparty.mock import Mock 33 36 from webkitpy.tool.commands.rebaseline import * 34 37 from webkitpy.tool.mocktool import MockTool, MockOptions 35 from webkitpy.common.net.buildbot.buildbot_mock import MockBuilder36 from webkitpy.common.system.executive_mock import MockExecutive237 38 38 39 … … 361 362 362 363 364 class _FakeOptimizer(BaselineOptimizer): 365 def read_results_by_directory(self, baseline_name): 366 if baseline_name.endswith('txt'): 367 return {'LayoutTests/passes/text.html': '123456', 368 'LayoutTests/platform/test-mac-leopard/passes/text.html': 'abcdef'} 369 return {} 370 371 372 class TestAnalyzeBaselines(_BaseTestCase): 373 command_constructor = AnalyzeBaselines 374 375 def setUp(self): 376 super(TestAnalyzeBaselines, self).setUp() 377 self.port = self.tool.port_factory.get('test') 378 self.tool.port_factory.get = lambda port_name=None, options=None: self.port 379 self.lines = [] 380 self.command._optimizer_class = _FakeOptimizer 381 self.command._write = lambda msg: self.lines.append(msg) 382 383 def test_default(self): 384 self.command.execute(MockOptions(suffixes='txt', missing=False), ['passes/text.html'], self.tool) 385 self.assertEquals(self.lines, 386 ['passes/text-expected.txt:', 387 ' (generic): 123456', 388 ' test-mac-leopard: abcdef']) 389 390 def test_missing_baselines(self): 391 self.command.execute(MockOptions(suffixes='png,txt', missing=True), ['passes/text.html'], self.tool) 392 self.assertEquals(self.lines, 393 ['passes/text-expected.png: (no baselines found)', 394 'passes/text-expected.txt:', 395 ' (generic): 123456', 396 ' test-mac-leopard: abcdef'])
Note:
See TracChangeset
for help on using the changeset viewer.