sw/qa/core/data/ooxml/pass/tdf161139_orrick-org-min3.docx |binary
 sw/source/writerfilter/dmapper/PropertyMap.cxx            |   43 ++++++++++----
 2 files changed, 32 insertions(+), 11 deletions(-)

New commits:
commit e61a19f8fff727e691d0ab23e6e8642b9f63ecf7
Author:     Justin Luth <jl...@mail.com>
AuthorDate: Mon Aug 19 13:52:38 2024 -0400
Commit:     Xisco Fauli <xiscofa...@libreoffice.org>
CommitDate: Tue Aug 20 12:25:05 2024 +0200

    tdf#161139: add unit test to sw filters pass
    
    make CppunitTest_sw_filters_test
    
    Change-Id: I6764dfb19ec8af12da44821bf1a55ff300780369
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/172051
    Reviewed-by: Justin Luth <jl...@mail.com>
    Tested-by: Jenkins
    Signed-off-by: Xisco Fauli <xiscofa...@libreoffice.org>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/172100

diff --git a/sw/qa/core/data/ooxml/pass/tdf161139_orrick-org-min3.docx 
b/sw/qa/core/data/ooxml/pass/tdf161139_orrick-org-min3.docx
new file mode 100644
index 000000000000..2f1634dd5480
Binary files /dev/null and 
b/sw/qa/core/data/ooxml/pass/tdf161139_orrick-org-min3.docx differ
commit 08531dc6d94a4cd1b591bc6e72bff753605746d3
Author:     Miklos Vajna <vmik...@collabora.com>
AuthorDate: Tue Aug 6 08:30:22 2024 +0200
Commit:     Xisco Fauli <xiscofa...@libreoffice.org>
CommitDate: Tue Aug 20 12:24:51 2024 +0200

    Related: tdf#162295 DOCX import: optimize copying headers/footers
    
    The original DOCX bugdoc has 150 sections on 88 pages, which means that
    copyHeaderFooter() in the domain mapper is a significant cost.
    
    Setting a property on a page style involves making a copy of the
    SwPageDesc, working on that copy and then copying it back. Which means
    that setting UNO properties one by one vs working via
    setPropertyValues() is a big difference.
    
    - old cost: 11984 ms
    
    - new cost: 7764 ms (65% of baseline)
    
    Change-Id: Iea99fb3ad9d3e61494c9f012c4c7fa10cc7ab09d
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/171519
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>
    Tested-by: Jenkins
    Reviewed-by: Miklos Vajna <vmik...@collabora.com>
    Signed-off-by: Xisco Fauli <xiscofa...@libreoffice.org>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/172050

diff --git a/sw/source/writerfilter/dmapper/PropertyMap.cxx 
b/sw/source/writerfilter/dmapper/PropertyMap.cxx
index b0cefec30ad4..9dbf1c1eb47d 100644
--- a/sw/source/writerfilter/dmapper/PropertyMap.cxx
+++ b/sw/source/writerfilter/dmapper/PropertyMap.cxx
@@ -1039,11 +1039,22 @@ void copyHeaderFooter(const DomainMapper_Impl& rDM_Impl,
     xStyle->getPropertyValue(sHeaderIsOn) >>= bHasHeader;
     xStyle->getPropertyValue(sFooterIsOn) >>= bHasFooter;
 
-    xStyle->setPropertyValue(sHeaderIsOn, uno::Any(bPreviousHasHeader || 
bHasHeader));
-    xStyle->setPropertyValue(sFooterIsOn, uno::Any(bPreviousHasFooter || 
bHasFooter));
-    xStyle->setPropertyValue(sHeaderIsShared, uno::Any(false));
-    xStyle->setPropertyValue(sFooterIsShared, uno::Any(false));
-    xStyle->setPropertyValue(sFirstIsShared, uno::Any(false));
+    // Set all properties at once before the copy, to avoid needless 
SwPageDesc copying.
+    uno::Sequence<OUString> aNames = {
+        sHeaderIsOn,
+        sFooterIsOn,
+        sHeaderIsShared,
+        sFooterIsShared,
+        sFirstIsShared,
+    };
+    uno::Sequence<uno::Any> aValues = {
+        uno::Any(bPreviousHasHeader || bHasHeader),
+        uno::Any(bPreviousHasFooter || bHasFooter),
+        uno::Any(false),
+        uno::Any(false),
+        uno::Any(false),
+    };
+    xStyle->setPropertyValues(aNames, aValues);
 
     if (bPreviousHasHeader && bCopyHeader)
     {
@@ -1065,12 +1076,22 @@ void copyHeaderFooter(const DomainMapper_Impl& rDM_Impl,
             copyHeaderFooterTextProperty(xPreviousStyle, xStyle, 
PROP_FOOTER_TEXT_FIRST);
     }
 
-    xStyle->setPropertyValue(sHeaderIsOn, uno::Any(bPreviousHasHeader || 
bHasHeader));
-    xStyle->setPropertyValue(sFooterIsOn, uno::Any(bPreviousHasFooter || 
bHasFooter));
-
-    xStyle->setPropertyValue(sHeaderIsShared, uno::Any(!bEvenAndOdd));
-    xStyle->setPropertyValue(sFooterIsShared, uno::Any(!bEvenAndOdd));
-    xStyle->setPropertyValue(sFirstIsShared, uno::Any(!bTitlePage));
+    // Set all properties at once after the copy, to avoid needless SwPageDesc 
copying.
+    aNames = {
+        sHeaderIsOn,
+        sFooterIsOn,
+        sHeaderIsShared,
+        sFooterIsShared,
+        sFirstIsShared,
+    };
+    aValues = {
+        uno::Any(bPreviousHasHeader || bHasHeader),
+        uno::Any(bPreviousHasFooter || bHasFooter),
+        uno::Any(!bEvenAndOdd),
+        uno::Any(!bEvenAndOdd),
+        uno::Any(!bTitlePage),
+    };
+    xStyle->setPropertyValues(aNames, aValues);
 }
 
 } // end anonymous namespace

Reply via email to