editeng/source/editeng/impedit.hxx | 14 +++++++------- editeng/source/editeng/impedit2.cxx | 8 ++++---- editeng/source/uno/unoedprx.cxx | 4 ++-- include/editeng/SpellPortions.hxx | 36 ++++++++++++++++++------------------ include/editeng/numitem.hxx | 7 +++---- include/svx/svdlayer.hxx | 2 +- include/svx/svdpage.hxx | 13 +++++-------- svx/inc/textchain.hxx | 6 +++--- svx/inc/textchaincursor.hxx | 2 +- svx/inc/textchainflow.hxx | 22 ++++++++++------------ 10 files changed, 54 insertions(+), 60 deletions(-)
New commits: commit 77fca82aab16619a693d53e970ac717f54105e95 Author: Noel Grandin <noel.gran...@collabora.co.uk> AuthorDate: Sat Sep 11 15:53:11 2021 +0200 Commit: Noel Grandin <noel.gran...@collabora.co.uk> CommitDate: Sat Sep 11 17:24:16 2021 +0200 clang:optin.performance.Padding in svx,editeng Excessive padding in 'struct svx::SpellPortion' (18 padding bytes, where 2 is optimal). Excessive padding in 'class SvxNumRule' (11 padding bytes, where 3 is optimal). Excessive padding in 'struct SpellInfo' (10 padding bytes, where 2 is optimal). Excessive padding in 'struct ImpEditEngine::LineAreaInfo' (14 padding bytes, where 6 is optimal). Excessive padding in 'class ImpChainLinkProperties' (5 padding bytes, where 1 is optimal). Excessive padding in 'class TextChainFlow' (20 padding bytes, where 4 is optimal). Excessive padding in 'class SdrObjList' (13 padding bytes, where 5 is optimal). Excessive padding in 'class SdrLayer' (12 padding bytes, where 4 is optimal). Change-Id: I17b1c40bfe553c7635dc6177845dc92956cd0fae Reviewed-on: https://gerrit.libreoffice.org/c/core/+/121942 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> diff --git a/editeng/source/editeng/impedit.hxx b/editeng/source/editeng/impedit.hxx index b894bd2153e6..a8f07741cc41 100644 --- a/editeng/source/editeng/impedit.hxx +++ b/editeng/source/editeng/impedit.hxx @@ -155,14 +155,14 @@ typedef std::vector<EditSelection> SpellContentSelections; struct SpellInfo { + EditPaM aCurSentenceStart; + svx::SpellPortions aLastSpellPortions; + SpellContentSelections aLastSpellContentSelections; EESpellState eState; EPaM aSpellStart; EPaM aSpellTo; - EditPaM aCurSentenceStart; bool bSpellToEnd; bool bMultipleDoc; - svx::SpellPortions aLastSpellPortions; - SpellContentSelections aLastSpellContentSelections; SpellInfo() : eState(EESpellState::Ok), bSpellToEnd(true), bMultipleDoc(false) { } }; @@ -1139,14 +1139,14 @@ public: }; struct LineAreaInfo { - sal_Int16 nColumn; // Column number; when overflowing, equal to total number of columns ParaPortion& rPortion; // Current ParaPortion - sal_Int32 nPortion; EditLine* pLine; // Current line, or nullptr for paragraph start - sal_Int32 nLine; + tools::Long nHeightNeededToNotWrap; tools::Rectangle aArea; // The area for the line (or for rPortion's first line offset) // Bottom coordinate *does not* belong to the area - tools::Long nHeightNeededToNotWrap; + sal_Int32 nPortion; + sal_Int32 nLine; + sal_Int16 nColumn; // Column number; when overflowing, equal to total number of columns }; using IterateLinesAreasFunc = std::function<CallbackResult(const LineAreaInfo&)>; enum IterFlag // bitmask diff --git a/editeng/source/editeng/impedit2.cxx b/editeng/source/editeng/impedit2.cxx index 8173558a097f..6d27b50dfd68 100644 --- a/editeng/source/editeng/impedit2.cxx +++ b/editeng/source/editeng/impedit2.cxx @@ -3124,13 +3124,13 @@ void ImpEditEngine::IterateLineAreas(const IterateLinesAreasFunc& f, IterFlag eO return; LineAreaInfo aInfo{ - nColumn, // nColumn rPortion, // rPortion - n, // nPortion nullptr, // pLine - 0, // nLine + 0, // nHeightNeededToNotWrap { aLineStart, Size{ nColumnWidth, rPortion.GetFirstLineOffset() } }, // aArea - 0 // nHeightNeededToNotWrap + n, // nPortion + 0, // nLine + nColumn // nColumn }; auto eResult = f(aInfo); if (eResult == CallbackResult::Stop) diff --git a/editeng/source/uno/unoedprx.cxx b/editeng/source/uno/unoedprx.cxx index 8cf7d8e62417..161633a137a2 100644 --- a/editeng/source/uno/unoedprx.cxx +++ b/editeng/source/uno/unoedprx.cxx @@ -52,9 +52,9 @@ public: mnEEIndex(0), mnFieldOffset(0), mnFieldLen(0), - mbInField(false), mnBulletOffset(0), mnBulletLen(0), + mbInField(false), mbInBullet(false) {}; // Get/Set current paragraph @@ -111,9 +111,9 @@ private: sal_Int32 mnEEIndex; sal_Int32 mnFieldOffset; sal_Int32 mnFieldLen; - bool mbInField; sal_Int32 mnBulletOffset; sal_Int32 mnBulletLen; + bool mbInField; bool mbInBullet; }; diff --git a/include/editeng/SpellPortions.hxx b/include/editeng/SpellPortions.hxx index 0681b5dbbfcc..75f6254385cb 100644 --- a/include/editeng/SpellPortions.hxx +++ b/include/editeng/SpellPortions.hxx @@ -41,6 +41,22 @@ struct SpellPortion /** contains the text of the portion. */ OUString sText; + /** for wrong words this reference is filled with the error information otherwise + it's an empty reference + */ + css::uno::Reference< css::linguistic2::XSpellAlternatives> xAlternatives; + /** provides access to the grammar checker interface + */ + css::uno::Reference< css::linguistic2::XProofreader > xGrammarChecker; + /** contains the proposed dialog title if the proof reading component provides one. + */ + OUString sDialogTitle; + /** contains the grammar error information + */ + css::linguistic2::SingleProofreadingError aGrammarError; + /** contains the language applied to the text. It has to match the script type. + */ + LanguageType eLanguage; /** Marks the portion as field, footnote symbol or any other special content that should be protected against unintentional deletion. */ @@ -50,33 +66,17 @@ struct SpellPortion for them. */ bool bIsHidden; - /** contains the language applied to the text. It has to match the script type. - */ - LanguageType eLanguage; - /** for wrong words this reference is filled with the error information otherwise - it's an empty reference - */ - css::uno::Reference< css::linguistic2::XSpellAlternatives> xAlternatives; /** determines whether the error type is a grammar error */ bool bIsGrammarError; - /** contains the grammar error information - */ - css::linguistic2::SingleProofreadingError aGrammarError; - /** provides access to the grammar checker interface - */ - css::uno::Reference< css::linguistic2::XProofreader > xGrammarChecker; /** marks portion as to-be-ignored. This is a return parameter. */ - /** contains the proposed dialog title if the proof reading component provides one. - */ - OUString sDialogTitle; - bool bIgnoreThisError; + SpellPortion() : + eLanguage(LANGUAGE_DONTKNOW), bIsField(false), bIsHidden(false), - eLanguage(LANGUAGE_DONTKNOW), bIsGrammarError(false), bIgnoreThisError(false) { diff --git a/include/editeng/numitem.hxx b/include/editeng/numitem.hxx index 5f444e29389d..baa6ad3204e1 100644 --- a/include/editeng/numitem.hxx +++ b/include/editeng/numitem.hxx @@ -226,7 +226,7 @@ public: }; //Feature-Flags (only sal_uInt16!) -enum class SvxNumRuleFlags +enum class SvxNumRuleFlags : sal_uInt16 { NONE = 0x0000, CONTINUOUS = 0x0001, // consecutive numbers possible? @@ -242,7 +242,7 @@ namespace o3tl template<> struct typed_flags<SvxNumRuleFlags> : is_typed_flags<SvxNumRuleFlags, 0x039d> {}; } -enum class SvxNumRuleType +enum class SvxNumRuleType : sal_uInt8 { NUMBERING, OUTLINE_NUMBERING, @@ -251,12 +251,11 @@ enum class SvxNumRuleType class EDITENG_DLLPUBLIC SvxNumRule final { + std::unique_ptr<SvxNumberFormat> aFmts[SVX_MAX_NUM]; sal_uInt16 nLevelCount; // Number of supported levels SvxNumRuleFlags nFeatureFlags; // What is supported? SvxNumRuleType eNumberingType; // Type of numbering bool bContinuousNumbering; // sequential numbering - - std::unique_ptr<SvxNumberFormat> aFmts[SVX_MAX_NUM]; bool aFmtsSet[SVX_MAX_NUM]; // Flags indicating valid levels static sal_Int32 nRefCount; diff --git a/include/svx/svdlayer.hxx b/include/svx/svdlayer.hxx index 2e35c831afee..40cac55d9e1b 100644 --- a/include/svx/svdlayer.hxx +++ b/include/svx/svdlayer.hxx @@ -62,10 +62,10 @@ class SVXCORE_DLLPUBLIC SdrLayer OUString maName; OUString maTitle; OUString maDescription; + SdrModel* pModel; // For broadcasting bool mbVisibleODF; // corresponds to ODF draw:display bool mbPrintableODF; // corresponds to ODF draw:display bool mbLockedODF; // corresponds to ODF draw:protected - SdrModel* pModel; // For broadcasting SdrLayerID nID; SdrLayer(SdrLayerID nNewID, const OUString& rNewName); diff --git a/include/svx/svdpage.hxx b/include/svx/svdpage.hxx index d16a9dc3887e..e19b1770f091 100644 --- a/include/svx/svdpage.hxx +++ b/include/svx/svdpage.hxx @@ -64,13 +64,6 @@ private: SdrObjList(const SdrObjList& rSrcList) = delete; SdrObjList &operator=(const SdrObjList& rSrcList) = delete; - std::vector<SdrObject*> maList; - - tools::Rectangle maSdrObjListOutRect; - tools::Rectangle maSdrObjListSnapRect; - bool mbObjOrdNumsDirty; - bool mbRectsDirty; - protected: void RecalcRects(); @@ -229,10 +222,14 @@ public: virtual void dumpAsXml(xmlTextWriterPtr pWriter) const; private: + tools::Rectangle maSdrObjListOutRect; + tools::Rectangle maSdrObjListSnapRect; + std::vector<SdrObject*> maList; /// This list, if it exists, defines the navigation order. If it does /// not exist then maList defines the navigation order. std::optional<std::vector<tools::WeakReference<SdrObject>>> mxNavigationOrder; - + bool mbObjOrdNumsDirty; + bool mbRectsDirty; /// This flag is <TRUE/> when the mpNavigation list has been changed but /// the indices of the referenced SdrObjects still have their old values. bool mbIsNavigationOrderDirty; diff --git a/svx/inc/textchain.hxx b/svx/inc/textchain.hxx index a74b6c9f6768..0607052b188e 100644 --- a/svx/inc/textchain.hxx +++ b/svx/inc/textchain.hxx @@ -33,7 +33,7 @@ class OUString; typedef OUString ChainLinkId; -enum class CursorChainingEvent +enum class CursorChainingEvent : sal_uInt8 { TO_NEXT_LINK, TO_PREV_LINK, @@ -58,10 +58,10 @@ protected: private: // NOTE: Remember to set default value in constructor when adding field - bool aNilChainingEvent; - CursorChainingEvent aCursorEvent; ESelection aPreChainingSel; ESelection aPostChainingSel; + CursorChainingEvent aCursorEvent; + bool aNilChainingEvent; bool aIsPartOfLastParaInNextLink; bool aSwitchingToNextBox; }; diff --git a/svx/inc/textchaincursor.hxx b/svx/inc/textchaincursor.hxx index 8dfb65725a92..84171ab56167 100644 --- a/svx/inc/textchaincursor.hxx +++ b/svx/inc/textchaincursor.hxx @@ -23,7 +23,7 @@ class SdrObjEditView; class SdrTextObj; class KeyEvent; class SdrOutliner; -enum class CursorChainingEvent; +enum class CursorChainingEvent : sal_uInt8; struct ESelection; diff --git a/svx/inc/textchainflow.hxx b/svx/inc/textchainflow.hxx index a46c47a2d59a..d423939b6b89 100644 --- a/svx/inc/textchainflow.hxx +++ b/svx/inc/textchainflow.hxx @@ -51,14 +51,6 @@ public: SdrTextObj* GetLinkTarget() const; protected: - // Cursor related - bool mbPossiblyCursorOut; - ESelection maOverflowPosSel; - ESelection maPostChainingSel; - - std::unique_ptr<OFlowChainedText> mpOverflChText; - std::unique_ptr<UFlowChainedText> mpUnderflChText; - void impCheckForFlowEvents(SdrOutliner*, SdrOutliner*); TextChain* GetTextChain() const; @@ -69,15 +61,21 @@ protected: virtual void impSetFlowOutlinerParams(SdrOutliner*, SdrOutliner*); private: - bool mbOFisUFinduced; - void impUpdateCursorInfo(); +protected: + std::unique_ptr<OFlowChainedText> mpOverflChText; + std::unique_ptr<UFlowChainedText> mpUnderflChText; + // Cursor related + ESelection maOverflowPosSel; + ESelection maPostChainingSel; + bool mbPossiblyCursorOut; + +private: SdrTextObj* mpTargetLink; SdrTextObj* mpNextLink; - TextChain* mpTextChain; - + bool mbOFisUFinduced; bool bUnderflow; bool bOverflow; };