From 892760008f7c774b3556b1863c6228f3d55d4246 Mon Sep 17 00:00:00 2001 From: Zhang Dongsheng Date: Thu, 21 Jan 2016 15:12:18 +0800 Subject: [PATCH] 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 Signed-off-by: Zhiquan Liu --- libs/hwui/renderthread/EglManager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/hwui/renderthread/EglManager.cpp b/libs/hwui/renderthread/EglManager.cpp index eb332d59fee3f..902264e6cb932 100644 --- a/libs/hwui/renderthread/EglManager.cpp +++ b/libs/hwui/renderthread/EglManager.cpp @@ -291,11 +291,11 @@ bool EglManager::swapBuffers(EGLSurface surface, const SkRect& dirty, 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",