diff --git a/libs/hwui/RenderState.cpp b/libs/hwui/RenderState.cpp index a7c5e85d91235..ec8307f28d5b6 100644 --- a/libs/hwui/RenderState.cpp +++ b/libs/hwui/RenderState.cpp @@ -38,6 +38,7 @@ void RenderState::onGLContextCreated() { } void RenderState::onGLContextDestroyed() { + AutoMutex _lock(mLayerLock); if (CC_UNLIKELY(!mActiveLayers.empty())) { mCaches->dumpMemoryUsage(); for (std::set::iterator cit = mRegisteredContexts.begin(); @@ -51,6 +52,13 @@ void RenderState::onGLContextDestroyed() { } context->mRootRenderNode->debugDumpLayers(" "); } + + for (std::set::iterator lit = mActiveLayers.begin(); + lit != mActiveLayers.end(); lit++) { + const Layer* layer = *(lit); + ALOGD("Layer %p, fbo %d, buildlayered %d", + layer, layer->getFbo(), layer->wasBuildLayered); + } LOG_ALWAYS_FATAL("layers have survived gl context destruction"); } } diff --git a/libs/hwui/RenderState.h b/libs/hwui/RenderState.h index c7ab197c4fb25..74bafcaeb4206 100644 --- a/libs/hwui/RenderState.h +++ b/libs/hwui/RenderState.h @@ -19,6 +19,7 @@ #include #include #include +#include #include @@ -52,9 +53,11 @@ public: void debugOverdraw(bool enable, bool clear); void registerLayer(const Layer* layer) { + AutoMutex _lock(mLayerLock); mActiveLayers.insert(layer); } void unregisterLayer(const Layer* layer) { + AutoMutex _lock(mLayerLock); mActiveLayers.erase(layer); } @@ -83,6 +86,7 @@ private: GLsizei mViewportWidth; GLsizei mViewportHeight; GLuint mFramebuffer; + Mutex mLayerLock; }; } /* namespace uirenderer */