1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
# Copyright 2017 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import os
import sys
from typing import Any
import unittest
from gpu_tests import common_typing as ct
from gpu_tests import gpu_integration_test
test_harness_script = r"""
function VerifyHardwareAccelerated(feature) {
return getGPUInfo('feature-status-list', feature) === 'enabled';
};
"""
def safe_feature_name(feature: str) -> str:
return feature.lower().replace(' ', '_')
class HardwareAcceleratedFeatureIntegrationTest(
gpu_integration_test.GpuIntegrationTest):
"""Tests GPU acceleration is reported as active for various features."""
@classmethod
def Name(cls) -> str:
"""The name by which this test is invoked on the command line."""
return 'hardware_accelerated_feature'
@classmethod
def SetUpProcess(cls) -> None:
super(cls, HardwareAcceleratedFeatureIntegrationTest).SetUpProcess()
cls.CustomizeBrowserArgs([])
cls.StartBrowser()
cls.SetStaticServerDirs([])
def _Navigate(self, url: str) -> None:
# 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: ct.ParsedCmdArgs) -> ct.TestGenerator:
tests = ('webgl', '2d_canvas')
for feature in tests:
safe_name = safe_feature_name(feature)
yield (f'HardwareAcceleratedFeature_{safe_name}_accelerated',
'chrome://gpu', [feature])
def RunActualGpuTest(self, test_path: str, args: ct.TestArgs) -> None:
feature = args[0]
self._Navigate(test_path)
tab = self.tab
tab.WaitForJavaScriptCondition('window.gpuPagePopulated', timeout=30)
if not tab.EvaluateJavaScript(
'VerifyHardwareAccelerated({{ feature }})', feature=feature):
print('Test failed. Printing page contents:')
print(tab.EvaluateJavaScript('document.body.innerHTML'))
self.fail(f'{feature} not hardware accelerated')
@classmethod
def ExpectationsFiles(cls) -> list[str]:
return [
os.path.join(
os.path.dirname(os.path.abspath(__file__)), 'test_expectations',
'hardware_accelerated_feature_expectations.txt')
]
def load_tests(loader: unittest.TestLoader, tests: Any,
pattern: Any) -> unittest.TestSuite:
del loader, tests, pattern # Unused.
return gpu_integration_test.LoadAllTestsInModule(sys.modules[__name__])
|