| Index: third_party/WebKit/Tools/Scripts/webkitpy/common/checkout/baselineoptimizer.py
|
| diff --git a/third_party/WebKit/Tools/Scripts/webkitpy/common/checkout/baselineoptimizer.py b/third_party/WebKit/Tools/Scripts/webkitpy/common/checkout/baselineoptimizer.py
|
| index 012bcfba22d38227fa562d52aac4e343282338c8..5b77580ff787dd91280a96e15f274a4de09e0a23 100644
|
| --- a/third_party/WebKit/Tools/Scripts/webkitpy/common/checkout/baselineoptimizer.py
|
| +++ b/third_party/WebKit/Tools/Scripts/webkitpy/common/checkout/baselineoptimizer.py
|
| @@ -30,6 +30,7 @@ import copy
|
| import logging
|
|
|
| from webkitpy.common.memoized import memoized
|
| +from functools import reduce
|
|
|
| _log = logging.getLogger(__name__)
|
|
|
| @@ -51,8 +52,8 @@ class BaselineOptimizer(object):
|
| def __init__(self, host, port, port_names, skip_scm_commands):
|
| self._filesystem = host.filesystem
|
| self._skip_scm_commands = skip_scm_commands
|
| - self.files_to_delete = []
|
| - self.files_to_add = []
|
| + self._files_to_delete = []
|
| + self._files_to_add = []
|
| self._scm = host.scm()
|
| self._default_port = port
|
| self._ports = {}
|
| @@ -137,11 +138,11 @@ class BaselineOptimizer(object):
|
| # have the same baseline, then it can be promoted up to be the LayoutTests baseline.
|
| # All other baselines can only be removed if they're redundant with a baseline earlier
|
| # in the fallback order. They can never promoted up.
|
| - directories_preceding_root = self._directories_immediately_preceding_root(baseline_name)
|
| + directories_immediately_preceding_root = self._directories_immediately_preceding_root(baseline_name)
|
|
|
| shared_result = None
|
| root_baseline_unused = False
|
| - for directory in directories_preceding_root:
|
| + for directory in directories_immediately_preceding_root:
|
| this_result = new_results_by_directory.get(directory)
|
|
|
| # If any of these directories don't have a baseline, there's no optimization we can do.
|
| @@ -163,20 +164,21 @@ class BaselineOptimizer(object):
|
| return
|
|
|
| new_results_by_directory[baseline_root] = shared_result
|
| - for directory in directories_preceding_root:
|
| + for directory in directories_immediately_preceding_root:
|
| del new_results_by_directory[directory]
|
|
|
| def _find_optimal_result_placement(self, baseline_name):
|
| results_by_directory = self.read_results_by_directory(baseline_name)
|
| results_by_port_name = self._results_by_port_name(results_by_directory, baseline_name)
|
| + port_names_by_result = _invert_dictionary(results_by_port_name)
|
|
|
| new_results_by_directory = self._remove_redundant_results(
|
| - results_by_directory, results_by_port_name, baseline_name)
|
| + results_by_directory, results_by_port_name, port_names_by_result, baseline_name)
|
| self._optimize_result_for_root(new_results_by_directory, baseline_name)
|
|
|
| return results_by_directory, new_results_by_directory
|
|
|
| - def _remove_redundant_results(self, results_by_directory, results_by_port_name, baseline_name):
|
| + def _remove_redundant_results(self, results_by_directory, results_by_port_name, port_names_by_result, baseline_name):
|
| new_results_by_directory = copy.copy(results_by_directory)
|
| for port_name, port in self._ports.items():
|
| current_result = results_by_port_name.get(port_name)
|
| @@ -217,7 +219,7 @@ class BaselineOptimizer(object):
|
| return filename.replace(platform_dir, '').split(self._filesystem.sep)[0]
|
| return '(generic)'
|
|
|
| - def move_baselines(self, baseline_name, results_by_directory, new_results_by_directory):
|
| + def _move_baselines(self, baseline_name, results_by_directory, new_results_by_directory):
|
| data_for_result = {}
|
| for directory, result in results_by_directory.items():
|
| if not result in data_for_result:
|
| @@ -240,7 +242,7 @@ class BaselineOptimizer(object):
|
| for platform_dir in sorted(self._platform(filename) for filename in scm_files):
|
| _log.debug(" " + platform_dir)
|
| if self._skip_scm_commands:
|
| - self.files_to_delete.extend(scm_files)
|
| + self._files_to_delete.extend(scm_files)
|
| else:
|
| self._scm.delete_list(scm_files)
|
| if fs_files:
|
| @@ -266,8 +268,8 @@ class BaselineOptimizer(object):
|
| _log.debug(" " + platform_dir)
|
| if self._skip_scm_commands:
|
| # Have adds win over deletes.
|
| - self.files_to_delete = list(set(self.files_to_delete) - set(file_names))
|
| - self.files_to_add.extend(file_names)
|
| + self._files_to_delete = list(set(self._files_to_delete) - set(file_names))
|
| + self._files_to_add.extend(file_names)
|
| else:
|
| self._scm.add_list(file_names)
|
| else:
|
| @@ -305,14 +307,14 @@ class BaselineOptimizer(object):
|
| _log.debug(" After: ")
|
| self.write_by_directory(new_results_by_directory, _log.debug, " ")
|
|
|
| - self.move_baselines(baseline_name, results_by_directory, new_results_by_directory)
|
| + self._move_baselines(baseline_name, results_by_directory, new_results_by_directory)
|
| return True
|
|
|
| def _optimize_virtual_root(self, baseline_name, non_virtual_baseline_name):
|
| - virtual_root_baseline_path = self._filesystem.join(self._layout_tests_dir, baseline_name)
|
| - if not self._filesystem.exists(virtual_root_baseline_path):
|
| + virtual_root_expected_baseline_path = self._filesystem.join(self._layout_tests_dir, baseline_name)
|
| + if not self._filesystem.exists(virtual_root_expected_baseline_path):
|
| return
|
| - root_sha1 = self._filesystem.sha1(virtual_root_baseline_path)
|
| + root_sha1 = self._filesystem.sha1(virtual_root_expected_baseline_path)
|
|
|
| results_by_directory = self.read_results_by_directory(non_virtual_baseline_name)
|
| # See if all the immediate predecessors of the virtual root have the same expected result.
|
| @@ -326,17 +328,17 @@ class BaselineOptimizer(object):
|
| break
|
|
|
| _log.debug("Deleting redundant virtual root expected result.")
|
| - if self._skip_scm_commands and virtual_root_baseline_path in self.files_to_add:
|
| - self.files_to_add.remove(virtual_root_baseline_path)
|
| - if self._scm.exists(virtual_root_baseline_path):
|
| - _log.debug(" Deleting (SCM): " + virtual_root_baseline_path)
|
| + if self._skip_scm_commands and virtual_root_expected_baseline_path in self._files_to_add:
|
| + self._files_to_add.remove(virtual_root_expected_baseline_path)
|
| + if self._scm.exists(virtual_root_expected_baseline_path):
|
| + _log.debug(" Deleting (SCM): " + virtual_root_expected_baseline_path)
|
| if self._skip_scm_commands:
|
| - self.files_to_delete.append(virtual_root_baseline_path)
|
| + self._files_to_delete.append(virtual_root_expected_baseline_path)
|
| else:
|
| - self._scm.delete(virtual_root_baseline_path)
|
| + self._scm.delete(virtual_root_expected_baseline_path)
|
| else:
|
| - _log.debug(" Deleting (file system): " + virtual_root_baseline_path)
|
| - self._filesystem.remove(virtual_root_baseline_path)
|
| + _log.debug(" Deleting (file system): " + virtual_root_expected_baseline_path)
|
| + self._filesystem.remove(virtual_root_expected_baseline_path)
|
|
|
| def optimize(self, baseline_name):
|
| # The virtual fallback path is the same as the non-virtual one tacked on to the bottom of the non-virtual path.
|
| @@ -345,16 +347,16 @@ class BaselineOptimizer(object):
|
| #
|
| # So, we can optimize the virtual path, then the virtual root and then the regular path.
|
|
|
| - self.files_to_delete = []
|
| - self.files_to_add = []
|
| + self._files_to_delete = []
|
| + self._files_to_add = []
|
| _log.debug("Optimizing regular fallback path.")
|
| result = self._optimize_subtree(baseline_name)
|
| non_virtual_baseline_name = self._virtual_base(baseline_name)
|
| if not non_virtual_baseline_name:
|
| - return result, self.files_to_delete, self.files_to_add
|
| + return result, self._files_to_delete, self._files_to_add
|
|
|
| self._optimize_virtual_root(baseline_name, non_virtual_baseline_name)
|
|
|
| _log.debug("Optimizing non-virtual fallback path.")
|
| result |= self._optimize_subtree(non_virtual_baseline_name)
|
| - return result, self.files_to_delete, self.files_to_add
|
| + return result, self._files_to_delete, self._files_to_add
|
|
|