libhwui: handle eglSwapBuffers with EGL_BAD_NATIVE_WINDOW error case
If eglSwapBuffers is called but the under surface was destroyed,
the EGL_BAD_NATIVE_WINDOW error may also be generated according
to the EGL spec 1.4.
This really shouldn't happen from the upper, but add the graceful
handling of this case also.
Change-Id: Ic0a599808b72f401d2a01c3dc40f9e6ea0e0a564
Signed-off-by: Zhang Dongsheng <dongsheng.zhang@intel.com>
Signed-off-by: Zhiquan Liu <zhiquan.liu@intel.com>
diff --git a/libs/hwui/renderthread/EglManager.cpp b/libs/hwui/renderthread/EglManager.cpp
index eb332d5..902264e 100644
--- a/libs/hwui/renderthread/EglManager.cpp
+++ b/libs/hwui/renderthread/EglManager.cpp
@@ -291,11 +291,11 @@
if (CC_LIKELY(err == EGL_SUCCESS)) {
return true;
}
- if (err == EGL_BAD_SURFACE) {
+ if (err == EGL_BAD_SURFACE || err == EGL_BAD_NATIVE_WINDOW) {
// For some reason our surface was destroyed out from under us
// This really shouldn't happen, but if it does we can recover easily
// by just not trying to use the surface anymore
- ALOGW("swapBuffers encountered EGL_BAD_SURFACE on %p, halting rendering...", surface);
+ ALOGW("swapBuffers encountered EGL error %d on %p, halting rendering...", err, surface);
return false;
}
LOG_ALWAYS_FATAL("Encountered EGL error %d %s during rendering",