Loading libs/hwui/renderthread/CanvasContext.cpp +4 −2 Original line number Diff line number Diff line Loading @@ -91,7 +91,9 @@ void CanvasContext::setSurface(ANativeWindow* window) { } void CanvasContext::swapBuffers() { mEglManager.swapBuffers(mEglSurface); if (CC_UNLIKELY(!mEglManager.swapBuffers(mEglSurface))) { setSurface(NULL); } mHaveNewSurface = false; } Loading @@ -102,8 +104,8 @@ void CanvasContext::requireSurface() { } bool CanvasContext::initialize(ANativeWindow* window) { if (mCanvas) return false; setSurface(window); if (mCanvas) return false; mCanvas = new OpenGLRenderer(mRenderThread.renderState()); mCanvas->initProperties(); return true; Loading libs/hwui/renderthread/EglManager.cpp +15 −3 Original line number Diff line number Diff line Loading @@ -254,11 +254,23 @@ void EglManager::beginFrame(EGLSurface surface, EGLint* width, EGLint* height) { eglBeginFrame(mEglDisplay, surface); } void EglManager::swapBuffers(EGLSurface surface) { bool EglManager::swapBuffers(EGLSurface surface) { eglSwapBuffers(mEglDisplay, surface); EGLint err = eglGetError(); LOG_ALWAYS_FATAL_IF(err != EGL_SUCCESS, "Encountered EGL error %d %s during rendering", err, egl_error_str(err)); if (CC_LIKELY(err == EGL_SUCCESS)) { return true; } if (err == EGL_BAD_SURFACE) { // 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); return false; } LOG_ALWAYS_FATAL("Encountered EGL error %d %s during rendering", err, egl_error_str(err)); // Impossible to hit this, but the compiler doesn't know that return false; } bool EglManager::enableDirtyRegions(EGLSurface surface) { Loading libs/hwui/renderthread/EglManager.h +1 −1 Original line number Diff line number Diff line Loading @@ -47,7 +47,7 @@ public: // Returns true if the current surface changed, false if it was already current bool makeCurrent(EGLSurface surface); void beginFrame(EGLSurface surface, EGLint* width, EGLint* height); void swapBuffers(EGLSurface surface); bool swapBuffers(EGLSurface surface); bool enableDirtyRegions(EGLSurface surface); Loading Loading
libs/hwui/renderthread/CanvasContext.cpp +4 −2 Original line number Diff line number Diff line Loading @@ -91,7 +91,9 @@ void CanvasContext::setSurface(ANativeWindow* window) { } void CanvasContext::swapBuffers() { mEglManager.swapBuffers(mEglSurface); if (CC_UNLIKELY(!mEglManager.swapBuffers(mEglSurface))) { setSurface(NULL); } mHaveNewSurface = false; } Loading @@ -102,8 +104,8 @@ void CanvasContext::requireSurface() { } bool CanvasContext::initialize(ANativeWindow* window) { if (mCanvas) return false; setSurface(window); if (mCanvas) return false; mCanvas = new OpenGLRenderer(mRenderThread.renderState()); mCanvas->initProperties(); return true; Loading
libs/hwui/renderthread/EglManager.cpp +15 −3 Original line number Diff line number Diff line Loading @@ -254,11 +254,23 @@ void EglManager::beginFrame(EGLSurface surface, EGLint* width, EGLint* height) { eglBeginFrame(mEglDisplay, surface); } void EglManager::swapBuffers(EGLSurface surface) { bool EglManager::swapBuffers(EGLSurface surface) { eglSwapBuffers(mEglDisplay, surface); EGLint err = eglGetError(); LOG_ALWAYS_FATAL_IF(err != EGL_SUCCESS, "Encountered EGL error %d %s during rendering", err, egl_error_str(err)); if (CC_LIKELY(err == EGL_SUCCESS)) { return true; } if (err == EGL_BAD_SURFACE) { // 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); return false; } LOG_ALWAYS_FATAL("Encountered EGL error %d %s during rendering", err, egl_error_str(err)); // Impossible to hit this, but the compiler doesn't know that return false; } bool EglManager::enableDirtyRegions(EGLSurface surface) { Loading
libs/hwui/renderthread/EglManager.h +1 −1 Original line number Diff line number Diff line Loading @@ -47,7 +47,7 @@ public: // Returns true if the current surface changed, false if it was already current bool makeCurrent(EGLSurface surface); void beginFrame(EGLSurface surface, EGLint* width, EGLint* height); void swapBuffers(EGLSurface surface); bool swapBuffers(EGLSurface surface); bool enableDirtyRegions(EGLSurface surface); Loading