1# Copyright 2013 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. 4import hardware_accelerated_feature_expectations as expectations 5 6from telemetry import benchmark 7from telemetry.page import page as page_module 8from telemetry.page import page_set 9from telemetry.page import page_test 10 11test_harness_script = r""" 12 function VerifyHardwareAccelerated(feature) { 13 feature += ': ' 14 var list = document.querySelector('.feature-status-list'); 15 for (var i=0; i < list.childElementCount; i++) { 16 var span_list = list.children[i].getElementsByTagName('span'); 17 var feature_str = span_list[0].textContent; 18 var value_str = span_list[1].textContent; 19 if ((feature_str == feature) && 20 (value_str == 'Hardware accelerated')) { 21 return true; 22 } 23 } 24 return false; 25 }; 26"""; 27 28class _HardwareAcceleratedFeatureValidator(page_test.PageTest): 29 def ValidateAndMeasurePage(self, page, tab, results): 30 feature = page.feature 31 if not tab.EvaluateJavaScript('VerifyHardwareAccelerated("%s")' % feature): 32 print 'Test failed. Printing page contents:' 33 print tab.EvaluateJavaScript('document.body.innerHTML') 34 raise page_test.Failure('%s not hardware accelerated' % feature) 35 36def safe_feature_name(feature): 37 return feature.lower().replace(' ', '_') 38 39class ChromeGpuPage(page_module.Page): 40 def __init__(self, page_set, feature): 41 super(ChromeGpuPage, self).__init__( 42 url='chrome://gpu', page_set=page_set, base_dir=page_set.base_dir, 43 name=('HardwareAcceleratedFeature.%s_accelerated' % 44 safe_feature_name(feature))) 45 self.feature = feature 46 self.script_to_evaluate_on_commit = test_harness_script 47 48class HardwareAcceleratedFeature(benchmark.Benchmark): 49 """Tests GPU acceleration is reported as active for various features""" 50 test = _HardwareAcceleratedFeatureValidator 51 52 def CreateExpectations(self, page_set): 53 return expectations.HardwareAcceleratedFeatureExpectations() 54 55 def CreatePageSet(self, options): 56 features = ['WebGL', 'Canvas'] 57 58 ps = page_set.PageSet(user_agent_type='desktop', file_path='') 59 60 for feature in features: 61 ps.AddPage(ChromeGpuPage(page_set=ps, feature=feature)) 62 return ps 63