OLD | NEW |
---|---|
1 #!/usr/bin/python | 1 #!/usr/bin/python |
2 | 2 |
epoger
2013/12/18 18:24:12
I suppose it would be good for the client side to
| |
3 """ | 3 """ |
epoger
2013/12/18 18:24:12
The server-side log now looks like this:
epoger@w
| |
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 """ |
11 | 11 |
12 # System-level imports | 12 # System-level imports |
13 import fnmatch | 13 import fnmatch |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
57 file contents, you will need to create a new Results object.""" | 57 file contents, you will need to create a new Results object.""" |
58 | 58 |
59 def __init__(self, actuals_root, expected_root, generated_images_root): | 59 def __init__(self, actuals_root, expected_root, generated_images_root): |
60 """ | 60 """ |
61 Args: | 61 Args: |
62 actuals_root: root directory containing all actual-results.json files | 62 actuals_root: root directory containing all actual-results.json files |
63 expected_root: root directory containing all expected-results.json files | 63 expected_root: root directory containing all expected-results.json files |
64 generated_images_root: directory within which to create all pixel diffs; | 64 generated_images_root: directory within which to create all pixel diffs; |
65 if this directory does not yet exist, it will be created | 65 if this directory does not yet exist, it will be created |
66 """ | 66 """ |
67 time_start = int(time.time()) | |
67 self._image_diff_db = imagediffdb.ImageDiffDB(generated_images_root) | 68 self._image_diff_db = imagediffdb.ImageDiffDB(generated_images_root) |
68 self._actuals_root = actuals_root | 69 self._actuals_root = actuals_root |
69 self._expected_root = expected_root | 70 self._expected_root = expected_root |
70 self._load_actual_and_expected() | 71 self._load_actual_and_expected() |
71 self._timestamp = int(time.time()) | 72 self._timestamp = int(time.time()) |
73 logging.info('Results complete; took %d seconds.' % | |
74 (self._timestamp - time_start)) | |
72 | 75 |
73 def get_timestamp(self): | 76 def get_timestamp(self): |
74 """Return the time at which this object was created, in seconds past epoch | 77 """Return the time at which this object was created, in seconds past epoch |
75 (UTC). | 78 (UTC). |
76 """ | 79 """ |
77 return self._timestamp | 80 return self._timestamp |
78 | 81 |
79 def edit_expectations(self, modifications): | 82 def edit_expectations(self, modifications): |
80 """Edit the expectations stored within this object and write them back | 83 """Edit the expectations stored within this object and write them back |
81 to disk. | 84 to disk. |
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
281 expected_image_locator=expected_hashdigest, | 284 expected_image_locator=expected_hashdigest, |
282 expected_image_url=expected_url, | 285 expected_image_url=expected_url, |
283 actual_image_locator=actual_hashdigest, | 286 actual_image_locator=actual_hashdigest, |
284 actual_image_url=actual_url) | 287 actual_image_url=actual_url) |
285 | 288 |
286 def _load_actual_and_expected(self): | 289 def _load_actual_and_expected(self): |
287 """Loads the results of all tests, across all builders (based on the | 290 """Loads the results of all tests, across all builders (based on the |
288 files within self._actuals_root and self._expected_root), | 291 files within self._actuals_root and self._expected_root), |
289 and stores them in self._results. | 292 and stores them in self._results. |
290 """ | 293 """ |
294 logging.info('Reading actual-results JSON files from %s...' % | |
295 self._actuals_root) | |
291 actual_builder_dicts = Results._read_dicts_from_root(self._actuals_root) | 296 actual_builder_dicts = Results._read_dicts_from_root(self._actuals_root) |
297 logging.info('Reading expected-results JSON files from %s...' % | |
298 self._expected_root) | |
292 expected_builder_dicts = Results._read_dicts_from_root(self._expected_root) | 299 expected_builder_dicts = Results._read_dicts_from_root(self._expected_root) |
293 | 300 |
294 categories_all = {} | 301 categories_all = {} |
295 categories_failures = {} | 302 categories_failures = {} |
296 | 303 |
297 Results._ensure_included_in_category_dict(categories_all, | 304 Results._ensure_included_in_category_dict(categories_all, |
298 'resultType', [ | 305 'resultType', [ |
299 gm_json.JSONKEY_ACTUALRESULTS_FAILED, | 306 gm_json.JSONKEY_ACTUALRESULTS_FAILED, |
300 gm_json.JSONKEY_ACTUALRESULTS_FAILUREIGNORED, | 307 gm_json.JSONKEY_ACTUALRESULTS_FAILUREIGNORED, |
301 gm_json.JSONKEY_ACTUALRESULTS_NOCOMPARISON, | 308 gm_json.JSONKEY_ACTUALRESULTS_NOCOMPARISON, |
302 gm_json.JSONKEY_ACTUALRESULTS_SUCCEEDED, | 309 gm_json.JSONKEY_ACTUALRESULTS_SUCCEEDED, |
303 ]) | 310 ]) |
304 Results._ensure_included_in_category_dict(categories_failures, | 311 Results._ensure_included_in_category_dict(categories_failures, |
305 'resultType', [ | 312 'resultType', [ |
306 gm_json.JSONKEY_ACTUALRESULTS_FAILED, | 313 gm_json.JSONKEY_ACTUALRESULTS_FAILED, |
307 gm_json.JSONKEY_ACTUALRESULTS_FAILUREIGNORED, | 314 gm_json.JSONKEY_ACTUALRESULTS_FAILUREIGNORED, |
308 gm_json.JSONKEY_ACTUALRESULTS_NOCOMPARISON, | 315 gm_json.JSONKEY_ACTUALRESULTS_NOCOMPARISON, |
309 ]) | 316 ]) |
310 | 317 |
311 data_all = [] | 318 data_all = [] |
312 data_failures = [] | 319 data_failures = [] |
313 for builder in sorted(actual_builder_dicts.keys()): | 320 builders = sorted(actual_builder_dicts.keys()) |
321 num_builders = len(builders) | |
322 builder_num = 0 | |
323 for builder in builders: | |
324 builder_num += 1 | |
325 logging.info('Generating pixel diffs for builder #%d of %d, "%s"...' % | |
326 (builder_num, num_builders, builder)) | |
314 actual_results_for_this_builder = ( | 327 actual_results_for_this_builder = ( |
315 actual_builder_dicts[builder][gm_json.JSONKEY_ACTUALRESULTS]) | 328 actual_builder_dicts[builder][gm_json.JSONKEY_ACTUALRESULTS]) |
316 for result_type in sorted(actual_results_for_this_builder.keys()): | 329 for result_type in sorted(actual_results_for_this_builder.keys()): |
317 results_of_this_type = actual_results_for_this_builder[result_type] | 330 results_of_this_type = actual_results_for_this_builder[result_type] |
318 if not results_of_this_type: | 331 if not results_of_this_type: |
319 continue | 332 continue |
320 for image_name in sorted(results_of_this_type.keys()): | 333 for image_name in sorted(results_of_this_type.keys()): |
321 actual_image = results_of_this_type[image_name] | 334 actual_image = results_of_this_type[image_name] |
322 | 335 |
323 # Default empty expectations; overwrite these if we find any real ones | 336 # Default empty expectations; overwrite these if we find any real ones |
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
476 category_dict: category dict-of-dicts to modify | 489 category_dict: category dict-of-dicts to modify |
477 category_name: category name, as a string | 490 category_name: category name, as a string |
478 category_values: list of values we want to make sure are represented | 491 category_values: list of values we want to make sure are represented |
479 for this category | 492 for this category |
480 """ | 493 """ |
481 if not category_dict.get(category_name): | 494 if not category_dict.get(category_name): |
482 category_dict[category_name] = {} | 495 category_dict[category_name] = {} |
483 for category_value in category_values: | 496 for category_value in category_values: |
484 if not category_dict[category_name].get(category_value): | 497 if not category_dict[category_name].get(category_value): |
485 category_dict[category_name][category_value] = 0 | 498 category_dict[category_name][category_value] = 0 |
OLD | NEW |