i18npool/source/localedata/LocaleNode.cxx |   46 +++++++++++++++---------------
 i18npool/source/localedata/localedata.cxx |   38 ++++++++++--------------
 2 files changed, 40 insertions(+), 44 deletions(-)

New commits:
commit 3b53aa7cb6284182c58056b376c1b57dd1414062
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Wed Jun 14 13:03:58 2023 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Wed Jun 14 19:16:59 2023 +0200

    speed up startup time
    
    by avoid conversion of static locale data from sal_Unicode to OUString
    data - we can declare the data as OUStringConstExpr arrays and then
    no conversion is necessary.
    
    Change-Id: I95214d09938036935a45e8b8e9752596246dd2e1
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/153058
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/i18npool/source/localedata/LocaleNode.cxx 
b/i18npool/source/localedata/LocaleNode.cxx
index e0cac2020d4c..b70cae2c713f 100644
--- a/i18npool/source/localedata/LocaleNode.cxx
+++ b/i18npool/source/localedata/LocaleNode.cxx
@@ -1316,8 +1316,8 @@ void LCCollationNode::generateCode (const OFileWriter 
&of) const
     OUString useLocale =   getAttr().getValueByName("ref");
     if (!useLocale.isEmpty()) {
         useLocale = useLocale.replace( '-', '_');
-        of.writeRefFunction("getCollatorImplementation_", useLocale);
-        of.writeRefFunction("getCollationOptions_", useLocale);
+        of.writeOUStringRefFunction("getCollatorImplementation_", useLocale);
+        of.writeOUStringRefFunction("getCollationOptions_", useLocale);
         return;
     }
     sal_Int16 nbOfCollations = 0;
