From 526f0fce45fb014b09057403ae37c125e5a18655 Mon Sep 17 00:00:00 2001 From: Noel Grandin Date: Fri, 9 Apr 2021 12:05:16 +0200 Subject: tdf#130326 speed up opening XLSX SvxShape::Notify is called a lot (26%) of CPU, so re-arrange it to do the cheapest checks first. Change-Id: I0e6c6c976ecfe7670e8d4af175606654f839aa66 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113843 Tested-by: Jenkins Reviewed-by: Noel Grandin --- svx/source/unodraw/unoshape.cxx | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/svx/source/unodraw/unoshape.cxx b/svx/source/unodraw/unoshape.cxx index 1e5263921fd2..de292ef43bb3 100644 --- a/svx/source/unodraw/unoshape.cxx +++ b/svx/source/unodraw/unoshape.cxx @@ -992,16 +992,18 @@ uno::Sequence< sal_Int8 > SAL_CALL SvxShape::getImplementationId() void SvxShape::Notify( SfxBroadcaster&, const SfxHint& rHint ) throw() { DBG_TESTSOLARMUTEX(); - if( !HasSdrObject() ) - return; - // #i55919# SdrHintKind::ObjectChange is only interesting if it's for this object + // do cheap checks first, this method is hot if (rHint.GetId() != SfxHintId::ThisIsAnSdrHint) return; - SdrObject* pSdrObject(GetSdrObject()); const SdrHint* pSdrHint = static_cast(&rHint); - if ((pSdrHint->GetKind() != SdrHintKind::ModelCleared) && - (pSdrHint->GetKind() != SdrHintKind::ObjectChange || pSdrHint->GetObject() != pSdrObject )) + if (pSdrHint->GetKind() != SdrHintKind::ModelCleared && + pSdrHint->GetKind() != SdrHintKind::ObjectChange) + return; + + // #i55919# SdrHintKind::ObjectChange is only interesting if it's for this object + SdrObject* pSdrObject(GetSdrObject()); + if ( !pSdrObject || pSdrHint->GetObject() != pSdrObject ) return; uno::Reference< uno::XInterface > xSelf( pSdrObject->getWeakUnoShape() ); -- cgit