Fix for PreInitialize, including FontClient 35/229535/3
authorPaul Wisbey <p.wisbey@samsung.com>
Wed, 1 Apr 2020 19:57:44 +0000 (20:57 +0100)
committerPaul Wisbey <p.wisbey@samsung.com>
Thu, 2 Apr 2020 10:52:48 +0000 (11:52 +0100)
Change-Id: I00b464e8936731e85bb9daefd0eeb16a853dc929

dali/devel-api/text-abstraction/font-client.cpp
dali/devel-api/text-abstraction/font-client.h
dali/internal/adaptor/common/application-impl.cpp
dali/internal/text/text-abstraction/font-client-impl.cpp
dali/internal/text/text-abstraction/font-client-impl.h

index 8484200..7fed0ab 100755 (executable)
@@ -242,6 +242,11 @@ FontClient::FontClient( Internal::FontClient* internal )
 {
 }
 
+FontClient FontClientPreInitialize()
+{
+  return Internal::FontClient::PreInitialize();
+}
+
 } // namespace TextAbstraction
 
 } // namespace Dali
index b0219c0..0c3c646 100755 (executable)
@@ -482,6 +482,13 @@ public: // Not intended for application developers
   explicit DALI_INTERNAL FontClient( Internal::FontClient* fontClient );
 };
 
+/**
+ * @brief This is used to improve application launch performance
+ *
+ * @return A pre-initialized FontClient
+ */
+DALI_ADAPTOR_API FontClient FontClientPreInitialize();
+
 } // namespace TextAbstraction
 
 } // namespace Dali
index 8e38ca5..3f4ed25 100755 (executable)
@@ -80,6 +80,8 @@ void Application::PreInitialize( int* argc, char** argv[] )
 {
   if( !gPreInitializedApplication )
   {
+    Dali::TextAbstraction::FontClientPreInitialize();
+
     gPreInitializedApplication = new Application ( argc, argv, "", Dali::Application::OPAQUE, PositionSize(), Framework::NORMAL );
     gPreInitializedApplication->CreateWindow();    // Only create window
     gPreInitializedApplication->mLaunchpadState = Launchpad::PRE_INITIALIZED;
index 1a653d6..4e82a54 100755 (executable)
@@ -38,6 +38,8 @@ namespace TextAbstraction
 namespace Internal
 {
 
+Dali::TextAbstraction::FontClient FontClient::gPreInitializedFontClient( NULL );
+
 FontClient::FontClient()
 : mPlugin( nullptr ),
   mDpiHorizontal( 0 ),
@@ -67,7 +69,16 @@ Dali::TextAbstraction::FontClient FontClient::Get()
     }
     else // create and register the object
     {
-      fontClientHandle = Dali::TextAbstraction::FontClient( new FontClient );
+      if( gPreInitializedFontClient )
+      {
+        fontClientHandle = gPreInitializedFontClient;
+        gPreInitializedFontClient.Reset(); // No longer needed
+      }
+      else
+      {
+        fontClientHandle = Dali::TextAbstraction::FontClient( new FontClient );
+      }
+
       service.Register( typeid( fontClientHandle ), fontClientHandle );
     }
   }
@@ -75,6 +86,17 @@ Dali::TextAbstraction::FontClient FontClient::Get()
   return fontClientHandle;
 }
 
+Dali::TextAbstraction::FontClient FontClient::PreInitialize()
+{
+  gPreInitializedFontClient = Dali::TextAbstraction::FontClient( new FontClient );
+
+  // Make DefaultFontDescription cached
+  Dali::TextAbstraction::FontDescription defaultFontDescription;
+  gPreInitializedFontClient.GetDefaultPlatformFontDescription( defaultFontDescription );
+
+  return gPreInitializedFontClient;
+}
+
 void FontClient::ClearCache()
 {
   if( mPlugin )
index 62cd300..def0799 100755 (executable)
@@ -59,6 +59,13 @@ public:
   static Dali::TextAbstraction::FontClient Get();
 
   /**
+   * @brief This is used to improve application launch performance
+   *
+   * @return A pre-initialized FontClient
+   */
+  static Dali::TextAbstraction::FontClient PreInitialize();
+
+  /**
    * @copydoc Dali::TextAbstraction::FontClient::ClearCache()
    */
   void ClearCache();
@@ -261,6 +268,8 @@ private:
   unsigned int mDpiHorizontal;
   unsigned int mDpiVertical;
 
+  static Dali::TextAbstraction::FontClient gPreInitializedFontClient;
+
 }; // class FontClient
 
 } // namespace Internal