[Libreoffice-commits] core.git: Branch 'libreoffice-6-3' - i18nlangtag/source

Eike Rathke (via logerrit) logerrit at kemper.freedesktop.org
Sat Sep 28 09:23:44 UTC 2019


 i18nlangtag/source/languagetag/languagetag.cxx |   30 ++++++++++++++++---------
 1 file changed, 20 insertions(+), 10 deletions(-)

New commits:
commit 99782b52c3cc25a32661c382ca98a32f6ec87003
Author:     Eike Rathke <erack at redhat.com>
AuthorDate: Fri Sep 27 22:35:13 2019 +0200
Commit:     Xisco FaulĂ­ <xiscofauli at libreoffice.org>
CommitDate: Sat Sep 28 11:23:07 2019 +0200

    Resolves: tdf#127786 cache Glibc locale string in LanguageTagImpl
    
    ... for non-simple @modifier strings that are constructed using
    liblangtag, as loading resource strings needs it over and over and
    over again.
    
    Change-Id: Ib6a74e5ddb44508aa41f101c200a508bfa4a13bd
    Reviewed-on: https://gerrit.libreoffice.org/79770
    Reviewed-by: Eike Rathke <erack at redhat.com>
    Tested-by: Jenkins
    (cherry picked from commit 24c7c12224f1c1d66f335f6fe085595352137646)
    Reviewed-on: https://gerrit.libreoffice.org/79775
    Reviewed-by: Xisco FaulĂ­ <xiscofauli at libreoffice.org>

diff --git a/i18nlangtag/source/languagetag/languagetag.cxx b/i18nlangtag/source/languagetag/languagetag.cxx
index ad9c2ceea898..98caa83c6a3f 100644
--- a/i18nlangtag/source/languagetag/languagetag.cxx
+++ b/i18nlangtag/source/languagetag/languagetag.cxx
@@ -253,11 +253,12 @@ private:
 
     mutable css::lang::Locale               maLocale;
     mutable OUString                        maBcp47;
-    mutable OUString                        maCachedLanguage;   ///< cache getLanguage()
-    mutable OUString                        maCachedScript;     ///< cache getScript()
-    mutable OUString                        maCachedCountry;    ///< cache getCountry()
-    mutable OUString                        maCachedVariants;   ///< cache getVariants()
-    mutable lt_tag_t*                       mpImplLangtag;      ///< liblangtag pointer
+    mutable OUString                        maCachedLanguage;    ///< cache getLanguage()
+    mutable OUString                        maCachedScript;      ///< cache getScript()
+    mutable OUString                        maCachedCountry;     ///< cache getCountry()
+    mutable OUString                        maCachedVariants;    ///< cache getVariants()
+    mutable OUString                        maCachedGlibcString; ///< cache getGlibcLocaleString()
+    mutable lt_tag_t*                       mpImplLangtag;       ///< liblangtag pointer
     mutable LanguageType                    mnLangID;
     mutable LanguageTag::ScriptType         meScriptType;
     mutable Decision                        meIsValid;
@@ -272,6 +273,7 @@ private:
     mutable bool                            mbCachedScript      : 1;
     mutable bool                            mbCachedCountry     : 1;
     mutable bool                            mbCachedVariants    : 1;
+    mutable bool                            mbCachedGlibcString : 1;
 
     OUString const &    getBcp47() const;
     OUString const &    getLanguage() const;
@@ -385,7 +387,8 @@ LanguageTagImpl::LanguageTagImpl( const LanguageTag & rLanguageTag )
         mbCachedLanguage( false),
         mbCachedScript( false),
         mbCachedCountry( false),
-        mbCachedVariants( false)
+        mbCachedVariants( false),
+        mbCachedGlibcString( false)
 {
 }
 
@@ -398,6 +401,7 @@ LanguageTagImpl::LanguageTagImpl( const LanguageTagImpl & rLanguageTagImpl )
         maCachedScript( rLanguageTagImpl.maCachedScript),
         maCachedCountry( rLanguageTagImpl.maCachedCountry),
         maCachedVariants( rLanguageTagImpl.maCachedVariants),
+        maCachedGlibcString( rLanguageTagImpl.maCachedGlibcString),
         mpImplLangtag( rLanguageTagImpl.mpImplLangtag ?
                 lt_tag_copy( rLanguageTagImpl.mpImplLangtag) : nullptr),
         mnLangID( rLanguageTagImpl.mnLangID),
@@ -413,7 +417,8 @@ LanguageTagImpl::LanguageTagImpl( const LanguageTagImpl & rLanguageTagImpl )
         mbCachedLanguage( rLanguageTagImpl.mbCachedLanguage),
         mbCachedScript( rLanguageTagImpl.mbCachedScript),
         mbCachedCountry( rLanguageTagImpl.mbCachedCountry),
-        mbCachedVariants( rLanguageTagImpl.mbCachedVariants)
+        mbCachedVariants( rLanguageTagImpl.mbCachedVariants),
+        mbCachedGlibcString( rLanguageTagImpl.mbCachedGlibcString)
 {
     if (mpImplLangtag)
         theDataRef::get().init();
@@ -431,6 +436,7 @@ LanguageTagImpl& LanguageTagImpl::operator=( const LanguageTagImpl & rLanguageTa
     maCachedScript      = rLanguageTagImpl.maCachedScript;
     maCachedCountry     = rLanguageTagImpl.maCachedCountry;
     maCachedVariants    = rLanguageTagImpl.maCachedVariants;
+    maCachedGlibcString = rLanguageTagImpl.maCachedGlibcString;
     lt_tag_t * oldTag = mpImplLangtag;
     mpImplLangtag       = rLanguageTagImpl.mpImplLangtag ?
                             lt_tag_copy( rLanguageTagImpl.mpImplLangtag) : nullptr;
@@ -449,6 +455,7 @@ LanguageTagImpl& LanguageTagImpl::operator=( const LanguageTagImpl & rLanguageTa
     mbCachedScript      = rLanguageTagImpl.mbCachedScript;
     mbCachedCountry     = rLanguageTagImpl.mbCachedCountry;
     mbCachedVariants    = rLanguageTagImpl.mbCachedVariants;
+    mbCachedGlibcString = rLanguageTagImpl.mbCachedGlibcString;
     if (mpImplLangtag && !oldTag)
         theDataRef::get().init();
     return *this;
@@ -1905,7 +1912,9 @@ OUString LanguageTag::getVariants() const
 
 OUString LanguageTagImpl::getGlibcLocaleString() const
 {
-    OUString sLocale;
+    if (mbCachedGlibcString)
+        return maCachedGlibcString;
+
     if (!mpImplLangtag)
     {
         meIsLiblangtagNeeded = DECISION_YES;
@@ -1916,11 +1925,12 @@ OUString LanguageTagImpl::getGlibcLocaleString() const
         char* pLang = lt_tag_convert_to_locale(mpImplLangtag, nullptr);
         if (pLang)
         {
-            sLocale = OUString::createFromAscii( pLang);
+            maCachedGlibcString = OUString::createFromAscii( pLang);
+            mbCachedGlibcString = true;
             free(pLang);
         }
     }
-    return sLocale;
+    return maCachedGlibcString;
 }
 
 OUString LanguageTag::getGlibcLocaleString( const OUString & rEncoding ) const


More information about the Libreoffice-commits mailing list