Skip to content

Commit

Permalink
Change sync objects to not be available in the current frame.
Browse files Browse the repository at this point in the history
(Manual M65 merge-back)

Follows similar restrictions for query objects and implements
KhronosGroup/WebGL#2598 .

Disable EXT_disjoint_timer_query at the WebGL level.

TBR=dcheng@chromium.org, kainino@chromium.org, piman@chromium.org, zmo@chromium.org

Bug: 808744
Change-Id: Ibf27298392cabb87fa0222e18145682a55392997
Cq-Include-Trybots: master.tryserver.chromium.android:android_optional_gpu_tests_rel;master.tryserver.chromium.linux:linux_optional_gpu_tests_rel;master.tryserver.chromium.mac:mac_optional_gpu_tests_rel;master.tryserver.chromium.win:win_optional_gpu_tests_rel
Reviewed-on: https://chromium-review.googlesource.com/919154
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Cr-Commit-Position: refs/branch-heads/3325@{#464}
Cr-Branched-From: bc084a8-refs/heads/master@{#530369}
  • Loading branch information
kenrussell committed Feb 14, 2018
1 parent d663ac8 commit ebe26e1
Show file tree
Hide file tree
Showing 29 changed files with 416 additions and 39 deletions.
6 changes: 6 additions & 0 deletions content/browser/gpu/gpu_data_manager_impl.cc
Expand Up @@ -117,6 +117,12 @@ void GpuDataManagerImpl::SetGpuInfo(const gpu::GPUInfo& gpu_info) {
private_->SetGpuInfo(gpu_info);
}

void GpuDataManagerImpl::GetDisabledWebGLExtensions(
std::string* disabled_webgl_extensions) const {
base::AutoLock auto_lock(lock_);
private_->GetDisabledWebGLExtensions(disabled_webgl_extensions);
}

void GpuDataManagerImpl::Initialize() {
base::AutoLock auto_lock(lock_);
private_->Initialize();
Expand Down
2 changes: 2 additions & 0 deletions content/browser/gpu/gpu_data_manager_impl.h
Expand Up @@ -89,6 +89,8 @@ class CONTENT_EXPORT GpuDataManagerImpl : public GpuDataManager {
void GetDisabledExtensions(std::string* disabled_extensions) const override;
void SetGpuInfo(const gpu::GPUInfo& gpu_info) override;

void GetDisabledWebGLExtensions(std::string* disabled_webgl_extensions) const;

bool IsGpuFeatureInfoAvailable() const;
gpu::GpuFeatureStatus GetFeatureStatus(gpu::GpuFeatureType feature) const;

Expand Down
6 changes: 6 additions & 0 deletions content/browser/gpu/gpu_data_manager_impl_private.cc
Expand Up @@ -861,6 +861,12 @@ void GpuDataManagerImplPrivate::GetDisabledExtensions(
*disabled_extensions = gpu_feature_info_.disabled_extensions;
}

void GpuDataManagerImplPrivate::GetDisabledWebGLExtensions(
std::string* disabled_webgl_extensions) const {
DCHECK(disabled_webgl_extensions);
*disabled_webgl_extensions = gpu_feature_info_.disabled_webgl_extensions;
}

void GpuDataManagerImplPrivate::BlockDomainFrom3DAPIs(
const GURL& url, GpuDataManagerImpl::DomainGuilt guilt) {
BlockDomainFrom3DAPIsAtTime(url, guilt, base::Time::Now());
Expand Down
1 change: 1 addition & 0 deletions content/browser/gpu/gpu_data_manager_impl_private.h
Expand Up @@ -88,6 +88,7 @@ class CONTENT_EXPORT GpuDataManagerImplPrivate {
void HandleGpuSwitch();

void GetDisabledExtensions(std::string* disabled_extensions) const;
void GetDisabledWebGLExtensions(std::string* disabled_webgl_extensions) const;

void BlockDomainFrom3DAPIs(
const GURL& url, GpuDataManagerImpl::DomainGuilt guilt);
Expand Down
14 changes: 14 additions & 0 deletions content/browser/gpu/gpu_data_manager_testing_autogen.cc
Expand Up @@ -23,6 +23,8 @@ const GpuControlList::Entry kGpuDataManagerTestingEntries[] = {
kFeatureListForEntry1, // features
0, // DisabledExtensions size
nullptr, // DisabledExtensions
0, // DisabledWebGLExtensions size
nullptr, // DisabledWebGLExtensions
0, // CrBugs size
nullptr, // CrBugs
{
Expand All @@ -49,6 +51,8 @@ const GpuControlList::Entry kGpuDataManagerTestingEntries[] = {
kFeatureListForEntry2, // features
0, // DisabledExtensions size
nullptr, // DisabledExtensions
0, // DisabledWebGLExtensions size
nullptr, // DisabledWebGLExtensions
0, // CrBugs size
nullptr, // CrBugs
{
Expand All @@ -75,6 +79,8 @@ const GpuControlList::Entry kGpuDataManagerTestingEntries[] = {
kFeatureListForEntry3, // features
0, // DisabledExtensions size
nullptr, // DisabledExtensions
0, // DisabledWebGLExtensions size
nullptr, // DisabledWebGLExtensions
0, // CrBugs size
nullptr, // CrBugs
{
Expand All @@ -101,6 +107,8 @@ const GpuControlList::Entry kGpuDataManagerTestingEntries[] = {
kFeatureListForEntry4, // features
0, // DisabledExtensions size
nullptr, // DisabledExtensions
0, // DisabledWebGLExtensions size
nullptr, // DisabledWebGLExtensions
0, // CrBugs size
nullptr, // CrBugs
{
Expand All @@ -127,6 +135,8 @@ const GpuControlList::Entry kGpuDataManagerTestingEntries[] = {
kFeatureListForEntry5, // features
0, // DisabledExtensions size
nullptr, // DisabledExtensions
0, // DisabledWebGLExtensions size
nullptr, // DisabledWebGLExtensions
0, // CrBugs size
nullptr, // CrBugs
{
Expand All @@ -153,6 +163,8 @@ const GpuControlList::Entry kGpuDataManagerTestingEntries[] = {
kFeatureListForEntry6, // features
0, // DisabledExtensions size
nullptr, // DisabledExtensions
0, // DisabledWebGLExtensions size
nullptr, // DisabledWebGLExtensions
0, // CrBugs size
nullptr, // CrBugs
{
Expand All @@ -179,6 +191,8 @@ const GpuControlList::Entry kGpuDataManagerTestingEntries[] = {
kFeatureListForEntry7, // features
0, // DisabledExtensions size
nullptr, // DisabledExtensions
0, // DisabledWebGLExtensions size
nullptr, // DisabledWebGLExtensions
0, // CrBugs size
nullptr, // CrBugs
{
Expand Down
6 changes: 6 additions & 0 deletions content/browser/gpu/gpu_internals_ui.cc
Expand Up @@ -182,6 +182,10 @@ std::unique_ptr<base::DictionaryValue> GpuInfoAsDictionaryValue() {
GpuDataManagerImpl::GetInstance()->GetDisabledExtensions(
&disabled_extensions);

std::string disabled_webgl_extensions;
GpuDataManagerImpl::GetInstance()->GetDisabledWebGLExtensions(
&disabled_webgl_extensions);

basic_info->Append(
NewDescriptionValuePair("Driver vendor", gpu_info.driver_vendor));
basic_info->Append(NewDescriptionValuePair("Driver version",
Expand All @@ -208,6 +212,8 @@ std::unique_ptr<base::DictionaryValue> GpuInfoAsDictionaryValue() {
gpu_info.gl_extensions));
basic_info->Append(NewDescriptionValuePair("Disabled Extensions",
disabled_extensions));
basic_info->Append(NewDescriptionValuePair("Disabled WebGL Extensions",
disabled_webgl_extensions));
basic_info->Append(NewDescriptionValuePair("Window system binding vendor",
gpu_info.gl_ws_vendor));
basic_info->Append(NewDescriptionValuePair("Window system binding version",
Expand Down
27 changes: 27 additions & 0 deletions content/test/data/gpu/functional_webgl_disabled_extension.html
@@ -0,0 +1,27 @@
<html>
<script type="text/javascript">
function runTest() {
var canvas = document.getElementById("glcanvas");
var gl = canvas.getContext('webgl');
if (!gl) {
if (window.domAutomationController) {
window.domAutomationController.send("FAILED");
} else {
alert("Unable to initialize WebGL");
}
return;
}
// This extension is supposed to be disabled via a blacklist entry.
if (gl.getExtension('WEBGL_lose_context')) {
window.domAutomationController.send("FAILED");
} else {
window.domAutomationController.send("FINISHED");
}
}
</script>
<body onload="runTest()">
<canvas id="glcanvas" width="640" height="480">
Your browser doesn't appear to support the HTML5 <code>&lt;canvas&gt;</code> element.
</canvas>
</body>
</html>
22 changes: 20 additions & 2 deletions content/test/gpu/gpu_tests/gpu_process_integration_test.py
Expand Up @@ -15,8 +15,14 @@
test_harness_script = r"""
var domAutomationController = {};
domAutomationController._finished = false;
domAutomationController._succeeded = false;
domAutomationController.send = function(msg) {
domAutomationController._finished = true;
if (msg.toLowerCase() == "finished") {
domAutomationController._succeeded = true;
} else {
domAutomationController._succeeded = false;
}
}
window.domAutomationController = domAutomationController;
Expand Down Expand Up @@ -78,7 +84,9 @@ def GenerateGpuTests(cls, options):
('GpuProcess_disable_gpu_and_swiftshader',
'gpu/functional_webgl.html'),
('GpuProcess_disabling_workarounds_works', 'chrome:gpu'),
('GpuProcess_swiftshader_for_webgl', 'gpu/functional_webgl.html'))
('GpuProcess_swiftshader_for_webgl', 'gpu/functional_webgl.html'),
('GpuProcess_webgl_disabled_extension',
'gpu/functional_webgl_disabled_extension.html'))

# The earlier has_transparent_visuals_gpu_process and
# no_transparent_visuals_gpu_process tests became no-ops in
Expand All @@ -105,8 +113,11 @@ def _Navigate(self, test_path):

def _NavigateAndWait(self, test_path):
self._Navigate(test_path)
self.tab.action_runner.WaitForJavaScriptCondition(
tab = self.tab
tab.action_runner.WaitForJavaScriptCondition(
'window.domAutomationController._finished', timeout=10)
if not tab.EvaluateJavaScript('window.domAutomationController._succeeded'):
self.fail('Test reported that it failed')

def _VerifyGpuProcessPresent(self):
tab = self.tab
Expand Down Expand Up @@ -401,6 +412,13 @@ def _GpuProcess_swiftshader_for_webgl(self, test_path):
if tab.EvaluateJavaScript('!gl_context.getExtension("' + ext + '")'):
self.fail("Expected " + ext + " support")

def _GpuProcess_webgl_disabled_extension(self, test_path):
# Hit exception from id 257 from kGpuDriverBugListEntries.
self.RestartBrowserIfNecessaryWithArgs([
'--gpu-driver-bug-list-test-group=2',
])
self._NavigateAndWait(test_path)

def load_tests(loader, tests, pattern):
del loader, tests, pattern # Unused.
return gpu_integration_test.LoadAllTestsInModule(sys.modules[__name__])
Expand Up @@ -32,6 +32,7 @@ def SetExpectations(self):
['win', 'mac', 'linux'])
self.Skip('WebglExtension_WEBGL_compressed_texture_s3tc_srgb',
['win', 'mac', 'linux'])
self.Skip('WebglExtension_EXT_disjoint_timer_query_webgl2', bug=808744)

# ========================
# Conformance expectations
Expand Down Expand Up @@ -870,8 +871,6 @@ def SetExpectations(self):
# Linux Intel
self.Fail('conformance2/extensions/ext-color-buffer-float.html',
['linux', 'intel'], bug=640389)
self.Fail('WebglExtension_EXT_disjoint_timer_query_webgl2',
['linux', 'intel'], bug=687210)

# See https://bugs.freedesktop.org/show_bug.cgi?id=94477
self.Skip('conformance/glsl/bugs/temp-expressions-should-not-crash.html',
Expand Down
8 changes: 1 addition & 7 deletions content/test/gpu/gpu_tests/webgl_conformance_expectations.py
Expand Up @@ -56,10 +56,9 @@ def SetExpectations(self):
['win', 'mac', 'linux'])
self.Skip('WebglExtension_WEBGL_compressed_texture_s3tc_srgb',
['win', 'mac', 'linux', 'android'])
self.Skip('WebglExtension_EXT_disjoint_timer_query', bug=808744)

# Extensions not available under D3D9
self.Fail('WebglExtension_EXT_disjoint_timer_query',
['win', 'd3d9'])
self.Fail('WebglExtension_EXT_sRGB',
['win', 'd3d9'])

Expand All @@ -70,8 +69,6 @@ def SetExpectations(self):
['win', 'd3d9'])

# Android general
self.Fail('WebglExtension_EXT_disjoint_timer_query',
['android'])
self.Fail('WebglExtension_EXT_frag_depth',
['android'])
self.Fail('WebglExtension_EXT_shader_texture_lod',
Expand Down Expand Up @@ -532,9 +529,6 @@ def SetExpectations(self):
self.Fail('conformance/rendering/clipping-wide-points.html',
['linux', 'intel'], bug=642822)

self.Fail('WebglExtension_EXT_disjoint_timer_query',
['linux', 'intel'], bug=687210)

# Linux Intel HD 630
self.Fail('conformance/textures/misc/texture-size-limit.html',
['linux', ('intel', 0x5912)], bug=745888)
Expand Down
Expand Up @@ -50,7 +50,7 @@ def __init__(self, url):
class WebGLConformanceExpectationsTest(unittest.TestCase):
def testGlslConstructVecMatIndexExpectationOnWin(self):
possible_browser = fakes.FakePossibleBrowser()
browser = possible_browser.Create(None)
browser = possible_browser.Create()
browser.platform = FakeWindowsPlatform()
browser.returned_system_info = fakes.FakeSystemInfo(
gpu_dict=fake_win_amd_gpu_info.FAKE_GPU_INFO)
Expand Down
2 changes: 2 additions & 0 deletions gpu/config/gpu_blacklist_unittest.cc
Expand Up @@ -30,6 +30,8 @@ class GpuBlacklistTest : public testing::Test {
kFeatureListForEntry1, // features
0, // DisabledExtensions size
nullptr, // DisabledExtensions
0, // DisabledWebGLExtensions size
nullptr, // DisabledWebGLExtensions
0, // CrBugs size
nullptr, // CrBugs
{
Expand Down
13 changes: 13 additions & 0 deletions gpu/config/gpu_control_list.cc
Expand Up @@ -605,6 +605,19 @@ std::vector<std::string> GpuControlList::GetDisabledExtensions() {
disabled_extensions.end());
}

std::vector<std::string> GpuControlList::GetDisabledWebGLExtensions() {
std::set<std::string> disabled_webgl_extensions;
for (auto index : active_entries_) {
DCHECK_LT(index, entry_count_);
const Entry& entry = entries_[index];
for (size_t ii = 0; ii < entry.disabled_webgl_extension_size; ++ii) {
disabled_webgl_extensions.insert(entry.disabled_webgl_extensions[ii]);
}
}
return std::vector<std::string>(disabled_webgl_extensions.begin(),
disabled_webgl_extensions.end());
}

void GpuControlList::GetReasons(base::ListValue* problem_list,
const std::string& tag,
const std::vector<uint32_t>& entries) const {
Expand Down
4 changes: 4 additions & 0 deletions gpu/config/gpu_control_list.h
Expand Up @@ -191,6 +191,8 @@ class GPU_EXPORT GpuControlList {
const int* features;
size_t disabled_extension_size;
const char* const* disabled_extensions;
size_t disabled_webgl_extension_size;
const char* const* disabled_webgl_extensions;
size_t cr_bug_size;
const uint32_t* cr_bugs;
Conditions conditions;
Expand Down Expand Up @@ -243,6 +245,8 @@ class GPU_EXPORT GpuControlList {

// Collects all disabled extensions.
std::vector<std::string> GetDisabledExtensions();
// Collects all disabled WebGL extensions.
std::vector<std::string> GetDisabledWebGLExtensions();

// Returns the description and bugs from active entries provided.
// Each problems has:
Expand Down

0 comments on commit ebe26e1

Please sign in to comment.