Refactor: font face cache 48/322748/17
authorBowon Ryu <bowon.ryu@samsung.com>
Tue, 15 Apr 2025 09:22:46 +0000 (18:22 +0900)
committerBowon Ryu <bowon.ryu@samsung.com>
Tue, 29 Apr 2025 08:45:48 +0000 (17:45 +0900)
commit793d814d60b3fbb4d3ae6a6f3d2de446b049c521
tree14de5a3e32c9eea97c2a6124f72f99715e8babb6
parentd730e17b3562318d6f43dc19c0f0ee623e4222ef
Refactor: font face cache

The core change in this patch is to create 1 freetype face per font file.
Previously, we created as many faces as font-face-cache-items.

This was fine for static (seldom changing) apps, but when using a wide variety of point sizes,
it would create a face every time, which used too much memory.

Now we reuse 1 face.
Instead of faces, freetype sizes are cached and activated on demand,
which uses significantly less memory than the previous face cache.

In static apps, the memory usage difference may not be significant,
but in extreme cases where point sizes exceed thousands, it is incomparably efficient.

And now, we can use pre-loaded memory fonts in async text as well via the font file manager!

TODO: Optimize font-face-cache-item.

Change-Id: I38f44e641e00ae7bfcf16891f92ba14d74c9bff9
Signed-off-by: Bowon Ryu <bowon.ryu@samsung.com>
27 files changed:
dali/devel-api/file.list
dali/devel-api/text-abstraction/font-file-manager.cpp [new file with mode: 0644]
dali/devel-api/text-abstraction/font-file-manager.h [new file with mode: 0644]
dali/devel-api/text-abstraction/shaping.cpp
dali/devel-api/text-abstraction/shaping.h
dali/devel-api/text-abstraction/text-abstraction.h
dali/internal/system/common/environment-variables.h
dali/internal/text/file.list
dali/internal/text/text-abstraction/font-client-impl.cpp
dali/internal/text/text-abstraction/font-client-impl.h
dali/internal/text/text-abstraction/font-file-manager-impl.cpp [new file with mode: 0644]
dali/internal/text/text-abstraction/font-file-manager-impl.h [new file with mode: 0644]
dali/internal/text/text-abstraction/plugin/font-client-plugin-cache-handler.cpp
dali/internal/text/text-abstraction/plugin/font-client-plugin-cache-handler.h
dali/internal/text/text-abstraction/plugin/font-client-plugin-impl.cpp
dali/internal/text/text-abstraction/plugin/font-client-plugin-impl.h
dali/internal/text/text-abstraction/plugin/font-face-cache-item.cpp
dali/internal/text/text-abstraction/plugin/font-face-cache-item.h
dali/internal/text/text-abstraction/plugin/font-face-glyph-cache-manager.cpp
dali/internal/text/text-abstraction/plugin/font-face-glyph-cache-manager.h
dali/internal/text/text-abstraction/plugin/font-face-manager.cpp [new file with mode: 0644]
dali/internal/text/text-abstraction/plugin/font-face-manager.h [new file with mode: 0644]
dali/internal/text/text-abstraction/plugin/harfbuzz-proxy-font.cpp
dali/internal/text/text-abstraction/plugin/harfbuzz-proxy-font.h
dali/internal/text/text-abstraction/plugin/lru-cache-container.h
dali/internal/text/text-abstraction/shaping-impl.cpp
dali/internal/text/text-abstraction/shaping-impl.h