Loading libs/hwui/Caches.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -273,7 +273,7 @@ void Caches::dumpMemoryUsage(String8 &log) { layerCache.getSize(), layerCache.getMaxSize(), layerCache.getCount()); if (mRenderState) { int memused = 0; for (std::set<const Layer*>::iterator it = mRenderState->mActiveLayers.begin(); for (std::set<Layer*>::iterator it = mRenderState->mActiveLayers.begin(); it != mRenderState->mActiveLayers.end(); it++) { const Layer* layer = *it; log.appendFormat(" Layer size %dx%d; isTextureLayer()=%d; texid=%u fbo=%u; refs=%d\n", Loading libs/hwui/Layer.cpp +11 −3 Original line number Diff line number Diff line Loading @@ -69,17 +69,25 @@ Layer::Layer(Type layerType, RenderState& renderState, const uint32_t layerWidth } Layer::~Layer() { renderState.requireGLContext(); renderState.unregisterLayer(this); SkSafeUnref(colorFilter); if (stencil || fbo || texture.id) { renderState.requireGLContext(); removeFbo(); deleteTexture(); } delete[] mesh; delete deferredList; delete renderer; } void Layer::onGlContextLost() { removeFbo(); deleteTexture(); } uint32_t Layer::computeIdealWidth(uint32_t layerWidth) { return uint32_t(ceilf(layerWidth / float(LAYER_SIZE)) * LAYER_SIZE); } Loading libs/hwui/Layer.h +6 −0 Original line number Diff line number Diff line Loading @@ -285,6 +285,12 @@ public: */ void postDecStrong(); /** * Lost the GL context but the layer is still around, mark it invalid internally * so the dtor knows not to do any GL work */ void onGlContextLost(); /** * Bounds of the layer. */ Loading libs/hwui/RenderState.cpp +5 −0 Original line number Diff line number Diff line Loading @@ -41,6 +41,10 @@ void RenderState::onGLContextCreated() { mCaches->textureCache.setAssetAtlas(&mAssetAtlas); } static void layerLostGlContext(Layer* layer) { layer->onGlContextLost(); } void RenderState::onGLContextDestroyed() { /* size_t size = mActiveLayers.size(); Loading Loading @@ -73,6 +77,7 @@ void RenderState::onGLContextDestroyed() { LOG_ALWAYS_FATAL("%d layers have survived gl context destruction", size); } */ std::for_each(mActiveLayers.begin(), mActiveLayers.end(), layerLostGlContext); mAssetAtlas.terminate(); } Loading libs/hwui/RenderState.h +3 −3 Original line number Diff line number Diff line Loading @@ -53,10 +53,10 @@ public: void debugOverdraw(bool enable, bool clear); void registerLayer(const Layer* layer) { void registerLayer(Layer* layer) { mActiveLayers.insert(layer); } void unregisterLayer(const Layer* layer) { void unregisterLayer(Layer* layer) { mActiveLayers.erase(layer); } Loading Loading @@ -90,7 +90,7 @@ private: renderthread::RenderThread& mRenderThread; Caches* mCaches; AssetAtlas mAssetAtlas; std::set<const Layer*> mActiveLayers; std::set<Layer*> mActiveLayers; std::set<renderthread::CanvasContext*> mRegisteredContexts; GLsizei mViewportWidth; Loading Loading
libs/hwui/Caches.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -273,7 +273,7 @@ void Caches::dumpMemoryUsage(String8 &log) { layerCache.getSize(), layerCache.getMaxSize(), layerCache.getCount()); if (mRenderState) { int memused = 0; for (std::set<const Layer*>::iterator it = mRenderState->mActiveLayers.begin(); for (std::set<Layer*>::iterator it = mRenderState->mActiveLayers.begin(); it != mRenderState->mActiveLayers.end(); it++) { const Layer* layer = *it; log.appendFormat(" Layer size %dx%d; isTextureLayer()=%d; texid=%u fbo=%u; refs=%d\n", Loading
libs/hwui/Layer.cpp +11 −3 Original line number Diff line number Diff line Loading @@ -69,17 +69,25 @@ Layer::Layer(Type layerType, RenderState& renderState, const uint32_t layerWidth } Layer::~Layer() { renderState.requireGLContext(); renderState.unregisterLayer(this); SkSafeUnref(colorFilter); if (stencil || fbo || texture.id) { renderState.requireGLContext(); removeFbo(); deleteTexture(); } delete[] mesh; delete deferredList; delete renderer; } void Layer::onGlContextLost() { removeFbo(); deleteTexture(); } uint32_t Layer::computeIdealWidth(uint32_t layerWidth) { return uint32_t(ceilf(layerWidth / float(LAYER_SIZE)) * LAYER_SIZE); } Loading
libs/hwui/Layer.h +6 −0 Original line number Diff line number Diff line Loading @@ -285,6 +285,12 @@ public: */ void postDecStrong(); /** * Lost the GL context but the layer is still around, mark it invalid internally * so the dtor knows not to do any GL work */ void onGlContextLost(); /** * Bounds of the layer. */ Loading
libs/hwui/RenderState.cpp +5 −0 Original line number Diff line number Diff line Loading @@ -41,6 +41,10 @@ void RenderState::onGLContextCreated() { mCaches->textureCache.setAssetAtlas(&mAssetAtlas); } static void layerLostGlContext(Layer* layer) { layer->onGlContextLost(); } void RenderState::onGLContextDestroyed() { /* size_t size = mActiveLayers.size(); Loading Loading @@ -73,6 +77,7 @@ void RenderState::onGLContextDestroyed() { LOG_ALWAYS_FATAL("%d layers have survived gl context destruction", size); } */ std::for_each(mActiveLayers.begin(), mActiveLayers.end(), layerLostGlContext); mAssetAtlas.terminate(); } Loading
libs/hwui/RenderState.h +3 −3 Original line number Diff line number Diff line Loading @@ -53,10 +53,10 @@ public: void debugOverdraw(bool enable, bool clear); void registerLayer(const Layer* layer) { void registerLayer(Layer* layer) { mActiveLayers.insert(layer); } void unregisterLayer(const Layer* layer) { void unregisterLayer(Layer* layer) { mActiveLayers.erase(layer); } Loading Loading @@ -90,7 +90,7 @@ private: renderthread::RenderThread& mRenderThread; Caches* mCaches; AssetAtlas mAssetAtlas; std::set<const Layer*> mActiveLayers; std::set<Layer*> mActiveLayers; std::set<renderthread::CanvasContext*> mRegisteredContexts; GLsizei mViewportWidth; Loading