blob: 34524326b521c63ee603d4b3b3387c201aebc61f [file] [log] [blame]
# Copyright 2017 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 sys
from gpu_tests import gpu_integration_test
import gpu_tests.hardware_accelerated_feature_expectations as hw_expectations
test_harness_script = r"""
function VerifyHardwareAccelerated(feature) {
feature += ': '
var list = document.querySelector('.feature-status-list');
for (var i=0; i < list.childElementCount; i++) {
var span_list = list.children[i].getElementsByTagName('span');
var feature_str = span_list[0].textContent;
var value_str = span_list[1].textContent;
if ((feature_str == feature) &&
(value_str == 'Hardware accelerated')) {
return true;
}
}
return false;
};
"""
def safe_feature_name(feature):
return feature.lower().replace(' ', '_')
class HardwareAcceleratedFeatureIntegrationTest(
gpu_integration_test.GpuIntegrationTest):
"""Tests GPU acceleration is reported as active for various features."""
@classmethod
def Name(cls):
"""The name by which this test is invoked on the command line."""
return 'hardware_accelerated_feature'
@classmethod
def SetUpProcess(cls):
super(cls, HardwareAcceleratedFeatureIntegrationTest).SetUpProcess()
cls.CustomizeBrowserArgs([])
cls.StartBrowser()
cls.SetStaticServerDirs([])
@classmethod
def _CreateExpectations(cls):
return hw_expectations.HardwareAcceleratedFeatureExpectations()
def _Navigate(self, url):
# It's crucial to use the action_runner, rather than the tab's
# Navigate method directly. It waits for the document ready state
# to become interactive or better, avoiding critical race
# conditions.
self.tab.action_runner.Navigate(
url, script_to_evaluate_on_commit=test_harness_script)
@classmethod
def GenerateGpuTests(cls, options):
tests = ('WebGL', 'Canvas')
for feature in tests:
yield('HardwareAcceleratedFeature_%s_accelerated' %
safe_feature_name(feature),
'chrome://gpu',
(feature))
def RunActualGpuTest(self, test_path, *args):
feature = args[0]
self._Navigate(test_path)
tab = self.tab
if not tab.EvaluateJavaScript(
'VerifyHardwareAccelerated({{ feature }})', feature=feature):
print 'Test failed. Printing page contents:'
print tab.EvaluateJavaScript('document.body.innerHTML')
self.fail('%s not hardware accelerated' % feature)
def load_tests(loader, tests, pattern):
del loader, tests, pattern # Unused.
return gpu_integration_test.LoadAllTestsInModule(sys.modules[__name__])