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

Side by Side Diff: gm/rebaseline_server/results.py

Issue 134643010: rebaseline_server: ignore TSAN, ASAN, Valgrind bots (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years, 11 months 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 #!/usr/bin/python 1 #!/usr/bin/python
2 2
3 """ 3 """
4 Copyright 2013 Google Inc. 4 Copyright 2013 Google Inc.
5 5
6 Use of this source code is governed by a BSD-style license that can be 6 Use of this source code is governed by a BSD-style license that can be
7 found in the LICENSE file. 7 found in the LICENSE file.
8 8
9 Repackage expected/actual GM results as needed by our HTML rebaseline viewer. 9 Repackage expected/actual GM results as needed by our HTML rebaseline viewer.
10 """ 10 """
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 'ignore-failure': false, 173 'ignore-failure': false,
174 'reviewed-by-human': true, 174 'reviewed-by-human': true,
175 }, 175 },
176 ... 176 ...
177 ], # end of 'testData' list 177 ], # end of 'testData' list
178 } 178 }
179 """ 179 """
180 return self._results[type] 180 return self._results[type]
181 181
182 @staticmethod 182 @staticmethod
183 def _ignore_builder(builder):
184 """Returns True if we should ignore expectations and actuals for a builder.
185
186 This allows us to ignore builders for which we don't maintain expectations
187 (trybots, Valgrind, ASAN, TSAN), and avoid problems like
188 https://code.google.com/p/skia/issues/detail?id=2036 ('rebaseline_server
189 produces error when trying to add baselines for ASAN/TSAN builders')
190
191 Args:
192 builder: name of this builder, as a string
193
194 Returns:
195 True if we should ignore expectations and actuals for this builder.
196 """
197 return (builder.endswith('-Trybot') or
198 ('Valgrind' in builder) or
199 ('TSAN' in builder) or
200 ('ASAN' in builder))
201
202 @staticmethod
183 def _read_dicts_from_root(root, pattern='*.json'): 203 def _read_dicts_from_root(root, pattern='*.json'):
184 """Read all JSON dictionaries within a directory tree. 204 """Read all JSON dictionaries within a directory tree.
185 205
186 Args: 206 Args:
187 root: path to root of directory tree 207 root: path to root of directory tree
188 pattern: which files to read within root (fnmatch-style pattern) 208 pattern: which files to read within root (fnmatch-style pattern)
189 209
190 Returns: 210 Returns:
191 A meta-dictionary containing all the JSON dictionaries found within 211 A meta-dictionary containing all the JSON dictionaries found within
192 the directory tree, keyed by the builder name of each dictionary. 212 the directory tree, keyed by the builder name of each dictionary.
193 213
194 Raises: 214 Raises:
195 IOError if root does not refer to an existing directory 215 IOError if root does not refer to an existing directory
196 """ 216 """
197 if not os.path.isdir(root): 217 if not os.path.isdir(root):
198 raise IOError('no directory found at path %s' % root) 218 raise IOError('no directory found at path %s' % root)
199 meta_dict = {} 219 meta_dict = {}
200 for dirpath, dirnames, filenames in os.walk(root): 220 for dirpath, dirnames, filenames in os.walk(root):
201 for matching_filename in fnmatch.filter(filenames, pattern): 221 for matching_filename in fnmatch.filter(filenames, pattern):
202 builder = os.path.basename(dirpath) 222 builder = os.path.basename(dirpath)
203 # If we are reading from the collection of actual results, skip over 223 if Results._ignore_builder(builder):
204 # the Trybot results (we don't maintain baselines for them).
205 if builder.endswith('-Trybot'):
206 continue 224 continue
207 fullpath = os.path.join(dirpath, matching_filename) 225 fullpath = os.path.join(dirpath, matching_filename)
208 meta_dict[builder] = gm_json.LoadFromFile(fullpath) 226 meta_dict[builder] = gm_json.LoadFromFile(fullpath)
209 return meta_dict 227 return meta_dict
210 228
211 @staticmethod 229 @staticmethod
212 def _write_dicts_to_root(meta_dict, root, pattern='*.json'): 230 def _write_dicts_to_root(meta_dict, root, pattern='*.json'):
213 """Write all per-builder dictionaries within meta_dict to files under 231 """Write all per-builder dictionaries within meta_dict to files under
214 the root path. 232 the root path.
215 233
(...skipping 13 matching lines...) Expand all
229 IOError if root does not refer to an existing directory 247 IOError if root does not refer to an existing directory
230 KeyError if the set of per-builder dictionaries written out was 248 KeyError if the set of per-builder dictionaries written out was
231 different than expected 249 different than expected
232 """ 250 """
233 if not os.path.isdir(root): 251 if not os.path.isdir(root):
234 raise IOError('no directory found at path %s' % root) 252 raise IOError('no directory found at path %s' % root)
235 actual_builders_written = [] 253 actual_builders_written = []
236 for dirpath, dirnames, filenames in os.walk(root): 254 for dirpath, dirnames, filenames in os.walk(root):
237 for matching_filename in fnmatch.filter(filenames, pattern): 255 for matching_filename in fnmatch.filter(filenames, pattern):
238 builder = os.path.basename(dirpath) 256 builder = os.path.basename(dirpath)
239 # We should never encounter Trybot *expectations*, but if we are 257 if Results._ignore_builder(builder):
240 # writing into the actual-results dir, skip the Trybot actuals.
241 # (I don't know why we would ever write into the actual-results dir,
242 # though.)
243 if builder.endswith('-Trybot'):
244 continue 258 continue
245 per_builder_dict = meta_dict.get(builder) 259 per_builder_dict = meta_dict.get(builder)
246 if per_builder_dict is not None: 260 if per_builder_dict is not None:
247 fullpath = os.path.join(dirpath, matching_filename) 261 fullpath = os.path.join(dirpath, matching_filename)
248 gm_json.WriteToFile(per_builder_dict, fullpath) 262 gm_json.WriteToFile(per_builder_dict, fullpath)
249 actual_builders_written.append(builder) 263 actual_builders_written.append(builder)
250 264
251 # Check: did we write out the set of per-builder dictionaries we 265 # Check: did we write out the set of per-builder dictionaries we
252 # expected to? 266 # expected to?
253 expected_builders_written = sorted(meta_dict.keys()) 267 expected_builders_written = sorted(meta_dict.keys())
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after
519 help='Directory within which to download images and generate diffs') 533 help='Directory within which to download images and generate diffs')
520 args = parser.parse_args() 534 args = parser.parse_args()
521 results = Results(actuals_root=args.actuals, 535 results = Results(actuals_root=args.actuals,
522 expected_root=args.expectations, 536 expected_root=args.expectations,
523 generated_images_root=args.workdir) 537 generated_images_root=args.workdir)
524 gm_json.WriteToFile(results.get_results_of_type(RESULTS_ALL), args.outfile) 538 gm_json.WriteToFile(results.get_results_of_type(RESULTS_ALL), args.outfile)
525 539
526 540
527 if __name__ == '__main__': 541 if __name__ == '__main__':
528 main() 542 main()
OLDNEW
« no previous file with comments | « no previous file | gm/rebaseline_server/tests/inputs/gm-actuals/Test-Ubuntu12-ShuttleA-ATI5770-x86_64-Release-Valgrind/actual-results.json » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698