--- a/uiacceltk/hitchcock/coretoolkit/src/HuiCanvasTextureCache.cpp Tue Aug 31 16:07:35 2010 +0300
+++ b/uiacceltk/hitchcock/coretoolkit/src/HuiCanvasTextureCache.cpp Wed Sep 01 12:16:53 2010 +0100
@@ -3043,8 +3043,9 @@
//
void CHuiCanvasTextureCache::HandleOutOfTextureMemory()
{
- RDebug::Print(_L("CHuiCanvasTextureCache::HandleOutOfTextureMemory: Out of memory happened !"));
-
+#ifdef HUI_DEBUG_PRINT_CANVAS_TEXTURE_CACHE
+ RDebug::Print(_L("CHuiCanvasTextureCache::HandleOutOfTextureMemory"));
+#endif
DeleteAllReleasedEntries(EFalse);
// TODO: Who you gonna call when texture memory is full and we cannot ourself
@@ -3138,40 +3139,41 @@
{
// TODO: This should handle NVG textures
+ // No need to fetch only the unused texture entries to a separate binary
+ // ordered tree (with FindUnusedEntries()), just going the cached
+ // texts & images through once is enough.
TInt totalUnusedTextureBytes = 0;
+ TSize textureSize(0,0);
// Texts
- RPointerArray<CHuiCanvasTextImage> textEntries;
-
- FindUnusedTextEntries(textEntries);
-
- for(TInt i=textEntries.Count() - 1; i >= 0; i--)
+ for(TInt i = iCachedTexts.Count() - 1; i >= 0; i--)
{
- TSize textureSize = textEntries[i]->iTexture->Size();
- totalUnusedTextureBytes += textureSize.iWidth * textureSize.iHeight * KHuiCanvasTextEstimatedBpp/8.f;
- }
-
- textEntries.Close();
-
- // Images
- RPointerArray<CHuiCanvasGraphicImage> imageEntries;
+ CHuiCanvasTextImage* entry = iCachedTexts[i];
+ // Check if the texture is being used..
+ if (!entry->iActiveUsers.Count())
+ {
+ // ..and if not, add it to the sum.
+ textureSize = entry->iTexture->Size();
+ totalUnusedTextureBytes += textureSize.iWidth * textureSize.iHeight * KHuiCanvasTextEstimatedBpp/8.f;
+ }
+ }
- FindUnusedImageEntries(imageEntries);
-
- for(TInt i=imageEntries.Count() - 1; i >= 0; i--)
+ // Images, just like texts.
+ for(TInt i = iCachedImages.Count() - 1; i >= 0; i--)
{
- TBool is16bit = EFalse;
- if (imageEntries[i]->iBitmap && !imageEntries[i]->iMask && imageEntries[i]->iBitmap->ExtendedBitmapType() == KNullUid &&imageEntries[i]->iBitmap->DisplayMode() == EColor64K)
+ CHuiCanvasGraphicImage* entry = iCachedImages[i];
+ if (!entry->iActiveUsers.Count())
{
- is16bit = ETrue;
+ TBool is16bit = EFalse;
+ if (entry->iBitmap && !entry->iMask && entry->iBitmap->ExtendedBitmapType() == KNullUid && entry->iBitmap->DisplayMode() == EColor64K)
+ {
+ is16bit = ETrue;
+ }
+ textureSize = entry->iTexture->Size();
+ totalUnusedTextureBytes += textureSize.iWidth * textureSize.iHeight * (is16bit ? KHuiCanvasImageEstimatedBpp/16.f : KHuiCanvasImageEstimatedBpp/8.f);
}
-
- TSize textureSize = imageEntries[i]->iTexture->Size();
- totalUnusedTextureBytes += textureSize.iWidth * textureSize.iHeight * (is16bit ? KHuiCanvasImageEstimatedBpp/16.f : KHuiCanvasImageEstimatedBpp/8.f);
- }
-
- imageEntries.Close();
-
+ }
+
return totalUnusedTextureBytes/1024;
}