| # Copyright 2016 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. | |
| import logging | |
| from webkitpy.common.checkout.baseline_optimizer import BaselineOptimizer | |
| from webkitpy.layout_tests.controllers.test_result_writer import baseline_name | |
| from webkitpy.tool.commands.rebaseline import AbstractRebaseliningCommand | |
| _log = logging.getLogger(__name__) | |
| class OptimizeBaselines(AbstractRebaseliningCommand): | |
| name = 'optimize-baselines' | |
| help_text = 'Reshuffles the baselines for the given tests to use as litte space on disk as possible.' | |
| show_in_main_help = True | |
| argument_names = 'TEST_NAMES' | |
| def __init__(self): | |
| super(OptimizeBaselines, self).__init__(options=[ | |
| self.suffixes_option, | |
| ] + self.platform_options) | |
| def _optimize_baseline(self, optimizer, test_name): | |
| files_to_delete = [] | |
| files_to_add = [] | |
| for suffix in self._baseline_suffix_list: | |
| name = baseline_name(self._tool.filesystem, test_name, suffix) | |
| succeeded = optimizer.optimize(name) | |
| if not succeeded: | |
| _log.error('Heuristics failed to optimize %s', name) | |
| return files_to_delete, files_to_add | |
| def execute(self, options, args, tool): | |
| self._tool = tool | |
| self._baseline_suffix_list = options.suffixes.split(',') | |
| port_names = tool.port_factory.all_port_names(options.platform) | |
| if not port_names: | |
| _log.error("No port names match '%s'", options.platform) | |
| return | |
| port = tool.port_factory.get(port_names[0]) | |
| optimizer = BaselineOptimizer(tool, port, port_names) | |
| tests = port.tests(args) | |
| for test_name in tests: | |
| self._optimize_baseline(optimizer, test_name) |