Loading libs/hwui/LayerCache.cpp +9 −6 Original line number Diff line number Diff line Loading @@ -68,7 +68,6 @@ void LayerCache::setMaxSize(uint32_t maxSize) { void LayerCache::deleteLayer(Layer* layer) { if (layer) { mSize -= layer->width * layer->height * 4; glDeleteTextures(1, &layer->texture); delete layer; } Loading Loading @@ -133,12 +132,16 @@ bool LayerCache::put(Layer* layer) { if (size < mMaxSize) { // TODO: Use an LRU while (mSize + size > mMaxSize) { Layer* biggest = mCache.top().mLayer; deleteLayer(biggest); mCache.removeAt(mCache.size() - 1); size_t position = 0; #if LAYER_REMOVE_BIGGEST position = mCache.size() - 1; #endif Layer* victim = mCache.itemAt(position).mLayer; deleteLayer(victim); mCache.removeAt(position); LAYER_LOGD(" Deleting layer %.2fx%.2f", biggest->layer.getWidth(), biggest->layer.getHeight()); LAYER_LOGD(" Deleting layer %.2fx%.2f", victim->layer.getWidth(), victim->layer.getHeight()); } LayerEntry entry(layer); Loading libs/hwui/LayerCache.h +2 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,8 @@ namespace uirenderer { // Debug #define DEBUG_LAYERS 0 // Indicates whether to remove the biggest layers first, or the smaller ones #define LAYER_REMOVE_BIGGEST 0 // Textures used by layers must have dimensions multiples of this number #define LAYER_SIZE 64 Loading libs/hwui/OpenGLRenderer.cpp +2 −0 Original line number Diff line number Diff line Loading @@ -441,6 +441,7 @@ bool OpenGLRenderer::createLayer(sp<Snapshot> snapshot, float left, float top, glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, layer->texture, 0); #if DEBUG_LAYERS GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER); if (status != GL_FRAMEBUFFER_COMPLETE) { LOGE("Framebuffer incomplete (GL error code 0x%x)", status); Loading @@ -453,6 +454,7 @@ bool OpenGLRenderer::createLayer(sp<Snapshot> snapshot, float left, float top, return false; } #endif // Clear the FBO glDisable(GL_SCISSOR_TEST); Loading libs/hwui/Properties.h +2 −2 Original line number Diff line number Diff line Loading @@ -44,8 +44,8 @@ // Converts a number of mega-bytes into bytes #define MB(s) s * 1024 * 1024 #define DEFAULT_TEXTURE_CACHE_SIZE 22.0f #define DEFAULT_LAYER_CACHE_SIZE 4.0f #define DEFAULT_TEXTURE_CACHE_SIZE 20.0f #define DEFAULT_LAYER_CACHE_SIZE 6.0f #define DEFAULT_PATH_CACHE_SIZE 4.0f #define DEFAULT_PATCH_CACHE_SIZE 512 #define DEFAULT_GRADIENT_CACHE_SIZE 0.5f Loading Loading
libs/hwui/LayerCache.cpp +9 −6 Original line number Diff line number Diff line Loading @@ -68,7 +68,6 @@ void LayerCache::setMaxSize(uint32_t maxSize) { void LayerCache::deleteLayer(Layer* layer) { if (layer) { mSize -= layer->width * layer->height * 4; glDeleteTextures(1, &layer->texture); delete layer; } Loading Loading @@ -133,12 +132,16 @@ bool LayerCache::put(Layer* layer) { if (size < mMaxSize) { // TODO: Use an LRU while (mSize + size > mMaxSize) { Layer* biggest = mCache.top().mLayer; deleteLayer(biggest); mCache.removeAt(mCache.size() - 1); size_t position = 0; #if LAYER_REMOVE_BIGGEST position = mCache.size() - 1; #endif Layer* victim = mCache.itemAt(position).mLayer; deleteLayer(victim); mCache.removeAt(position); LAYER_LOGD(" Deleting layer %.2fx%.2f", biggest->layer.getWidth(), biggest->layer.getHeight()); LAYER_LOGD(" Deleting layer %.2fx%.2f", victim->layer.getWidth(), victim->layer.getHeight()); } LayerEntry entry(layer); Loading
libs/hwui/LayerCache.h +2 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,8 @@ namespace uirenderer { // Debug #define DEBUG_LAYERS 0 // Indicates whether to remove the biggest layers first, or the smaller ones #define LAYER_REMOVE_BIGGEST 0 // Textures used by layers must have dimensions multiples of this number #define LAYER_SIZE 64 Loading
libs/hwui/OpenGLRenderer.cpp +2 −0 Original line number Diff line number Diff line Loading @@ -441,6 +441,7 @@ bool OpenGLRenderer::createLayer(sp<Snapshot> snapshot, float left, float top, glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, layer->texture, 0); #if DEBUG_LAYERS GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER); if (status != GL_FRAMEBUFFER_COMPLETE) { LOGE("Framebuffer incomplete (GL error code 0x%x)", status); Loading @@ -453,6 +454,7 @@ bool OpenGLRenderer::createLayer(sp<Snapshot> snapshot, float left, float top, return false; } #endif // Clear the FBO glDisable(GL_SCISSOR_TEST); Loading
libs/hwui/Properties.h +2 −2 Original line number Diff line number Diff line Loading @@ -44,8 +44,8 @@ // Converts a number of mega-bytes into bytes #define MB(s) s * 1024 * 1024 #define DEFAULT_TEXTURE_CACHE_SIZE 22.0f #define DEFAULT_LAYER_CACHE_SIZE 4.0f #define DEFAULT_TEXTURE_CACHE_SIZE 20.0f #define DEFAULT_LAYER_CACHE_SIZE 6.0f #define DEFAULT_PATH_CACHE_SIZE 4.0f #define DEFAULT_PATCH_CACHE_SIZE 512 #define DEFAULT_GRADIENT_CACHE_SIZE 0.5f Loading