11e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)# Copyright 2013 The Chromium Authors. All rights reserved. 21e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 31e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)# found in the LICENSE file. 41e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)import hardware_accelerated_feature_expectations as expectations 51e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 6116680a4aac90f2aa7413d9095a592090648e557Ben Murdochfrom telemetry import benchmark 75c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liufrom telemetry.page import page as page_module 81e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)from telemetry.page import page_set 91e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)from telemetry.page import page_test 101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)test_harness_script = r""" 121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) function VerifyHardwareAccelerated(feature) { 131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) feature += ': ' 141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) var list = document.querySelector('.feature-status-list'); 151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) for (var i=0; i < list.childElementCount; i++) { 161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) var span_list = list.children[i].getElementsByTagName('span'); 171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) var feature_str = span_list[0].textContent; 181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) var value_str = span_list[1].textContent; 191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if ((feature_str == feature) && 201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) (value_str == 'Hardware accelerated')) { 211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return true; 221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return false; 251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) }; 261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)"""; 271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)class _HardwareAcceleratedFeatureValidator(page_test.PageTest): 296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) def ValidateAndMeasurePage(self, page, tab, results): 301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) feature = page.feature 311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if not tab.EvaluateJavaScript('VerifyHardwareAccelerated("%s")' % feature): 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) print 'Test failed. Printing page contents:' 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) print tab.EvaluateJavaScript('document.body.innerHTML') 341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) raise page_test.Failure('%s not hardware accelerated' % feature) 351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)def safe_feature_name(feature): 371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return feature.lower().replace(' ', '_') 381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 39010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class ChromeGpuPage(page_module.Page): 405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu def __init__(self, page_set, feature): 415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu super(ChromeGpuPage, self).__init__( 42010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) url='chrome://gpu', page_set=page_set, base_dir=page_set.base_dir, 43010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) name=('HardwareAcceleratedFeature.%s_accelerated' % 44010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) safe_feature_name(feature))) 455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu self.feature = feature 465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu self.script_to_evaluate_on_commit = test_harness_script 475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 48116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass HardwareAcceleratedFeature(benchmark.Benchmark): 491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) """Tests GPU acceleration is reported as active for various features""" 5023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) test = _HardwareAcceleratedFeatureValidator 511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) def CreateExpectations(self, page_set): 531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return expectations.HardwareAcceleratedFeatureExpectations() 541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) def CreatePageSet(self, options): 565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu features = ['WebGL', 'Canvas'] 571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 58f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ps = page_set.PageSet(user_agent_type='desktop', file_path='') 591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) for feature in features: 615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ps.AddPage(ChromeGpuPage(page_set=ps, feature=feature)) 625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return ps 63