Tweak layers caching for better performance in Launcher.

Change-Id: Ia6e67699d98f69c8a93385b3ecbdd814c7b16921
diff --git a/libs/hwui/LayerCache.cpp b/libs/hwui/LayerCache.cpp
index 31da924..9ce0359 100644
--- a/libs/hwui/LayerCache.cpp
+++ b/libs/hwui/LayerCache.cpp
@@ -68,7 +68,6 @@
 void LayerCache::deleteLayer(Layer* layer) {
     if (layer) {
         mSize -= layer->width * layer->height * 4;
-
         glDeleteTextures(1, &layer->texture);
         delete layer;
     }
@@ -133,12 +132,16 @@
     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 e64366f..ae792ab 100644
--- a/libs/hwui/LayerCache.h
+++ b/libs/hwui/LayerCache.h
@@ -30,6 +30,8 @@
 // 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 e965e61..585fa53 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -441,6 +441,7 @@
         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 @@
 
             return false;
         }
+#endif
 
         // Clear the FBO
         glDisable(GL_SCISSOR_TEST);
diff --git a/libs/hwui/Properties.h b/libs/hwui/Properties.h
index 2c1a82b..db3cb4d 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