| OLD | NEW |
| 1 #!/usr/bin/python | 1 #!/usr/bin/python |
| 2 | 2 |
| 3 """ | 3 """ |
| 4 Copyright 2014 Google Inc. | 4 Copyright 2014 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 Compare results of two render_pictures runs. | 9 Compare results of two render_pictures runs. |
| 10 | 10 |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 71 | 71 |
| 72 class RenderedPicturesComparisons(results.BaseComparisons): | 72 class RenderedPicturesComparisons(results.BaseComparisons): |
| 73 """Loads results from multiple render_pictures runs into an ImagePairSet. | 73 """Loads results from multiple render_pictures runs into an ImagePairSet. |
| 74 """ | 74 """ |
| 75 | 75 |
| 76 def __init__(self, | 76 def __init__(self, |
| 77 setA_dirs, setB_dirs, | 77 setA_dirs, setB_dirs, |
| 78 setA_section, setB_section, | 78 setA_section, setB_section, |
| 79 image_diff_db, | 79 image_diff_db, |
| 80 image_base_gs_url=DEFAULT_IMAGE_BASE_GS_URL, diff_base_url=None, | 80 image_base_gs_url=DEFAULT_IMAGE_BASE_GS_URL, diff_base_url=None, |
| 81 setA_label='setA', setB_label='setB', | 81 setA_label=None, setB_label=None, |
| 82 gs=None, truncate_results=False, prefetch_only=False, | 82 gs=None, truncate_results=False, prefetch_only=False, |
| 83 download_all_images=False): | 83 download_all_images=False): |
| 84 """Constructor: downloads images and generates diffs. | 84 """Constructor: downloads images and generates diffs. |
| 85 | 85 |
| 86 Once the object has been created (which may take a while), you can call its | 86 Once the object has been created (which may take a while), you can call its |
| 87 get_packaged_results_of_type() method to quickly retrieve the results... | 87 get_packaged_results_of_type() method to quickly retrieve the results... |
| 88 unless you have set prefetch_only to True, in which case we will | 88 unless you have set prefetch_only to True, in which case we will |
| 89 asynchronously warm up the ImageDiffDB cache but not fill in self._results. | 89 asynchronously warm up the ImageDiffDB cache but not fill in self._results. |
| 90 | 90 |
| 91 Args: | 91 Args: |
| 92 setA_dirs: list of root directories to copy all JSON summaries from, | 92 setA_dirs: list of root directories to copy all JSON summaries from, |
| 93 and to use as setA within the comparisons. These directories may be | 93 and to use as setA within the comparisons. These directories may be |
| 94 gs:// URLs, special "repo:" URLs, or local filepaths. | 94 gs:// URLs, special "repo:" URLs, or local filepaths. |
| 95 setB_dirs: list of root directories to copy all JSON summaries from, | 95 setB_dirs: list of root directories to copy all JSON summaries from, |
| 96 and to use as setB within the comparisons. These directories may be | 96 and to use as setB within the comparisons. These directories may be |
| 97 gs:// URLs, special "repo:" URLs, or local filepaths. | 97 gs:// URLs, special "repo:" URLs, or local filepaths. |
| 98 setA_section: which section within setA to examine; must be one of | 98 setA_section: which section within setA to examine; must be one of |
| 99 ALLOWED_SECTION_NAMES | 99 ALLOWED_SECTION_NAMES |
| 100 setB_section: which section within setB to examine; must be one of | 100 setB_section: which section within setB to examine; must be one of |
| 101 ALLOWED_SECTION_NAMES | 101 ALLOWED_SECTION_NAMES |
| 102 image_diff_db: ImageDiffDB instance | 102 image_diff_db: ImageDiffDB instance |
| 103 image_base_gs_url: "gs://" URL pointing at the Google Storage bucket/dir | 103 image_base_gs_url: "gs://" URL pointing at the Google Storage bucket/dir |
| 104 under which all render_pictures result images can | 104 under which all render_pictures result images can |
| 105 be found; this will be used to read images for comparison within | 105 be found; this will be used to read images for comparison within |
| 106 this code, and included in the ImagePairSet (as an HTTP URL) so its | 106 this code, and included in the ImagePairSet (as an HTTP URL) so its |
| 107 consumers know where to download the images from | 107 consumers know where to download the images from |
| 108 diff_base_url: base URL within which the client should look for diff | 108 diff_base_url: base URL within which the client should look for diff |
| 109 images; if not specified, defaults to a "file:///" URL representation | 109 images; if not specified, defaults to a "file:///" URL representation |
| 110 of image_diff_db's storage_root | 110 of image_diff_db's storage_root |
| 111 setA_label: description to use for results in setA | 111 setA_label: description to use for results in setA; if None, will be |
| 112 setB_label: description to use for results in setB | 112 set to a reasonable default |
| 113 setB_label: description to use for results in setB; if None, will be |
| 114 set to a reasonable default |
| 113 gs: instance of GSUtils object we can use to download summary files | 115 gs: instance of GSUtils object we can use to download summary files |
| 114 truncate_results: FOR MANUAL TESTING: if True, truncate the set of images | 116 truncate_results: FOR MANUAL TESTING: if True, truncate the set of images |
| 115 we process, to speed up testing. | 117 we process, to speed up testing. |
| 116 prefetch_only: if True, return the new object as quickly as possible | 118 prefetch_only: if True, return the new object as quickly as possible |
| 117 with empty self._results (just queue up all the files to process, | 119 with empty self._results (just queue up all the files to process, |
| 118 don't wait around for them to be processed and recorded); otherwise, | 120 don't wait around for them to be processed and recorded); otherwise, |
| 119 block until the results have been assembled and recorded in | 121 block until the results have been assembled and recorded in |
| 120 self._results. | 122 self._results. |
| 121 download_all_images: if True, download all images, even if we don't | 123 download_all_images: if True, download all images, even if we don't |
| 122 need them to generate diffs. This will take much longer to complete, | 124 need them to generate diffs. This will take much longer to complete, |
| 123 but is useful for warming up the bitmap cache on local disk. | 125 but is useful for warming up the bitmap cache on local disk. |
| 124 """ | 126 """ |
| 125 super(RenderedPicturesComparisons, self).__init__() | 127 super(RenderedPicturesComparisons, self).__init__() |
| 126 self._image_diff_db = image_diff_db | 128 self._image_diff_db = image_diff_db |
| 127 self._image_base_gs_url = image_base_gs_url | 129 self._image_base_gs_url = image_base_gs_url |
| 128 self._diff_base_url = ( | 130 self._diff_base_url = ( |
| 129 diff_base_url or | 131 diff_base_url or |
| 130 url_utils.create_filepath_url(image_diff_db.storage_root)) | 132 url_utils.create_filepath_url(image_diff_db.storage_root)) |
| 131 self._setA_label = setA_label | |
| 132 self._setB_label = setB_label | |
| 133 self._gs = gs | 133 self._gs = gs |
| 134 self.truncate_results = truncate_results | 134 self.truncate_results = truncate_results |
| 135 self._prefetch_only = prefetch_only | 135 self._prefetch_only = prefetch_only |
| 136 self._download_all_images = download_all_images | 136 self._download_all_images = download_all_images |
| 137 | 137 |
| 138 # If we are comparing two different section types, we can use those |
| 139 # as the default labels for setA and setB. |
| 140 if setA_section != setB_section: |
| 141 self._setA_label = setA_label or setA_section |
| 142 self._setB_label = setB_label or setB_section |
| 143 else: |
| 144 self._setA_label = setA_label or 'setA' |
| 145 self._setB_label = setB_label or 'setB' |
| 146 |
| 138 tempdir = tempfile.mkdtemp() | 147 tempdir = tempfile.mkdtemp() |
| 139 try: | 148 try: |
| 140 setA_root = os.path.join(tempdir, 'setA') | 149 setA_root = os.path.join(tempdir, 'setA') |
| 141 setB_root = os.path.join(tempdir, 'setB') | 150 setB_root = os.path.join(tempdir, 'setB') |
| 142 for source_dir in setA_dirs: | 151 for source_dir in setA_dirs: |
| 143 self._copy_dir_contents(source_dir=source_dir, dest_dir=setA_root) | 152 self._copy_dir_contents(source_dir=source_dir, dest_dir=setA_root) |
| 144 for source_dir in setB_dirs: | 153 for source_dir in setB_dirs: |
| 145 self._copy_dir_contents(source_dir=source_dir, dest_dir=setB_root) | 154 self._copy_dir_contents(source_dir=source_dir, dest_dir=setB_root) |
| 146 | 155 |
| 147 time_start = int(time.time()) | 156 time_start = int(time.time()) |
| (...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 378 """ | 387 """ |
| 379 if gs_utils.GSUtils.is_gs_url(source_dir): | 388 if gs_utils.GSUtils.is_gs_url(source_dir): |
| 380 (bucket, path) = gs_utils.GSUtils.split_gs_url(source_dir) | 389 (bucket, path) = gs_utils.GSUtils.split_gs_url(source_dir) |
| 381 self._gs.download_dir_contents(source_bucket=bucket, source_dir=path, | 390 self._gs.download_dir_contents(source_bucket=bucket, source_dir=path, |
| 382 dest_dir=dest_dir) | 391 dest_dir=dest_dir) |
| 383 elif source_dir.lower().startswith(REPO_URL_PREFIX): | 392 elif source_dir.lower().startswith(REPO_URL_PREFIX): |
| 384 repo_dir = os.path.join(REPO_BASEPATH, source_dir[len(REPO_URL_PREFIX):]) | 393 repo_dir = os.path.join(REPO_BASEPATH, source_dir[len(REPO_URL_PREFIX):]) |
| 385 shutil.copytree(repo_dir, dest_dir) | 394 shutil.copytree(repo_dir, dest_dir) |
| 386 else: | 395 else: |
| 387 shutil.copytree(source_dir, dest_dir) | 396 shutil.copytree(source_dir, dest_dir) |
| OLD | NEW |