svx/source/unodraw/unoprov.cxx                          |   31 ++++++++++++----
 xmloff/inc/txtfldi.hxx                                  |    2 -
 xmloff/source/chart/XMLSymbolImageContext.cxx           |    2 -
 xmloff/source/draw/XMLImageMapContext.cxx               |    2 -
 xmloff/source/style/DashStyle.cxx                       |    2 -
 xmloff/source/style/GradientStyle.cxx                   |    2 -
 xmloff/source/style/HatchStyle.cxx                      |    4 +-
 xmloff/source/style/ImageStyle.cxx                      |    2 -
 xmloff/source/style/TransGradientStyle.cxx              |    2 -
 xmloff/source/style/XMLBackgroundImageContext.cxx       |   28 ++++++--------
 xmloff/source/style/xmltabi.cxx                         |    2 -
 xmloff/source/text/XMLFootnoteImportContext.cxx         |    2 -
 xmloff/source/text/XMLIndexSourceBaseContext.cxx        |    2 -
 xmloff/source/text/XMLLineNumberingImportContext.cxx    |    2 -
 xmloff/source/text/XMLSectionImportContext.cxx          |    2 -
 xmloff/source/text/XMLSectionSourceDDEImportContext.cxx |    2 -
 xmloff/source/text/XMLSectionSourceImportContext.cxx    |    2 -
 xmloff/source/text/txtdropi.cxx                         |    2 -
 xmloff/source/text/txtfldi.cxx                          |    4 +-
 xmloff/source/xforms/xformsapi.cxx                      |    4 +-
 20 files changed, 56 insertions(+), 45 deletions(-)

