diff options
author | Eike Rathke <erack@redhat.com> | 2016-09-22 22:20:48 +0200 |
---|---|---|
committer | Eike Rathke <erack@redhat.com> | 2016-09-23 15:14:03 +0000 |
commit | 7d8196ea2f4ec3634dbad7367345e62c4ea9893d (patch) | |
tree | 4550d4ccc4205ae5ca9f134d29927b202e10fb70 /sw/inc | |
parent | 751689283c9f3010f7978b6576b25ffc579202ef (diff) |
perf: eliminate SfxSimpleHint and move to SfxHint, tdf#87101 related
There were over 150 places in *::Notify() functions that did some
dynamic_cast<SfxSimpleHint*> of which ~98% were unnecessary because the
base class SfxHint passed was an SfxSimpleHint anyway. dynamic_cast
operations come with quite some cost, so avoid if possible. Specifically
for ScFormulaCell::Notify() that created a bottleneck in scenarios where
cells were notified that already handled a previous notification. In
mass operations doing the dynamic_cast before it could be decided
whether having to act on it or not this made 2/3 of all time spent in
the Notify() call.
To get rid of that rename/move SfxSimpleHint to SfxHint and let classes
derive from SfxHint instead of SfxSimpleHint. This comes only with a
slight cost that an additional sal_uInt32 is transported in such hints,
initialized to 0, but this is neglectable compared to the huge gain.
For the rare cases where a Notify() actually expects both, an SfxHint
(formerly SfxSimpleHint) and a derived hint, this changed order of the
dynamic_cast involved so the simple SfxHint::GetId() is handled last.
Modules using such combinations can further optimize by treating the
simple SfxHint::GetId() first once verified that none of the other
derived hints use an ID not equal to zero respectively none of the ID
values the simple hint uses.
Change-Id: I9fcf723e3a4487ceb92336189d23a62c344cf0ce
Reviewed-on: https://gerrit.libreoffice.org/29205
Reviewed-by: Eike Rathke <erack@redhat.com>
Tested-by: Eike Rathke <erack@redhat.com>
Diffstat (limited to 'sw/inc')
-rw-r--r-- | sw/inc/fmtfld.hxx | 1 | ||||
-rw-r--r-- | sw/inc/pch/precompiled_msword.hxx | 1 | ||||
-rw-r--r-- | sw/inc/pch/precompiled_sw.hxx | 1 | ||||
-rw-r--r-- | sw/inc/pch/precompiled_swui.hxx | 1 | ||||
-rw-r--r-- | sw/inc/redline.hxx | 1 | ||||
-rw-r--r-- | sw/inc/section.hxx | 6 | ||||
-rw-r--r-- | sw/inc/swhints.hxx | 2 |
7 files changed, 4 insertions, 9 deletions
diff --git a/sw/inc/fmtfld.hxx b/sw/inc/fmtfld.hxx index 341f7d3445da..f6e00bf05905 100644 --- a/sw/inc/fmtfld.hxx +++ b/sw/inc/fmtfld.hxx @@ -25,7 +25,6 @@ #include <cppuhelper/weakref.hxx> #include <svl/poolitem.hxx> #include <svl/SfxBroadcaster.hxx> -#include <svl/smplhint.hxx> #include "swdllapi.h" #include <calbck.hxx> diff --git a/sw/inc/pch/precompiled_msword.hxx b/sw/inc/pch/precompiled_msword.hxx index 9e6a8a8f66e8..f595cb805e5a 100644 --- a/sw/inc/pch/precompiled_msword.hxx +++ b/sw/inc/pch/precompiled_msword.hxx @@ -521,7 +521,6 @@ #include <svl/macitem.hxx> #include <svl/metitem.hxx> #include <svl/poolitem.hxx> -#include <svl/smplhint.hxx> #include <svl/stritem.hxx> #include <svl/svldllapi.h> #include <svl/undo.hxx> diff --git a/sw/inc/pch/precompiled_sw.hxx b/sw/inc/pch/precompiled_sw.hxx index 374228bfcad8..86738867aff1 100644 --- a/sw/inc/pch/precompiled_sw.hxx +++ b/sw/inc/pch/precompiled_sw.hxx @@ -437,7 +437,6 @@ #include <svl/poolitem.hxx> #include <svl/ptitem.hxx> #include <svl/slstitm.hxx> -#include <svl/smplhint.hxx> #include <svl/srchitem.hxx> #include <svl/stritem.hxx> #include <svl/svldllapi.h> diff --git a/sw/inc/pch/precompiled_swui.hxx b/sw/inc/pch/precompiled_swui.hxx index 0d13d925c1f4..974fcb88910f 100644 --- a/sw/inc/pch/precompiled_swui.hxx +++ b/sw/inc/pch/precompiled_swui.hxx @@ -516,7 +516,6 @@ #include <svl/ondemand.hxx> #include <svl/poolitem.hxx> #include <svl/slstitm.hxx> -#include <svl/smplhint.hxx> #include <svl/stritem.hxx> #include <svl/style.hxx> #include <svl/svldllapi.h> diff --git a/sw/inc/redline.hxx b/sw/inc/redline.hxx index ad25d87fa1c7..fe55dd657452 100644 --- a/sw/inc/redline.hxx +++ b/sw/inc/redline.hxx @@ -27,7 +27,6 @@ #include <IDocumentRedlineAccess.hxx> -#include <svl/smplhint.hxx> #include <vector> class SfxItemSet; diff --git a/sw/inc/section.hxx b/sw/inc/section.hxx index a84df08797dd..83f2b938c134 100644 --- a/sw/inc/section.hxx +++ b/sw/inc/section.hxx @@ -23,7 +23,7 @@ #include <com/sun/star/uno/Sequence.h> #include <tools/ref.hxx> -#include <svl/smplhint.hxx> +#include <svl/hint.hxx> #include <sfx2/lnkbase.hxx> #include <sfx2/Metadatable.hxx> @@ -248,11 +248,11 @@ public: }; // #i117863# -class SwSectionFrameMoveAndDeleteHint : public SfxSimpleHint +class SwSectionFrameMoveAndDeleteHint : public SfxHint { public: SwSectionFrameMoveAndDeleteHint( const bool bSaveContent ) - : SfxSimpleHint( SFX_HINT_DYING ) + : SfxHint( SFX_HINT_DYING ) , mbSaveContent( bSaveContent ) {} diff --git a/sw/inc/swhints.hxx b/sw/inc/swhints.hxx index ea4a57700505..04361fbe1af4 100644 --- a/sw/inc/swhints.hxx +++ b/sw/inc/swhints.hxx @@ -19,7 +19,7 @@ #ifndef INCLUDED_SW_INC_SWHINTS_HXX #define INCLUDED_SW_INC_SWHINTS_HXX -#include <svl/smplhint.hxx> +#include <svl/hint.hxx> #define SW_BROADCASTID_START SFX_HINT_USER00 #define SW_BROADCAST_DRAWVIEWS_CREATED SW_BROADCASTID_START |