Index: app/gfx/gl/gl_context_egl.cc |
=================================================================== |
--- app/gfx/gl/gl_context_egl.cc (revision 63067) |
+++ app/gfx/gl/gl_context_egl.cc (working copy) |
@@ -22,6 +22,40 @@ |
EGLDisplay g_display; |
EGLConfig g_config; |
+// Returns the last EGL error as a string. |
+const char* GetLastEGLErrorString() { |
+ EGLint error = eglGetError(); |
+ switch (error) { |
+ case EGL_SUCCESS: |
+ return "EGL_SUCCESS"; |
+ case EGL_BAD_ACCESS: |
+ return "EGL_BAD_ACCESS"; |
+ case EGL_BAD_ALLOC: |
+ return "EGL_BAD_ALLOC"; |
+ case EGL_BAD_ATTRIBUTE: |
+ return "EGL_BAD_ATTRIBUTE"; |
+ case EGL_BAD_CONTEXT: |
+ return "EGL_BAD_CONTEXT"; |
+ case EGL_BAD_CONFIG: |
+ return "EGL_BAD_CONFIG"; |
+ case EGL_BAD_CURRENT_SURFACE: |
+ return "EGL_BAD_CURRENT_SURFACE"; |
+ case EGL_BAD_DISPLAY: |
+ return "EGL_BAD_DISPLAY"; |
+ case EGL_BAD_SURFACE: |
+ return "EGL_BAD_SURFACE"; |
+ case EGL_BAD_MATCH: |
+ return "EGL_BAD_MATCH"; |
+ case EGL_BAD_PARAMETER: |
+ return "EGL_BAD_PARAMETER"; |
+ case EGL_BAD_NATIVE_PIXMAP: |
+ return "EGL_BAD_NATIVE_PIXMAP"; |
+ case EGL_BAD_NATIVE_WINDOW: |
+ return "EGL_BAD_NATIVE_WINDOW"; |
+ default: |
+ return "UNKNOWN"; |
+ } |
+} |
} // namespace anonymous |
bool BaseEGLContext::InitializeOneOff() { |
@@ -36,12 +70,12 @@ |
#endif |
g_display = eglGetDisplay(native_display); |
if (!g_display) { |
- LOG(ERROR) << "eglGetDisplay failed."; |
+ LOG(ERROR) << "eglGetDisplay failed with error " << GetLastEGLErrorString(); |
return false; |
} |
if (!eglInitialize(g_display, NULL, NULL)) { |
- LOG(ERROR) << "eglInitialize failed."; |
+ LOG(ERROR) << "eglInitialize failed with error " << GetLastEGLErrorString(); |
return false; |
} |
@@ -68,7 +102,8 @@ |
NULL, |
0, |
&num_configs)) { |
- LOG(ERROR) << "eglChooseConfig failed."; |
+ LOG(ERROR) << "eglChooseConfig failed failed with error " |
+ << GetLastEGLErrorString(); |
return false; |
} |
@@ -83,7 +118,8 @@ |
configs.get(), |
num_configs, |
&num_configs)) { |
- LOG(ERROR) << "eglChooseConfig failed."; |
+ LOG(ERROR) << "eglChooseConfig failed with error " |
+ << GetLastEGLErrorString(); |
return false; |
} |
@@ -124,7 +160,8 @@ |
surface_ = eglCreateWindowSurface(g_display, g_config, native_window, NULL); |
if (!surface_) { |
- LOG(ERROR) << "eglCreateWindowSurface failed."; |
+ LOG(ERROR) << "eglCreateWindowSurface failed with error " |
+ << GetLastEGLErrorString(); |
Destroy(); |
return false; |
} |
@@ -132,7 +169,8 @@ |
// Create a context. |
context_ = eglCreateContext(g_display, g_config, NULL, NULL); |
if (!context_) { |
- LOG(ERROR) << "eglCreateContext failed."; |
+ LOG(ERROR) << "eglCreateContext failed with error " |
+ << GetLastEGLErrorString(); |
Destroy(); |
return false; |
} |
@@ -154,21 +192,35 @@ |
void NativeViewEGLContext::Destroy() { |
if (context_) { |
- eglDestroyContext(g_display, context_); |
+ if (!eglDestroyContext(g_display, context_)) { |
+ LOG(ERROR) << "eglDestroyContext failed with error " |
+ << GetLastEGLErrorString(); |
+ } |
+ |
context_ = NULL; |
} |
if (surface_) { |
- eglDestroySurface(g_display, surface_); |
+ if (!eglDestroySurface(g_display, surface_)) { |
+ LOG(ERROR) << "eglDestroySurface failed with error " |
+ << GetLastEGLErrorString(); |
+ } |
+ |
surface_ = NULL; |
} |
} |
bool NativeViewEGLContext::MakeCurrent() { |
DCHECK(context_); |
- return eglMakeCurrent(g_display, |
- surface_, surface_, |
- context_) == GL_TRUE; |
+ if (!eglMakeCurrent(g_display, |
+ surface_, surface_, |
+ context_)) { |
+ VLOG(1) << "eglMakeCurrent failed with error " |
+ << GetLastEGLErrorString(); |
+ return false; |
+ } |
+ |
+ return true; |
} |
bool NativeViewEGLContext::IsCurrent() { |
@@ -181,7 +233,13 @@ |
} |
bool NativeViewEGLContext::SwapBuffers() { |
- return eglSwapBuffers(g_display, surface_) == EGL_TRUE; |
+ if (!eglSwapBuffers(g_display, surface_)) { |
+ VLOG(1) << "eglSwapBuffers failed with error " |
+ << GetLastEGLErrorString(); |
+ return false; |
+ } |
+ |
+ return true; |
} |
gfx::Size NativeViewEGLContext::GetSize() { |
@@ -198,8 +256,13 @@ |
// get updated on resize. When it does, we can share the code. |
EGLint width; |
EGLint height; |
- CHECK(eglQuerySurface(g_display, surface_, EGL_WIDTH, &width)); |
- CHECK(eglQuerySurface(g_display, surface_, EGL_HEIGHT, &height)); |
+ if (!eglQuerySurface(g_display, surface_, EGL_WIDTH, &width) || |
+ !eglQuerySurface(g_display, surface_, EGL_HEIGHT, &height)) { |
+ NOTREACHED() << "eglQuerySurface failed with error " |
+ << GetLastEGLErrorString(); |
+ return gfx::Size(); |
+ } |
+ |
return gfx::Size(width, height); |
#endif |
} |
@@ -210,7 +273,10 @@ |
void NativeViewEGLContext::SetSwapInterval(int interval) { |
DCHECK(IsCurrent()); |
- eglSwapInterval(g_display, interval); |
+ if (!eglSwapInterval(g_display, interval)) { |
+ LOG(ERROR) << "eglSwapInterval failed with error " |
+ << GetLastEGLErrorString(); |
+ } |
} |
EGLSurface NativeViewEGLContext::GetSurface() { |
@@ -254,8 +320,8 @@ |
surface_ = eglCreatePbufferSurface(g_display, g_config, kPbufferAttribs); |
if (!surface_) { |
- EGLint error = eglGetError(); |
- LOG(ERROR) << "Error creating Pbuffer: " << error; |
+ LOG(ERROR) << "eglCreatePbufferSurface failed with error " |
+ << GetLastEGLErrorString(); |
return false; |
} |
own_surface_ = true; |
@@ -268,8 +334,8 @@ |
} |
if (!context_) { |
- EGLint error = eglGetError(); |
- LOG(ERROR) << "Error creating context: " << error; |
+ LOG(ERROR) << "eglCreateContext failed with error " |
+ << GetLastEGLErrorString(); |
Destroy(); |
return false; |
} |
@@ -279,22 +345,36 @@ |
void SecondaryEGLContext::Destroy() { |
if (own_surface_) { |
- eglDestroySurface(g_display, surface_); |
+ if (!eglDestroySurface(g_display, surface_)) { |
+ LOG(ERROR) << "eglDestroySurface failed with error " |
+ << GetLastEGLErrorString(); |
+ } |
+ |
own_surface_ = false; |
} |
surface_ = NULL; |
if (context_) { |
- eglDestroyContext(g_display, context_); |
+ if (!eglDestroyContext(g_display, context_)) { |
+ LOG(ERROR) << "eglDestroyContext failed with error " |
+ << GetLastEGLErrorString(); |
+ } |
+ |
context_ = NULL; |
} |
} |
bool SecondaryEGLContext::MakeCurrent() { |
DCHECK(context_); |
- return eglMakeCurrent(g_display, |
- surface_, surface_, |
- context_) == GL_TRUE; |
+ if (!eglMakeCurrent(g_display, |
+ surface_, surface_, |
+ context_)) { |
+ VLOG(1) << "eglMakeCurrent failed with error " |
+ << GetLastEGLErrorString(); |
+ return false; |
+ } |
+ |
+ return true; |
} |
bool SecondaryEGLContext::IsCurrent() { |