uiacceltk/hitchcock/coretoolkit/src/HuiCanvasTextureCache.cpp
branchRCL_3
changeset 63 e1987ab3768a
parent 52 31fccae4f8a7
--- a/uiacceltk/hitchcock/coretoolkit/src/HuiCanvasTextureCache.cpp	Wed Sep 15 13:12:27 2010 +0300
+++ b/uiacceltk/hitchcock/coretoolkit/src/HuiCanvasTextureCache.cpp	Wed Oct 13 15:34:15 2010 +0300
@@ -2651,9 +2651,9 @@
 				RDebug::Print(_L("EGL Profiling: total mem available: %d"), prof_data[i++]);
 				break;
 				}
-		    case EGL_PROF_THREAD_ID_NOK:
+		    case EGL_PROF_PROCESS_ID_NOK:
                 {
-                if (sizeof(EGLNativeThreadIdTypeNOK) == 8)
+                if (sizeof(EGLNativeProcessIdTypeNOK) == 8)
                     {
                     i+=2;
                     }
@@ -2663,8 +2663,8 @@
                     }
                 break;
                 }
-            case EGL_PROF_THREAD_USED_PRIVATE_MEMORY_NOK:
-            case EGL_PROF_THREAD_USED_SHARED_MEMORY_NOK:
+            case EGL_PROF_PROCESS_USED_PRIVATE_MEMORY_NOK:
+            case EGL_PROF_PROCESS_USED_SHARED_MEMORY_NOK:
 			default:
 				{
                 i++;
@@ -3046,6 +3046,16 @@
 #ifdef HUI_DEBUG_PRINT_CANVAS_TEXTURE_CACHE
     RDebug::Print(_L("CHuiCanvasTextureCache::HandleOutOfTextureMemory"));
 #endif
+    
+    iHasReleasedTexts = ETrue;
+    iHasReleasedImages = ETrue;
+    iHasReleasedRenderBuffers = ETrue;
+
+    // Clear all unused textures - these will be updated later
+    iUnusedCanvasTextTextureCacheSizeInKBytes = 0;
+    iUnusedCanvasImageTextureCacheSizeInKBytes = 0;  
+    iUnusedCanvasRenderBufferCacheSizeInKBytes = 0;
+            
     DeleteAllReleasedEntries(EFalse);    
     
     // TODO: Who you gonna call when texture memory is full and we cannot ourself
@@ -3074,6 +3084,14 @@
         // Calculate how much there is space for unused textures 
         TInt availableCacheSizeInKBytes = iMaxTextureMemoryInKBytes - (totalUsedTextureMemoryInKBytes - totalUnusedCanvasTextureMemoryUsageInKBytes);
 
+        // If there is too much unused, release some textures from cache
+        if ( availableCacheSizeInKBytes < totalUnusedCanvasTextureMemoryUsageInKBytes )
+            {
+            iHasReleasedTexts = ETrue;
+            iHasReleasedImages = ETrue;
+            iHasReleasedRenderBuffers = ETrue;
+            }
+
         // Divide available space for unused textures between texts and images using defined ratio
         if (availableCacheSizeInKBytes > 0)
             {