--- 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;
}