summaryrefslogtreecommitdiffstats
path: root/libs
diff options
context:
space:
mode:
authorRomain Guy <romainguy@google.com>2011-07-27 18:51:50 -0700
committerRomain Guy <romainguy@google.com>2011-07-27 18:51:50 -0700
commit65b345fa22b878e141b8fd8ece9c208df00fa40f (patch)
tree587ba028a74320da19f8eeddbd4a2fb377e68cb4 /libs
parent6d7475d666baefaa3ba9f0dcee25238739454241 (diff)
downloadframeworks_base-65b345fa22b878e141b8fd8ece9c208df00fa40f.zip
frameworks_base-65b345fa22b878e141b8fd8ece9c208df00fa40f.tar.gz
frameworks_base-65b345fa22b878e141b8fd8ece9c208df00fa40f.tar.bz2
Reclaim more memory, more often.
Yay. Change-Id: I04557ad575c307a55088549f48f0e9ad994b7275
Diffstat (limited to 'libs')
-rw-r--r--libs/hwui/DisplayListRenderer.cpp22
-rw-r--r--libs/hwui/DisplayListRenderer.h4
-rw-r--r--libs/hwui/LayerCache.cpp1
-rw-r--r--libs/hwui/LayerRenderer.cpp2
-rw-r--r--libs/hwui/Properties.h2
5 files changed, 23 insertions, 8 deletions
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 @@ void DisplayList::outputLogBuffer(int fd) {
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 @@ void DisplayList::initFromDisplayListRenderer(const DisplayListRenderer& recorde
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::initFromDisplayListRenderer(const DisplayListRenderer& recorde
}
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 @@ public:
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 @@ private:
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::setMaxSize(uint32_t maxSize) {
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 @@ void LayerRenderer::destroyLayer(Layer* layer) {
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 @@ enum DebugLevel {
#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