From 368cdd85268999997fb495cf90c4417221797de0 Mon Sep 17 00:00:00 2001 From: John Reck Date: Wed, 7 May 2014 13:11:00 -0700 Subject: [PATCH] Don't try to draw if there's no canvas or surface Bug: 14616376 doFrame() can happen after the canvas or surface is destroyed, handle it gracefully Change-Id: Ibbbbdbfa77fa2134bd2abc215ca1a0886d706969 --- libs/hwui/renderthread/CanvasContext.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/libs/hwui/renderthread/CanvasContext.cpp b/libs/hwui/renderthread/CanvasContext.cpp index fc3548ca5899c..97baba8762516 100644 --- a/libs/hwui/renderthread/CanvasContext.cpp +++ b/libs/hwui/renderthread/CanvasContext.cpp @@ -349,6 +349,8 @@ void CanvasContext::setSurface(EGLNativeWindowType window) { mDirtyRegionsEnabled = mGlobalContext->enableDirtyRegions(mEglSurface); mHaveNewSurface = true; makeCurrent(); + } else { + mRenderThread.removeFrameCallback(this); } } @@ -468,6 +470,10 @@ void CanvasContext::draw(Rect* dirty) { // Called by choreographer to do an RT-driven animation void CanvasContext::doFrame() { + if (CC_UNLIKELY(!mCanvas || mEglSurface == EGL_NO_SURFACE)) { + return; + } + ATRACE_CALL(); TreeInfo info;