Chromium Code Reviews| Index: ui/gl/gl_fence_arb.cc |
| diff --git a/ui/gl/gl_fence_arb.cc b/ui/gl/gl_fence_arb.cc |
| index da13f107880d8ae0c996218af9d75fad46470932..05bda6b588f2eb219ae2abfcda444070a7a469cf 100644 |
| --- a/ui/gl/gl_fence_arb.cc |
| +++ b/ui/gl/gl_fence_arb.cc |
| @@ -4,11 +4,26 @@ |
| #include "ui/gl/gl_fence_arb.h" |
| +#include "base/strings/stringprintf.h" |
| #include "ui/gl/gl_bindings.h" |
| #include "ui/gl/gl_context.h" |
| namespace gfx { |
| +namespace { |
| + |
| +std::string GetGLErrors() { |
| + // Clears and logs all current gl errors. |
| + std::string accumulated_errors; |
| + GLenum error; |
| + while ((error = glGetError()) != GL_NO_ERROR) { |
| + accumulated_errors += base::StringPrintf("0x%x ", error); |
| + } |
| + return accumulated_errors; |
| +} |
|
dshwang
2014/11/04 19:37:13
Now it clears all gl errors.
|
| + |
| +} // namespace |
| + |
| GLFenceARB::GLFenceARB(bool flush) { |
| sync_ = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0); |
| DCHECK_EQ(GL_TRUE, glIsSync(sync_)); |
| @@ -28,13 +43,22 @@ bool GLFenceARB::HasCompleted() { |
| // We could potentially use glGetSynciv here, but it doesn't work |
| // on OSX 10.7 (always says the fence is not signaled yet). |
| // glClientWaitSync works better, so let's use that instead. |
| - return glClientWaitSync(sync_, 0, 0) != GL_TIMEOUT_EXPIRED; |
| + GLenum result = glClientWaitSync(sync_, 0, 0); |
| + if (result == GL_WAIT_FAILED) { |
| + LOG(FATAL) << "Failed to wait for GLFence. error code:" << GetGLErrors(); |
|
dshwang
2014/11/04 19:37:13
it reports like "Failed .... error code:0x123 0x23
|
| + } |
| + return result != GL_TIMEOUT_EXPIRED; |
| } |
| void GLFenceARB::ClientWait() { |
| DCHECK_EQ(GL_TRUE, glIsSync(sync_)); |
| if (!flush_event_.get() || flush_event_->IsSignaled()) { |
| - glClientWaitSync(sync_, GL_SYNC_FLUSH_COMMANDS_BIT, GL_TIMEOUT_IGNORED); |
| + GLenum result = |
| + glClientWaitSync(sync_, GL_SYNC_FLUSH_COMMANDS_BIT, GL_TIMEOUT_IGNORED); |
| + DCHECK_NE(static_cast<GLenum>(GL_TIMEOUT_EXPIRED), result); |
| + if (result == GL_WAIT_FAILED) { |
| + LOG(FATAL) << "Failed to wait for GLFence. error code:" << GetGLErrors(); |
| + } |
| } else { |
| LOG(ERROR) << "Trying to wait for uncommitted fence. Skipping..."; |
| } |