uiacceltk/hitchcock/coretoolkit/src/HuiCanvasTextureCache.cpp
branchRCL_3
changeset 19 e5af45d51884
parent 18 1801340c26a2
child 20 31fccae4f8a7
--- a/uiacceltk/hitchcock/coretoolkit/src/HuiCanvasTextureCache.cpp	Thu Aug 19 10:48:02 2010 +0300
+++ b/uiacceltk/hitchcock/coretoolkit/src/HuiCanvasTextureCache.cpp	Tue Aug 31 16:07:35 2010 +0300
@@ -3043,9 +3043,8 @@
 //
 void CHuiCanvasTextureCache::HandleOutOfTextureMemory()
     {
-#ifdef HUI_DEBUG_PRINT_CANVAS_TEXTURE_CACHE
-    RDebug::Print(_L("CHuiCanvasTextureCache::HandleOutOfTextureMemory"));
-#endif
+    RDebug::Print(_L("CHuiCanvasTextureCache::HandleOutOfTextureMemory: Out of memory happened !"));
+
     DeleteAllReleasedEntries(EFalse);    
     
     // TODO: Who you gonna call when texture memory is full and we cannot ourself
@@ -3139,41 +3138,40 @@
     {
     // 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
-    for(TInt i = iCachedTexts.Count() - 1; i >= 0; i--)
+    RPointerArray<CHuiCanvasTextImage> textEntries;
+    
+    FindUnusedTextEntries(textEntries);
+
+    for(TInt i=textEntries.Count() - 1; i >= 0; i--)
         {
-        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;
-            }
-        }
+        TSize textureSize = textEntries[i]->iTexture->Size();    
+        totalUnusedTextureBytes += textureSize.iWidth * textureSize.iHeight * KHuiCanvasTextEstimatedBpp/8.f;
+        }            
+    
+    textEntries.Close();        
+
+    // Images
+    RPointerArray<CHuiCanvasGraphicImage> imageEntries;
     
-    // Images, just like texts.
-    for(TInt i = iCachedImages.Count() - 1; i >= 0; i--)
+    FindUnusedImageEntries(imageEntries);
+
+    for(TInt i=imageEntries.Count() - 1; i >= 0; i--)
         {
-        CHuiCanvasGraphicImage* entry = iCachedImages[i];    
-        if (!entry->iActiveUsers.Count())
+        TBool is16bit = EFalse;
+        if (imageEntries[i]->iBitmap && !imageEntries[i]->iMask && imageEntries[i]->iBitmap->ExtendedBitmapType() == KNullUid &&imageEntries[i]->iBitmap->DisplayMode() == EColor64K)
             {
-            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);
+            is16bit = ETrue;
             }
-        }
-
+
+        TSize textureSize = imageEntries[i]->iTexture->Size();    
+        totalUnusedTextureBytes += textureSize.iWidth * textureSize.iHeight * (is16bit ? KHuiCanvasImageEstimatedBpp/16.f : KHuiCanvasImageEstimatedBpp/8.f);
+        }            
+    
+    imageEntries.Close();        
+    
     return totalUnusedTextureBytes/1024;
     }