From: Heeyong Song Date: Thu, 16 Jan 2020 05:55:02 +0000 (+0900) Subject: [Tizen] Remove the texture element from the load queue X-Git-Tag: accepted/tizen/5.5/unified/20200121.041230~1^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7028e4af75315b147f824eaf2365f98a54bd905c;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git [Tizen] Remove the texture element from the load queue The observer can be deleted before the load queue is processed. Remove the load element from the queue when the texture is removed. Change-Id: Id2242a84088486827e99a78f0923bde3863deaf8 --- diff --git a/dali-toolkit/internal/visuals/animated-image/fixed-image-cache.cpp b/dali-toolkit/internal/visuals/animated-image/fixed-image-cache.cpp index 2fbfee1..e64a51b 100644 --- a/dali-toolkit/internal/visuals/animated-image/fixed-image-cache.cpp +++ b/dali-toolkit/internal/visuals/animated-image/fixed-image-cache.cpp @@ -49,7 +49,7 @@ FixedImageCache::~FixedImageCache() { for( std::size_t i = 0; i < mImageUrls.size() ; ++i ) { - mTextureManager.Remove( mImageUrls[i].mTextureId ); + mTextureManager.Remove( mImageUrls[i].mTextureId, this ); } } } diff --git a/dali-toolkit/internal/visuals/animated-image/rolling-image-cache.cpp b/dali-toolkit/internal/visuals/animated-image/rolling-image-cache.cpp index 596ff88..c39be7e 100644 --- a/dali-toolkit/internal/visuals/animated-image/rolling-image-cache.cpp +++ b/dali-toolkit/internal/visuals/animated-image/rolling-image-cache.cpp @@ -75,7 +75,7 @@ RollingImageCache::~RollingImageCache() while( !mQueue.IsEmpty() ) { ImageFrame imageFrame = mQueue.PopFront(); - mTextureManager.Remove( mImageUrls[ imageFrame.mUrlIndex ].mTextureId ); + mTextureManager.Remove( mImageUrls[ imageFrame.mUrlIndex ].mTextureId, this ); } } } @@ -97,7 +97,7 @@ TextureSet RollingImageCache::NextFrame() TextureSet textureSet; ImageFrame imageFrame = mQueue.PopFront(); - mTextureManager.Remove( mImageUrls[ imageFrame.mUrlIndex ].mTextureId ); + mTextureManager.Remove( mImageUrls[ imageFrame.mUrlIndex ].mTextureId, this ); mImageUrls[ imageFrame.mUrlIndex ].mTextureId = TextureManager::INVALID_TEXTURE_ID; if( IsFrontReady() == true ) diff --git a/dali-toolkit/internal/visuals/image/image-visual.cpp b/dali-toolkit/internal/visuals/image/image-visual.cpp index e339995..1097194 100644 --- a/dali-toolkit/internal/visuals/image/image-visual.cpp +++ b/dali-toolkit/internal/visuals/image/image-visual.cpp @@ -227,7 +227,7 @@ ImageVisual::~ImageVisual() if( mMaskingData->mAlphaMaskId != TextureManager::INVALID_TEXTURE_ID ) { TextureManager& textureManager = mFactoryCache.GetTextureManager(); - textureManager.Remove( mMaskingData->mAlphaMaskId ); + textureManager.Remove( mMaskingData->mAlphaMaskId, this ); } } @@ -1012,7 +1012,7 @@ void ImageVisual::RemoveTexture() { if( mTextureId != TextureManager::INVALID_TEXTURE_ID ) { - mFactoryCache.GetTextureManager().Remove( mTextureId ); + mFactoryCache.GetTextureManager().Remove( mTextureId, this ); mTextureId = TextureManager::INVALID_TEXTURE_ID; } else diff --git a/dali-toolkit/internal/visuals/texture-manager-impl.cpp b/dali-toolkit/internal/visuals/texture-manager-impl.cpp index 4512a08..cd8434c 100644 --- a/dali-toolkit/internal/visuals/texture-manager-impl.cpp +++ b/dali-toolkit/internal/visuals/texture-manager-impl.cpp @@ -467,7 +467,7 @@ TextureManager::TextureId TextureManager::RequestLoadInternal( return textureId; } -void TextureManager::Remove( const TextureManager::TextureId textureId ) +void TextureManager::Remove( const TextureManager::TextureId textureId, TextureUploadObserver* observer ) { int textureInfoIndex = GetCacheIndexFromId( textureId ); if( textureInfoIndex != INVALID_INDEX ) @@ -475,9 +475,9 @@ void TextureManager::Remove( const TextureManager::TextureId textureId ) TextureInfo& textureInfo( mTextureInfoContainer[ textureInfoIndex ] ); DALI_LOG_INFO( gTextureManagerLogFilter, Debug::Concise, - "TextureManager::Remove(%d) url:%s\n cacheIdx:%d loadState:%s\n", + "TextureManager::Remove(%d) url:%s\n cacheIdx:%d loadState:%s reference count = %d\n", textureId, textureInfo.url.GetUrl().c_str(), - textureInfoIndex, GET_LOAD_STATE_STRING( textureInfo.loadState ) ); + textureInfoIndex, GET_LOAD_STATE_STRING( textureInfo.loadState ), textureInfo.referenceCount ); // Decrement the reference count and check if this is the last user of this Texture. if( --textureInfo.referenceCount <= 0 ) @@ -514,6 +514,19 @@ void TextureManager::Remove( const TextureManager::TextureId textureId ) mTextureInfoContainer.erase( mTextureInfoContainer.begin() + textureInfoIndex ); } } + + if( observer ) + { + // Remove element from the LoadQueue + for( auto&& element : mLoadQueue ) + { + if( element.mObserver == observer ) + { + mLoadQueue.Erase( &element ); + break; + } + } + } } } @@ -791,7 +804,7 @@ void TextureManager::AsyncLoadComplete( AsyncLoadingInfoContainerType& loadingCo } else { - Remove( textureInfo.textureId ); + Remove( textureInfo.textureId, nullptr ); } } } diff --git a/dali-toolkit/internal/visuals/texture-manager-impl.h b/dali-toolkit/internal/visuals/texture-manager-impl.h index b782517..0f812cd 100755 --- a/dali-toolkit/internal/visuals/texture-manager-impl.h +++ b/dali-toolkit/internal/visuals/texture-manager-impl.h @@ -309,8 +309,9 @@ public: * occurrence of a Texture will cause its removal internally. * * @param[in] textureId The ID of the Texture to remove. + * @param[in] textureObserver The texture observer. */ - void Remove( const TextureManager::TextureId textureId ); + void Remove( const TextureManager::TextureId textureId, TextureUploadObserver* textureObserver ); /** * @brief Get the visualUrl associated with the texture id.