diff options
author | Romain Guy <romainguy@google.com> | 2011-07-27 18:51:50 -0700 |
---|---|---|
committer | Romain Guy <romainguy@google.com> | 2011-07-27 18:51:50 -0700 |
commit | 65b345fa22b878e141b8fd8ece9c208df00fa40f (patch) | |
tree | 587ba028a74320da19f8eeddbd4a2fb377e68cb4 /libs | |
parent | 6d7475d666baefaa3ba9f0dcee25238739454241 (diff) | |
download | frameworks_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.cpp | 22 | ||||
-rw-r--r-- | libs/hwui/DisplayListRenderer.h | 4 | ||||
-rw-r--r-- | libs/hwui/LayerCache.cpp | 1 | ||||
-rw-r--r-- | libs/hwui/LayerRenderer.cpp | 2 | ||||
-rw-r--r-- | libs/hwui/Properties.h | 2 |
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 |