Loading libs/hwui/DisplayListRenderer.cpp +25 −6 Original line number Diff line number Diff line Loading @@ -101,8 +101,14 @@ void DisplayList::clearResources() { } mBitmapResources.clear(); for (size_t i = 0; i < mFilterResources.size(); i++) { caches.resourceCache.decrementRefcount(mFilterResources.itemAt(i)); } mFilterResources.clear(); for (size_t i = 0; i < mShaders.size(); i++) { caches.resourceCache.decrementRefcount(mShaders.itemAt(i)); caches.resourceCache.destructor(mShaders.itemAt(i)); } mShaders.clear(); Loading Loading @@ -151,11 +157,18 @@ void DisplayList::initFromDisplayListRenderer(const DisplayListRenderer& recorde caches.resourceCache.incrementRefcount(resource); } const Vector<SkiaColorFilter*> &filterResources = recorder.getFilterResources(); for (size_t i = 0; i < filterResources.size(); i++) { SkiaColorFilter* resource = filterResources.itemAt(i); mFilterResources.add(resource); caches.resourceCache.incrementRefcount(resource); } const Vector<SkiaShader*> &shaders = recorder.getShaders(); for (size_t i = 0; i < shaders.size(); i++) { SkiaShader* shader = shaders.itemAt(i); mShaders.add(shader); caches.resourceCache.incrementRefcount(shader); SkiaShader* resource = shaders.itemAt(i); mShaders.add(resource); caches.resourceCache.incrementRefcount(resource); } const Vector<SkPaint*> &paints = recorder.getPaints(); Loading Loading @@ -873,11 +886,15 @@ void DisplayListRenderer::reset() { Caches& caches = Caches::getInstance(); for (size_t i = 0; i < mBitmapResources.size(); i++) { SkBitmap* resource = mBitmapResources.itemAt(i); caches.resourceCache.decrementRefcount(resource); caches.resourceCache.decrementRefcount(mBitmapResources.itemAt(i)); } mBitmapResources.clear(); for (size_t i = 0; i < mFilterResources.size(); i++) { caches.resourceCache.decrementRefcount(mFilterResources.itemAt(i)); } mFilterResources.clear(); for (size_t i = 0; i < mShaders.size(); i++) { caches.resourceCache.decrementRefcount(mShaders.itemAt(i)); } Loading @@ -886,8 +903,10 @@ void DisplayListRenderer::reset() { mPaints.clear(); mPaintMap.clear(); mPaths.clear(); mPathMap.clear(); mMatrices.clear(); } Loading libs/hwui/DisplayListRenderer.h +6 −8 Original line number Diff line number Diff line Loading @@ -292,6 +292,10 @@ public: return mBitmapResources; } const Vector<SkiaColorFilter*>& getFilterResources() const { return mFilterResources; } const Vector<SkiaShader*>& getShaders() const { return mShaders; } Loading @@ -308,10 +312,6 @@ public: return mMatrices; } const Vector<SkiaColorFilter*>& getFilterResources() const { return mFilterResources; } private: void insertRestoreToCount() { if (mRestoreSaveCount >= 0) { Loading Loading @@ -431,8 +431,7 @@ private: // which doesn't seem worth the extra cycles for this unlikely case. addInt((int) bitmap); mBitmapResources.add(bitmap); Caches& caches = Caches::getInstance(); caches.resourceCache.incrementRefcount(bitmap); Caches::getInstance().resourceCache.incrementRefcount(bitmap); } inline void addShader(SkiaShader* shader) { Loading @@ -456,8 +455,7 @@ private: inline void addColorFilter(SkiaColorFilter* colorFilter) { addInt((int) colorFilter); mFilterResources.add(colorFilter); Caches& caches = Caches::getInstance(); caches.resourceCache.incrementRefcount(colorFilter); Caches::getInstance().resourceCache.incrementRefcount(colorFilter); } Vector<SkBitmap*> mBitmapResources; Loading libs/hwui/ResourceCache.cpp +8 −19 Original line number Diff line number Diff line Loading @@ -48,9 +48,6 @@ ResourceCache::~ResourceCache() { void ResourceCache::incrementRefcount(void* resource, ResourceType resourceType) { Mutex::Autolock _l(mLock); for (size_t i = 0; i < mCache->size(); ++i) { void* ref = mCache->valueAt(i); } ResourceReference* ref = mCache->indexOfKey(resource) >= 0 ? mCache->valueFor(resource) : NULL; if (ref == NULL || mCache->size() == 0) { ref = new ResourceReference(resourceType); Loading Loading @@ -144,7 +141,6 @@ void ResourceCache::destructor(SkPath* resource) { ref->destroyed = true; if (ref->refCount == 0) { deleteResourceReference(resource, ref); return; } } Loading @@ -162,7 +158,6 @@ void ResourceCache::destructor(SkBitmap* resource) { ref->destroyed = true; if (ref->refCount == 0) { deleteResourceReference(resource, ref); return; } } Loading @@ -180,7 +175,6 @@ void ResourceCache::destructor(SkiaShader* resource) { ref->destroyed = true; if (ref->refCount == 0) { deleteResourceReference(resource, ref); return; } } Loading @@ -195,7 +189,6 @@ void ResourceCache::destructor(SkiaColorFilter* resource) { ref->destroyed = true; if (ref->refCount == 0) { deleteResourceReference(resource, ref); return; } } Loading @@ -209,8 +202,7 @@ void ResourceCache::deleteResourceReference(void* resource, ResourceReference* r } if (ref->destroyed) { switch (ref->resourceType) { case kBitmap: { case kBitmap: { SkBitmap* bitmap = (SkBitmap*) resource; if (Caches::hasInstance()) { Caches::getInstance().textureCache.removeDeferred(bitmap); Loading @@ -218,8 +210,7 @@ void ResourceCache::deleteResourceReference(void* resource, ResourceReference* r delete bitmap; } break; case kPath: { case kPath: { SkPath* path = (SkPath*) resource; if (Caches::hasInstance()) { Caches::getInstance().pathCache.removeDeferred(path); Loading @@ -227,8 +218,7 @@ void ResourceCache::deleteResourceReference(void* resource, ResourceReference* r delete path; } break; case kShader: { case kShader: { SkiaShader* shader = (SkiaShader*) resource; if (Caches::hasInstance()) { Caches::getInstance().gradientCache.removeDeferred(shader->getSkShader()); Loading @@ -236,8 +226,7 @@ void ResourceCache::deleteResourceReference(void* resource, ResourceReference* r delete shader; } break; case kColorFilter: { case kColorFilter: { SkiaColorFilter* filter = (SkiaColorFilter*) resource; delete filter; } Loading libs/hwui/SkiaColorFilter.h +1 −1 File changed.Contains only whitespace changes. Show changes Loading
libs/hwui/DisplayListRenderer.cpp +25 −6 Original line number Diff line number Diff line Loading @@ -101,8 +101,14 @@ void DisplayList::clearResources() { } mBitmapResources.clear(); for (size_t i = 0; i < mFilterResources.size(); i++) { caches.resourceCache.decrementRefcount(mFilterResources.itemAt(i)); } mFilterResources.clear(); for (size_t i = 0; i < mShaders.size(); i++) { caches.resourceCache.decrementRefcount(mShaders.itemAt(i)); caches.resourceCache.destructor(mShaders.itemAt(i)); } mShaders.clear(); Loading Loading @@ -151,11 +157,18 @@ void DisplayList::initFromDisplayListRenderer(const DisplayListRenderer& recorde caches.resourceCache.incrementRefcount(resource); } const Vector<SkiaColorFilter*> &filterResources = recorder.getFilterResources(); for (size_t i = 0; i < filterResources.size(); i++) { SkiaColorFilter* resource = filterResources.itemAt(i); mFilterResources.add(resource); caches.resourceCache.incrementRefcount(resource); } const Vector<SkiaShader*> &shaders = recorder.getShaders(); for (size_t i = 0; i < shaders.size(); i++) { SkiaShader* shader = shaders.itemAt(i); mShaders.add(shader); caches.resourceCache.incrementRefcount(shader); SkiaShader* resource = shaders.itemAt(i); mShaders.add(resource); caches.resourceCache.incrementRefcount(resource); } const Vector<SkPaint*> &paints = recorder.getPaints(); Loading Loading @@ -873,11 +886,15 @@ void DisplayListRenderer::reset() { Caches& caches = Caches::getInstance(); for (size_t i = 0; i < mBitmapResources.size(); i++) { SkBitmap* resource = mBitmapResources.itemAt(i); caches.resourceCache.decrementRefcount(resource); caches.resourceCache.decrementRefcount(mBitmapResources.itemAt(i)); } mBitmapResources.clear(); for (size_t i = 0; i < mFilterResources.size(); i++) { caches.resourceCache.decrementRefcount(mFilterResources.itemAt(i)); } mFilterResources.clear(); for (size_t i = 0; i < mShaders.size(); i++) { caches.resourceCache.decrementRefcount(mShaders.itemAt(i)); } Loading @@ -886,8 +903,10 @@ void DisplayListRenderer::reset() { mPaints.clear(); mPaintMap.clear(); mPaths.clear(); mPathMap.clear(); mMatrices.clear(); } Loading
libs/hwui/DisplayListRenderer.h +6 −8 Original line number Diff line number Diff line Loading @@ -292,6 +292,10 @@ public: return mBitmapResources; } const Vector<SkiaColorFilter*>& getFilterResources() const { return mFilterResources; } const Vector<SkiaShader*>& getShaders() const { return mShaders; } Loading @@ -308,10 +312,6 @@ public: return mMatrices; } const Vector<SkiaColorFilter*>& getFilterResources() const { return mFilterResources; } private: void insertRestoreToCount() { if (mRestoreSaveCount >= 0) { Loading Loading @@ -431,8 +431,7 @@ private: // which doesn't seem worth the extra cycles for this unlikely case. addInt((int) bitmap); mBitmapResources.add(bitmap); Caches& caches = Caches::getInstance(); caches.resourceCache.incrementRefcount(bitmap); Caches::getInstance().resourceCache.incrementRefcount(bitmap); } inline void addShader(SkiaShader* shader) { Loading @@ -456,8 +455,7 @@ private: inline void addColorFilter(SkiaColorFilter* colorFilter) { addInt((int) colorFilter); mFilterResources.add(colorFilter); Caches& caches = Caches::getInstance(); caches.resourceCache.incrementRefcount(colorFilter); Caches::getInstance().resourceCache.incrementRefcount(colorFilter); } Vector<SkBitmap*> mBitmapResources; Loading
libs/hwui/ResourceCache.cpp +8 −19 Original line number Diff line number Diff line Loading @@ -48,9 +48,6 @@ ResourceCache::~ResourceCache() { void ResourceCache::incrementRefcount(void* resource, ResourceType resourceType) { Mutex::Autolock _l(mLock); for (size_t i = 0; i < mCache->size(); ++i) { void* ref = mCache->valueAt(i); } ResourceReference* ref = mCache->indexOfKey(resource) >= 0 ? mCache->valueFor(resource) : NULL; if (ref == NULL || mCache->size() == 0) { ref = new ResourceReference(resourceType); Loading Loading @@ -144,7 +141,6 @@ void ResourceCache::destructor(SkPath* resource) { ref->destroyed = true; if (ref->refCount == 0) { deleteResourceReference(resource, ref); return; } } Loading @@ -162,7 +158,6 @@ void ResourceCache::destructor(SkBitmap* resource) { ref->destroyed = true; if (ref->refCount == 0) { deleteResourceReference(resource, ref); return; } } Loading @@ -180,7 +175,6 @@ void ResourceCache::destructor(SkiaShader* resource) { ref->destroyed = true; if (ref->refCount == 0) { deleteResourceReference(resource, ref); return; } } Loading @@ -195,7 +189,6 @@ void ResourceCache::destructor(SkiaColorFilter* resource) { ref->destroyed = true; if (ref->refCount == 0) { deleteResourceReference(resource, ref); return; } } Loading @@ -209,8 +202,7 @@ void ResourceCache::deleteResourceReference(void* resource, ResourceReference* r } if (ref->destroyed) { switch (ref->resourceType) { case kBitmap: { case kBitmap: { SkBitmap* bitmap = (SkBitmap*) resource; if (Caches::hasInstance()) { Caches::getInstance().textureCache.removeDeferred(bitmap); Loading @@ -218,8 +210,7 @@ void ResourceCache::deleteResourceReference(void* resource, ResourceReference* r delete bitmap; } break; case kPath: { case kPath: { SkPath* path = (SkPath*) resource; if (Caches::hasInstance()) { Caches::getInstance().pathCache.removeDeferred(path); Loading @@ -227,8 +218,7 @@ void ResourceCache::deleteResourceReference(void* resource, ResourceReference* r delete path; } break; case kShader: { case kShader: { SkiaShader* shader = (SkiaShader*) resource; if (Caches::hasInstance()) { Caches::getInstance().gradientCache.removeDeferred(shader->getSkShader()); Loading @@ -236,8 +226,7 @@ void ResourceCache::deleteResourceReference(void* resource, ResourceReference* r delete shader; } break; case kColorFilter: { case kColorFilter: { SkiaColorFilter* filter = (SkiaColorFilter*) resource; delete filter; } Loading