New commits:
commit b1e36f4d264f1d8d8df4558ba0c781ccb93a4244
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Sun Apr 28 12:38:01 2019 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Mon Apr 29 08:31:21 2019 +0200

    tdf#63640 FILEOPEN/FILESAVE: particular .odt loads/saves very slow, part4
    
    cache the XMLTokenMap data in static const vars, so we only need to
    initialise them once
    
    Change-Id: Ib63bedc5af5d5927fed189a6b1a86a5db6865c72
    Reviewed-on: https://gerrit.libreoffice.org/71466
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/xmloff/inc/txtfldi.hxx b/xmloff/inc/txtfldi.hxx
index 44540e4df500..794ddef20ea5 100644
--- a/xmloff/inc/txtfldi.hxx
+++ b/xmloff/inc/txtfldi.hxx
@@ -945,8 +945,6 @@ protected:
 /** import dde field declaration container (<text:dde-connection-decls>) */
 class XMLDdeFieldDeclsImportContext : public SvXMLImportContext
 {
-    SvXMLTokenMap const aTokenMap;
-
 public:
 
     XMLDdeFieldDeclsImportContext(SvXMLImport& rImport,
diff --git a/xmloff/source/chart/XMLSymbolImageContext.cxx 
b/xmloff/source/chart/XMLSymbolImageContext.cxx
index 4e9fae4a9df5..5fce5f613f05 100644
--- a/xmloff/source/chart/XMLSymbolImageContext.cxx
+++ b/xmloff/source/chart/XMLSymbolImageContext.cxx
@@ -61,7 +61,7 @@ XMLSymbolImageContext::~XMLSymbolImageContext()
 
 void XMLSymbolImageContext::StartElement( const uno::Reference< 
xml::sax::XAttributeList >& xAttrList )
 {
-    SvXMLTokenMap aTokenMap( aSymbolImageAttrTokenMap );
+    static const SvXMLTokenMap aTokenMap( aSymbolImageAttrTokenMap );
     OUString aLocalName;
 
     sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
diff --git a/xmloff/source/draw/XMLImageMapContext.cxx 
b/xmloff/source/draw/XMLImageMapContext.cxx
index b7386c24f0d7..c7126b055865 100644
--- a/xmloff/source/draw/XMLImageMapContext.cxx
+++ b/xmloff/source/draw/XMLImageMapContext.cxx
@@ -173,7 +173,7 @@ XMLImageMapObjectContext::XMLImageMapObjectContext(
 void XMLImageMapObjectContext::StartElement(
     const Reference<XAttributeList >& xAttrList )
 {
-    SvXMLTokenMap aMap(aImageMapObjectTokenMap);
+    static const SvXMLTokenMap aMap(aImageMapObjectTokenMap);
 
     sal_Int16 nLength = xAttrList->getLength();
     for(sal_Int16 nAttr = 0; nAttr < nLength; nAttr++)
diff --git a/xmloff/source/style/DashStyle.cxx 
b/xmloff/source/style/DashStyle.cxx
index d940a143dd65..353591ba963c 100644
--- a/xmloff/source/style/DashStyle.cxx
+++ b/xmloff/source/style/DashStyle.cxx
@@ -104,7 +104,7 @@ void XMLDashStyleImport::importXML(
     SvXMLNamespaceMap& rNamespaceMap = rImport.GetNamespaceMap();
     SvXMLUnitConverter& rUnitConverter = rImport.GetMM100UnitConverter();
 
-    SvXMLTokenMap aTokenMap( aDashStyleAttrTokenMap );
+    static const SvXMLTokenMap aTokenMap( aDashStyleAttrTokenMap );
 
     sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
     for( sal_Int16 i=0; i < nAttrCount; i++ )
diff --git a/xmloff/source/style/GradientStyle.cxx 
b/xmloff/source/style/GradientStyle.cxx
index 8feb95d56c8f..ed3d5dad1323 100644
--- a/xmloff/source/style/GradientStyle.cxx
+++ b/xmloff/source/style/GradientStyle.cxx
@@ -111,7 +111,7 @@ void XMLGradientStyleImport::importXML(
     aGradient.Angle = 0;
     aGradient.Border = 0;
 
-    SvXMLTokenMap aTokenMap( aGradientAttrTokenMap );
+    static const SvXMLTokenMap aTokenMap( aGradientAttrTokenMap );
     SvXMLNamespaceMap& rNamespaceMap = rImport.GetNamespaceMap();
 
     sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
diff --git a/xmloff/source/style/HatchStyle.cxx 
b/xmloff/source/style/HatchStyle.cxx
index d394e26d01b1..c23ff4b719c8 100644
--- a/xmloff/source/style/HatchStyle.cxx
+++ b/xmloff/source/style/HatchStyle.cxx
@@ -95,8 +95,8 @@ void XMLHatchStyleImport::importXML(
     aHatch.Distance = 0;
     aHatch.Angle = 0;
 
-    SvXMLTokenMap aTokenMap( aHatchAttrTokenMap );
-    SvXMLNamespaceMap rNamespaceMap = rImport.GetNamespaceMap();
+    static const SvXMLTokenMap aTokenMap( aHatchAttrTokenMap );
+    const SvXMLNamespaceMap& rNamespaceMap = rImport.GetNamespaceMap();
     SvXMLUnitConverter& rUnitConverter = rImport.GetMM100UnitConverter();
 
     sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
diff --git a/xmloff/source/style/ImageStyle.cxx 
b/xmloff/source/style/ImageStyle.cxx
index c70a23b4dbe9..04427771311a 100644
--- a/xmloff/source/style/ImageStyle.cxx
+++ b/xmloff/source/style/ImageStyle.cxx
@@ -106,7 +106,7 @@ bool 
XMLImageStyle::importXML(uno::Reference<xml::sax::XAttributeList> const & x
     OUString aDisplayName;
     uno::Reference<graphic::XGraphic> xGraphic;
 
-    SvXMLTokenMap aTokenMap( aHatchAttrTokenMap );
+    static const SvXMLTokenMap aTokenMap( aHatchAttrTokenMap );
 
     sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
     for( sal_Int16 i=0; i < nAttrCount; i++ )
diff --git a/xmloff/source/style/TransGradientStyle.cxx 
b/xmloff/source/style/TransGradientStyle.cxx
index 3de8ce2a4eee..52edc261c4cf 100644
--- a/xmloff/source/style/TransGradientStyle.cxx
+++ b/xmloff/source/style/TransGradientStyle.cxx
@@ -106,7 +106,7 @@ void XMLTransGradientStyleImport::importXML(
         XML_TOKEN_MAP_END
     };
 
-    SvXMLTokenMap aTokenMap( aTrGradientAttrTokenMap );
+    static const SvXMLTokenMap aTokenMap( aTrGradientAttrTokenMap );
     SvXMLNamespaceMap& rNamespaceMap = rImport.GetNamespaceMap();
 
     sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
diff --git a/xmloff/source/style/XMLBackgroundImageContext.cxx 
b/xmloff/source/style/XMLBackgroundImageContext.cxx
index b1ad4d2c0b82..6bdafccff70e 100644
--- a/xmloff/source/style/XMLBackgroundImageContext.cxx
+++ b/xmloff/source/style/XMLBackgroundImageContext.cxx
@@ -54,22 +54,18 @@ enum SvXMLTokenMapAttrs
     XML_TOK_BGIMG_FILTER,
     XML_TOK_BGIMG_OPACITY
 };
-static const SvXMLTokenMapEntry* lcl_getBGImgAttributesAttrTokenMap()
+static const SvXMLTokenMapEntry aBGImgAttributesAttrTokenMap[] =
 {
-    static const SvXMLTokenMapEntry aBGImgAttributesAttrTokenMap[] =
-    {
-        { XML_NAMESPACE_XLINK, XML_HREF,        XML_TOK_BGIMG_HREF      },
-        { XML_NAMESPACE_XLINK, XML_TYPE,        XML_TOK_BGIMG_TYPE      },
-        { XML_NAMESPACE_XLINK, XML_ACTUATE,     XML_TOK_BGIMG_ACTUATE   },
-        { XML_NAMESPACE_XLINK, XML_SHOW,        XML_TOK_BGIMG_SHOW      },
-        { XML_NAMESPACE_STYLE, XML_POSITION,    XML_TOK_BGIMG_POSITION  },
-        { XML_NAMESPACE_STYLE, XML_REPEAT,      XML_TOK_BGIMG_REPEAT    },
-        { XML_NAMESPACE_STYLE, XML_FILTER_NAME, XML_TOK_BGIMG_FILTER    },
-        { XML_NAMESPACE_DRAW,  XML_OPACITY,     XML_TOK_BGIMG_OPACITY   },
-        XML_TOKEN_MAP_END
-    };
-    return aBGImgAttributesAttrTokenMap;
-}
+    { XML_NAMESPACE_XLINK, XML_HREF,        XML_TOK_BGIMG_HREF      },
+    { XML_NAMESPACE_XLINK, XML_TYPE,        XML_TOK_BGIMG_TYPE      },
+    { XML_NAMESPACE_XLINK, XML_ACTUATE,     XML_TOK_BGIMG_ACTUATE   },
+    { XML_NAMESPACE_XLINK, XML_SHOW,        XML_TOK_BGIMG_SHOW      },
+    { XML_NAMESPACE_STYLE, XML_POSITION,    XML_TOK_BGIMG_POSITION  },
+    { XML_NAMESPACE_STYLE, XML_REPEAT,      XML_TOK_BGIMG_REPEAT    },
+    { XML_NAMESPACE_STYLE, XML_FILTER_NAME, XML_TOK_BGIMG_FILTER    },
+    { XML_NAMESPACE_DRAW,  XML_OPACITY,     XML_TOK_BGIMG_OPACITY   },
+    XML_TOKEN_MAP_END
+};
 
 
 static const SvXMLEnumMapEntry<GraphicLocation> psXML_BrushHoriPos[] =
@@ -170,7 +166,7 @@ static void lcl_xmlbic_MergeVertPos( GraphicLocation& ePos,
 void XMLBackgroundImageContext::ProcessAttrs(
         const Reference< xml::sax::XAttributeList >& xAttrList )
 {
-    SvXMLTokenMap aTokenMap( lcl_getBGImgAttributesAttrTokenMap() );
+    static const SvXMLTokenMap aTokenMap( aBGImgAttributesAttrTokenMap );
 
     ePos = GraphicLocation_NONE;
 
diff --git a/xmloff/source/style/xmltabi.cxx b/xmloff/source/style/xmltabi.cxx
index 5dbfcf1087aa..f0653e3e8ec0 100644
--- a/xmloff/source/style/xmltabi.cxx
+++ b/xmloff/source/style/xmltabi.cxx
@@ -84,7 +84,7 @@ SvxXMLTabStopContext_Impl::SvxXMLTabStopContext_Impl(
     aTabStop.FillChar = ' ';
     sal_Unicode cTextFillChar = 0;
 
-    SvXMLTokenMap aTokenMap( aTabsAttributesAttrTokenMap );
+    static const SvXMLTokenMap aTokenMap( aTabsAttributesAttrTokenMap );
 
     sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0;
     for( sal_Int16 i=0; i < nAttrCount; i++ )
diff --git a/xmloff/source/text/XMLFootnoteImportContext.cxx 
b/xmloff/source/text/XMLFootnoteImportContext.cxx
index dd4cfdd6f499..6cf42cd96a83 100644
--- a/xmloff/source/text/XMLFootnoteImportContext.cxx
+++ b/xmloff/source/text/XMLFootnoteImportContext.cxx
@@ -175,7 +175,7 @@ SvXMLImportContextRef 
XMLFootnoteImportContext::CreateChildContext(
 {
     SvXMLImportContextRef xContext;
 
-    SvXMLTokenMap aTokenMap(aFootnoteChildTokenMap);
+    static const SvXMLTokenMap aTokenMap(aFootnoteChildTokenMap);
 
     switch(aTokenMap.Get(p_nPrefix, rLocalName))
     {
diff --git a/xmloff/source/text/XMLIndexSourceBaseContext.cxx 
b/xmloff/source/text/XMLIndexSourceBaseContext.cxx
index b8e2b0b4e7b8..058dc009bd8b 100644
--- a/xmloff/source/text/XMLIndexSourceBaseContext.cxx
+++ b/xmloff/source/text/XMLIndexSourceBaseContext.cxx
@@ -162,7 +162,7 @@ XMLIndexSourceBaseContext::~XMLIndexSourceBaseContext()
 void XMLIndexSourceBaseContext::StartElement(
     const Reference<XAttributeList> & xAttrList)
 {
-    SvXMLTokenMap aTokenMap(aIndexSourceTokenMap);
+    static const SvXMLTokenMap aTokenMap(aIndexSourceTokenMap);
 
     // process attributes
     sal_Int16 nLength = xAttrList->getLength();
diff --git a/xmloff/source/text/XMLLineNumberingImportContext.cxx 
b/xmloff/source/text/XMLLineNumberingImportContext.cxx
index dd3aa73951d4..57036d09054c 100644
--- a/xmloff/source/text/XMLLineNumberingImportContext.cxx
+++ b/xmloff/source/text/XMLLineNumberingImportContext.cxx
@@ -108,7 +108,7 @@ void XMLLineNumberingImportContext::StartElement(
         XML_TOKEN_MAP_END
     };
 
-    SvXMLTokenMap aTokenMap(aLineNumberingTokenMap);
+    static const SvXMLTokenMap aTokenMap(aLineNumberingTokenMap);
 
     // process attributes
     sal_Int16 nLength = xAttrList->getLength();
diff --git a/xmloff/source/text/XMLSectionImportContext.cxx 
b/xmloff/source/text/XMLSectionImportContext.cxx
index a7e971e4dc14..42e93478dd5d 100644
--- a/xmloff/source/text/XMLSectionImportContext.cxx
+++ b/xmloff/source/text/XMLSectionImportContext.cxx
@@ -224,7 +224,7 @@ void XMLSectionImportContext::StartElement(
 void XMLSectionImportContext::ProcessAttributes(
     const Reference<XAttributeList> & xAttrList )
 {
-    SvXMLTokenMap aTokenMap(aSectionTokenMap);
+    static const SvXMLTokenMap aTokenMap(aSectionTokenMap);
 
     sal_Int16 nLength = xAttrList->getLength();
     for(sal_Int16 nAttr = 0; nAttr < nLength; nAttr++)
diff --git a/xmloff/source/text/XMLSectionSourceDDEImportContext.cxx 
b/xmloff/source/text/XMLSectionSourceDDEImportContext.cxx
index 7c21b0749d0e..814135d947f2 100644
--- a/xmloff/source/text/XMLSectionSourceDDEImportContext.cxx
+++ b/xmloff/source/text/XMLSectionSourceDDEImportContext.cxx
@@ -78,7 +78,7 @@ static const SvXMLTokenMapEntry aSectionSourceDDETokenMap[] =
 void XMLSectionSourceDDEImportContext::StartElement(
     const Reference<XAttributeList> & xAttrList)
 {
-    SvXMLTokenMap aTokenMap(aSectionSourceDDETokenMap);
+    static const SvXMLTokenMap aTokenMap(aSectionSourceDDETokenMap);
     OUString sApplication;
     OUString sTopic;
     OUString sItem;
diff --git a/xmloff/source/text/XMLSectionSourceImportContext.cxx 
b/xmloff/source/text/XMLSectionSourceImportContext.cxx
index 7a3048bb846f..e938ce871593 100644
--- a/xmloff/source/text/XMLSectionSourceImportContext.cxx
+++ b/xmloff/source/text/XMLSectionSourceImportContext.cxx
@@ -73,7 +73,7 @@ static const SvXMLTokenMapEntry aSectionSourceTokenMap[] =
 void XMLSectionSourceImportContext::StartElement(
     const Reference<XAttributeList> & xAttrList)
 {
-    SvXMLTokenMap aTokenMap(aSectionSourceTokenMap);
+    static const SvXMLTokenMap aTokenMap(aSectionSourceTokenMap);
     OUString sURL;
     OUString sFilterName;
     OUString sSectionName;
diff --git a/xmloff/source/text/txtdropi.cxx b/xmloff/source/text/txtdropi.cxx
index 25b247880b14..8e7dc0e2100b 100644
--- a/xmloff/source/text/txtdropi.cxx
+++ b/xmloff/source/text/txtdropi.cxx
@@ -58,7 +58,7 @@ static const SvXMLTokenMapEntry aDropAttrTokenMap[] =
 void XMLTextDropCapImportContext::ProcessAttrs(
         const Reference< xml::sax::XAttributeList >& xAttrList )
 {
-    SvXMLTokenMap aTokenMap( aDropAttrTokenMap );
+    static const SvXMLTokenMap aTokenMap( aDropAttrTokenMap );
 
     DropCapFormat aFormat;
     bool bWholeWord = false;
diff --git a/xmloff/source/text/txtfldi.cxx b/xmloff/source/text/txtfldi.cxx
index f37f11561002..c1b1093a8ad3 100644
--- a/xmloff/source/text/txtfldi.cxx
+++ b/xmloff/source/text/txtfldi.cxx
@@ -2694,8 +2694,7 @@ static const SvXMLTokenMapEntry aDdeDeclAttrTokenMap[] =
 
 XMLDdeFieldDeclsImportContext::XMLDdeFieldDeclsImportContext(
     SvXMLImport& rImport, sal_uInt16 nPrfx, const OUString& sLocalName) :
-        SvXMLImportContext(rImport, nPrfx, sLocalName),
-        aTokenMap(aDdeDeclAttrTokenMap)
+        SvXMLImportContext(rImport, nPrfx, sLocalName)
 {
 }
 
@@ -2707,6 +2706,7 @@ SvXMLImportContextRef 
XMLDdeFieldDeclsImportContext::CreateChildContext(
     if ( (XML_NAMESPACE_TEXT == nPrefix) &&
          (IsXMLToken(rLocalName, XML_DDE_CONNECTION_DECL)) )
     {
+        static const SvXMLTokenMap aTokenMap(aDdeDeclAttrTokenMap);
         return new XMLDdeFieldDeclImportContext(GetImport(), nPrefix,
                                                 rLocalName, aTokenMap);
     }
diff --git a/xmloff/source/xforms/xformsapi.cxx 
b/xmloff/source/xforms/xformsapi.cxx
index 7a5f9aacc0d9..f52aac6272b6 100644
--- a/xmloff/source/xforms/xformsapi.cxx
+++ b/xmloff/source/xforms/xformsapi.cxx
@@ -195,7 +195,7 @@ sal_uInt16 xforms_getTypeClass(
     // translate name into token for local name
     OUString sLocalName;
     sal_uInt16 nPrefix = rNamespaceMap.GetKeyByAttrName(rXMLName, &sLocalName);
-    SvXMLTokenMap aMap( aTypes );
+    static const SvXMLTokenMap aMap( aTypes );
     sal_uInt16 nToken = aMap.Get( nPrefix, sLocalName );
 
     sal_uInt16 nTypeClass = css::xsd::DataTypeClass::STRING;
@@ -265,7 +265,7 @@ OUString xforms_getTypeName(
 {
     OUString sLocalName;
     sal_uInt16 nPrefix = rNamespaceMap.GetKeyByAttrName(rXMLName, &sLocalName);
-    SvXMLTokenMap aMap( aTypes );
+    static const SvXMLTokenMap aMap( aTypes );
     sal_uInt16 nToken = aMap.Get( nPrefix, sLocalName );
     return ( nToken == XML_TOK_UNKNOWN )
         ? rXMLName
commit 560a0f2fbe452d25fe78d6756919c11ec67f630f
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Sat Apr 27 09:45:39 2019 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Mon Apr 29 08:31:10 2019 +0200

    tdf#63640 FILEOPEN/FILESAVE: particular .odt loads/saves very slow, part3
    
    Reduce time spent constructing strings from char arrays just to do a
    comparison
    
    Change-Id: I7af99747530d91d57e1a5b789ca9989a616428fc
    Reviewed-on: https://gerrit.libreoffice.org/71464
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/svx/source/unodraw/unoprov.cxx b/svx/source/unodraw/unoprov.cxx
index 0d31e6e04231..0bb5d1363d45 100644
--- a/svx/source/unodraw/unoprov.cxx
+++ b/svx/source/unodraw/unoprov.cxx
@@ -1542,16 +1542,33 @@ static bool SvxUnoConvertResourceString(const char 
**pSourceResIds, const char**
 
     for (int i = 0; i < nCount; ++i)
     {
-        const OUString aCompare = bToApi ? SvxResId(pSourceResIds[i]) : 
OUString::createFromAscii(pSourceResIds[i]);
-        if( aShortString == aCompare )
+        if (bToApi)
         {
-            rString = rString.replaceAt( 0, aShortString.getLength(), bToApi ? 
OUString::createFromAscii(pDestResIds[i]) : SvxResId(pDestResIds[i]) );
-            return true;
+            const OUString & aCompare = SvxResId(pSourceResIds[i]);
+            if( aShortString == aCompare )
+            {
+                rString = rString.replaceAt( 0, aShortString.getLength(), 
OUString::createFromAscii(pDestResIds[i]) );
+                return true;
+            }
+            else if( rString == aCompare )
+            {
+                rString = OUString::createFromAscii(pDestResIds[i]);
+                return true;
+            }
         }
-        else if( rString == aCompare )
+        else
         {
-            rString = bToApi ? OUString::createFromAscii(pDestResIds[i]) : 
SvxResId(pDestResIds[i]);
-            return true;
+            auto pCompare = pSourceResIds[i];
+            if( aShortString.equalsAscii(pCompare) )
+            {
+                rString = rString.replaceAt( 0, aShortString.getLength(), 
SvxResId(pDestResIds[i]) );
+                return true;
+            }
+            else if( rString.equalsAscii(pCompare) )
+            {
+                rString = SvxResId(pDestResIds[i]);
+                return true;
+            }
         }
     }
 
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to