Index: content/test/gpu/gpu_tests/hardware_accelerated_feature_integration_test.py |
diff --git a/content/test/gpu/gpu_tests/hardware_accelerated_feature_integration_test.py b/content/test/gpu/gpu_tests/hardware_accelerated_feature_integration_test.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..fe0d42873aba1eeecd703b1b8d9aa0070cb1a5f1 |
--- /dev/null |
+++ b/content/test/gpu/gpu_tests/hardware_accelerated_feature_integration_test.py |
@@ -0,0 +1,72 @@ |
+# 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. |
+ |
+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 setUpClass(cls): |
+ super(cls, HardwareAcceleratedFeatureIntegrationTest).setUpClass() |
+ cls.SetBrowserOptions(cls._finder_options) |
+ 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("%s")' % feature): |
+ print 'Test failed. Printing page contents:' |
+ print tab.EvaluateJavaScript('document.body.innerHTML') |
+ self.fail('%s not hardware accelerated' % feature) |