diff options
author | Giulio Cervera <giulio.cervera@gmail.com> | 2012-05-02 11:36:02 +0200 |
---|---|---|
committer | Giulio Cervera <giulio.cervera@gmail.com> | 2012-05-02 11:36:02 +0200 |
commit | 19c597ffb5549f8273818c466cfca4b863f63259 (patch) | |
tree | 6fb9c81c396164c758fca0cf1a85e7b34b543b17 /libs | |
parent | 129c3bf1d857aac47ee20063d73fe1abffa1f3e3 (diff) | |
parent | 75b2e6d76e1354c7f0279f8b3927d849f28ba80a (diff) | |
download | frameworks_base-19c597ffb5549f8273818c466cfca4b863f63259.zip frameworks_base-19c597ffb5549f8273818c466cfca4b863f63259.tar.gz frameworks_base-19c597ffb5549f8273818c466cfca4b863f63259.tar.bz2 |
Merge remote-tracking branch 'github/ics' into ics_chocolate_M8260AAABQNLZA30150
Diffstat (limited to 'libs')
-rw-r--r-- | libs/hwui/Caches.cpp | 13 | ||||
-rw-r--r-- | libs/hwui/Caches.h | 8 | ||||
-rw-r--r-- | libs/hwui/DisplayListRenderer.cpp | 7 | ||||
-rw-r--r-- | libs/hwui/DisplayListRenderer.h | 8 |
4 files changed, 32 insertions, 4 deletions
diff --git a/libs/hwui/Caches.cpp b/libs/hwui/Caches.cpp index f293cba..d0c84bb 100644 --- a/libs/hwui/Caches.cpp +++ b/libs/hwui/Caches.cpp @@ -20,6 +20,7 @@ #include <utils/String8.h> #include "Caches.h" +#include "DisplayListRenderer.h" #include "Properties.h" #include "LayerRenderer.h" @@ -178,6 +179,13 @@ void Caches::clearGarbage() { LayerRenderer::destroyLayer(layer); } mLayerGarbage.clear(); + + count = mDisplayListGarbage.size(); + for (size_t i = 0; i < count; i++) { + DisplayList* displayList = mDisplayListGarbage.itemAt(i); + delete displayList; + } + mDisplayListGarbage.clear(); } void Caches::deleteLayerDeferred(Layer* layer) { @@ -185,6 +193,11 @@ void Caches::deleteLayerDeferred(Layer* layer) { mLayerGarbage.push(layer); } +void Caches::deleteDisplayListDeferred(DisplayList* displayList) { + Mutex::Autolock _l(mGarbageLock); + mDisplayListGarbage.push(displayList); +} + void Caches::flush(FlushMode mode) { FLUSH_LOGD("Flushing caches (mode %d)", mode); diff --git a/libs/hwui/Caches.h b/libs/hwui/Caches.h index 5e58a9e..5a8b84f 100644 --- a/libs/hwui/Caches.h +++ b/libs/hwui/Caches.h @@ -84,6 +84,8 @@ struct CacheLogger { // Caches /////////////////////////////////////////////////////////////////////////////// +class DisplayList; + class ANDROID_API Caches: public Singleton<Caches> { Caches(); @@ -99,6 +101,7 @@ class ANDROID_API Caches: public Singleton<Caches> { mutable Mutex mGarbageLock; Vector<Layer*> mLayerGarbage; + Vector<DisplayList*> mDisplayListGarbage; public: enum FlushMode { @@ -144,6 +147,11 @@ public: */ void deleteLayerDeferred(Layer* layer); + /* + * Can be used to delete a display list from a non EGL thread. + */ + void deleteDisplayListDeferred(DisplayList* layer); + /** * Binds the VBO used to render simple textured quads. */ diff --git a/libs/hwui/DisplayListRenderer.cpp b/libs/hwui/DisplayListRenderer.cpp index 3372d1c..163df5b 100644 --- a/libs/hwui/DisplayListRenderer.cpp +++ b/libs/hwui/DisplayListRenderer.cpp @@ -96,6 +96,13 @@ DisplayList::~DisplayList() { clearResources(); } +void DisplayList::destroyDisplayListDeferred(DisplayList* displayList) { + if (displayList) { + DISPLAY_LIST_LOGD("Deferring display list destruction"); + Caches::getInstance().deleteDisplayListDeferred(displayList); + } +} + void DisplayList::clearResources() { sk_free((void*) mReader.base()); diff --git a/libs/hwui/DisplayListRenderer.h b/libs/hwui/DisplayListRenderer.h index ab475bf..3053eaa 100644 --- a/libs/hwui/DisplayListRenderer.h +++ b/libs/hwui/DisplayListRenderer.h @@ -107,16 +107,16 @@ public: static const char* OP_NAMES[]; - void initFromDisplayListRenderer(const DisplayListRenderer& recorder, bool reusing = false); - ANDROID_API size_t getSize(); + ANDROID_API static void destroyDisplayListDeferred(DisplayList* displayList); + ANDROID_API static void outputLogBuffer(int fd); + + void initFromDisplayListRenderer(const DisplayListRenderer& recorder, bool reusing = false); bool replay(OpenGLRenderer& renderer, Rect& dirty, uint32_t level = 0); void output(OpenGLRenderer& renderer, uint32_t level = 0); - ANDROID_API static void outputLogBuffer(int fd); - void setRenderable(bool renderable) { mIsRenderable = renderable; } |