sw/source/core/text/itratr.cxx | 7 ++++--- sw/source/core/text/pormulti.cxx | 8 +++++--- sw/source/core/unocore/unoportenum.cxx | 5 +++-- 3 files changed, 12 insertions(+), 8 deletions(-)
New commits: commit 75950f3eb9517b8d5cce4a7e491ab031a1b3f0db Author: Noel Grandin <noel.gran...@collabora.co.uk> AuthorDate: Tue Aug 24 14:11:41 2021 +0200 Commit: Noel Grandin <noel.gran...@collabora.co.uk> CommitDate: Mon Nov 29 19:25:23 2021 +0100 tdf#64991 speed up loading large RTL documents takes load time from 20s to 17s for me Several loops are very hot, so store the count()/size() value, instead of calling it on every iteration. Change-Id: I8c0b01721d27e4335dd613cf276dcdd0103633ce Reviewed-on: https://gerrit.libreoffice.org/c/core/+/120945 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> (cherry picked from commit bec2de27f676092bffdf8a639497602a9d13f675) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/125994 diff --git a/sw/source/core/text/itratr.cxx b/sw/source/core/text/itratr.cxx index 5434e0038ac0..f76f15254e9f 100644 --- a/sw/source/core/text/itratr.cxx +++ b/sw/source/core/text/itratr.cxx @@ -260,6 +260,7 @@ void SwAttrIter::SeekFwd(const sal_Int32 nOldPos, const sal_Int32 nNewPos) { SwpHints const*const pHints(m_pTextNode->GetpSwpHints()); SwTextAttr *pTextAttr; + const auto nHintsCount = pHints->Count(); if ( m_nStartIndex ) // If attributes have been opened at all ... { @@ -267,7 +268,7 @@ void SwAttrIter::SeekFwd(const sal_Int32 nOldPos, const sal_Int32 nNewPos) // As long as we've not yet reached the end of EndArray and the // TextAttribute ends before or at the new position ... - while ((m_nEndIndex < pHints->Count()) && + while ((m_nEndIndex < nHintsCount) && ((pTextAttr = pHints->GetSortedByEnd(m_nEndIndex))->GetAnyEnd() <= nNewPos)) { // Close the TextAttributes, whose StartPos were before or at @@ -278,7 +279,7 @@ void SwAttrIter::SeekFwd(const sal_Int32 nOldPos, const sal_Int32 nNewPos) } else // skip the not opened ends { - while ((m_nEndIndex < pHints->Count()) && + while ((m_nEndIndex < nHintsCount) && (pHints->GetSortedByEnd(m_nEndIndex)->GetAnyEnd() <= nNewPos)) { m_nEndIndex++; @@ -287,7 +288,7 @@ void SwAttrIter::SeekFwd(const sal_Int32 nOldPos, const sal_Int32 nNewPos) // As long as we've not yet reached the end of EndArray and the // TextAttribute ends before or at the new position... - while ((m_nStartIndex < pHints->Count()) && + while ((m_nStartIndex < nHintsCount) && ((pTextAttr = pHints->Get(m_nStartIndex))->GetStart() <= nNewPos)) { diff --git a/sw/source/core/text/pormulti.cxx b/sw/source/core/text/pormulti.cxx index 1ea089b106e1..ee1595496a6c 100644 --- a/sw/source/core/text/pormulti.cxx +++ b/sw/source/core/text/pormulti.cxx @@ -860,12 +860,14 @@ namespace sw { } if (m_pMerged) { - while (m_CurrentExtent < m_pMerged->extents.size()) + const auto nExtentsSize = m_pMerged->extents.size(); + while (m_CurrentExtent < nExtentsSize) { sw::Extent const& rExtent(m_pMerged->extents[m_CurrentExtent]); if (SwpHints const*const pHints = rExtent.pNode->GetpSwpHints()) { - while (m_CurrentHint < pHints->Count()) + auto nHintsCount = pHints->Count(); + while (m_CurrentHint < nHintsCount) { SwTextAttr const*const pHint(pHints->Get(m_CurrentHint)); if (rExtent.nEnd < pHint->GetStart()) @@ -881,7 +883,7 @@ namespace sw { } } ++m_CurrentExtent; - if (m_CurrentExtent < m_pMerged->extents.size() && + if (m_CurrentExtent < nExtentsSize && rExtent.pNode != m_pMerged->extents[m_CurrentExtent].pNode) { m_CurrentHint = 0; // reset diff --git a/sw/source/core/unocore/unoportenum.cxx b/sw/source/core/unocore/unoportenum.cxx index f02b880f00b8..b53d1d79c520 100644 --- a/sw/source/core/unocore/unoportenum.cxx +++ b/sw/source/core/unocore/unoportenum.cxx @@ -710,7 +710,8 @@ lcl_ExportHints( //search for special text attributes - first some ends size_t nEndIndex = 0; sal_Int32 nNextEnd = 0; - while(nEndIndex < pHints->Count() && + const auto nHintsCount = pHints->Count(); + while(nEndIndex < nHintsCount && (!pHints->GetSortedByEnd(nEndIndex)->GetEnd() || nCurrentIndex >= (nNextEnd = (*pHints->GetSortedByEnd(nEndIndex)->GetEnd())))) { @@ -791,7 +792,7 @@ lcl_ExportHints( // then some starts size_t nStartIndex = 0; sal_Int32 nNextStart = 0; - while(nStartIndex < pHints->Count() && + while(nStartIndex < nHintsCount && nCurrentIndex >= (nNextStart = pHints->Get(nStartIndex)->GetStart())) { SwTextAttr * const pAttr = pHints->Get(nStartIndex);