[Libreoffice-commits] core.git: sc/source
Eike Rathke
erack at redhat.com
Mon Nov 14 23:24:24 UTC 2016
sc/source/core/data/global.cxx | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
New commits:
commit bb50b1609abe83265311613db4a18e992dc666c8
Author: Eike Rathke <erack at redhat.com>
Date: Mon Nov 14 23:28:37 2016 +0100
sc-perf: HasAttrChanged: save unnecessary calls to SfxItemPool::Get()
SfxItemPool::GetItemState() can already return a pointer to a set item so that
doesn't need to be obtained again through SfxItemPool::Get()
tdf#103493 'LotroPlan 3.8.ods'
https://bugs.documentfoundation.org/attachment.cgi?id=128252
Incl. Self Called
Before:
10,210,820,257 1,162,295,513 34,670,201
After:
9,887,701,235 1,384,985,151 34,670,201
Only ~3% and 0.5% of the overall load time, but..
Change-Id: Icbed8a7982a27472fdfb1dbe4fd2061ab1e601bd
diff --git a/sc/source/core/data/global.cxx b/sc/source/core/data/global.cxx
index 1436ecf..50c5ba4 100644
--- a/sc/source/core/data/global.cxx
+++ b/sc/source/core/data/global.cxx
@@ -141,29 +141,29 @@ bool ScGlobal::HasAttrChanged( const SfxItemSet& rNewAttrs,
const sal_uInt16 nWhich )
{
bool bInvalidate = false;
- const SfxItemState eNewState = rNewAttrs.GetItemState( nWhich );
- const SfxItemState eOldState = rOldAttrs.GetItemState( nWhich );
+ const SfxPoolItem* pNewItem = nullptr;
+ const SfxItemState eNewState = rNewAttrs.GetItemState( nWhich, true, &pNewItem );
+ const SfxPoolItem* pOldItem = nullptr;
+ const SfxItemState eOldState = rOldAttrs.GetItemState( nWhich, true, &pOldItem );
if ( eNewState == eOldState )
{
// Both Items set
// PoolItems, meaning comparing pointers is valid
if ( SfxItemState::SET == eOldState )
- bInvalidate = (&rNewAttrs.Get( nWhich ) != &rOldAttrs.Get( nWhich ));
+ bInvalidate = (pNewItem != pOldItem);
}
else
{
// Contains a Default Item
// PoolItems, meaning Item comparison necessary
- const SfxPoolItem& rOldItem = ( SfxItemState::SET == eOldState )
- ? rOldAttrs.Get( nWhich )
- : rOldAttrs.GetPool()->GetDefaultItem( nWhich );
+ if (!pOldItem)
+ pOldItem = &rOldAttrs.GetPool()->GetDefaultItem( nWhich );
- const SfxPoolItem& rNewItem = ( SfxItemState::SET == eNewState )
- ? rNewAttrs.Get( nWhich )
- : rNewAttrs.GetPool()->GetDefaultItem( nWhich );
+ if (!pNewItem)
+ pNewItem = &rNewAttrs.GetPool()->GetDefaultItem( nWhich );
- bInvalidate = rNewItem != rOldItem;
+ bInvalidate = (*pNewItem != *pOldItem);
}
return bInvalidate;
More information about the Libreoffice-commits
mailing list