Refactoring TextureManager cache as Dali::FreeList 69/270969/53
authorEunki, Hong <eunkiki.hong@samsung.com>
Fri, 11 Feb 2022 13:36:39 +0000 (22:36 +0900)
committerEunki, Hong <eunkiki.hong@samsung.com>
Fri, 29 Apr 2022 14:07:14 +0000 (23:07 +0900)
commitb33712a17095254f5a42eb2458c7e2f840fd8a13
tree898ae4af4f68dcc13b0e95f9c5de55bdc3a3cdce
parent83f07832660fe04b89a0e20945041721bff43748
Refactoring TextureManager cache as Dali::FreeList

Apply additional container as Dali::FreeList as TextureIdConverter;
From TextureId to TextureCacheIndex.
and add mTextureHashContainer, key is TextureHash and value is list of TextureId.
These things will make us access mTextureInfoContainer more faster.

Previous code iterate whole std::vector list to find cached texture.
This patch make we can get cacheIndex from textureId as O(1) by Dali::FreeList
and get textureId from textureHash as O(1 * collision)
by std::unordered_map<TextureHash, vector<TextureId>>.

This patch make TextureCacheIndex as a kind of structure. named TextureCacheIndexData.
This data use 4 bit as "TextueCacheIndexType" and 28 bit as "Index".
By this structure, we can use only one TextureIdConverter.
We can know what this TextureId come from ;
NormalImage or ExternalTextures or EncodedImageBuffer.

So now, we can do all API things as near O(1). Without useless iteratating.

It will reduce ImageView's SceneOn and SceneOff time.
And also, reduce AsyncLoadComplete API runtime, that animated image used
every image frame.

Note : After this patch, TextureId will not be unique anymore.
TODO : Masking feature still works on O(N). We need to make new container for it in future.

Change-Id: I37777ccc05fc0541e1f0e65f1d6306d9436c1245
Signed-off-by: Eunki, Hong <eunkiki.hong@samsung.com>
automated-tests/src/dali-toolkit-internal/utc-Dali-TextureManager.cpp
automated-tests/src/dali-toolkit/utc-Dali-ImageView.cpp
dali-toolkit/internal/image-loader/image-url-impl.cpp
dali-toolkit/internal/texture-manager/texture-cache-manager.cpp
dali-toolkit/internal/texture-manager/texture-cache-manager.h
dali-toolkit/internal/texture-manager/texture-manager-impl.cpp
dali-toolkit/internal/texture-manager/texture-manager-impl.h
dali-toolkit/internal/texture-manager/texture-manager-type.h
dali-toolkit/internal/visuals/image/image-visual.cpp