| Index: gm/rebaseline_server/compare_rendered_pictures.py
|
| diff --git a/gm/rebaseline_server/compare_rendered_pictures.py b/gm/rebaseline_server/compare_rendered_pictures.py
|
| index ed36c7c9dfb17024d959b3d0da5d5f3c874ebb49..4f8f6cd0769a861ffffd0c2dafc49e7cfb1b6ddb 100755
|
| --- a/gm/rebaseline_server/compare_rendered_pictures.py
|
| +++ b/gm/rebaseline_server/compare_rendered_pictures.py
|
| @@ -70,8 +70,15 @@ class RenderedPicturesComparisons(results.BaseComparisons):
|
| image_base_gs_url=DEFAULT_IMAGE_BASE_GS_URL,
|
| diff_base_url=None, setA_label='setA',
|
| setB_label='setB', gs=None,
|
| - truncate_results=False):
|
| - """
|
| + truncate_results=False, prefetch_only=False,
|
| + download_all_images=False):
|
| + """Constructor: downloads images and generates diffs.
|
| +
|
| + Once the object has been created (which may take a while), you can call its
|
| + get_packaged_results_of_type() method to quickly retrieve the results...
|
| + unless you have set prefetch_only to True, in which case we will
|
| + asynchronously warm up the ImageDiffDB cache but not fill in self._results.
|
| +
|
| Args:
|
| setA_dirs: list of root directories to copy all JSON summaries from,
|
| and to use as setA within the comparisons. These directories may be
|
| @@ -93,6 +100,14 @@ class RenderedPicturesComparisons(results.BaseComparisons):
|
| gs: instance of GSUtils object we can use to download summary files
|
| truncate_results: FOR MANUAL TESTING: if True, truncate the set of images
|
| we process, to speed up testing.
|
| + prefetch_only: if True, return the new object as quickly as possible
|
| + with empty self._results (just queue up all the files to process,
|
| + don't wait around for them to be processed and recorded); otherwise,
|
| + block until the results have been assembled and recorded in
|
| + self._results.
|
| + download_all_images: if True, download all images, even if we don't
|
| + need them to generate diffs. This will take much longer to complete,
|
| + but is useful for warming up the bitmap cache on local disk.
|
| """
|
| super(RenderedPicturesComparisons, self).__init__()
|
| self._image_diff_db = image_diff_db
|
| @@ -104,6 +119,8 @@ class RenderedPicturesComparisons(results.BaseComparisons):
|
| self._setB_label = setB_label
|
| self._gs = gs
|
| self.truncate_results = truncate_results
|
| + self._prefetch_only = prefetch_only
|
| + self._download_all_images = download_all_images
|
|
|
| tempdir = tempfile.mkdtemp()
|
| try:
|
| @@ -121,11 +138,12 @@ class RenderedPicturesComparisons(results.BaseComparisons):
|
| self._results = self._load_result_pairs(
|
| setA_root=setA_root, setA_section=gm_json.JSONKEY_ACTUALRESULTS,
|
| setB_root=setB_root, setB_section=gm_json.JSONKEY_ACTUALRESULTS)
|
| - self._timestamp = int(time.time())
|
| - logging.info('Number of download file collisions: %s' %
|
| - imagediffdb.global_file_collisions)
|
| - logging.info('Results complete; took %d seconds.' %
|
| - (self._timestamp - time_start))
|
| + if self._results:
|
| + self._timestamp = int(time.time())
|
| + logging.info('Number of download file collisions: %s' %
|
| + imagediffdb.global_file_collisions)
|
| + logging.info('Results complete; took %d seconds.' %
|
| + (self._timestamp - time_start))
|
| finally:
|
| shutil.rmtree(tempdir)
|
|
|
| @@ -141,7 +159,8 @@ class RenderedPicturesComparisons(results.BaseComparisons):
|
| setB_section: which section (gm_json.JSONKEY_ACTUALRESULTS or
|
| gm_json.JSONKEY_EXPECTEDRESULTS) to load from the summaries in setB
|
|
|
| - Returns the summary of all image diff results.
|
| + Returns the summary of all image diff results (or None, depending on
|
| + self._prefetch_only).
|
| """
|
| logging.info('Reading JSON image summaries from dirs %s and %s...' % (
|
| setA_root, setB_root))
|
| @@ -182,8 +201,9 @@ class RenderedPicturesComparisons(results.BaseComparisons):
|
| dict_num = 0
|
| for dict_path in union_dict_paths:
|
| dict_num += 1
|
| - logging.info('Generating pixel diffs for dict #%d of %d, "%s"...' %
|
| - (dict_num, num_union_dict_paths, dict_path))
|
| + logging.info(
|
| + 'Asynchronously requesting pixel diffs for dict #%d of %d, "%s"...' %
|
| + (dict_num, num_union_dict_paths, dict_path))
|
|
|
| dictA = self.get_default(setA_dicts, None, dict_path)
|
| self._validate_dict_version(dictA)
|
| @@ -235,12 +255,15 @@ class RenderedPicturesComparisons(results.BaseComparisons):
|
| if result_type != results.KEY__RESULT_TYPE__SUCCEEDED:
|
| failing_image_pairs.add_image_pair(one_imagepair)
|
|
|
| - return {
|
| - results.KEY__HEADER__RESULTS_ALL: all_image_pairs.as_dict(
|
| - column_ids_in_order=ORDERED_COLUMN_IDS),
|
| - results.KEY__HEADER__RESULTS_FAILURES: failing_image_pairs.as_dict(
|
| - column_ids_in_order=ORDERED_COLUMN_IDS),
|
| - }
|
| + if self._prefetch_only:
|
| + return None
|
| + else:
|
| + return {
|
| + results.KEY__HEADER__RESULTS_ALL: all_image_pairs.as_dict(
|
| + column_ids_in_order=ORDERED_COLUMN_IDS),
|
| + results.KEY__HEADER__RESULTS_FAILURES: failing_image_pairs.as_dict(
|
| + column_ids_in_order=ORDERED_COLUMN_IDS),
|
| + }
|
|
|
| def _validate_dict_version(self, result_dict):
|
| """Raises Exception if the dict is not the type/version we know how to read.
|
| @@ -320,7 +343,8 @@ class RenderedPicturesComparisons(results.BaseComparisons):
|
| base_url=self._image_base_gs_url,
|
| imageA_relative_url=imageA_relative_url,
|
| imageB_relative_url=imageB_relative_url,
|
| - extra_columns=extra_columns_dict)
|
| + extra_columns=extra_columns_dict,
|
| + download_all_images=self._download_all_images)
|
| except (KeyError, TypeError):
|
| logging.exception(
|
| 'got exception while creating ImagePair for'
|
|
|