Merge "Yank ResourceCache out of Caches" into lmp-mr1-dev
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -340,7 +340,6 @@ public:
|
||||
TessellationCache tessellationCache;
|
||||
TextDropShadowCache dropShadowCache;
|
||||
FboCache fboCache;
|
||||
ResourceCache resourceCache;
|
||||
|
||||
GammaFontRenderer* fontRenderer;
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -21,6 +21,12 @@
|
||||
#include "Caches.h"
|
||||
|
||||
namespace android {
|
||||
|
||||
#ifdef USE_OPENGL_RENDERER
|
||||
using namespace uirenderer;
|
||||
ANDROID_SINGLETON_STATIC_INSTANCE(ResourceCache);
|
||||
#endif
|
||||
|
||||
namespace uirenderer {
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user