From eea60692b060737faeaa02bb30f5b79e2202b482 Mon Sep 17 00:00:00 2001 From: Romain Guy Date: Tue, 26 Jul 2011 20:35:55 -0700 Subject: [PATCH] Improve layers debugging Change-Id: Ia4950dd5f0e0a224ecb69c581d33aa4f32260a7c --- core/java/android/view/GLES20Canvas.java | 2 +- core/java/android/view/GLES20RenderLayer.java | 1 - libs/hwui/LayerCache.cpp | 14 +++++++++----- libs/hwui/LayerCache.h | 5 +++++ libs/hwui/LayerRenderer.cpp | 10 ++++++++-- 5 files changed, 23 insertions(+), 9 deletions(-) diff --git a/core/java/android/view/GLES20Canvas.java b/core/java/android/view/GLES20Canvas.java index d22fa6e501ec..d561484ee66d 100644 --- a/core/java/android/view/GLES20Canvas.java +++ b/core/java/android/view/GLES20Canvas.java @@ -51,7 +51,7 @@ class GLES20Canvas extends HardwareCanvas { // The native renderer will be destroyed when this object dies. // DO NOT overwrite this reference once it is set. - @SuppressWarnings("unused") + @SuppressWarnings({"unused", "FieldCanBeLocal"}) private CanvasFinalizer mFinalizer; private int mWidth; diff --git a/core/java/android/view/GLES20RenderLayer.java b/core/java/android/view/GLES20RenderLayer.java index 7adac1ce3e3f..41f16e27da8a 100644 --- a/core/java/android/view/GLES20RenderLayer.java +++ b/core/java/android/view/GLES20RenderLayer.java @@ -24,7 +24,6 @@ import android.graphics.Canvas; * {@link Canvas} that can be used to render into an FBO using OpenGL. */ class GLES20RenderLayer extends GLES20Layer { - private int mLayerWidth; private int mLayerHeight; diff --git a/libs/hwui/LayerCache.cpp b/libs/hwui/LayerCache.cpp index 58c0fac67d18..89c35da3f088 100644 --- a/libs/hwui/LayerCache.cpp +++ b/libs/hwui/LayerCache.cpp @@ -112,17 +112,21 @@ Layer* LayerCache::get(const uint32_t width, const uint32_t height) { glPixelStorei(GL_UNPACK_ALIGNMENT, 4); #if DEBUG_LAYERS - size_t size = mCache.size(); - for (size_t i = 0; i < size; i++) { - const LayerEntry& entry = mCache.itemAt(i); - LAYER_LOGD(" Layer size %dx%d", entry.mWidth, entry.mHeight); - } + dump(); #endif } return layer; } +void LayerCache::dump() { + size_t size = mCache.size(); + for (size_t i = 0; i < size; i++) { + const LayerEntry& entry = mCache.itemAt(i); + LAYER_LOGD(" Layer size %dx%d", entry.mWidth, entry.mHeight); + } +} + bool LayerCache::resize(Layer* layer, const uint32_t width, const uint32_t height) { // TODO: We should be smarter and see if we have a texture of the appropriate // size already in the cache, and reuse it instead of creating a new one diff --git a/libs/hwui/LayerCache.h b/libs/hwui/LayerCache.h index 81b8bf36577a..a0eae592b60f 100644 --- a/libs/hwui/LayerCache.h +++ b/libs/hwui/LayerCache.h @@ -101,6 +101,11 @@ public: */ uint32_t getSize(); + /** + * Prints out the content of the cache. + */ + void dump(); + private: void deleteLayer(Layer* layer); diff --git a/libs/hwui/LayerRenderer.cpp b/libs/hwui/LayerRenderer.cpp index 1fa343b34618..81816f6a2b5d 100644 --- a/libs/hwui/LayerRenderer.cpp +++ b/libs/hwui/LayerRenderer.cpp @@ -167,7 +167,7 @@ void LayerRenderer::generateMesh() { /////////////////////////////////////////////////////////////////////////////// Layer* LayerRenderer::createLayer(uint32_t width, uint32_t height, bool isOpaque) { - LAYER_RENDERER_LOGD("Creating new layer %dx%d", width, height); + LAYER_RENDERER_LOGD("Requesting new render layer %dx%d", width, height); GLuint fbo = Caches::getInstance().fboCache.get(); if (!fbo) { @@ -288,16 +288,22 @@ void LayerRenderer::updateTextureLayer(Layer* layer, uint32_t width, uint32_t he void LayerRenderer::destroyLayer(Layer* layer) { if (layer) { - LAYER_RENDERER_LOGD("Destroying layer, fbo = %d", layer->getFbo()); + LAYER_RENDERER_LOGD("Recycling layer, %dx%d fbo = %d", + layer->getWidth(), layer->getHeight(), layer->getFbo()); if (layer->getFbo()) { Caches::getInstance().fboCache.put(layer->getFbo()); } if (!Caches::getInstance().layerCache.put(layer)) { + LAYER_RENDERER_LOGD(" Destroyed!"); layer->deleteTexture(); delete layer; } else { + LAYER_RENDERER_LOGD(" Cached!"); +#if DEBUG_LAYERS + Caches::getInstance().layerCache.dump(); +#endif layer->region.clear(); } } -- 2.11.0