diff options
author | 2014-08-05 10:07:22 -0700 | |
---|---|---|
committer | 2014-08-05 10:07:22 -0700 | |
commit | 0b7127635d8245de7ac704080d722d06e47621d0 (patch) | |
tree | a99796641d0825c38943398e0f33766274b045f7 /gm/rebaseline_server/imagepair.py | |
parent | 8f7273399466c95c0c86b099de438d6ef1a15c88 (diff) |
teach rebaseline_server to generate diffs of rendered SKPs
Creates a new live-view.html page, served by the rebaseline_server, that will display diffs between two sets of rendered SKP images.
BUG=skia:1942
NOTRY=true
R=rmistry@google.com
Author: epoger@google.com
Review URL: https://codereview.chromium.org/424263005
Diffstat (limited to 'gm/rebaseline_server/imagepair.py')
-rw-r--r-- | gm/rebaseline_server/imagepair.py | 37 |
1 files changed, 23 insertions, 14 deletions
diff --git a/gm/rebaseline_server/imagepair.py b/gm/rebaseline_server/imagepair.py index 446858d3a5..12d6718857 100644 --- a/gm/rebaseline_server/imagepair.py +++ b/gm/rebaseline_server/imagepair.py @@ -21,6 +21,10 @@ KEY__IMAGEPAIRS__IMAGE_A_URL = 'imageAUrl' KEY__IMAGEPAIRS__IMAGE_B_URL = 'imageBUrl' KEY__IMAGEPAIRS__IS_DIFFERENT = 'isDifferent' +# If self._diff_record is set to this, we haven't asked ImageDiffDB for the +# image diff details yet. +_DIFF_RECORD_STILL_LOADING = 'still_loading' + class ImagePair(object): """Describes a pair of images, pixel difference info, and optional metadata. @@ -42,6 +46,7 @@ class ImagePair(object): extra_columns: optional dictionary containing more metadata (test name, builder name, etc.) """ + self._image_diff_db = image_diff_db self.base_url = base_url self.imageA_relative_url = imageA_relative_url self.imageB_relative_url = imageB_relative_url @@ -49,27 +54,20 @@ class ImagePair(object): self.extra_columns_dict = extra_columns if not imageA_relative_url or not imageB_relative_url: self._is_different = True - self.diff_record = None + self._diff_record = None elif imageA_relative_url == imageB_relative_url: self._is_different = False - self.diff_record = None + self._diff_record = None else: - # TODO(epoger): Rather than blocking until image_diff_db can read in - # the image pair and generate diffs, it would be better to do it - # asynchronously: tell image_diff_db to download a bunch of file pairs, - # and only block later if we're still waiting for diff_records to come - # back. + # Tell image_diff_db to add an entry for this diff asynchronously. + # Later on, we will call image_diff_db.get_diff_record() to find it. self._is_different = True + self._diff_record = _DIFF_RECORD_STILL_LOADING image_diff_db.add_image_pair( expected_image_locator=imageA_relative_url, expected_image_url=posixpath.join(base_url, imageA_relative_url), actual_image_locator=imageB_relative_url, actual_image_url=posixpath.join(base_url, imageB_relative_url)) - self.diff_record = image_diff_db.get_diff_record( - expected_image_locator=imageA_relative_url, - actual_image_locator=imageB_relative_url) - if self.diff_record and self.diff_record.get_num_pixels_differing() == 0: - self._is_different = False def as_dict(self): """Returns a dictionary describing this ImagePair. @@ -85,6 +83,17 @@ class ImagePair(object): asdict[KEY__IMAGEPAIRS__EXPECTATIONS] = self.expectations_dict if self.extra_columns_dict: asdict[KEY__IMAGEPAIRS__EXTRACOLUMNS] = self.extra_columns_dict - if self.diff_record and (self.diff_record.get_num_pixels_differing() > 0): - asdict[KEY__IMAGEPAIRS__DIFFERENCES] = self.diff_record.as_dict() + if self._diff_record is _DIFF_RECORD_STILL_LOADING: + # We have waited as long as we can to ask ImageDiffDB for details of + # this image diff. Now we must block until ImageDiffDB can provide + # those details. + # + # TODO(epoger): Is it wasteful for every imagepair to have its own + # reference to image_diff_db? If so, we could pass an image_diff_db + # reference into this method call instead... + self._diff_record = self._image_diff_db.get_diff_record( + expected_image_locator=self.imageA_relative_url, + actual_image_locator=self.imageB_relative_url) + if self._diff_record != None: + asdict[KEY__IMAGEPAIRS__DIFFERENCES] = self._diff_record.as_dict() return asdict |