From 869d60f98a8c2aad1bea9e16d7e00069238519e6 Mon Sep 17 00:00:00 2001 From: Bowon Ryu Date: Fri, 21 Apr 2023 16:32:26 +0900 Subject: [PATCH] Add support for FontClient PreCache in candidate process This patch enables supporting PreInitialize and PreCache operations with a single global font client. Change-Id: Ica574772857ba3a19903a5f0dbab280b7bd31a22 Signed-off-by: Bowon Ryu --- .../text/text-abstraction/font-client-impl.cpp | 41 ++++++++++++---------- .../text/text-abstraction/font-client-impl.h | 3 +- 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/dali/internal/text/text-abstraction/font-client-impl.cpp b/dali/internal/text/text-abstraction/font-client-impl.cpp index 5e2b258..ea171dc 100644 --- a/dali/internal/text/text-abstraction/font-client-impl.cpp +++ b/dali/internal/text/text-abstraction/font-client-impl.cpp @@ -53,8 +53,7 @@ namespace TextAbstraction { namespace Internal { -Dali::TextAbstraction::FontClient FontClient::gPreInitializedFontClient(NULL); -Dali::TextAbstraction::FontClient FontClient::gPreCachedFontClient(NULL); +Dali::TextAbstraction::FontClient FontClient::gPreCreatedFontClient(NULL); std::thread gPreCacheThread; /* TODO: This is to prevent duplicate calls of font pre-cache. * We may support this later, but currently we can't guarantee the behaviour @@ -96,16 +95,10 @@ Dali::TextAbstraction::FontClient FontClient::Get() FONT_LOG_MESSAGE(Dali::Integration::Log::INFO, "FontClient PreCache thread join\n"); } - if(gPreInitializedFontClient) + if(gPreCreatedFontClient) { - fontClientHandle = gPreInitializedFontClient; - gPreInitializedFontClient.Reset(); // No longer needed - } - else if(gPreCachedFontClient) - { - // TODO: Currently font pre-caching is not available in the candidate process. - fontClientHandle = gPreCachedFontClient; - gPreCachedFontClient.Reset(); // No longer needed + fontClientHandle = gPreCreatedFontClient; + gPreCreatedFontClient.Reset(); // No longer needed } else { @@ -136,24 +129,34 @@ Dali::TextAbstraction::FontClient FontClient::Get() Dali::TextAbstraction::FontClient FontClient::PreInitialize() { - gPreInitializedFontClient = Dali::TextAbstraction::FontClient(new FontClient); + // Pre-cached font client already exists or pre-cache thread already running. + // Font client pre-cache includes caching of the default font description. + if((gPreCreatedFontClient && !gFontPreCacheAvailable) || + (gPreCacheThread.joinable())) + { + return gPreCreatedFontClient; + } + + gPreCreatedFontClient = Dali::TextAbstraction::FontClient(new FontClient); // Make DefaultFontDescription cached Dali::TextAbstraction::FontDescription defaultFontDescription; - gPreInitializedFontClient.GetDefaultPlatformFontDescription(defaultFontDescription); + gPreCreatedFontClient.GetDefaultPlatformFontDescription(defaultFontDescription); - return gPreInitializedFontClient; + return gPreCreatedFontClient; } void FontClient::PreCacheRun(const FontFamilyList& fallbackFamilyList, const FontFamilyList& extraFamilyList, const FontFamily& localeFamily) { - if(!gPreCachedFontClient) + if(gFontPreCacheAvailable) { - FONT_LOG_MESSAGE(Dali::Integration::Log::INFO, "BEGIN: DALI_TEXT_PRECACHE_RUN\n"); - Dali::TextAbstraction::FontClient fontClient = Dali::TextAbstraction::FontClient(new FontClient); - GetImplementation(fontClient).FontPreCache(fallbackFamilyList, extraFamilyList, localeFamily); - gPreCachedFontClient = fontClient; gFontPreCacheAvailable = false; + FONT_LOG_MESSAGE(Dali::Integration::Log::INFO, "BEGIN: DALI_TEXT_PRECACHE_RUN\n"); + if(!gPreCreatedFontClient) + { + gPreCreatedFontClient = Dali::TextAbstraction::FontClient(new FontClient); + } + GetImplementation(gPreCreatedFontClient).FontPreCache(fallbackFamilyList, extraFamilyList, localeFamily); FONT_LOG_MESSAGE(Dali::Integration::Log::INFO, "END: DALI_TEXT_PRECACHE_RUN\n"); } else diff --git a/dali/internal/text/text-abstraction/font-client-impl.h b/dali/internal/text/text-abstraction/font-client-impl.h index 46ae88c..01c09a8 100644 --- a/dali/internal/text/text-abstraction/font-client-impl.h +++ b/dali/internal/text/text-abstraction/font-client-impl.h @@ -334,8 +334,7 @@ private: unsigned int mDpiHorizontal; unsigned int mDpiVertical; - static Dali::TextAbstraction::FontClient gPreInitializedFontClient; - static Dali::TextAbstraction::FontClient gPreCachedFontClient; + static Dali::TextAbstraction::FontClient gPreCreatedFontClient; }; // class FontClient -- 2.7.4