| OLD | NEW |
| 1 # Copyright (C) 2011, Google Inc. All rights reserved. | 1 # Copyright (C) 2011, Google Inc. All rights reserved. |
| 2 # | 2 # |
| 3 # Redistribution and use in source and binary forms, with or without | 3 # Redistribution and use in source and binary forms, with or without |
| 4 # modification, are permitted provided that the following conditions are | 4 # modification, are permitted provided that the following conditions are |
| 5 # met: | 5 # met: |
| 6 # | 6 # |
| 7 # * Redistributions of source code must retain the above copyright | 7 # * Redistributions of source code must retain the above copyright |
| 8 # notice, this list of conditions and the following disclaimer. | 8 # notice, this list of conditions and the following disclaimer. |
| 9 # * Redistributions in binary form must reproduce the above | 9 # * Redistributions in binary form must reproduce the above |
| 10 # copyright notice, this list of conditions and the following disclaimer | 10 # copyright notice, this list of conditions and the following disclaimer |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 97 # to the baseline in the platform directory, we need to append jsut foo-
expected.png to the directory. | 97 # to the baseline in the platform directory, we need to append jsut foo-
expected.png to the directory. |
| 98 virtual_suite = self._virtual_suite(baseline_name) | 98 virtual_suite = self._virtual_suite(baseline_name) |
| 99 if virtual_suite: | 99 if virtual_suite: |
| 100 baseline_name_without_virtual = baseline_name[len(virtual_suite.name
) + 1:] | 100 baseline_name_without_virtual = baseline_name[len(virtual_suite.name
) + 1:] |
| 101 else: | 101 else: |
| 102 baseline_name_without_virtual = baseline_name | 102 baseline_name_without_virtual = baseline_name |
| 103 return self._filesystem.join(self._webkit_base, directory, baseline_name
_without_virtual) | 103 return self._filesystem.join(self._webkit_base, directory, baseline_name
_without_virtual) |
| 104 | 104 |
| 105 def read_results_by_directory(self, baseline_name): | 105 def read_results_by_directory(self, baseline_name): |
| 106 results_by_directory = {} | 106 results_by_directory = {} |
| 107 directories = reduce(set.union, map(set, [self._relative_baseline_search
_paths(port, baseline_name) for port in self._ports.values()])) | 107 directories = reduce(set.union, map(set, [self._relative_baseline_search
_paths( |
| 108 port, baseline_name) for port in self._ports.values()])) |
| 108 | 109 |
| 109 for directory in directories: | 110 for directory in directories: |
| 110 path = self._join_directory(directory, baseline_name) | 111 path = self._join_directory(directory, baseline_name) |
| 111 if self._filesystem.exists(path): | 112 if self._filesystem.exists(path): |
| 112 results_by_directory[directory] = self._filesystem.sha1(path) | 113 results_by_directory[directory] = self._filesystem.sha1(path) |
| 113 return results_by_directory | 114 return results_by_directory |
| 114 | 115 |
| 115 def _results_by_port_name(self, results_by_directory, baseline_name): | 116 def _results_by_port_name(self, results_by_directory, baseline_name): |
| 116 results_by_port_name = {} | 117 results_by_port_name = {} |
| 117 for port_name, port in self._ports.items(): | 118 for port_name, port in self._ports.items(): |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 163 | 164 |
| 164 new_results_by_directory[baseline_root] = shared_result | 165 new_results_by_directory[baseline_root] = shared_result |
| 165 for directory in directories_immediately_preceding_root: | 166 for directory in directories_immediately_preceding_root: |
| 166 del new_results_by_directory[directory] | 167 del new_results_by_directory[directory] |
| 167 | 168 |
| 168 def _find_optimal_result_placement(self, baseline_name): | 169 def _find_optimal_result_placement(self, baseline_name): |
| 169 results_by_directory = self.read_results_by_directory(baseline_name) | 170 results_by_directory = self.read_results_by_directory(baseline_name) |
| 170 results_by_port_name = self._results_by_port_name(results_by_directory,
baseline_name) | 171 results_by_port_name = self._results_by_port_name(results_by_directory,
baseline_name) |
| 171 port_names_by_result = _invert_dictionary(results_by_port_name) | 172 port_names_by_result = _invert_dictionary(results_by_port_name) |
| 172 | 173 |
| 173 new_results_by_directory = self._remove_redundant_results(results_by_dir
ectory, results_by_port_name, port_names_by_result, baseline_name) | 174 new_results_by_directory = self._remove_redundant_results( |
| 175 results_by_directory, results_by_port_name, port_names_by_result, ba
seline_name) |
| 174 self._optimize_result_for_root(new_results_by_directory, baseline_name) | 176 self._optimize_result_for_root(new_results_by_directory, baseline_name) |
| 175 | 177 |
| 176 return results_by_directory, new_results_by_directory | 178 return results_by_directory, new_results_by_directory |
| 177 | 179 |
| 178 def _remove_redundant_results(self, results_by_directory, results_by_port_na
me, port_names_by_result, baseline_name): | 180 def _remove_redundant_results(self, results_by_directory, results_by_port_na
me, port_names_by_result, baseline_name): |
| 179 new_results_by_directory = copy.copy(results_by_directory) | 181 new_results_by_directory = copy.copy(results_by_directory) |
| 180 for port_name, port in self._ports.items(): | 182 for port_name, port in self._ports.items(): |
| 181 current_result = results_by_port_name.get(port_name) | 183 current_result = results_by_port_name.get(port_name) |
| 182 | 184 |
| 183 # This happens if we're missing baselines for a port. | 185 # This happens if we're missing baselines for a port. |
| 184 if not current_result: | 186 if not current_result: |
| 185 continue; | 187 continue |
| 186 | 188 |
| 187 fallback_path = self._relative_baseline_search_paths(port, baseline_
name) | 189 fallback_path = self._relative_baseline_search_paths(port, baseline_
name) |
| 188 current_index, current_directory = self._find_in_fallbackpath(fallba
ck_path, current_result, new_results_by_directory) | 190 current_index, current_directory = self._find_in_fallbackpath(fallba
ck_path, current_result, new_results_by_directory) |
| 189 for index in range(current_index + 1, len(fallback_path)): | 191 for index in range(current_index + 1, len(fallback_path)): |
| 190 new_directory = fallback_path[index] | 192 new_directory = fallback_path[index] |
| 191 if not new_directory in new_results_by_directory: | 193 if not new_directory in new_results_by_directory: |
| 192 # No result for this baseline in this directory. | 194 # No result for this baseline in this directory. |
| 193 continue | 195 continue |
| 194 elif new_results_by_directory[new_directory] == current_result: | 196 elif new_results_by_directory[new_directory] == current_result: |
| 195 # Result for new_directory are redundant with the result ear
lier in the fallback order. | 197 # Result for new_directory are redundant with the result ear
lier in the fallback order. |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 349 result = self._optimize_subtree(baseline_name) | 351 result = self._optimize_subtree(baseline_name) |
| 350 non_virtual_baseline_name = self._virtual_base(baseline_name) | 352 non_virtual_baseline_name = self._virtual_base(baseline_name) |
| 351 if not non_virtual_baseline_name: | 353 if not non_virtual_baseline_name: |
| 352 return result, self._files_to_delete, self._files_to_add | 354 return result, self._files_to_delete, self._files_to_add |
| 353 | 355 |
| 354 self._optimize_virtual_root(baseline_name, non_virtual_baseline_name) | 356 self._optimize_virtual_root(baseline_name, non_virtual_baseline_name) |
| 355 | 357 |
| 356 _log.debug("Optimizing non-virtual fallback path.") | 358 _log.debug("Optimizing non-virtual fallback path.") |
| 357 result |= self._optimize_subtree(non_virtual_baseline_name) | 359 result |= self._optimize_subtree(non_virtual_baseline_name) |
| 358 return result, self._files_to_delete, self._files_to_add | 360 return result, self._files_to_delete, self._files_to_add |
| OLD | NEW |