1 # Copyright 2014 The Chromium Authors. All rights reserved. 2 # Use of this source code is governed by a BSD-style license that can be 3 # found in the LICENSE file. 4 import os 5 6 import screenshot_sync_expectations as expectations 7 8 from telemetry import test 9 from telemetry.core import util 10 from telemetry.page import page 11 from telemetry.page import page_set 12 from telemetry.page import page_test 13 # pylint: disable=W0401,W0614 14 from telemetry.page.actions.all_page_actions import * 15 16 data_path = os.path.join( 17 util.GetChromiumSrcDir(), 'content', 'test', 'data', 'gpu') 18 19 class _ScreenshotSyncValidator(page_test.PageTest): 20 def CustomizeBrowserOptions(self, options): 21 options.AppendExtraBrowserArgs('--enable-gpu-benchmarking') 22 23 def ValidatePage(self, page, tab, results): 24 test_success = tab.EvaluateJavaScript('window.__testSuccess') 25 if not test_success: 26 message = tab.EvaluateJavaScript('window.__testMessage') 27 raise page_test.Failure(message) 28 29 30 class ScreenshotSyncPage(page.Page): 31 def __init__(self, page_set, base_dir): 32 super(ScreenshotSyncPage, self).__init__( 33 url='file://screenshot_sync.html', 34 page_set=page_set, 35 base_dir=base_dir, 36 name='ScreenshotSync') 37 self.user_agent_type = 'desktop' 38 39 def RunNavigateSteps(self, action_runner): 40 action_runner.NavigateToPage(self) 41 action_runner.WaitForJavaScriptCondition( 42 'window.__testComplete', timeout=120) 43 44 45 class ScreenshotSyncProcess(test.Test): 46 """Tests that screenhots are properly synchronized with the frame one which 47 they were requested""" 48 test = _ScreenshotSyncValidator 49 50 def CreateExpectations(self, page_set): 51 return expectations.ScreenshotSyncExpectations() 52 53 def CreatePageSet(self, options): 54 ps = page_set.PageSet(file_path=data_path, serving_dirs=['']) 55 ps.AddPage(ScreenshotSyncPage(ps, ps.base_dir)) 56 return ps 57