include/xmloff/xmlimp.hxx | 2 ++ xmloff/source/core/xmlictxt.cxx | 16 +++++++++++----- xmloff/source/core/xmlimp.cxx | 10 +++++++--- 3 files changed, 20 insertions(+), 8 deletions(-)
New commits: commit a7bfced28c526ca603cde3c1ac74ea842320bd7c Author: Mohammed Abdul Azeem <azeemmys...@gmail.com> Date: Sat Feb 11 01:50:34 2017 +0530 Optimizations: This avoids a lot of repeated allocation and freeing of memory for AttributeList. Change-Id: I97e44e633ed9880f37665f71e4dec3e74085cb09 Reviewed-on: https://gerrit.libreoffice.org/34134 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Michael Meeks <michael.me...@collabora.com> Tested-by: Michael Meeks <michael.me...@collabora.com> diff --git a/include/xmloff/xmlimp.hxx b/include/xmloff/xmlimp.hxx index f7137715ced3..37b1d1589d88 100644 --- a/include/xmloff/xmlimp.hxx +++ b/include/xmloff/xmlimp.hxx @@ -222,6 +222,8 @@ class XMLOFF_DLLPUBLIC SvXMLImport : public cppu::WeakImplHelper< bool isFastContext; css::uno::Reference< css::xml::sax::XFastParser > mxParser; rtl::Reference< SvXMLImportFastNamespaceHandler > maNamespaceHandler; + rtl::Reference < comphelper::AttributeList > maAttrList; + rtl::Reference < comphelper::AttributeList > maNamespaceAttrList; css::uno::Reference< css::xml::sax::XFastDocumentHandler > mxFastDocumentHandler; css::uno::Reference< css::xml::sax::XFastTokenHandler > mxTokenHandler; std::unordered_map< sal_Int32, OUString > maNamespaceMap; diff --git a/xmloff/source/core/xmlictxt.cxx b/xmloff/source/core/xmlictxt.cxx index 63025083d78f..9a1d5bc0ea62 100644 --- a/xmloff/source/core/xmlictxt.cxx +++ b/xmloff/source/core/xmlictxt.cxx @@ -78,8 +78,14 @@ void SAL_CALL SvXMLImportContext::startUnknownElement(const OUString & rPrefix, const uno::Reference< xml::sax::XFastAttributeList > & Attribs) { OUString elementName; - rtl::Reference < comphelper::AttributeList > rAttrList = new comphelper::AttributeList; - mrImport.maNamespaceHandler->addNSDeclAttributes( rAttrList ); + + if ( mrImport.maAttrList.is() ) + mrImport.maAttrList->Clear(); + else + mrImport.maAttrList = new comphelper::AttributeList; + + mrImport.maNamespaceHandler->addNSDeclAttributes( mrImport.maAttrList ); + if ( !rPrefix.isEmpty() ) elementName = rPrefix + ":" + rLocalName; else @@ -102,7 +108,7 @@ void SAL_CALL SvXMLImportContext::startUnknownElement(const OUString & rPrefix, if ( !rAttrNamespacePrefix.isEmpty() ) sAttrName = rAttrNamespacePrefix + ":" + sAttrName; - rAttrList->AddAttribute( sAttrName, "CDATA", rAttrValue ); + mrImport.maAttrList->AddAttribute( sAttrName, "CDATA", rAttrValue ); } uno::Sequence< xml::Attribute > unknownAttribs = Attribs->getUnknownAttributes(); @@ -115,11 +121,11 @@ void SAL_CALL SvXMLImportContext::startUnknownElement(const OUString & rPrefix, if ( !rAttrNamespacePrefix.isEmpty() ) sAttrName = rAttrNamespacePrefix + ":" + sAttrName; - rAttrList->AddAttribute( sAttrName, "CDATA", rAttrValue ); + mrImport.maAttrList->AddAttribute( sAttrName, "CDATA", rAttrValue ); } } - mrImport.startElement( elementName, rAttrList.get() ); + mrImport.startElement( elementName, mrImport.maAttrList.get() ); } void SAL_CALL SvXMLImportContext::endFastElement(sal_Int32 nElement) diff --git a/xmloff/source/core/xmlimp.cxx b/xmloff/source/core/xmlimp.cxx index eba9d2ad21b6..2d489bc1cdb4 100644 --- a/xmloff/source/core/xmlimp.cxx +++ b/xmloff/source/core/xmlimp.cxx @@ -818,10 +818,14 @@ void SAL_CALL SvXMLImport::startFastElement (sal_Int32 Element, if ( isFastContext ) { - rtl::Reference < comphelper::AttributeList > rAttrList = new comphelper::AttributeList; - maNamespaceHandler->addNSDeclAttributes( rAttrList ); + if ( maNamespaceAttrList.is() ) + maNamespaceAttrList->Clear(); + else + maNamespaceAttrList = new comphelper::AttributeList; + + maNamespaceHandler->addNSDeclAttributes( maNamespaceAttrList ); std::unique_ptr<SvXMLNamespaceMap> pRewindMap( - processNSAttributes(rAttrList.get())); + processNSAttributes( maNamespaceAttrList.get() )); SvXMLImportContext *pContext = dynamic_cast<SvXMLImportContext*>( xContext.get() ); if( pContext && pRewindMap ) pContext->PutRewindMap(std::move(pRewindMap)); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits