ResourceCache.cpp revision 8dcfd5e836341b4a803b04d104a930bb312182d3
15c13d89c1332fcc499379b9064b891187b75ca32Chet Haase/* 25c13d89c1332fcc499379b9064b891187b75ca32Chet Haase * Copyright (C) 2010 The Android Open Source Project 35c13d89c1332fcc499379b9064b891187b75ca32Chet Haase * 45c13d89c1332fcc499379b9064b891187b75ca32Chet Haase * Licensed under the Apache License, Version 2.0 (the "License"); 55c13d89c1332fcc499379b9064b891187b75ca32Chet Haase * you may not use this file except in compliance with the License. 65c13d89c1332fcc499379b9064b891187b75ca32Chet Haase * You may obtain a copy of the License at 75c13d89c1332fcc499379b9064b891187b75ca32Chet Haase * 85c13d89c1332fcc499379b9064b891187b75ca32Chet Haase * http://www.apache.org/licenses/LICENSE-2.0 95c13d89c1332fcc499379b9064b891187b75ca32Chet Haase * 105c13d89c1332fcc499379b9064b891187b75ca32Chet Haase * Unless required by applicable law or agreed to in writing, software 115c13d89c1332fcc499379b9064b891187b75ca32Chet Haase * distributed under the License is distributed on an "AS IS" BASIS, 125c13d89c1332fcc499379b9064b891187b75ca32Chet Haase * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135c13d89c1332fcc499379b9064b891187b75ca32Chet Haase * See the License for the specific language governing permissions and 145c13d89c1332fcc499379b9064b891187b75ca32Chet Haase * limitations under the License. 155c13d89c1332fcc499379b9064b891187b75ca32Chet Haase */ 165c13d89c1332fcc499379b9064b891187b75ca32Chet Haase 175c13d89c1332fcc499379b9064b891187b75ca32Chet Haase#include <SkPixelRef.h> 185c13d89c1332fcc499379b9064b891187b75ca32Chet Haase#include "ResourceCache.h" 195c13d89c1332fcc499379b9064b891187b75ca32Chet Haase#include "Caches.h" 205c13d89c1332fcc499379b9064b891187b75ca32Chet Haase 215c13d89c1332fcc499379b9064b891187b75ca32Chet Haasenamespace android { 225c13d89c1332fcc499379b9064b891187b75ca32Chet Haasenamespace uirenderer { 235c13d89c1332fcc499379b9064b891187b75ca32Chet Haase 245c13d89c1332fcc499379b9064b891187b75ca32Chet Haase/////////////////////////////////////////////////////////////////////////////// 255c13d89c1332fcc499379b9064b891187b75ca32Chet Haase// Resource cache 265c13d89c1332fcc499379b9064b891187b75ca32Chet Haase/////////////////////////////////////////////////////////////////////////////// 275c13d89c1332fcc499379b9064b891187b75ca32Chet Haase 285c13d89c1332fcc499379b9064b891187b75ca32Chet Haasevoid ResourceCache::logCache() { 295baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD("ResourceCache: cacheReport:"); 305c13d89c1332fcc499379b9064b891187b75ca32Chet Haase for (size_t i = 0; i < mCache->size(); ++i) { 315c13d89c1332fcc499379b9064b891187b75ca32Chet Haase ResourceReference* ref = mCache->valueAt(i); 325baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD(" ResourceCache: mCache(%d): resource, ref = 0x%p, 0x%p", 335c13d89c1332fcc499379b9064b891187b75ca32Chet Haase i, mCache->keyAt(i), mCache->valueAt(i)); 345baa3a62a97544669fba6d65a11c07f252e654ddSteve Block ALOGD(" ResourceCache: mCache(%d): refCount, recycled, destroyed, type = %d, %d, %d, %d", 355c13d89c1332fcc499379b9064b891187b75ca32Chet Haase i, ref->refCount, ref->recycled, ref->destroyed, ref->resourceType); 365c13d89c1332fcc499379b9064b891187b75ca32Chet Haase } 375c13d89c1332fcc499379b9064b891187b75ca32Chet Haase} 385c13d89c1332fcc499379b9064b891187b75ca32Chet Haase 395c13d89c1332fcc499379b9064b891187b75ca32Chet HaaseResourceCache::ResourceCache() { 40e7d2295c06ef9b9df6336cbff23007a13fb3f6e4Chet Haase Mutex::Autolock _l(mLock); 415c13d89c1332fcc499379b9064b891187b75ca32Chet Haase mCache = new KeyedVector<void *, ResourceReference *>(); 425c13d89c1332fcc499379b9064b891187b75ca32Chet Haase} 435c13d89c1332fcc499379b9064b891187b75ca32Chet Haase 445c13d89c1332fcc499379b9064b891187b75ca32Chet HaaseResourceCache::~ResourceCache() { 45e7d2295c06ef9b9df6336cbff23007a13fb3f6e4Chet Haase Mutex::Autolock _l(mLock); 465c13d89c1332fcc499379b9064b891187b75ca32Chet Haase delete mCache; 475c13d89c1332fcc499379b9064b891187b75ca32Chet Haase} 485c13d89c1332fcc499379b9064b891187b75ca32Chet Haase 495c13d89c1332fcc499379b9064b891187b75ca32Chet Haasevoid ResourceCache::incrementRefcount(void* resource, ResourceType resourceType) { 50e7d2295c06ef9b9df6336cbff23007a13fb3f6e4Chet Haase Mutex::Autolock _l(mLock); 518dcfd5e836341b4a803b04d104a930bb312182d3Romain Guy ssize_t index = mCache->indexOfKey(resource); 528dcfd5e836341b4a803b04d104a930bb312182d3Romain Guy ResourceReference* ref = index >= 0 ? mCache->valueAt(index) : NULL; 535c13d89c1332fcc499379b9064b891187b75ca32Chet Haase if (ref == NULL || mCache->size() == 0) { 545c13d89c1332fcc499379b9064b891187b75ca32Chet Haase ref = new ResourceReference(resourceType); 555c13d89c1332fcc499379b9064b891187b75ca32Chet Haase mCache->add(resource, ref); 565c13d89c1332fcc499379b9064b891187b75ca32Chet Haase } 575c13d89c1332fcc499379b9064b891187b75ca32Chet Haase ref->refCount++; 585c13d89c1332fcc499379b9064b891187b75ca32Chet Haase} 595c13d89c1332fcc499379b9064b891187b75ca32Chet Haase 605c13d89c1332fcc499379b9064b891187b75ca32Chet Haasevoid ResourceCache::incrementRefcount(SkBitmap* bitmapResource) { 616062c5912dc79704b489fc8c289b78a400ed05eeDerek Sollenberger SkSafeRef(bitmapResource->pixelRef()); 626062c5912dc79704b489fc8c289b78a400ed05eeDerek Sollenberger SkSafeRef(bitmapResource->getColorTable()); 6349c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy incrementRefcount((void*) bitmapResource, kBitmap); 645c13d89c1332fcc499379b9064b891187b75ca32Chet Haase} 655c13d89c1332fcc499379b9064b891187b75ca32Chet Haase 665a7e828842c26f64bb6e0ef3e0019e1949b245eeChet Haasevoid ResourceCache::incrementRefcount(SkPath* pathResource) { 6749c5fc0b9e850497233e189ff9dcc71a78ebe6e7Romain Guy incrementRefcount((void*) pathResource, kPath); 685a7e828842c26f64bb6e0ef3e0019e1949b245eeChet Haase} 695a7e828842c26f64bb6e0ef3e0019e1949b245eeChet Haase 705c13d89c1332fcc499379b9064b891187b75ca32Chet Haasevoid ResourceCache::incrementRefcount(SkiaShader* shaderResource) { 716062c5912dc79704b489fc8c289b78a400ed05eeDerek Sollenberger SkSafeRef(shaderResource->getSkShader()); 7243ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy incrementRefcount((void*) shaderResource, kShader); 735c13d89c1332fcc499379b9064b891187b75ca32Chet Haase} 745c13d89c1332fcc499379b9064b891187b75ca32Chet Haase 75ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haasevoid ResourceCache::incrementRefcount(SkiaColorFilter* filterResource) { 766062c5912dc79704b489fc8c289b78a400ed05eeDerek Sollenberger SkSafeRef(filterResource->getSkColorFilter()); 7743ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy incrementRefcount((void*) filterResource, kColorFilter); 78ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase} 79ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase 805c13d89c1332fcc499379b9064b891187b75ca32Chet Haasevoid ResourceCache::decrementRefcount(void* resource) { 81e7d2295c06ef9b9df6336cbff23007a13fb3f6e4Chet Haase Mutex::Autolock _l(mLock); 828dcfd5e836341b4a803b04d104a930bb312182d3Romain Guy ssize_t index = mCache->indexOfKey(resource); 838dcfd5e836341b4a803b04d104a930bb312182d3Romain Guy ResourceReference* ref = index >= 0 ? mCache->valueAt(index) : NULL; 845c13d89c1332fcc499379b9064b891187b75ca32Chet Haase if (ref == NULL) { 855c13d89c1332fcc499379b9064b891187b75ca32Chet Haase // Should not get here - shouldn't get a call to decrement if we're not yet tracking it 865c13d89c1332fcc499379b9064b891187b75ca32Chet Haase return; 875c13d89c1332fcc499379b9064b891187b75ca32Chet Haase } 885c13d89c1332fcc499379b9064b891187b75ca32Chet Haase ref->refCount--; 895c13d89c1332fcc499379b9064b891187b75ca32Chet Haase if (ref->refCount == 0) { 905c13d89c1332fcc499379b9064b891187b75ca32Chet Haase deleteResourceReference(resource, ref); 915c13d89c1332fcc499379b9064b891187b75ca32Chet Haase } 925c13d89c1332fcc499379b9064b891187b75ca32Chet Haase} 935c13d89c1332fcc499379b9064b891187b75ca32Chet Haase 945c13d89c1332fcc499379b9064b891187b75ca32Chet Haasevoid ResourceCache::decrementRefcount(SkBitmap* bitmapResource) { 956062c5912dc79704b489fc8c289b78a400ed05eeDerek Sollenberger SkSafeUnref(bitmapResource->pixelRef()); 966062c5912dc79704b489fc8c289b78a400ed05eeDerek Sollenberger SkSafeUnref(bitmapResource->getColorTable()); 9743ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy decrementRefcount((void*) bitmapResource); 985c13d89c1332fcc499379b9064b891187b75ca32Chet Haase} 995c13d89c1332fcc499379b9064b891187b75ca32Chet Haase 1005a7e828842c26f64bb6e0ef3e0019e1949b245eeChet Haasevoid ResourceCache::decrementRefcount(SkPath* pathResource) { 1015a7e828842c26f64bb6e0ef3e0019e1949b245eeChet Haase decrementRefcount((void*) pathResource); 1025a7e828842c26f64bb6e0ef3e0019e1949b245eeChet Haase} 1035a7e828842c26f64bb6e0ef3e0019e1949b245eeChet Haase 1045c13d89c1332fcc499379b9064b891187b75ca32Chet Haasevoid ResourceCache::decrementRefcount(SkiaShader* shaderResource) { 1056062c5912dc79704b489fc8c289b78a400ed05eeDerek Sollenberger SkSafeUnref(shaderResource->getSkShader()); 10643ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy decrementRefcount((void*) shaderResource); 1075c13d89c1332fcc499379b9064b891187b75ca32Chet Haase} 1085c13d89c1332fcc499379b9064b891187b75ca32Chet Haase 109ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haasevoid ResourceCache::decrementRefcount(SkiaColorFilter* filterResource) { 1106062c5912dc79704b489fc8c289b78a400ed05eeDerek Sollenberger SkSafeUnref(filterResource->getSkColorFilter()); 11143ccf4663c822ddd435b7683cc05221f6169c6c3Romain Guy decrementRefcount((void*) filterResource); 112ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase} 113ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase 1145c13d89c1332fcc499379b9064b891187b75ca32Chet Haasevoid ResourceCache::recycle(SkBitmap* resource) { 115e7d2295c06ef9b9df6336cbff23007a13fb3f6e4Chet Haase Mutex::Autolock _l(mLock); 1168dcfd5e836341b4a803b04d104a930bb312182d3Romain Guy ssize_t index = mCache->indexOfKey(resource); 1178dcfd5e836341b4a803b04d104a930bb312182d3Romain Guy if (index < 0) { 1185c13d89c1332fcc499379b9064b891187b75ca32Chet Haase // not tracking this resource; just recycle the pixel data 1195c13d89c1332fcc499379b9064b891187b75ca32Chet Haase resource->setPixels(NULL, NULL); 1205c13d89c1332fcc499379b9064b891187b75ca32Chet Haase return; 1215c13d89c1332fcc499379b9064b891187b75ca32Chet Haase } 1228dcfd5e836341b4a803b04d104a930bb312182d3Romain Guy ResourceReference* ref = mCache->valueAt(index); 1235c13d89c1332fcc499379b9064b891187b75ca32Chet Haase if (ref == NULL) { 1245c13d89c1332fcc499379b9064b891187b75ca32Chet Haase // Should not get here - shouldn't get a call to recycle if we're not yet tracking it 1255c13d89c1332fcc499379b9064b891187b75ca32Chet Haase return; 1265c13d89c1332fcc499379b9064b891187b75ca32Chet Haase } 1275c13d89c1332fcc499379b9064b891187b75ca32Chet Haase ref->recycled = true; 1285c13d89c1332fcc499379b9064b891187b75ca32Chet Haase if (ref->refCount == 0) { 1295c13d89c1332fcc499379b9064b891187b75ca32Chet Haase deleteResourceReference(resource, ref); 1305c13d89c1332fcc499379b9064b891187b75ca32Chet Haase } 1315c13d89c1332fcc499379b9064b891187b75ca32Chet Haase} 1325c13d89c1332fcc499379b9064b891187b75ca32Chet Haase 1335a7e828842c26f64bb6e0ef3e0019e1949b245eeChet Haasevoid ResourceCache::destructor(SkPath* resource) { 1345a7e828842c26f64bb6e0ef3e0019e1949b245eeChet Haase Mutex::Autolock _l(mLock); 1358dcfd5e836341b4a803b04d104a930bb312182d3Romain Guy ssize_t index = mCache->indexOfKey(resource); 1368dcfd5e836341b4a803b04d104a930bb312182d3Romain Guy ResourceReference* ref = index >= 0 ? mCache->valueAt(index) : NULL; 1375a7e828842c26f64bb6e0ef3e0019e1949b245eeChet Haase if (ref == NULL) { 1385a7e828842c26f64bb6e0ef3e0019e1949b245eeChet Haase // If we're not tracking this resource, just delete it 1395a7e828842c26f64bb6e0ef3e0019e1949b245eeChet Haase if (Caches::hasInstance()) { 1405a7e828842c26f64bb6e0ef3e0019e1949b245eeChet Haase Caches::getInstance().pathCache.removeDeferred(resource); 1415a7e828842c26f64bb6e0ef3e0019e1949b245eeChet Haase } 1425a7e828842c26f64bb6e0ef3e0019e1949b245eeChet Haase delete resource; 1435a7e828842c26f64bb6e0ef3e0019e1949b245eeChet Haase return; 1445a7e828842c26f64bb6e0ef3e0019e1949b245eeChet Haase } 1455a7e828842c26f64bb6e0ef3e0019e1949b245eeChet Haase ref->destroyed = true; 1465a7e828842c26f64bb6e0ef3e0019e1949b245eeChet Haase if (ref->refCount == 0) { 1475a7e828842c26f64bb6e0ef3e0019e1949b245eeChet Haase deleteResourceReference(resource, ref); 1485a7e828842c26f64bb6e0ef3e0019e1949b245eeChet Haase } 1495a7e828842c26f64bb6e0ef3e0019e1949b245eeChet Haase} 1505a7e828842c26f64bb6e0ef3e0019e1949b245eeChet Haase 1515c13d89c1332fcc499379b9064b891187b75ca32Chet Haasevoid ResourceCache::destructor(SkBitmap* resource) { 152e7d2295c06ef9b9df6336cbff23007a13fb3f6e4Chet Haase Mutex::Autolock _l(mLock); 1538dcfd5e836341b4a803b04d104a930bb312182d3Romain Guy ssize_t index = mCache->indexOfKey(resource); 1548dcfd5e836341b4a803b04d104a930bb312182d3Romain Guy ResourceReference* ref = index >= 0 ? mCache->valueAt(index) : NULL; 1555c13d89c1332fcc499379b9064b891187b75ca32Chet Haase if (ref == NULL) { 1565c13d89c1332fcc499379b9064b891187b75ca32Chet Haase // If we're not tracking this resource, just delete it 1575c13d89c1332fcc499379b9064b891187b75ca32Chet Haase if (Caches::hasInstance()) { 158fe48f65922d4a3cc4aefe058cee5acec51504a20Romain Guy Caches::getInstance().textureCache.removeDeferred(resource); 1595c13d89c1332fcc499379b9064b891187b75ca32Chet Haase } 1605c13d89c1332fcc499379b9064b891187b75ca32Chet Haase delete resource; 1615c13d89c1332fcc499379b9064b891187b75ca32Chet Haase return; 1625c13d89c1332fcc499379b9064b891187b75ca32Chet Haase } 1635c13d89c1332fcc499379b9064b891187b75ca32Chet Haase ref->destroyed = true; 1645c13d89c1332fcc499379b9064b891187b75ca32Chet Haase if (ref->refCount == 0) { 1655c13d89c1332fcc499379b9064b891187b75ca32Chet Haase deleteResourceReference(resource, ref); 1665c13d89c1332fcc499379b9064b891187b75ca32Chet Haase } 1675c13d89c1332fcc499379b9064b891187b75ca32Chet Haase} 1685c13d89c1332fcc499379b9064b891187b75ca32Chet Haase 1695c13d89c1332fcc499379b9064b891187b75ca32Chet Haasevoid ResourceCache::destructor(SkiaShader* resource) { 170e7d2295c06ef9b9df6336cbff23007a13fb3f6e4Chet Haase Mutex::Autolock _l(mLock); 1718dcfd5e836341b4a803b04d104a930bb312182d3Romain Guy ssize_t index = mCache->indexOfKey(resource); 1728dcfd5e836341b4a803b04d104a930bb312182d3Romain Guy ResourceReference* ref = index >= 0 ? mCache->valueAt(index) : NULL; 1735c13d89c1332fcc499379b9064b891187b75ca32Chet Haase if (ref == NULL) { 1745c13d89c1332fcc499379b9064b891187b75ca32Chet Haase // If we're not tracking this resource, just delete it 1755c13d89c1332fcc499379b9064b891187b75ca32Chet Haase delete resource; 1765c13d89c1332fcc499379b9064b891187b75ca32Chet Haase return; 1775c13d89c1332fcc499379b9064b891187b75ca32Chet Haase } 1785c13d89c1332fcc499379b9064b891187b75ca32Chet Haase ref->destroyed = true; 1795c13d89c1332fcc499379b9064b891187b75ca32Chet Haase if (ref->refCount == 0) { 1805c13d89c1332fcc499379b9064b891187b75ca32Chet Haase deleteResourceReference(resource, ref); 1815c13d89c1332fcc499379b9064b891187b75ca32Chet Haase } 1825c13d89c1332fcc499379b9064b891187b75ca32Chet Haase} 1835c13d89c1332fcc499379b9064b891187b75ca32Chet Haase 184ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haasevoid ResourceCache::destructor(SkiaColorFilter* resource) { 185e7d2295c06ef9b9df6336cbff23007a13fb3f6e4Chet Haase Mutex::Autolock _l(mLock); 1868dcfd5e836341b4a803b04d104a930bb312182d3Romain Guy ssize_t index = mCache->indexOfKey(resource); 1878dcfd5e836341b4a803b04d104a930bb312182d3Romain Guy ResourceReference* ref = index >= 0 ? mCache->valueAt(index) : NULL; 188ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase if (ref == NULL) { 189ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase // If we're not tracking this resource, just delete it 190ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase delete resource; 191ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase return; 192ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase } 193ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase ref->destroyed = true; 194ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase if (ref->refCount == 0) { 195ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase deleteResourceReference(resource, ref); 196ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase } 197ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase} 198ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase 199e7d2295c06ef9b9df6336cbff23007a13fb3f6e4Chet Haase/** 200e7d2295c06ef9b9df6336cbff23007a13fb3f6e4Chet Haase * This method should only be called while the mLock mutex is held (that mutex is grabbed 201e7d2295c06ef9b9df6336cbff23007a13fb3f6e4Chet Haase * by the various destructor() and recycle() methods which call this method). 202e7d2295c06ef9b9df6336cbff23007a13fb3f6e4Chet Haase */ 2035c13d89c1332fcc499379b9064b891187b75ca32Chet Haasevoid ResourceCache::deleteResourceReference(void* resource, ResourceReference* ref) { 2045c13d89c1332fcc499379b9064b891187b75ca32Chet Haase if (ref->recycled && ref->resourceType == kBitmap) { 2055c13d89c1332fcc499379b9064b891187b75ca32Chet Haase ((SkBitmap*) resource)->setPixels(NULL, NULL); 2065c13d89c1332fcc499379b9064b891187b75ca32Chet Haase } 2075c13d89c1332fcc499379b9064b891187b75ca32Chet Haase if (ref->destroyed) { 2085c13d89c1332fcc499379b9064b891187b75ca32Chet Haase switch (ref->resourceType) { 209d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy case kBitmap: { 210d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy SkBitmap* bitmap = (SkBitmap*) resource; 2115c13d89c1332fcc499379b9064b891187b75ca32Chet Haase if (Caches::hasInstance()) { 212fe48f65922d4a3cc4aefe058cee5acec51504a20Romain Guy Caches::getInstance().textureCache.removeDeferred(bitmap); 2135c13d89c1332fcc499379b9064b891187b75ca32Chet Haase } 2145c13d89c1332fcc499379b9064b891187b75ca32Chet Haase delete bitmap; 2155c13d89c1332fcc499379b9064b891187b75ca32Chet Haase } 2165c13d89c1332fcc499379b9064b891187b75ca32Chet Haase break; 217d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy case kPath: { 218d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy SkPath* path = (SkPath*) resource; 2195a7e828842c26f64bb6e0ef3e0019e1949b245eeChet Haase if (Caches::hasInstance()) { 2205a7e828842c26f64bb6e0ef3e0019e1949b245eeChet Haase Caches::getInstance().pathCache.removeDeferred(path); 2215a7e828842c26f64bb6e0ef3e0019e1949b245eeChet Haase } 2225a7e828842c26f64bb6e0ef3e0019e1949b245eeChet Haase delete path; 2235a7e828842c26f64bb6e0ef3e0019e1949b245eeChet Haase } 2245a7e828842c26f64bb6e0ef3e0019e1949b245eeChet Haase break; 225d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy case kShader: { 226d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy SkiaShader* shader = (SkiaShader*) resource; 2275c13d89c1332fcc499379b9064b891187b75ca32Chet Haase delete shader; 228ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase } 229ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase break; 230d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy case kColorFilter: { 231d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868Romain Guy SkiaColorFilter* filter = (SkiaColorFilter*) resource; 232ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase delete filter; 233ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase } 234ad93c2bb63dfc813b2eefa1043aa63afbddce655Chet Haase break; 2355c13d89c1332fcc499379b9064b891187b75ca32Chet Haase } 2365c13d89c1332fcc499379b9064b891187b75ca32Chet Haase } 2375c13d89c1332fcc499379b9064b891187b75ca32Chet Haase mCache->removeItem(resource); 2385c13d89c1332fcc499379b9064b891187b75ca32Chet Haase delete ref; 2395c13d89c1332fcc499379b9064b891187b75ca32Chet Haase} 2405c13d89c1332fcc499379b9064b891187b75ca32Chet Haase 2415c13d89c1332fcc499379b9064b891187b75ca32Chet Haase}; // namespace uirenderer 2425c13d89c1332fcc499379b9064b891187b75ca32Chet Haase}; // namespace android 243