[Tizen] Add support for FontClient PreCache in candidate process 11/291911/1 accepted/tizen/7.0/unified/20230428.015847 accepted/tizen/7.0/unified/20230428.170429
authorBowon Ryu <bowon.ryu@samsung.com>
Fri, 21 Apr 2023 07:32:26 +0000 (16:32 +0900)
committerBowon Ryu <bowon.ryu@samsung.com>
Tue, 25 Apr 2023 04:33:50 +0000 (13:33 +0900)
This patch enables supporting PreInitialize and PreCache operations
with a single global font client.

Change-Id: Ica574772857ba3a19903a5f0dbab280b7bd31a22
Signed-off-by: Bowon Ryu <bowon.ryu@samsung.com>
dali/internal/text/text-abstraction/font-client-impl.cpp
dali/internal/text/text-abstraction/font-client-impl.h

index 35d951c..5d17658 100644 (file)
@@ -53,9 +53,8 @@ namespace TextAbstraction
 {
 namespace Internal
 {
-Dali::TextAbstraction::FontClient FontClient::gPreInitializedFontClient(NULL);
-Dali::TextAbstraction::FontClient FontClient::gPreCachedFontClient(NULL);
-std::thread gPreCacheThread;
+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
  * if there is a pre-cache call from the user after the font client has been created. */
@@ -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
index abe8ba9..f7731db 100644 (file)
@@ -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