X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fvisuals%2Ftexture-manager.cpp;h=b125a9eb8f3ab73e761b4c5e6aab96481b145bec;hp=7334b48267eca4a53b6bd3570d9d4b77376c2fb1;hb=46322a558e537267a6d3c48630c45afca91b5e27;hpb=de0c0ef70719409ce6accc801ff664612a96495e diff --git a/dali-toolkit/internal/visuals/texture-manager.cpp b/dali-toolkit/internal/visuals/texture-manager.cpp index 7334b48..b125a9e 100644 --- a/dali-toolkit/internal/visuals/texture-manager.cpp +++ b/dali-toolkit/internal/visuals/texture-manager.cpp @@ -169,9 +169,8 @@ TextureManager::TextureId TextureManager::RequestLoadInternal( { // The Texture has already loaded. The other observers have already been notified. // We need to send a "late" loaded notification for this observer. - observer->UploadComplete( true, - textureInfo.textureSet, textureInfo.useAtlas, - textureInfo.atlasRect ); + observer->UploadComplete( true, textureInfo.textureId, textureInfo.textureSet, + textureInfo.useAtlas, textureInfo.atlasRect ); } break; } @@ -201,7 +200,6 @@ void TextureManager::Remove( const TextureManager::TextureId textureId ) { TextureInfo& textureInfo( mTextureInfoContainer[ textureInfoIndex ] ); - DALI_LOG_INFO( gTextureManagerLogFilter, Debug::Concise, "TextureManager::Remove(%d) cacheIdx:%d loadState:%s\n", textureId, textureInfoIndex, textureInfo.loadState == TextureManager::NOT_STARTED ? "NOT_STARTED" : @@ -483,8 +481,8 @@ void TextureManager::NotifyObservers( TextureInfo& textureInfo, bool success ) { TextureId textureId = textureInfo.textureId; - // If there is an observer: Notify the load is complete, whether successful or not: - // And erase it from the list + // If there is an observer: Notify the load is complete, whether successful or not, + // and erase it from the list unsigned int observerCount = textureInfo.observerList.Count(); TextureInfo* info = &textureInfo; @@ -492,26 +490,29 @@ void TextureManager::NotifyObservers( TextureInfo& textureInfo, bool success ) { TextureUploadObserver* observer = info->observerList[0]; - // During UploadComplete() a Control ResourceReady() signal is emitted - // During that signal the app may add remove /add Textures (e.g. via ImageViews). - // At this point no more observers can be added to the observerList, because textureInfo.loadState = UPLOADED - // However it is possible for observers to be removed, hence we check the observer list count every iteration - - // Also the reference to the textureInfo struct can become invalidated, because new load requests can modify - // the mTextureInfoContainer list (e.g. if more requests are pushed_back it can cause the list to be resized - // invalidating the reference to the TextureInfo ). - observer->UploadComplete( success, info->textureSet, info->useAtlas, info->atlasRect ); + // During UploadComplete() a Control ResourceReady() signal is emitted. + // During that signal the app may add remove /add Textures (e.g. via + // ImageViews). At this point no more observers can be added to the + // observerList, because textureInfo.loadState = UPLOADED. However it is + // possible for observers to be removed, hence we check the observer list + // count every iteration. + + // The reference to the textureInfo struct can also become invalidated, + // because new load requests can modify the mTextureInfoContainer list + // (e.g. if more requests are pushed back it can cause the list to be + // resized invalidating the reference to the TextureInfo ). + observer->UploadComplete( success, info->textureId, info->textureSet, info->useAtlas, info->atlasRect ); observer->DestructionSignal().Disconnect( this, &TextureManager::ObserverDestroyed ); - // regrab the textureInfo from the container as it may have been invalidated, if textures have been removed - // or added during the ResourceReady() signal emission (from UploadComplete() ) - int textureInfoIndex = GetCacheIndexFromId( textureId ); + // Get the textureInfo from the container again as it may have been + // invalidated, + int textureInfoIndex = GetCacheIndexFromId( textureId ); if( textureInfoIndex == INVALID_CACHE_INDEX) { - // texture has been removed - return; + return; // texture has been removed - can stop. } + info = &mTextureInfoContainer[ textureInfoIndex ]; observerCount = info->observerList.Count(); if ( observerCount > 0 ) @@ -524,15 +525,12 @@ void TextureManager::NotifyObservers( TextureInfo& textureInfo, bool success ) info->observerList.Erase( j ); observerCount--; break; - } + } } } - } - } - TextureManager::TextureId TextureManager::GenerateUniqueTextureId() { return mCurrentTextureId++;