diff -r f7ac710697a9 -r 06ff229162e9 src/hbservers/hbthemeserver/hbicondatacache_p.cpp --- a/src/hbservers/hbthemeserver/hbicondatacache_p.cpp Mon May 03 12:48:33 2010 +0300 +++ b/src/hbservers/hbthemeserver/hbicondatacache_p.cpp Fri May 14 16:09:54 2010 +0300 @@ -207,6 +207,7 @@ */ HbIconCacheItem* HbIconDataCache::getCacheItem(const HbIconKey &key , + HbRenderingMode currentRenderingMode, bool isMultiIconPiece) { HbIconCacheItem* item = 0; @@ -248,7 +249,7 @@ (goodMemory && !isMultiIconPiece)) { if (item->vectorIconData.type == NVG) { - HbIconCacheItemCreator::createCacheItem(*item, key); + HbIconCacheItemCreator::createCacheItem(*item, key, currentRenderingMode); if (item->rasterIconData.type != INVALID_FORMAT) { currentGpuCacheSize += item->rasterIconDataCost; } @@ -290,7 +291,7 @@ (item->rasterIconData.type == SGIMAGE)) { if ((item->vectorIconDataCost < (maxCpuCacheLimit - currentCpuCacheSize))) { - HbIconCacheItemCreator::createCacheItem(*item, key); + HbIconCacheItemCreator::createCacheItem(*item, key, currentRenderingMode); if (item->vectorIconData.type != INVALID_FORMAT) { currentCpuCacheSize += item->vectorIconDataCost; } @@ -792,6 +793,36 @@ } else { createGpuCacheSpace(gpuLruListSize); } + + // Iterate through the cache and remove any active SgImages, before the context + // is destroyed. + QHash::const_iterator itEnd(cache->constEnd()); + for (QHash < HbIconKey, + HbIconCacheItem* >::const_iterator iter = cache->constBegin(); + iter != itEnd; + ++iter) { + HbIconCacheItem* temp = iter.value(); + if( temp->rasterIconData.type == SGIMAGE ){ +#ifdef HB_SGIMAGE_ICON + HbSgImageRenderer::removeSgImageFromHash(temp->rasterIconData.sgImageData.id); +#endif + temp->rasterIconData.type = INVALID_FORMAT; + temp->gpuLink.setNext(0); + temp->gpuLink.setPrev(0); + currentGpuCacheSize -= temp->rasterIconDataCost; + } + } + +} + +/*! + \fn HbIconDataCache::freeUnusedGpuResources() + This function internally calls createGpuCacheSpace() which will free up + all the unused sgImage icons. + */ +void HbIconDataCache::freeUnusedGpuResources() +{ + createGpuCacheSpace(gpuLruListSize); } QVector HbIconDataCache::getKeys(const QString &filename) const