@@ -1329,11 +1329,11 @@ void LCCollationNode::generateCode (const OFileWriter 
&of) const
         {
             OUString str;
             str = currNode->getAttr().getValueByName("unoid");
-            of.writeParameter("CollatorID", str, j);
+            of.writeOUStringLiteralParameter("CollatorID", str, j);
             str = currNode->getValue();
-            of.writeParameter("CollatorRule", str, j);
+            of.writeOUStringLiteralParameter("CollatorRule", str, j);
             str = currNode -> getAttr().getValueByName("default");
-            of.writeDefaultParameter("Collator", str, j);
+            of.writeOUStringLiteralDefaultParameter("Collator", str, j);
             of.writeAsciiString("\n");
 
             nbOfCollations++;
@@ -1344,7 +1344,7 @@ void LCCollationNode::generateCode (const OFileWriter 
&of) const
             nbOfCollationOptions = sal::static_int_cast<sal_Int16>( 
pCollationOptions->getNumberOfChildren() );
             for( sal_Int16 i=0; i<nbOfCollationOptions; i++ )
             {
-                of.writeParameter("collationOption", 
pCollationOptions->getChildAt( i )->getValue(), i );
+                of.writeOUStringLiteralParameter("collationOption", 
pCollationOptions->getChildAt( i )->getValue(), i );
             }
 
             of.writeAsciiString("static const sal_Int16 nbOfCollationOptions = 
");
@@ -1356,7 +1356,7 @@ void LCCollationNode::generateCode (const OFileWriter 
&of) const
     of.writeInt(nbOfCollations);
     of.writeAsciiString(";\n\n");
 
-    of.writeAsciiString("\nstatic const sal_Unicode* LCCollatorArray[] = {\n");
+    of.writeAsciiString("\nstatic constexpr rtl::OUStringConstExpr 
LCCollatorArray[] = {\n");
     for(sal_Int16 j = 0; j < nbOfCollations; j++) {
         of.writeAsciiString("\tCollatorID");
         of.writeInt(j);
@@ -1372,16 +1372,17 @@ void LCCollationNode::generateCode (const OFileWriter 
&of) const
     }
     of.writeAsciiString("};\n\n");
 
-    of.writeAsciiString("static const sal_Unicode* collationOptions[] = {");
+    of.writeAsciiString("static constexpr rtl::OUStringConstExpr 
collationOptions[] = {");
     for( sal_Int16 j=0; j<nbOfCollationOptions; j++ )
     {
+        if (j)
+            of.writeAsciiString( ", " );
         of.writeAsciiString( "collationOption" );
         of.writeInt( j );
-        of.writeAsciiString( ", " );
     }
-    of.writeAsciiString("NULL };\n");
-    of.writeFunction("getCollatorImplementation_", "nbOfCollations", 
"LCCollatorArray");
-    of.writeFunction("getCollationOptions_", "nbOfCollationOptions", 
"collationOptions");
+    of.writeAsciiString("};\n");
+    of.writeOUStringFunction("getCollatorImplementation_", "nbOfCollations", 
"LCCollatorArray");
+    of.writeOUStringFunction("getCollationOptions_", "nbOfCollationOptions", 
"collationOptions");
 }
 
 void LCSearchNode::generateCode (const OFileWriter &of) const
@@ -1389,7 +1390,7 @@ void LCSearchNode::generateCode (const OFileWriter &of) 
const
     OUString useLocale =   getAttr().getValueByName("ref");
     if (!useLocale.isEmpty()) {
         useLocale = useLocale.replace( '-', '_');
-        of.writeRefFunction("getSearchOptions_", useLocale);
+        of.writeOUStringRefFunction("getSearchOptions_", useLocale);
         return;
     }
 
@@ -1405,22 +1406,23 @@ void LCSearchNode::generateCode (const OFileWriter &of) 
const
     sal_Int32   nSearchOptions = pSearchOptions->getNumberOfChildren();
     for( i=0; i<nSearchOptions; i++ )
     {
-        of.writeParameter("searchOption", pSearchOptions->getChildAt( i 
)->getValue(), sal::static_int_cast<sal_Int16>(i) );
+        of.writeOUStringLiteralParameter("searchOption", 
pSearchOptions->getChildAt( i )->getValue(), sal::static_int_cast<sal_Int16>(i) 
);
     }
 
     of.writeAsciiString("static const sal_Int16 nbOfSearchOptions = ");
     of.writeInt( sal::static_int_cast<sal_Int16>( nSearchOptions ) );
     of.writeAsciiString(";\n\n");
 
-    of.writeAsciiString("static const sal_Unicode* searchOptions[] = {");
+    of.writeAsciiString("static constexpr rtl::OUStringConstExpr 
searchOptions[] = {");
     for( i=0; i<nSearchOptions; i++ )
     {
+        if (i)
+            of.writeAsciiString( ", " );
         of.writeAsciiString( "searchOption" );
         of.writeInt( sal::static_int_cast<sal_Int16>(i) );
-        of.writeAsciiString( ", " );
     }
-    of.writeAsciiString("NULL };\n");
-    of.writeFunction("getSearchOptions_", "nbOfSearchOptions", 
"searchOptions");
+    of.writeAsciiString(" };\n");
+    of.writeOUStringFunction("getSearchOptions_", "nbOfSearchOptions", 
"searchOptions");
 }
 
 void LCIndexNode::generateCode (const OFileWriter &of) const
diff --git a/i18npool/source/localedata/localedata.cxx 
b/i18npool/source/localedata/localedata.cxx
index 12149ca14ff7..3f45df6cdd1a 100644
--- a/i18npool/source/localedata/localedata.cxx
+++ b/i18npool/source/localedata/localedata.cxx
@@ -904,13 +904,13 @@ LocaleDataImpl::getDateAcceptancePatterns( const Locale& 
rLocale )
 OUString
 LocaleDataImpl::getCollatorRuleByAlgorithm( const Locale& rLocale, 
std::u16string_view algorithm )
 {
-    MyFunc_Type func = reinterpret_cast<MyFunc_Type>(getFunctionSymbol( 
rLocale, "getCollatorImplementation" ));
+    MyFuncOUString_Type func = 
reinterpret_cast<MyFuncOUString_Type>(getFunctionSymbol( rLocale, 
"getCollatorImplementation" ));
     if ( func ) {
         sal_Int16 collatorCount = 0;
-        sal_Unicode **collatorArray = func(collatorCount);
+        OUString const *collatorArray = func(collatorCount);
         for(sal_Int16 i = 0; i < collatorCount; i++)
             if (algorithm == collatorArray[i * COLLATOR_ELEMENTS + 
COLLATOR_OFFSET_ALGO])
-                return OUString(collatorArray[i * COLLATOR_ELEMENTS + 
COLLATOR_OFFSET_RULE]);
+                return collatorArray[i * COLLATOR_ELEMENTS + 
COLLATOR_OFFSET_RULE];
     }
     return OUString();
 }
@@ -919,18 +919,17 @@ LocaleDataImpl::getCollatorRuleByAlgorithm( const Locale& 
rLocale, std::u16strin
 Sequence< Implementation > SAL_CALL
 LocaleDataImpl::getCollatorImplementations( const Locale& rLocale )
 {
-    MyFunc_Type func = reinterpret_cast<MyFunc_Type>(getFunctionSymbol( 
rLocale, "getCollatorImplementation" ));
+    MyFuncOUString_Type func = 
reinterpret_cast<MyFuncOUString_Type>(getFunctionSymbol( rLocale, 
"getCollatorImplementation" ));
 
     if ( func ) {
         sal_Int16 collatorCount = 0;
-        sal_Unicode **collatorArray = func(collatorCount);
+        OUString const *collatorArray = func(collatorCount);
         Sequence< Implementation > seq(collatorCount);
         auto seqRange = asNonConstRange(seq);
         for(sal_Int16 i = 0; i < collatorCount; i++) {
-            Implementation impl(
-                    OUString(collatorArray[i * COLLATOR_ELEMENTS + 
COLLATOR_OFFSET_ALGO]),
+            seqRange[i] = Implementation(
+                    collatorArray[i * COLLATOR_ELEMENTS + 
COLLATOR_OFFSET_ALGO],
                     collatorArray[i * COLLATOR_ELEMENTS + 
COLLATOR_OFFSET_DEFAULT][0] != 0);
-            seqRange[i] = impl;
         }
         return seq;
     }
@@ -942,15 +941,15 @@ LocaleDataImpl::getCollatorImplementations( const Locale& 
rLocale )
 Sequence< OUString > SAL_CALL
 LocaleDataImpl::getCollationOptions( const Locale& rLocale )
 {
-    MyFunc_Type func = reinterpret_cast<MyFunc_Type>(getFunctionSymbol( 
rLocale, "getCollationOptions" ));
+    MyFuncOUString_Type func = 
reinterpret_cast<MyFuncOUString_Type>(getFunctionSymbol( rLocale, 
"getCollationOptions" ));
 
     if ( func ) {
         sal_Int16 optionsCount = 0;
-        sal_Unicode **optionsArray = func(optionsCount);
+        OUString const *optionsArray = func(optionsCount);
         Sequence< OUString > seq(optionsCount);
         auto seqRange = asNonConstRange(seq);
         for(sal_Int16 i = 0; i < optionsCount; i++) {
-            seqRange[i] = OUString( optionsArray[i] );
+            seqRange[i] = optionsArray[i];
         }
         return seq;
     }
@@ -962,17 +961,12 @@ LocaleDataImpl::getCollationOptions( const Locale& 
rLocale )
 Sequence< OUString > SAL_CALL
 LocaleDataImpl::getSearchOptions( const Locale& rLocale )
 {
-    MyFunc_Type func = reinterpret_cast<MyFunc_Type>(getFunctionSymbol( 
rLocale, "getSearchOptions" ));
+    MyFuncOUString_Type func = 
reinterpret_cast<MyFuncOUString_Type>(getFunctionSymbol( rLocale, 
"getSearchOptions" ));
 
     if ( func ) {
         sal_Int16 optionsCount = 0;
-        sal_Unicode **optionsArray = func(optionsCount);
-        Sequence< OUString > seq(optionsCount);
-        auto seqRange = asNonConstRange(seq);
-        for(sal_Int16 i = 0; i < optionsCount; i++) {
-            seqRange[i] = OUString( optionsArray[i] );
-        }
-        return seq;
+        OUString const *optionsArray = func(optionsCount);
+        return Sequence< OUString >(optionsArray, optionsCount);
     }
     else {
         return {};
commit f210fd9645258bac88a5fd1c0ffcf11ee428733b
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Wed Jun 14 11:57:27 2023 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Wed Jun 14 19:16:48 2023 +0200

    speed up startup time
    
    by avoid conversion of static locale data from sal_Unicode to OUString
    data - we can declare the data as OUStringConstExpr arrays and then
    no conversion is necessary.
    
    Change-Id: Ia8186b2e6540287eae1312bf9755d5e6bea359c8
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/153057
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/i18npool/source/localedata/LocaleNode.cxx 
b/i18npool/source/localedata/LocaleNode.cxx
index a6e22bf8cedc..e0cac2020d4c 100644
--- a/i18npool/source/localedata/LocaleNode.cxx
+++ b/i18npool/source/localedata/LocaleNode.cxx
@@ -618,7 +618,7 @@ void LCFormatNode::generateCode (const OFileWriter &of) 
const
         {
             case 0:
                 of.writeOUStringRefFunction("getAllFormats0_", useLocale, 
"replaceTo0");
-                of.writeRefFunction("getDateAcceptancePatterns_", useLocale);
+                of.writeOUStringRefFunction("getDateAcceptancePatterns_", 
useLocale);
                 break;
             case 1:
                 of.writeOUStringRefFunction("getAllFormats1_", useLocale, 
"replaceTo1");
@@ -1288,14 +1288,14 @@ void LCFormatNode::generateCode (const OFileWriter &of) 
const
 
         for (sal_Int16 i = 0; i < nbOfDateAcceptancePatterns; ++i)
         {
-            of.writeParameter("DateAcceptancePattern", 
theDateAcceptancePatterns[i], i);
+            of.writeOUStringLiteralParameter("DateAcceptancePattern", 
theDateAcceptancePatterns[i], i);
         }
 
         of.writeAsciiString("static const sal_Int16 
DateAcceptancePatternsCount = ");
         of.writeInt( nbOfDateAcceptancePatterns);
         of.writeAsciiString(";\n");
 
-        of.writeAsciiString("static const sal_Unicode* 
DateAcceptancePatternsArray[] = {\n");
+        of.writeAsciiString("static constexpr rtl::OUStringConstExpr 
DateAcceptancePatternsArray[] = {\n");
         for (sal_Int16 i = 0; i < nbOfDateAcceptancePatterns; ++i)
         {
             of.writeAsciiString("\t");
@@ -1305,7 +1305,7 @@ void LCFormatNode::generateCode (const OFileWriter &of) 
const
         }
         of.writeAsciiString("};\n\n");
 
-        of.writeFunction("getDateAcceptancePatterns_", 
"DateAcceptancePatternsCount", "DateAcceptancePatternsArray");
+        of.writeOUStringFunction("getDateAcceptancePatterns_", 
"DateAcceptancePatternsCount", "DateAcceptancePatternsArray");
     }
 
     ++mnSection;
diff --git a/i18npool/source/localedata/localedata.cxx 
b/i18npool/source/localedata/localedata.cxx
index 8e10d2e5cf19..12149ca14ff7 100644
--- a/i18npool/source/localedata/localedata.cxx
+++ b/i18npool/source/localedata/localedata.cxx
@@ -875,17 +875,17 @@ LocaleDataImpl::getAllFormats( const Locale& rLocale )
 Sequence< OUString > SAL_CALL
 LocaleDataImpl::getDateAcceptancePatterns( const Locale& rLocale )
 {
-    MyFunc_Type func = reinterpret_cast<MyFunc_Type>(getFunctionSymbol( 
rLocale, "getDateAcceptancePatterns" ));
+    MyFuncOUString_Type func = 
reinterpret_cast<MyFuncOUString_Type>(getFunctionSymbol( rLocale, 
"getDateAcceptancePatterns" ));
 
     if (func)
     {
         sal_Int16 patternsCount = 0;
-        sal_Unicode **patternsArray = func( patternsCount );
+        OUString const *patternsArray = func( patternsCount );
         Sequence< OUString > seq( patternsCount );
         auto seqRange = asNonConstRange(seq);
         for (sal_Int16 i = 0; i < patternsCount; ++i)
         {
-            seqRange[i] = OUString( patternsArray[i] );
+            seqRange[i] = patternsArray[i];
         }
         return seq;
     }

Reply via email to