Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(283)

Side by Side Diff: third_party/WebKit/Tools/Scripts/webkitpy/common/checkout/baselineoptimizer.py

Issue 2496063002: Rename WebKitFinder -> BlinkFinder. (Closed)
Patch Set: Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 class BaselineOptimizer(object): 49 class BaselineOptimizer(object):
50 ROOT_LAYOUT_TESTS_DIRECTORY = 'LayoutTests' 50 ROOT_LAYOUT_TESTS_DIRECTORY = 'LayoutTests'
51 51
52 def __init__(self, host, port, port_names): 52 def __init__(self, host, port, port_names):
53 self._filesystem = host.filesystem 53 self._filesystem = host.filesystem
54 self._default_port = port 54 self._default_port = port
55 self._ports = {} 55 self._ports = {}
56 for port_name in port_names: 56 for port_name in port_names:
57 self._ports[port_name] = host.port_factory.get(port_name) 57 self._ports[port_name] = host.port_factory.get(port_name)
58 58
59 self._webkit_base = port.webkit_base() 59 self._blink_base = port.blink_base()
60 self._layout_tests_dir = port.layout_tests_dir() 60 self._layout_tests_dir = port.layout_tests_dir()
61 61
62 # Only used by unittests. 62 # Only used by unittests.
63 self.new_results_by_directory = [] 63 self.new_results_by_directory = []
64 64
65 def _baseline_root(self, baseline_name): 65 def _baseline_root(self, baseline_name):
66 virtual_suite = self._virtual_suite(baseline_name) 66 virtual_suite = self._virtual_suite(baseline_name)
67 if virtual_suite: 67 if virtual_suite:
68 return self._filesystem.join(self.ROOT_LAYOUT_TESTS_DIRECTORY, virtu al_suite.name) 68 return self._filesystem.join(self.ROOT_LAYOUT_TESTS_DIRECTORY, virtu al_suite.name)
69 return self.ROOT_LAYOUT_TESTS_DIRECTORY 69 return self.ROOT_LAYOUT_TESTS_DIRECTORY
70 70
71 def _baseline_search_path(self, port, baseline_name): 71 def _baseline_search_path(self, port, baseline_name):
72 virtual_suite = self._virtual_suite(baseline_name) 72 virtual_suite = self._virtual_suite(baseline_name)
73 if virtual_suite: 73 if virtual_suite:
74 return port.virtual_baseline_search_path(baseline_name) 74 return port.virtual_baseline_search_path(baseline_name)
75 return port.baseline_search_path() 75 return port.baseline_search_path()
76 76
77 def _virtual_suite(self, baseline_name): 77 def _virtual_suite(self, baseline_name):
78 return self._default_port.lookup_virtual_suite(baseline_name) 78 return self._default_port.lookup_virtual_suite(baseline_name)
79 79
80 def _virtual_base(self, baseline_name): 80 def _virtual_base(self, baseline_name):
81 return self._default_port.lookup_virtual_test_base(baseline_name) 81 return self._default_port.lookup_virtual_test_base(baseline_name)
82 82
83 def _relative_baseline_search_paths(self, port, baseline_name): 83 def _relative_baseline_search_paths(self, port, baseline_name):
84 baseline_search_path = self._baseline_search_path(port, baseline_name) 84 baseline_search_path = self._baseline_search_path(port, baseline_name)
85 baseline_root = self._baseline_root(baseline_name) 85 baseline_root = self._baseline_root(baseline_name)
86 relative_paths = [self._filesystem.relpath(path, self._webkit_base) for path in baseline_search_path] 86 relative_paths = [self._filesystem.relpath(path, self._blink_base) for p ath in baseline_search_path]
87 return relative_paths + [baseline_root] 87 return relative_paths + [baseline_root]
88 88
89 def _join_directory(self, directory, baseline_name): 89 def _join_directory(self, directory, baseline_name):
90 # This code is complicated because both the directory name and the basel ine_name have the virtual 90 # This code is complicated because both the directory name and the basel ine_name have the virtual
91 # test suite in the name and the virtual baseline name is not a strict s uperset of the non-virtual name. 91 # test suite in the name and the virtual baseline name is not a strict s uperset of the non-virtual name.
92 # For example, virtual/gpu/fast/canvas/foo-expected.png corresponds to f ast/canvas/foo-expected.png and 92 # For example, virtual/gpu/fast/canvas/foo-expected.png corresponds to f ast/canvas/foo-expected.png and
93 # the baseline directories are like platform/mac/virtual/gpu/fast/canvas . So, to get the path 93 # the baseline directories are like platform/mac/virtual/gpu/fast/canvas . So, to get the path
94 # to the baseline in the platform directory, we need to append just foo- expected.png to the directory. 94 # to the baseline in the platform directory, we need to append just foo- expected.png to the directory.
95 virtual_suite = self._virtual_suite(baseline_name) 95 virtual_suite = self._virtual_suite(baseline_name)
96 if virtual_suite: 96 if virtual_suite:
97 baseline_name_without_virtual = baseline_name[len(virtual_suite.name ) + 1:] 97 baseline_name_without_virtual = baseline_name[len(virtual_suite.name ) + 1:]
98 else: 98 else:
99 baseline_name_without_virtual = baseline_name 99 baseline_name_without_virtual = baseline_name
100 return self._filesystem.join(self._webkit_base, directory, baseline_name _without_virtual) 100 return self._filesystem.join(self._blink_base, directory, baseline_name_ without_virtual)
101 101
102 def read_results_by_directory(self, baseline_name): 102 def read_results_by_directory(self, baseline_name):
103 results_by_directory = {} 103 results_by_directory = {}
104 directories = reduce(set.union, map(set, [self._relative_baseline_search _paths( 104 directories = reduce(set.union, map(set, [self._relative_baseline_search _paths(
105 port, baseline_name) for port in self._ports.values()])) 105 port, baseline_name) for port in self._ports.values()]))
106 106
107 for directory in directories: 107 for directory in directories:
108 path = self._join_directory(directory, baseline_name) 108 path = self._join_directory(directory, baseline_name)
109 if self._filesystem.exists(path): 109 if self._filesystem.exists(path):
110 results_by_directory[directory] = self._filesystem.sha1(path) 110 results_by_directory[directory] = self._filesystem.sha1(path)
111 return results_by_directory 111 return results_by_directory
112 112
113 def _results_by_port_name(self, results_by_directory, baseline_name): 113 def _results_by_port_name(self, results_by_directory, baseline_name):
114 results_by_port_name = {} 114 results_by_port_name = {}
115 for port_name, port in self._ports.items(): 115 for port_name, port in self._ports.items():
116 for directory in self._relative_baseline_search_paths(port, baseline _name): 116 for directory in self._relative_baseline_search_paths(port, baseline _name):
117 if directory in results_by_directory: 117 if directory in results_by_directory:
118 results_by_port_name[port_name] = results_by_directory[direc tory] 118 results_by_port_name[port_name] = results_by_directory[direc tory]
119 break 119 break
120 return results_by_port_name 120 return results_by_port_name
121 121
122 @memoized 122 @memoized
123 def _directories_immediately_preceding_root(self, baseline_name): 123 def _directories_immediately_preceding_root(self, baseline_name):
124 directories = set() 124 directories = set()
125 for port in self._ports.values(): 125 for port in self._ports.values():
126 directory = self._filesystem.relpath(self._baseline_search_path(port , baseline_name)[-1], self._webkit_base) 126 directory = self._filesystem.relpath(self._baseline_search_path(port , baseline_name)[-1], self._blink_base)
127 directories.add(directory) 127 directories.add(directory)
128 return directories 128 return directories
129 129
130 def _optimize_result_for_root(self, new_results_by_directory, baseline_name) : 130 def _optimize_result_for_root(self, new_results_by_directory, baseline_name) :
131 # The root directory (i.e. LayoutTests) is the only one that doesn't cor respond 131 # The root directory (i.e. LayoutTests) is the only one that doesn't cor respond
132 # to a specific platform. As such, it's the only one where the baseline in fallback directories 132 # to a specific platform. As such, it's the only one where the baseline in fallback directories
133 # immediately before it can be promoted up, i.e. if win and mac 133 # immediately before it can be promoted up, i.e. if win and mac
134 # have the same baseline, then it can be promoted up to be the LayoutTes ts baseline. 134 # have the same baseline, then it can be promoted up to be the LayoutTes ts baseline.
135 # All other baselines can only be removed if they're redundant with a ba seline earlier 135 # All other baselines can only be removed if they're redundant with a ba seline earlier
136 # in the fallback order. They can never promoted up. 136 # in the fallback order. They can never promoted up.
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
203 def _find_in_fallbackpath(self, fallback_path, current_result, results_by_di rectory): 203 def _find_in_fallbackpath(self, fallback_path, current_result, results_by_di rectory):
204 for index, directory in enumerate(fallback_path): 204 for index, directory in enumerate(fallback_path):
205 if directory in results_by_directory and (results_by_directory[direc tory] == current_result): 205 if directory in results_by_directory and (results_by_directory[direc tory] == current_result):
206 return index, directory 206 return index, directory
207 assert False, "result %s not found in fallback_path %s, %s" % (current_r esult, fallback_path, results_by_directory) 207 assert False, "result %s not found in fallback_path %s, %s" % (current_r esult, fallback_path, results_by_directory)
208 208
209 def _platform(self, filename): 209 def _platform(self, filename):
210 platform_dir = self.ROOT_LAYOUT_TESTS_DIRECTORY + self._filesystem.sep + 'platform' + self._filesystem.sep 210 platform_dir = self.ROOT_LAYOUT_TESTS_DIRECTORY + self._filesystem.sep + 'platform' + self._filesystem.sep
211 if filename.startswith(platform_dir): 211 if filename.startswith(platform_dir):
212 return filename.replace(platform_dir, '').split(self._filesystem.sep )[0] 212 return filename.replace(platform_dir, '').split(self._filesystem.sep )[0]
213 platform_dir = self._filesystem.join(self._webkit_base, platform_dir) 213 platform_dir = self._filesystem.join(self._blink_base, platform_dir)
214 if filename.startswith(platform_dir): 214 if filename.startswith(platform_dir):
215 return filename.replace(platform_dir, '').split(self._filesystem.sep )[0] 215 return filename.replace(platform_dir, '').split(self._filesystem.sep )[0]
216 return '(generic)' 216 return '(generic)'
217 217
218 def _move_baselines(self, baseline_name, results_by_directory, new_results_b y_directory): 218 def _move_baselines(self, baseline_name, results_by_directory, new_results_b y_directory):
219 data_for_result = {} 219 data_for_result = {}
220 for directory, result in results_by_directory.items(): 220 for directory, result in results_by_directory.items():
221 if not result in data_for_result: 221 if not result in data_for_result:
222 source = self._join_directory(directory, baseline_name) 222 source = self._join_directory(directory, baseline_name)
223 data_for_result[result] = self._filesystem.read_binary_file(sour ce) 223 data_for_result[result] = self._filesystem.read_binary_file(sour ce)
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
320 result = self._optimize_subtree(baseline_name) 320 result = self._optimize_subtree(baseline_name)
321 non_virtual_baseline_name = self._virtual_base(baseline_name) 321 non_virtual_baseline_name = self._virtual_base(baseline_name)
322 if not non_virtual_baseline_name: 322 if not non_virtual_baseline_name:
323 return result 323 return result
324 324
325 self._optimize_virtual_root(baseline_name, non_virtual_baseline_name) 325 self._optimize_virtual_root(baseline_name, non_virtual_baseline_name)
326 326
327 _log.debug("Optimizing non-virtual fallback path.") 327 _log.debug("Optimizing non-virtual fallback path.")
328 result |= self._optimize_subtree(non_virtual_baseline_name) 328 result |= self._optimize_subtree(non_virtual_baseline_name)
329 return result 329 return result
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698