[Libreoffice-commits] core.git: 2 commits - nlpsolver/ThirdParty writerfilter/source
Noel Grandin (via logerrit)
logerrit at kemper.freedesktop.org
Thu Jun 17 18:44:51 UTC 2021
nlpsolver/ThirdParty/EvolutionarySolver/src/net/adaptivebox/deps/behavior/DEGTBehavior.java | 2
nlpsolver/ThirdParty/EvolutionarySolver/src/net/adaptivebox/knowledge/Library.java | 4 +
writerfilter/source/dmapper/DomainMapper.cxx | 10 ++
writerfilter/source/dmapper/DomainMapper.hxx | 3
writerfilter/source/dmapper/DomainMapper_Impl.cxx | 37 ++++++++++
writerfilter/source/dmapper/DomainMapper_Impl.hxx | 5 +
writerfilter/source/dmapper/StyleSheetTable.cxx | 22 -----
7 files changed, 63 insertions(+), 20 deletions(-)
New commits:
commit ecbdb403d16f6b0aeb8b543e069e9d82adf10437
Author: Noel Grandin <noel at peralex.com>
AuthorDate: Thu Jun 17 18:44:01 2021 +0200
Commit: Noel Grandin <noel.grandin at collabora.co.uk>
CommitDate: Thu Jun 17 20:44:22 2021 +0200
tdf#135316 docx open performance, cache next character style name
so we don't have to scan the list repeatedly, which is O(n^2)
This takes my load time from 37s to 22s
Change-Id: I0df2f2ace82f5cd6287c7ded796b02c5242269ec
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/117396
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index fd341dd4d765..39b118e108f0 100644
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -4127,6 +4127,16 @@ void DomainMapper::commentProps(const OUString& sId, const CommentProperties& rP
m_pImpl->commentProps(sId, rProps);
}
+css::uno::Reference<css::container::XNameContainer> const & DomainMapper::GetCharacterStyles()
+{
+ return m_pImpl->GetCharacterStyles();
+}
+
+OUString DomainMapper::GetUnusedCharacterStyleName()
+{
+ return m_pImpl->GetUnusedCharacterStyleName();
+}
+
} //namespace writerfilter
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/writerfilter/source/dmapper/DomainMapper.hxx b/writerfilter/source/dmapper/DomainMapper.hxx
index 086e7f695db2..e76014737cf3 100644
--- a/writerfilter/source/dmapper/DomainMapper.hxx
+++ b/writerfilter/source/dmapper/DomainMapper.hxx
@@ -133,6 +133,9 @@ public:
virtual void commentProps(const OUString& sId, const CommentProperties& rProps) override;
+ css::uno::Reference<css::container::XNameContainer> const & GetCharacterStyles();
+ OUString GetUnusedCharacterStyleName();
+
private:
// Stream
virtual void lcl_startSectionGroup() override;
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 7b2903f9f4b2..e02549daf430 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -442,6 +442,43 @@ OUString DomainMapper_Impl::GetUnusedPageStyleName()
return sPageStyleName;
}
+uno::Reference< container::XNameContainer > const & DomainMapper_Impl::GetCharacterStyles()
+{
+ if(!m_xCharacterStyles.is())
+ {
+ uno::Reference< style::XStyleFamiliesSupplier > xSupplier( m_xTextDocument, uno::UNO_QUERY );
+ if (xSupplier.is())
+ xSupplier->getStyleFamilies()->getByName("CharacterStyles") >>= m_xCharacterStyles;
+ }
+ return m_xCharacterStyles;
+}
+
+OUString DomainMapper_Impl::GetUnusedCharacterStyleName()
+{
+ static const char cListLabel[] = "ListLabel ";
+ if (!m_xNextUnusedCharacterStyleNo)
+ {
+ //search for all character styles with the name sListLabel + <index>
+ const uno::Sequence< OUString > aCharacterStyleNames = GetCharacterStyles()->getElementNames();
+ sal_Int32 nMaxIndex = 0;
+ for ( const auto& rStyleName : aCharacterStyleNames )
+ {
+ OUString sSuffix;
+ if ( rStyleName.startsWith( cListLabel, &sSuffix ) )
+ {
+ sal_Int32 nSuffix = sSuffix.toInt32();
+ if( nSuffix > 0 && nSuffix > nMaxIndex )
+ nMaxIndex = nSuffix;
+ }
+ }
+ m_xNextUnusedCharacterStyleNo = nMaxIndex + 1;
+ }
+
+ OUString sPageStyleName = cListLabel + OUString::number( *m_xNextUnusedCharacterStyleNo );
+ *m_xNextUnusedCharacterStyleNo = *m_xNextUnusedCharacterStyleNo + 1;
+ return sPageStyleName;
+}
+
uno::Reference< text::XText > const & DomainMapper_Impl::GetBodyText()
{
if(!m_xBodyText.is())
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
index 99d266968c72..5212653dcd47 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
@@ -458,6 +458,9 @@ private:
css::uno::Reference<css::container::XNameContainer> m_xPageStyles1;
// cache next available number, expensive to repeatedly compute
std::optional<int> m_xNextUnusedPageStyleNo;
+ css::uno::Reference<css::container::XNameContainer> m_xCharacterStyles;
+ // cache next available number, expensive to repeatedly compute
+ std::optional<int> m_xNextUnusedCharacterStyleNo;
css::uno::Reference<css::text::XText> m_xBodyText;
css::uno::Reference<css::text::XTextContent> m_xEmbedded;
@@ -631,6 +634,8 @@ public:
css::uno::Reference<css::container::XNameContainer> const & GetPageStyles();
OUString GetUnusedPageStyleName();
+ css::uno::Reference<css::container::XNameContainer> const & GetCharacterStyles();
+ OUString GetUnusedCharacterStyleName();
css::uno::Reference<css::text::XText> const & GetBodyText();
const css::uno::Reference<css::lang::XMultiServiceFactory>& GetTextFactory() const
{
diff --git a/writerfilter/source/dmapper/StyleSheetTable.cxx b/writerfilter/source/dmapper/StyleSheetTable.cxx
index e1329da95852..361914a60aea 100644
--- a/writerfilter/source/dmapper/StyleSheetTable.cxx
+++ b/writerfilter/source/dmapper/StyleSheetTable.cxx
@@ -1602,26 +1602,10 @@ OUString StyleSheetTable::getOrCreateCharStyle( PropertyValueVector_t& rCharProp
// Don't try to reuse an existing character style if requested.
if( !sListLabel.isEmpty() && !bAlwaysCreate)
return sListLabel;
- const char cListLabel[] = "ListLabel ";
- uno::Reference< style::XStyleFamiliesSupplier > xStylesSupplier( m_pImpl->m_xTextDocument, uno::UNO_QUERY_THROW );
- uno::Reference< container::XNameAccess > xStyleFamilies = xStylesSupplier->getStyleFamilies();
- uno::Reference<container::XNameContainer> xCharStyles;
- xStyleFamilies->getByName("CharacterStyles") >>= xCharStyles;
- //search for all character styles with the name sListLabel + <index>
- sal_Int32 nStyleFound = 0;
- const uno::Sequence< OUString > aStyleNames = xCharStyles->getElementNames();
- for( const auto& rStyleName : aStyleNames )
- {
- OUString sSuffix;
- if( rStyleName.startsWith( cListLabel, &sSuffix ) )
- {
- sal_Int32 nSuffix = sSuffix.toInt32();
- if( nSuffix > 0 && nSuffix > nStyleFound )
- nStyleFound = nSuffix;
- }
- }
- sListLabel = cListLabel + OUString::number( ++nStyleFound );
+
//create a new one otherwise
+ const uno::Reference< container::XNameContainer >& xCharStyles = m_pImpl->m_rDMapper.GetCharacterStyles();
+ sListLabel = m_pImpl->m_rDMapper.GetUnusedCharacterStyleName();
uno::Reference< lang::XMultiServiceFactory > xDocFactory( m_pImpl->m_xTextDocument, uno::UNO_QUERY_THROW );
try
{
commit 72cd9250a80bc2db61b1f90217f2f7fdc0d51bcc
Author: Todor Balabanov <todor.balabanov at gmail.com>
AuthorDate: Wed Jun 16 11:16:40 2021 +0300
Commit: Noel Grandin <noel.grandin at collabora.co.uk>
CommitDate: Thu Jun 17 20:41:37 2021 +0200
A separate function for getting a random search point is a little bit clearer.
Change-Id: I2d7471440cdee096b09ce704cbea3d5311f984c8
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/117289
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>
diff --git a/nlpsolver/ThirdParty/EvolutionarySolver/src/net/adaptivebox/deps/behavior/DEGTBehavior.java b/nlpsolver/ThirdParty/EvolutionarySolver/src/net/adaptivebox/deps/behavior/DEGTBehavior.java
index 0e68f856d912..5dedc8052ec7 100644
--- a/nlpsolver/ThirdParty/EvolutionarySolver/src/net/adaptivebox/deps/behavior/DEGTBehavior.java
+++ b/nlpsolver/ThirdParty/EvolutionarySolver/src/net/adaptivebox/deps/behavior/DEGTBehavior.java
@@ -118,7 +118,7 @@ public class DEGTBehavior extends AbsGTBehavior implements ILibEngine {
private SearchPoint[] getReferPoints() {
SearchPoint[] referPoints = new SearchPoint[DVNum * 2];
for (int i = 0; i < referPoints.length; i++) {
- referPoints[i] = socialLib.getSelectedPoint(RandomGenerator.intRangeRandom(0, socialLib.getPopSize() - 1));
+ referPoints[i] = socialLib.getRandomPoint();
}
return referPoints;
}
diff --git a/nlpsolver/ThirdParty/EvolutionarySolver/src/net/adaptivebox/knowledge/Library.java b/nlpsolver/ThirdParty/EvolutionarySolver/src/net/adaptivebox/knowledge/Library.java
index 247d4908c420..76e57ac76077 100644
--- a/nlpsolver/ThirdParty/EvolutionarySolver/src/net/adaptivebox/knowledge/Library.java
+++ b/nlpsolver/ThirdParty/EvolutionarySolver/src/net/adaptivebox/knowledge/Library.java
@@ -56,6 +56,10 @@ public class Library {
return libPoints[index];
}
+ public SearchPoint getRandomPoint() {
+ return libPoints[RandomGenerator.intRangeRandom(0, libPoints.length - 1)];
+ }
+
public static boolean replace(IGoodnessCompareEngine comparator, SearchPoint outPoint,
SearchPoint tobeReplacedPoint) {
boolean isBetter = false;
More information about the Libreoffice-commits
mailing list