diff options
| author | 2014-11-06 19:22:28 +0000 | |
|---|---|---|
| committer | 2014-11-06 19:22:28 +0000 | |
| commit | be70c7713df98d81e9e43af9e76e0e6d018a4339 (patch) | |
| tree | f61d49c0e935ff423d90392ba24d2adfca00a275 | |
| parent | 843133cd835b2923453bba95599aefa48fe8cb20 (diff) | |
| parent | 327cb3184d5f5d9f22db9ab18a07bb71081bb446 (diff) | |
am 327cb318: Merge "Yank ResourceCache out of Caches" into lmp-mr1-dev automerge: 9c13b8c
* commit '327cb3184d5f5d9f22db9ab18a07bb71081bb446':
Yank ResourceCache out of Caches
| -rwxr-xr-x | core/jni/android/graphics/Bitmap.cpp | 10 | ||||
| -rw-r--r-- | core/jni/android/graphics/NinePatch.cpp | 6 | ||||
| -rw-r--r-- | core/jni/android/graphics/Path.cpp | 6 | ||||
| -rw-r--r-- | libs/hwui/Caches.h | 1 | ||||
| -rw-r--r-- | libs/hwui/DisplayList.cpp | 17 | ||||
| -rw-r--r-- | libs/hwui/DisplayListRenderer.cpp | 4 | ||||
| -rw-r--r-- | libs/hwui/DisplayListRenderer.h | 11 | ||||
| -rw-r--r-- | libs/hwui/RenderNode.cpp | 10 | ||||
| -rw-r--r-- | libs/hwui/ResourceCache.cpp | 6 | ||||
| -rw-r--r-- | libs/hwui/ResourceCache.h | 8 |
10 files changed, 46 insertions, 33 deletions
diff --git a/core/jni/android/graphics/Bitmap.cpp b/core/jni/android/graphics/Bitmap.cpp index 70cf9a803c61..d7eef6ed0cd3 100755 --- a/core/jni/android/graphics/Bitmap.cpp +++ b/core/jni/android/graphics/Bitmap.cpp @@ -17,7 +17,7 @@ #include <jni.h> -#include <Caches.h> +#include <ResourceCache.h> #if 0 #define TRACE_BITMAP(code) code @@ -365,8 +365,8 @@ static jobject Bitmap_copy(JNIEnv* env, jobject, jlong srcHandle, static void Bitmap_destructor(JNIEnv* env, jobject, jlong bitmapHandle) { SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapHandle); #ifdef USE_OPENGL_RENDERER - if (android::uirenderer::Caches::hasInstance()) { - android::uirenderer::Caches::getInstance().resourceCache.destructor(bitmap); + if (android::uirenderer::ResourceCache::hasInstance()) { + android::uirenderer::ResourceCache::getInstance().destructor(bitmap); return; } #endif // USE_OPENGL_RENDERER @@ -376,9 +376,9 @@ static void Bitmap_destructor(JNIEnv* env, jobject, jlong bitmapHandle) { static jboolean Bitmap_recycle(JNIEnv* env, jobject, jlong bitmapHandle) { SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapHandle); #ifdef USE_OPENGL_RENDERER - if (android::uirenderer::Caches::hasInstance()) { + if (android::uirenderer::ResourceCache::hasInstance()) { bool result; - result = android::uirenderer::Caches::getInstance().resourceCache.recycle(bitmap); + result = android::uirenderer::ResourceCache::getInstance().recycle(bitmap); return result ? JNI_TRUE : JNI_FALSE; } #endif // USE_OPENGL_RENDERER diff --git a/core/jni/android/graphics/NinePatch.cpp b/core/jni/android/graphics/NinePatch.cpp index cf23771e98b6..be62fdd48971 100644 --- a/core/jni/android/graphics/NinePatch.cpp +++ b/core/jni/android/graphics/NinePatch.cpp @@ -21,7 +21,7 @@ #include <androidfw/ResourceTypes.h> #include <utils/Log.h> -#include <Caches.h> +#include <ResourceCache.h> #include "Paint.h" #include "Canvas.h" @@ -80,9 +80,9 @@ public: static void finalize(JNIEnv* env, jobject, jlong patchHandle) { int8_t* patch = reinterpret_cast<int8_t*>(patchHandle); #ifdef USE_OPENGL_RENDERER - if (android::uirenderer::Caches::hasInstance()) { + if (android::uirenderer::ResourceCache::hasInstance()) { Res_png_9patch* p = (Res_png_9patch*) patch; - android::uirenderer::Caches::getInstance().resourceCache.destructor(p); + android::uirenderer::ResourceCache::getInstance().destructor(p); return; } #endif // USE_OPENGL_RENDERER diff --git a/core/jni/android/graphics/Path.cpp b/core/jni/android/graphics/Path.cpp index 9d3e74b6ba46..30ce58d2b786 100644 --- a/core/jni/android/graphics/Path.cpp +++ b/core/jni/android/graphics/Path.cpp @@ -27,7 +27,7 @@ #include "SkPath.h" #include "SkPathOps.h" -#include <Caches.h> +#include <ResourceCache.h> #include <vector> #include <map> @@ -39,8 +39,8 @@ public: static void finalizer(JNIEnv* env, jobject clazz, jlong objHandle) { SkPath* obj = reinterpret_cast<SkPath*>(objHandle); #ifdef USE_OPENGL_RENDERER - if (android::uirenderer::Caches::hasInstance()) { - android::uirenderer::Caches::getInstance().resourceCache.destructor(obj); + if (android::uirenderer::ResourceCache::hasInstance()) { + android::uirenderer::ResourceCache::getInstance().destructor(obj); return; } #endif diff --git a/libs/hwui/Caches.h b/libs/hwui/Caches.h index 7aa628cfafc4..e338686a245b 100644 --- a/libs/hwui/Caches.h +++ b/libs/hwui/Caches.h @@ -340,7 +340,6 @@ public: TessellationCache tessellationCache; TextDropShadowCache dropShadowCache; FboCache fboCache; - ResourceCache resourceCache; GammaFontRenderer* fontRenderer; diff --git a/libs/hwui/DisplayList.cpp b/libs/hwui/DisplayList.cpp index 4a927cfc6399..895316696ef7 100644 --- a/libs/hwui/DisplayList.cpp +++ b/libs/hwui/DisplayList.cpp @@ -39,29 +39,28 @@ DisplayListData::~DisplayListData() { } void DisplayListData::cleanupResources() { - Caches& caches = Caches::getInstance(); - caches.unregisterFunctors(functors.size()); - caches.resourceCache.lock(); + ResourceCache& resourceCache = ResourceCache::getInstance(); + resourceCache.lock(); for (size_t i = 0; i < bitmapResources.size(); i++) { - caches.resourceCache.decrementRefcountLocked(bitmapResources.itemAt(i)); + resourceCache.decrementRefcountLocked(bitmapResources.itemAt(i)); } for (size_t i = 0; i < ownedBitmapResources.size(); i++) { const SkBitmap* bitmap = ownedBitmapResources.itemAt(i); - caches.resourceCache.decrementRefcountLocked(bitmap); - caches.resourceCache.destructorLocked(bitmap); + resourceCache.decrementRefcountLocked(bitmap); + resourceCache.destructorLocked(bitmap); } for (size_t i = 0; i < patchResources.size(); i++) { - caches.resourceCache.decrementRefcountLocked(patchResources.itemAt(i)); + resourceCache.decrementRefcountLocked(patchResources.itemAt(i)); } for (size_t i = 0; i < sourcePaths.size(); i++) { - caches.resourceCache.decrementRefcountLocked(sourcePaths.itemAt(i)); + resourceCache.decrementRefcountLocked(sourcePaths.itemAt(i)); } - caches.resourceCache.unlock(); + resourceCache.unlock(); for (size_t i = 0; i < paints.size(); i++) { delete paints.itemAt(i); diff --git a/libs/hwui/DisplayListRenderer.cpp b/libs/hwui/DisplayListRenderer.cpp index c17dd098d4e6..1b1f6cc3e235 100644 --- a/libs/hwui/DisplayListRenderer.cpp +++ b/libs/hwui/DisplayListRenderer.cpp @@ -21,7 +21,7 @@ #include <private/hwui/DrawGlInfo.h> -#include "Caches.h" +#include "ResourceCache.h" #include "DeferredDisplayList.h" #include "DisplayListLogBuffer.h" #include "DisplayListOp.h" @@ -32,7 +32,7 @@ namespace android { namespace uirenderer { DisplayListRenderer::DisplayListRenderer() - : mCaches(Caches::getInstance()) + : mResourceCache(ResourceCache::getInstance()) , mDisplayListData(NULL) , mTranslateX(0.0f) , mTranslateY(0.0f) diff --git a/libs/hwui/DisplayListRenderer.h b/libs/hwui/DisplayListRenderer.h index 901e8f02fa7a..806866386079 100644 --- a/libs/hwui/DisplayListRenderer.h +++ b/libs/hwui/DisplayListRenderer.h @@ -24,6 +24,7 @@ #include "DisplayListLogBuffer.h" #include "RenderNode.h" +#include "ResourceCache.h" namespace android { namespace uirenderer { @@ -209,7 +210,7 @@ private: mDisplayListData->paths.add(pathCopy); } if (mDisplayListData->sourcePaths.indexOf(path) < 0) { - mCaches.resourceCache.incrementRefcount(path); + mResourceCache.incrementRefcount(path); mDisplayListData->sourcePaths.add(path); } return pathCopy; @@ -273,19 +274,19 @@ private: // contents, and drawing again. The only fix would be to always copy it the first time, // which doesn't seem worth the extra cycles for this unlikely case. mDisplayListData->bitmapResources.add(bitmap); - mCaches.resourceCache.incrementRefcount(bitmap); + mResourceCache.incrementRefcount(bitmap); return bitmap; } inline const SkBitmap* refBitmapData(const SkBitmap* bitmap) { mDisplayListData->ownedBitmapResources.add(bitmap); - mCaches.resourceCache.incrementRefcount(bitmap); + mResourceCache.incrementRefcount(bitmap); return bitmap; } inline const Res_png_9patch* refPatch(const Res_png_9patch* patch) { mDisplayListData->patchResources.add(patch); - mCaches.resourceCache.incrementRefcount(patch); + mResourceCache.incrementRefcount(patch); return patch; } @@ -293,7 +294,7 @@ private: DefaultKeyedVector<const SkPath*, const SkPath*> mPathMap; DefaultKeyedVector<const SkRegion*, const SkRegion*> mRegionMap; - Caches& mCaches; + ResourceCache& mResourceCache; DisplayListData* mDisplayListData; float mTranslateX; diff --git a/libs/hwui/RenderNode.cpp b/libs/hwui/RenderNode.cpp index c9ed9a7d780b..13c54993a6e4 100644 --- a/libs/hwui/RenderNode.cpp +++ b/libs/hwui/RenderNode.cpp @@ -98,9 +98,6 @@ void RenderNode::setStagingDisplayList(DisplayListData* data) { mNeedsDisplayListDataSync = true; delete mStagingDisplayListData; mStagingDisplayListData = data; - if (mStagingDisplayListData) { - Caches::getInstance().registerFunctors(mStagingDisplayListData->functors.size()); - } } /** @@ -305,6 +302,10 @@ void RenderNode::pushStagingDisplayListChanges(TreeInfo& info) { // changes in isRenderable or, in the future, bounds damageSelf(info); deleteDisplayListData(); + // TODO: Remove this caches stuff + if (mStagingDisplayListData && mStagingDisplayListData->functors.size()) { + Caches::getInstance().registerFunctors(mStagingDisplayListData->functors.size()); + } mDisplayListData = mStagingDisplayListData; mStagingDisplayListData = NULL; if (mDisplayListData) { @@ -321,6 +322,9 @@ void RenderNode::deleteDisplayListData() { for (size_t i = 0; i < mDisplayListData->children().size(); i++) { mDisplayListData->children()[i]->mRenderNode->decParentRefCount(); } + if (mDisplayListData->functors.size()) { + Caches::getInstance().unregisterFunctors(mDisplayListData->functors.size()); + } } delete mDisplayListData; mDisplayListData = NULL; diff --git a/libs/hwui/ResourceCache.cpp b/libs/hwui/ResourceCache.cpp index 329d92f0be13..12d4928ad78c 100644 --- a/libs/hwui/ResourceCache.cpp +++ b/libs/hwui/ResourceCache.cpp @@ -21,6 +21,12 @@ #include "Caches.h" namespace android { + +#ifdef USE_OPENGL_RENDERER +using namespace uirenderer; +ANDROID_SINGLETON_STATIC_INSTANCE(ResourceCache); +#endif + namespace uirenderer { /////////////////////////////////////////////////////////////////////////////// diff --git a/libs/hwui/ResourceCache.h b/libs/hwui/ResourceCache.h index 8539d123b09a..a922d53ed816 100644 --- a/libs/hwui/ResourceCache.h +++ b/libs/hwui/ResourceCache.h @@ -22,6 +22,7 @@ #include <SkBitmap.h> #include <utils/KeyedVector.h> +#include <utils/Singleton.h> #include <androidfw/ResourceTypes.h> @@ -53,11 +54,14 @@ public: ResourceType resourceType; }; -class ANDROID_API ResourceCache { -public: +class ANDROID_API ResourceCache: public Singleton<ResourceCache> { ResourceCache(); ~ResourceCache(); + friend class Singleton<ResourceCache>; + +public: + /** * When using these two methods, make sure to only invoke the *Locked() * variants of increment/decrementRefcount(), recyle() and destructor() |