summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/hwui/LayerCache.cpp15
-rw-r--r--libs/hwui/LayerCache.h2
-rw-r--r--libs/hwui/OpenGLRenderer.cpp2
-rw-r--r--libs/hwui/Properties.h4
4 files changed, 15 insertions, 8 deletions
diff --git a/libs/hwui/LayerCache.cpp b/libs/hwui/LayerCache.cpp
index 31da924b5a0b..9ce0359140bb 100644
--- a/libs/hwui/LayerCache.cpp
+++ b/libs/hwui/LayerCache.cpp
@@ -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;
}
@@ -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);
diff --git a/libs/hwui/LayerCache.h b/libs/hwui/LayerCache.h
index e64366f87a26..ae792ab518ce 100644
--- a/libs/hwui/LayerCache.h
+++ b/libs/hwui/LayerCache.h
@@ -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
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index e965e6119e82..585fa53039bd 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -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);
@@ -453,6 +454,7 @@ bool OpenGLRenderer::createLayer(sp<Snapshot> snapshot, float left, float top,
return false;
}
+#endif
// Clear the FBO
glDisable(GL_SCISSOR_TEST);
diff --git a/libs/hwui/Properties.h b/libs/hwui/Properties.h
index 2c1a82b4ed76..db3cb4d1e460 100644
--- a/libs/hwui/Properties.h
+++ b/libs/hwui/Properties.h
@@ -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