diff -r eaa079afe64c -r e1987ab3768a uiacceltk/hitchcock/coretoolkit/src/HuiCanvasTextureCache.cpp --- 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) {