Reclaim more memory, more often.

Yay.

Change-Id: I04557ad575c307a55088549f48f0e9ad994b7275
diff --git a/libs/hwui/DisplayListRenderer.cpp b/libs/hwui/DisplayListRenderer.cpp
index 886c05c..88cfc5a 100644
--- a/libs/hwui/DisplayListRenderer.cpp
+++ b/libs/hwui/DisplayListRenderer.cpp
@@ -74,12 +74,17 @@
     if (logBuffer.isEmpty()) {
         return;
     }
-    String8 cachesLog;
-    Caches::getInstance().dumpMemoryUsage(cachesLog);
+
     FILE *file = fdopen(fd, "a");
-    fprintf(file, "\nCaches:\n%s", cachesLog.string());
+
     fprintf(file, "\nRecent DisplayList operations\n");
     logBuffer.outputCommands(file, OP_NAMES);
+
+    String8 cachesLog;
+    Caches::getInstance().dumpMemoryUsage(cachesLog);
+    fprintf(file, "\nCaches:\n%s", cachesLog.string());
+    fprintf(file, "\n");
+
     fflush(file);
 }
 
@@ -143,10 +148,10 @@
         clearResources();
     }
 
-    size_t size = writer.size();
-    void* buffer = sk_malloc_throw(size);
+    mSize = writer.size();
+    void* buffer = sk_malloc_throw(mSize);
     writer.flatten(buffer);
-    mReader.setMemory(buffer, size);
+    mReader.setMemory(buffer, mSize);
 
     Caches& caches = Caches::getInstance();
 
@@ -188,6 +193,11 @@
 }
 
 void DisplayList::init() {
+    mSize = 0;
+}
+
+size_t DisplayList::getSize() {
+    return mSize;
 }
 
 /**
diff --git a/libs/hwui/DisplayListRenderer.h b/libs/hwui/DisplayListRenderer.h
index a3d346d..69e72a4 100644
--- a/libs/hwui/DisplayListRenderer.h
+++ b/libs/hwui/DisplayListRenderer.h
@@ -105,6 +105,8 @@
 
     void initFromDisplayListRenderer(const DisplayListRenderer& recorder, bool reusing = false);
 
+    size_t getSize();
+
     bool replay(OpenGLRenderer& renderer, Rect& dirty, uint32_t level = 0);
 
     void output(OpenGLRenderer& renderer, uint32_t level = 0);
@@ -203,6 +205,8 @@
     Vector<SkiaShader*> mShaders;
 
     mutable SkFlattenableReadBuffer mReader;
+
+    size_t mSize;
 };
 
 ///////////////////////////////////////////////////////////////////////////////
diff --git a/libs/hwui/LayerCache.cpp b/libs/hwui/LayerCache.cpp
index 89c35da..0af0177 100644
--- a/libs/hwui/LayerCache.cpp
+++ b/libs/hwui/LayerCache.cpp
@@ -68,6 +68,7 @@
 
 void LayerCache::deleteLayer(Layer* layer) {
     if (layer) {
+        LAYER_LOGD("Destroying layer %dx%d", layer->getWidth(), layer->getHeight());
         mSize -= layer->getWidth() * layer->getHeight() * 4;
         layer->deleteFbo();
         layer->deleteTexture();
diff --git a/libs/hwui/LayerRenderer.cpp b/libs/hwui/LayerRenderer.cpp
index 81816f6..7e8c7fd 100644
--- a/libs/hwui/LayerRenderer.cpp
+++ b/libs/hwui/LayerRenderer.cpp
@@ -301,7 +301,7 @@
             delete layer;
         } else {
             LAYER_RENDERER_LOGD("  Cached!");
-#if DEBUG_LAYERS
+#if DEBUG_LAYER_RENDERER
             Caches::getInstance().layerCache.dump();
 #endif
             layer->region.clear();
diff --git a/libs/hwui/Properties.h b/libs/hwui/Properties.h
index 47049e2..923978f 100644
--- a/libs/hwui/Properties.h
+++ b/libs/hwui/Properties.h
@@ -68,7 +68,7 @@
 #define MB(s) s * 1024 * 1024
 
 #define DEFAULT_TEXTURE_CACHE_SIZE 24.0f
-#define DEFAULT_LAYER_CACHE_SIZE 24.0f
+#define DEFAULT_LAYER_CACHE_SIZE 16.0f
 #define DEFAULT_PATH_CACHE_SIZE 4.0f
 #define DEFAULT_SHAPE_CACHE_SIZE 1.0f
 #define DEFAULT_PATCH_CACHE_SIZE 512