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

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

Issue 82823005: rebaseline_server: improve pixel diff reporting (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: partially_deobfuscate Created 7 years 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 | Annotate | Revision Log
« no previous file with comments | « gm/rebaseline_server/imagediffdb_test.py ('k') | gm/rebaseline_server/static/view.css » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 54
55 Once this object has been constructed, the results (in self._results[]) 55 Once this object has been constructed, the results (in self._results[])
56 are immutable. If you want to update the results based on updated JSON 56 are immutable. If you want to update the results based on updated JSON
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 pixels 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 self._image_diff_db = imagediffdb.ImageDiffDB(generated_images_root) 67 self._image_diff_db = imagediffdb.ImageDiffDB(generated_images_root)
68 self._actuals_root = actuals_root 68 self._actuals_root = actuals_root
69 self._expected_root = expected_root 69 self._expected_root = expected_root
70 self._load_actual_and_expected() 70 self._load_actual_and_expected()
71 self._timestamp = int(time.time()) 71 self._timestamp = int(time.time())
72 72
73 def get_timestamp(self): 73 def get_timestamp(self):
74 """Return the time at which this object was created, in seconds past epoch 74 """Return the time at which this object was created, in seconds past epoch
(...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after
393 # FIELDS_PASSED_THRU_VERBATIM that may be overwritten below... 393 # FIELDS_PASSED_THRU_VERBATIM that may be overwritten below...
394 gm_json.JSONKEY_EXPECTEDRESULTS_IGNOREFAILURE: False, 394 gm_json.JSONKEY_EXPECTEDRESULTS_IGNOREFAILURE: False,
395 } 395 }
396 if expectations_per_test: 396 if expectations_per_test:
397 for field in FIELDS_PASSED_THRU_VERBATIM: 397 for field in FIELDS_PASSED_THRU_VERBATIM:
398 results_for_this_test[field] = expectations_per_test.get(field) 398 results_for_this_test[field] = expectations_per_test.get(field)
399 399
400 if updated_result_type == gm_json.JSONKEY_ACTUALRESULTS_NOCOMPARISON: 400 if updated_result_type == gm_json.JSONKEY_ACTUALRESULTS_NOCOMPARISON:
401 pass # no diff record to calculate at all 401 pass # no diff record to calculate at all
402 elif updated_result_type == gm_json.JSONKEY_ACTUALRESULTS_SUCCEEDED: 402 elif updated_result_type == gm_json.JSONKEY_ACTUALRESULTS_SUCCEEDED:
403 results_for_this_test['numDifferingPixels'] = 0
403 results_for_this_test['percentDifferingPixels'] = 0 404 results_for_this_test['percentDifferingPixels'] = 0
404 results_for_this_test['weightedDiffMeasure'] = 0 405 results_for_this_test['weightedDiffMeasure'] = 0
406 results_for_this_test['maxDiffPerChannel'] = 0
405 else: 407 else:
406 try: 408 try:
407 diff_record = self._image_diff_db.get_diff_record( 409 diff_record = self._image_diff_db.get_diff_record(
408 expected_image_locator=expected_image[1], 410 expected_image_locator=expected_image[1],
409 actual_image_locator=actual_image[1]) 411 actual_image_locator=actual_image[1])
412 results_for_this_test['numDifferingPixels'] = (
413 diff_record.get_num_pixels_differing())
410 results_for_this_test['percentDifferingPixels'] = ( 414 results_for_this_test['percentDifferingPixels'] = (
411 diff_record.get_percent_pixels_differing()) 415 diff_record.get_percent_pixels_differing())
412 results_for_this_test['weightedDiffMeasure'] = ( 416 results_for_this_test['weightedDiffMeasure'] = (
413 diff_record.get_weighted_diff_measure()) 417 diff_record.get_weighted_diff_measure())
418 results_for_this_test['maxDiffPerChannel'] = (
419 diff_record.get_max_diff_per_channel())
414 except KeyError: 420 except KeyError:
415 logging.warning('unable to find diff_record for ("%s", "%s")' % 421 logging.warning('unable to find diff_record for ("%s", "%s")' %
416 (expected_image[1], actual_image[1])) 422 (expected_image[1], actual_image[1]))
417 pass 423 pass
418 424
419 Results._add_to_category_dict(categories_all, results_for_this_test) 425 Results._add_to_category_dict(categories_all, results_for_this_test)
420 data_all.append(results_for_this_test) 426 data_all.append(results_for_this_test)
421 427
422 # TODO(epoger): In effect, we have a list of resultTypes that we 428 # TODO(epoger): In effect, we have a list of resultTypes that we
423 # include in the different result lists (data_all and data_failures). 429 # include in the different result lists (data_all and data_failures).
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
470 category_dict: category dict-of-dicts to modify 476 category_dict: category dict-of-dicts to modify
471 category_name: category name, as a string 477 category_name: category name, as a string
472 category_values: list of values we want to make sure are represented 478 category_values: list of values we want to make sure are represented
473 for this category 479 for this category
474 """ 480 """
475 if not category_dict.get(category_name): 481 if not category_dict.get(category_name):
476 category_dict[category_name] = {} 482 category_dict[category_name] = {}
477 for category_value in category_values: 483 for category_value in category_values:
478 if not category_dict[category_name].get(category_value): 484 if not category_dict[category_name].get(category_value):
479 category_dict[category_name][category_value] = 0 485 category_dict[category_name][category_value] = 0
OLDNEW
« no previous file with comments | « gm/rebaseline_server/imagediffdb_test.py ('k') | gm/rebaseline_server/static/view.css » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698