Commit 27cfeeea authored by dyen's avatar dyen Committed by Commit bot

Temporarily crash the GPU process when unexpected failures happen.

There is an ongoing issue with failures on Mac OSX causing crashes
on the renderer side. All we know so far is that it has something to do
with failures with our usage of GL_COMMANDS_COMPLETED_CHROMIUM. We
suspect it has something to do with multiple GPUs but it is hard to
tell for sure. This will at least let us know what is going on for
the GPU side.

BUG=467678

Review URL: https://codereview.chromium.org/1242913003

Cr-Commit-Position: refs/heads/master@{#339703}
parent 9bfbd07e
......@@ -11605,6 +11605,26 @@ error::Error GLES2DecoderImpl::HandleBeginQueryEXT(uint32 immediate_data_size,
break;
case GL_COMMANDS_COMPLETED_CHROMIUM:
if (!features().chromium_sync_query) {
#if defined(OS_MACOSX)
// TODO(dyen): Remove once we know what is failing.
uint32_t boolean_flags = 0;
if (gfx::g_driver_gl.ext.b_GL_ARB_sync)
boolean_flags |= 1;
if (gfx::g_driver_gl.ext.b_GL_APPLE_fence)
boolean_flags |= 2;
if (gfx::g_driver_gl.ext.b_GL_NV_fence)
boolean_flags |= 4;
CHECK(boolean_flags != 0) << "Nothing supported";
CHECK(boolean_flags != 1) << "ARB";
CHECK(boolean_flags != 2) << "APPLE";
CHECK(boolean_flags != 3) << "ARB APPLE";
CHECK(boolean_flags != 4) << "NV";
CHECK(boolean_flags != 5) << "NV ARB";
CHECK(boolean_flags != 6) << "NV APPLE";
CHECK(boolean_flags != 7) << "NV ARB APPLE";
CHECK(false) << "Unknown error.";
#endif
LOCAL_SET_GL_ERROR(
GL_INVALID_OPERATION, "glBeginQueryEXT",
"not enabled for commands completed queries");
......@@ -11637,12 +11657,21 @@ error::Error GLES2DecoderImpl::HandleBeginQueryEXT(uint32 immediate_data_size,
}
if (state_.current_queries.find(target) != state_.current_queries.end()) {
#if defined(OS_MACOSX)
// TODO(dyen): Remove once we know what is failing.
CHECK(target != GL_COMMANDS_COMPLETED_CHROMIUM)
<< "Query already in progress";
#endif
LOCAL_SET_GL_ERROR(
GL_INVALID_OPERATION, "glBeginQueryEXT", "query already in progress");
return error::kNoError;
}
if (client_id == 0) {
#if defined(OS_MACOSX)
// TODO(dyen): Remove once we know what is failing.
CHECK(target != GL_COMMANDS_COMPLETED_CHROMIUM) << "Id is 0";
#endif
LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, "glBeginQueryEXT", "id is 0");
return error::kNoError;
}
......@@ -11650,6 +11679,10 @@ error::Error GLES2DecoderImpl::HandleBeginQueryEXT(uint32 immediate_data_size,
QueryManager::Query* query = query_manager_->GetQuery(client_id);
if (!query) {
if (!query_manager_->IsValidQuery(client_id)) {
#if defined(OS_MACOSX)
// TODO(dyen): Remove once we know what is failing.
CHECK(target != GL_COMMANDS_COMPLETED_CHROMIUM) << "Invalid ID";
#endif
LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION,
"glBeginQueryEXT",
"id not made by glGenQueriesEXT");
......@@ -11660,6 +11693,10 @@ error::Error GLES2DecoderImpl::HandleBeginQueryEXT(uint32 immediate_data_size,
}
if (query->target() != target) {
#if defined(OS_MACOSX)
// TODO(dyen): Remove once we know what is failing.
CHECK(target != GL_COMMANDS_COMPLETED_CHROMIUM) << "Non-Matching Target";
#endif
LOCAL_SET_GL_ERROR(
GL_INVALID_OPERATION, "glBeginQueryEXT", "target does not match");
return error::kNoError;
......
......@@ -992,12 +992,15 @@ TEST_P(GLES2DecoderManualInitTest, BeginInvalidTargetQueryFails) {
GenHelper<GenQueriesEXTImmediate>(kNewClientId);
BeginQueryEXT begin_cmd;
#if !defined(OS_MACOSX)
// TODO(dyen): Remove once we know what is failing.
begin_cmd.Init(GL_COMMANDS_COMPLETED_CHROMIUM,
kNewClientId,
kSharedMemoryId,
kSharedMemoryOffset);
EXPECT_EQ(error::kNoError, ExecuteCmd(begin_cmd));
EXPECT_EQ(GL_INVALID_OPERATION, GetGLError());
#endif // !defined(OS_MACOSX)
begin_cmd.Init(GL_ANY_SAMPLES_PASSED,
kNewClientId,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment