| Index: content/test/gpu/gpu_tests/pixel.py
|
| diff --git a/content/test/gpu/gpu_tests/pixel.py b/content/test/gpu/gpu_tests/pixel.py
|
| deleted file mode 100644
|
| index d569bdebe36baf1b622517bdfb04051915f4ee61..0000000000000000000000000000000000000000
|
| --- a/content/test/gpu/gpu_tests/pixel.py
|
| +++ /dev/null
|
| @@ -1,191 +0,0 @@
|
| -# Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -# Use of this source code is governed by a BSD-style license that can be
|
| -# found in the LICENSE file.
|
| -import glob
|
| -import json
|
| -import os
|
| -import re
|
| -
|
| -from gpu_tests import cloud_storage_test_base
|
| -from gpu_tests import pixel_expectations
|
| -import page_sets
|
| -
|
| -from py_utils import cloud_storage
|
| -from telemetry.page import page_test
|
| -from telemetry.util import image_util
|
| -
|
| -
|
| -test_data_dir = os.path.abspath(os.path.join(
|
| - os.path.dirname(__file__), '..', '..', 'data', 'gpu'))
|
| -
|
| -default_reference_image_dir = os.path.join(test_data_dir, 'gpu_reference')
|
| -
|
| -test_harness_script = r"""
|
| - var domAutomationController = {};
|
| -
|
| - domAutomationController._succeeded = false;
|
| - domAutomationController._finished = false;
|
| -
|
| - domAutomationController.setAutomationId = function(id) {}
|
| -
|
| - domAutomationController.send = function(msg) {
|
| - domAutomationController._finished = true;
|
| -
|
| - if(msg.toLowerCase() == "success") {
|
| - domAutomationController._succeeded = true;
|
| - } else {
|
| - domAutomationController._succeeded = false;
|
| - }
|
| - }
|
| -
|
| - window.domAutomationController = domAutomationController;
|
| -"""
|
| -
|
| -class PixelTestFailure(Exception):
|
| - pass
|
| -
|
| -def _DidTestSucceed(tab):
|
| - return tab.EvaluateJavaScript('domAutomationController._succeeded')
|
| -
|
| -class PixelValidator(cloud_storage_test_base.ValidatorBase):
|
| - def CustomizeBrowserOptions(self, options):
|
| - # --test-type=gpu is used only to suppress the "Google API Keys are missing"
|
| - # infobar, which causes flakiness in tests.
|
| - options.AppendExtraBrowserArgs(['--enable-gpu-benchmarking',
|
| - '--test-type=gpu'])
|
| -
|
| - def ValidateAndMeasurePage(self, page, tab, results):
|
| - if not _DidTestSucceed(tab):
|
| - raise page_test.Failure('Page indicated a failure')
|
| -
|
| - if not tab.screenshot_supported:
|
| - raise page_test.Failure('Browser does not support screenshot capture')
|
| -
|
| - screenshot = tab.Screenshot(5)
|
| -
|
| - if screenshot is None:
|
| - raise page_test.Failure('Could not capture screenshot')
|
| -
|
| - dpr = tab.EvaluateJavaScript('window.devicePixelRatio')
|
| -
|
| - if hasattr(page, 'test_rect'):
|
| - screenshot = image_util.Crop(
|
| - screenshot, page.test_rect[0] * dpr, page.test_rect[1] * dpr,
|
| - page.test_rect[2] * dpr, page.test_rect[3] * dpr)
|
| -
|
| - if hasattr(page, 'expected_colors'):
|
| - # Use expected pixels instead of ref images for validation.
|
| - expected_colors_file = os.path.abspath(os.path.join(
|
| - os.path.dirname(__file__), page.expected_colors))
|
| - expected_colors = self._ReadPixelExpectations(expected_colors_file)
|
| - self._ValidateScreenshotSamples(
|
| - tab, page.display_name, screenshot, expected_colors, dpr)
|
| - return
|
| -
|
| - image_name = self._UrlToImageName(page.display_name)
|
| -
|
| - if self.options.upload_refimg_to_cloud_storage:
|
| - if self._ConditionallyUploadToCloudStorage(image_name, page, tab,
|
| - screenshot):
|
| - # This is the new reference image; there's nothing to compare against.
|
| - ref_png = screenshot
|
| - else:
|
| - # There was a preexisting reference image, so we might as well
|
| - # compare against it.
|
| - ref_png = self._DownloadFromCloudStorage(image_name, page, tab)
|
| - elif self.options.download_refimg_from_cloud_storage:
|
| - # This bot doesn't have the ability to properly generate a
|
| - # reference image, so download it from cloud storage.
|
| - try:
|
| - ref_png = self._DownloadFromCloudStorage(image_name, page, tab)
|
| - except cloud_storage.NotFoundError:
|
| - # There is no reference image yet in cloud storage. This
|
| - # happens when the revision of the test is incremented or when
|
| - # a new test is added, because the trybots are not allowed to
|
| - # produce reference images, only the bots on the main
|
| - # waterfalls. Report this as a failure so the developer has to
|
| - # take action by explicitly suppressing the failure and
|
| - # removing the suppression once the reference images have been
|
| - # generated. Otherwise silent failures could happen for long
|
| - # periods of time.
|
| - raise page_test.Failure('Could not find image %s in cloud storage' %
|
| - image_name)
|
| - else:
|
| - # Legacy path using on-disk results.
|
| - ref_png = self._GetReferenceImage(self.options.reference_dir,
|
| - image_name, page.revision, screenshot)
|
| -
|
| - # Test new snapshot against existing reference image
|
| - if not image_util.AreEqual(ref_png, screenshot, tolerance=page.tolerance):
|
| - if self.options.test_machine_name:
|
| - self._UploadErrorImagesToCloudStorage(image_name, screenshot, ref_png)
|
| - else:
|
| - self._WriteErrorImages(self.options.generated_dir, image_name,
|
| - screenshot, ref_png)
|
| - raise page_test.Failure('Reference image did not match captured screen')
|
| -
|
| - def _DeleteOldReferenceImages(self, ref_image_path, cur_revision):
|
| - if not cur_revision:
|
| - return
|
| -
|
| - old_revisions = glob.glob(ref_image_path + "_*.png")
|
| - for rev_path in old_revisions:
|
| - m = re.match(r'^.*_(\d+)\.png$', rev_path)
|
| - if m and int(m.group(1)) < cur_revision:
|
| - print 'Found deprecated reference image. Deleting rev ' + m.group(1)
|
| - os.remove(rev_path)
|
| -
|
| - def _GetReferenceImage(self, img_dir, img_name, cur_revision, screenshot):
|
| - if not cur_revision:
|
| - cur_revision = 0
|
| -
|
| - image_path = os.path.join(img_dir, img_name)
|
| -
|
| - self._DeleteOldReferenceImages(image_path, cur_revision)
|
| -
|
| - image_path = image_path + '_' + str(cur_revision) + '.png'
|
| -
|
| - try:
|
| - ref_png = image_util.FromPngFile(image_path)
|
| - # This can raise a couple of exceptions including IOError and ValueError.
|
| - except Exception:
|
| - ref_png = None
|
| -
|
| - if ref_png is not None:
|
| - return ref_png
|
| -
|
| - print ('Reference image not found. Writing tab contents as reference to: ' +
|
| - image_path)
|
| -
|
| - self._WriteImage(image_path, screenshot)
|
| - return screenshot
|
| -
|
| - def _ReadPixelExpectations(self, json_file_path):
|
| - with open(json_file_path, 'r') as f:
|
| - json_contents = json.load(f)
|
| - return json_contents
|
| -
|
| -class Pixel(cloud_storage_test_base.CloudStorageTestBase):
|
| - test = PixelValidator
|
| -
|
| - @classmethod
|
| - def Name(cls):
|
| - return 'pixel'
|
| -
|
| - @classmethod
|
| - def AddBenchmarkCommandLineArgs(cls, group):
|
| - super(Pixel, cls).AddBenchmarkCommandLineArgs(group)
|
| - group.add_option('--reference-dir',
|
| - help='Overrides the default on-disk location for reference images '
|
| - '(only used for local testing without a cloud storage account)',
|
| - default=default_reference_image_dir)
|
| -
|
| - def CreateStorySet(self, options):
|
| - story_set = page_sets.PixelTestsStorySet(self.GetExpectations(),
|
| - try_es3=True)
|
| - for page in story_set:
|
| - page.script_to_evaluate_on_commit = test_harness_script
|
| - return story_set
|
| -
|
| - def _CreateExpectations(self):
|
| - return pixel_expectations.PixelExpectations()
|
|
|