Index: content/test/gpu/gpu_tests/screenshot_sync.py |
diff --git a/content/test/gpu/gpu_tests/screenshot_sync.py b/content/test/gpu/gpu_tests/screenshot_sync.py |
index caa38532119b10674f379ee5ac87956996343374..cce1730660368ca0fef202dfe2b9fe03532e1177 100644 |
--- a/content/test/gpu/gpu_tests/screenshot_sync.py |
+++ b/content/test/gpu/gpu_tests/screenshot_sync.py |
@@ -11,6 +11,7 @@ from gpu_tests import screenshot_sync_expectations |
from telemetry.page import page_test |
from telemetry.story import story_set as story_set_module |
from telemetry.util import image_util |
+from telemetry.util import rgba_color |
data_path = os.path.join( |
path_util.GetChromiumSrcDir(), 'content', 'test', 'data', 'gpu') |
@@ -26,31 +27,42 @@ class ScreenshotSyncValidator(gpu_test_base.ValidatorBase): |
if not tab.screenshot_supported: |
raise page_test.Failure('Browser does not support screenshot capture') |
- def CheckColorMatch(canvasRGB, screenshotRGB): |
- for i in range(0, 3): |
- if abs(canvasRGB[i] - screenshotRGB[i]) > 1: |
- raise page_test.Failure('Color mismatch in component #%d: %d vs %d' % |
- (i, canvasRGB[i], screenshotRGB[i])) |
+ def CheckColorMatchAtLocation(expectedRGB, screenshot, x, y): |
+ pixel_value = image_util.GetPixelColor(screenshot, x, y) |
+ if not expectedRGB.IsEqual(pixel_value): |
+ error_message = ('Color mismatch at (%d, %d): expected (%d, %d, %d), ' + |
+ 'got (%d, %d, %d)') % ( |
+ x, y, expectedRGB.r, expectedRGB.g, expectedRGB.b, |
+ pixel_value.r, pixel_value.g, pixel_value.b) |
+ raise page_test.Failure(error_message) |
def CheckScreenshot(): |
- canvasRGB = [] |
- for _ in range(0, 3): |
- canvasRGB.append(random.randint(0, 255)) |
- tab.EvaluateJavaScript("window.draw(%d, %d, %d);" % tuple(canvasRGB)) |
+ canvasRGB = rgba_color.RgbaColor(random.randint(0, 255), |
+ random.randint(0, 255), |
+ random.randint(0, 255), |
+ 255) |
+ tab.EvaluateJavaScript("window.draw(%d, %d, %d);" % ( |
+ canvasRGB.r, canvasRGB.g, canvasRGB.b)) |
screenshot = tab.Screenshot(5) |
- CheckColorMatch(canvasRGB, image_util.Pixels(screenshot)) |
+ start_x = 10 |
+ start_y = 0 |
+ outer_size = 256 |
+ skip = 10 |
+ for y in range(start_y, outer_size, skip): |
+ for x in range(start_x, outer_size, skip): |
+ CheckColorMatchAtLocation(canvasRGB, screenshot, x, y) |
- repetitions = 50 |
+ repetitions = 20 |
for _ in range(0, repetitions): |
CheckScreenshot() |
class ScreenshotSyncPage(gpu_test_base.PageBase): |
- def __init__(self, story_set, base_dir, expectations): |
+ def __init__(self, story_set, base_dir, url, name, expectations): |
super(ScreenshotSyncPage, self).__init__( |
- url='file://screenshot_sync.html', |
+ url=url, |
page_set=story_set, |
base_dir=base_dir, |
- name='ScreenshotSync', |
+ name=name, |
expectations=expectations) |
@@ -68,5 +80,12 @@ class ScreenshotSyncProcess(gpu_test_base.TestBase): |
def CreateStorySet(self, options): |
ps = story_set_module.StorySet(base_dir=data_path, serving_dirs=['']) |
- ps.AddStory(ScreenshotSyncPage(ps, ps.base_dir, self.GetExpectations())) |
+ ps.AddStory(ScreenshotSyncPage(ps, ps.base_dir, |
+ 'file://screenshot_sync_canvas.html', |
+ 'ScreenshotSync.WithCanvas', |
+ self.GetExpectations())) |
+ ps.AddStory(ScreenshotSyncPage(ps, ps.base_dir, |
+ 'file://screenshot_sync_divs.html', |
+ 'ScreenshotSync.WithDivs', |
+ self.GetExpectations())) |
return ps |