diff options
author | Noel Grandin <noel@peralex.com> | 2015-12-10 12:27:50 +0200 |
---|---|---|
committer | Noel Grandin <noel@peralex.com> | 2015-12-11 10:11:23 +0200 |
commit | 58d8d8ac67aa9b907f1304a48efa0f7a473d9de4 (patch) | |
tree | a0d88f3c8a57ce9d08d97c803ea0ec83a3dd8b62 /sd | |
parent | 44ad6aca0dee29841ec7cd15c6d0ad9b3dcaedbe (diff) |
tdf#69977: uno::Sequence is expensive
when used as a mutable data-structure. Plain std::vector halves the time
taken to display the chart dialog
Create a class to represent the std::vector we are going to be passing
around, and move some of the utility methods into it to make the code
prettier.
Also create an optimised append(&&) method for the common case of
appending small temporaries.
Change-Id: I7f5b43fb4a8a84e40e6a52fcb7e9f974091b4485
Diffstat (limited to 'sd')
-rw-r--r-- | sd/source/core/CustomAnimationEffect.cxx | 4 | ||||
-rw-r--r-- | sd/source/ui/animations/motionpathtag.cxx | 2 | ||||
-rw-r--r-- | sd/source/ui/tools/PreviewRenderer.cxx | 10 | ||||
-rw-r--r-- | sd/source/ui/unoidl/unomodel.cxx | 10 | ||||
-rw-r--r-- | sd/source/ui/view/sdview.cxx | 13 |
5 files changed, 19 insertions, 20 deletions
diff --git a/sd/source/core/CustomAnimationEffect.cxx b/sd/source/core/CustomAnimationEffect.cxx index 7d247f16fb00..a3efd9fb8dd7 100644 --- a/sd/source/core/CustomAnimationEffect.cxx +++ b/sd/source/core/CustomAnimationEffect.cxx @@ -1634,9 +1634,9 @@ void CustomAnimationEffect::updatePathFromSdrPathObj( const SdrPathObj& rPathObj { Rectangle aBoundRect(0,0,0,0); - const drawinglayer::primitive2d::Primitive2DSequence xPrimitives(pObj->GetViewContact().getViewIndependentPrimitive2DSequence()); + const drawinglayer::primitive2d::Primitive2DContainer xPrimitives(pObj->GetViewContact().getViewIndependentPrimitive2DSequence()); const drawinglayer::geometry::ViewInformation2D aViewInformation2D; - const basegfx::B2DRange aRange(drawinglayer::primitive2d::getB2DRangeFromPrimitive2DSequence(xPrimitives, aViewInformation2D)); + const basegfx::B2DRange aRange(xPrimitives.getB2DRange(aViewInformation2D)); if(!aRange.isEmpty()) { diff --git a/sd/source/ui/animations/motionpathtag.cxx b/sd/source/ui/animations/motionpathtag.cxx index c30d53fa67d0..ba2008f62d23 100644 --- a/sd/source/ui/animations/motionpathtag.cxx +++ b/sd/source/ui/animations/motionpathtag.cxx @@ -291,7 +291,7 @@ void SdPathHdl::CreateB2dIAObject() if (xManager.is() && mpPathObj) { const sdr::contact::ViewContact& rVC = mpPathObj->GetViewContact(); - const drawinglayer::primitive2d::Primitive2DSequence aSequence = rVC.getViewIndependentPrimitive2DSequence(); + const drawinglayer::primitive2d::Primitive2DContainer aSequence = rVC.getViewIndependentPrimitive2DSequence(); sdr::overlay::OverlayObject* pNew = new sdr::overlay::OverlayPrimitive2DSequenceObject(aSequence); xManager->add(*pNew); diff --git a/sd/source/ui/tools/PreviewRenderer.cxx b/sd/source/ui/tools/PreviewRenderer.cxx index a383b759668e..e2468c7630d7 100644 --- a/sd/source/ui/tools/PreviewRenderer.cxx +++ b/sd/source/ui/tools/PreviewRenderer.cxx @@ -55,9 +55,9 @@ namespace { public: ViewRedirector(); virtual ~ViewRedirector(); - virtual drawinglayer::primitive2d::Primitive2DSequence createRedirectedPrimitive2DSequence( + virtual drawinglayer::primitive2d::Primitive2DContainer createRedirectedPrimitive2DSequence( const sdr::contact::ViewObjectContact& rOriginal, - const sdr::contact::DisplayInfo& rDisplayInfo) override; + const sdr::contact::DisplayInfo& rDisplayInfo) override; }; } @@ -515,7 +515,7 @@ ViewRedirector::~ViewRedirector() { } -drawinglayer::primitive2d::Primitive2DSequence ViewRedirector::createRedirectedPrimitive2DSequence( +drawinglayer::primitive2d::Primitive2DContainer ViewRedirector::createRedirectedPrimitive2DSequence( const sdr::contact::ViewObjectContact& rOriginal, const sdr::contact::DisplayInfo& rDisplayInfo) { @@ -534,11 +534,11 @@ drawinglayer::primitive2d::Primitive2DSequence ViewRedirector::createRedirectedP if ( ! bDoCreateGeometry && (pObject->GetObjInventor() != SdrInventor || pObject->GetObjIdentifier() != OBJ_PAGE)) { - return drawinglayer::primitive2d::Primitive2DSequence(); + return drawinglayer::primitive2d::Primitive2DContainer(); } if (pObject->IsEmptyPresObj()) - return drawinglayer::primitive2d::Primitive2DSequence(); + return drawinglayer::primitive2d::Primitive2DContainer(); return sdr::contact::ViewObjectContactRedirector::createRedirectedPrimitive2DSequence( rOriginal, diff --git a/sd/source/ui/unoidl/unomodel.cxx b/sd/source/ui/unoidl/unomodel.cxx index e4b31bbf9279..e301986eb25c 100644 --- a/sd/source/ui/unoidl/unomodel.cxx +++ b/sd/source/ui/unoidl/unomodel.cxx @@ -1555,7 +1555,7 @@ public: // all default implementations just call the same methods at the original. To do something // different, override the method and at least do what the method does. - virtual drawinglayer::primitive2d::Primitive2DSequence createRedirectedPrimitive2DSequence( + virtual drawinglayer::primitive2d::Primitive2DContainer createRedirectedPrimitive2DSequence( const sdr::contact::ViewObjectContact& rOriginal, const sdr::contact::DisplayInfo& rDisplayInfo) override; }; @@ -1783,7 +1783,7 @@ vcl::PDFWriter::StructElement ImplRenderPaintProc::ImplBegStructureTag( SdrObjec return eElement; } -drawinglayer::primitive2d::Primitive2DSequence ImplRenderPaintProc::createRedirectedPrimitive2DSequence( +drawinglayer::primitive2d::Primitive2DContainer ImplRenderPaintProc::createRedirectedPrimitive2DSequence( const sdr::contact::ViewObjectContact& rOriginal, const sdr::contact::DisplayInfo& rDisplayInfo) { @@ -1791,7 +1791,7 @@ drawinglayer::primitive2d::Primitive2DSequence ImplRenderPaintProc::createRedire if(pObject) { - drawinglayer::primitive2d::Primitive2DSequence xRetval; + drawinglayer::primitive2d::Primitive2DContainer xRetval; if(pObject->GetPage()) { @@ -1804,12 +1804,12 @@ drawinglayer::primitive2d::Primitive2DSequence ImplRenderPaintProc::createRedire xRetval = sdr::contact::ViewObjectContactRedirector::createRedirectedPrimitive2DSequence(rOriginal, rDisplayInfo); - if(xRetval.hasElements() && bTagUsed) + if(!xRetval.empty() && bTagUsed) { // embed Primitive2DSequence in a structure tag element for // exactly this purpose (StructureTagPrimitive2D) const drawinglayer::primitive2d::Primitive2DReference xReference(new drawinglayer::primitive2d::StructureTagPrimitive2D(eElement, xRetval)); - xRetval = drawinglayer::primitive2d::Primitive2DSequence(&xReference, 1); + xRetval = drawinglayer::primitive2d::Primitive2DContainer { xReference }; } } } diff --git a/sd/source/ui/view/sdview.cxx b/sd/source/ui/view/sdview.cxx index 8accd2af7d53..cff5e65d9a44 100644 --- a/sd/source/ui/view/sdview.cxx +++ b/sd/source/ui/view/sdview.cxx @@ -179,7 +179,7 @@ public: // all default implementations just call the same methods at the original. To do something // different, override the method and at least do what the method does. - virtual drawinglayer::primitive2d::Primitive2DSequence createRedirectedPrimitive2DSequence( + virtual drawinglayer::primitive2d::Primitive2DContainer createRedirectedPrimitive2DSequence( const sdr::contact::ViewObjectContact& rOriginal, const sdr::contact::DisplayInfo& rDisplayInfo) override; }; @@ -192,12 +192,12 @@ ViewRedirector::~ViewRedirector() { } -drawinglayer::primitive2d::Primitive2DSequence ViewRedirector::createRedirectedPrimitive2DSequence( +drawinglayer::primitive2d::Primitive2DContainer ViewRedirector::createRedirectedPrimitive2DSequence( const sdr::contact::ViewObjectContact& rOriginal, const sdr::contact::DisplayInfo& rDisplayInfo) { SdrObject* pObject = rOriginal.GetViewContact().TryToGetSdrObject(); - drawinglayer::primitive2d::Primitive2DSequence xRetval; + drawinglayer::primitive2d::Primitive2DContainer xRetval; if(pObject && pObject->GetPage()) { @@ -290,7 +290,7 @@ drawinglayer::primitive2d::Primitive2DSequence ViewRedirector::createRedirectedP aPolygon, aLine, aStroke)); - drawinglayer::primitive2d::appendPrimitive2DReferenceToPrimitive2DSequence(xRetval, xRef); + xRetval.push_back(xRef); } // now paint the placeholder description, but only when masterpage @@ -437,7 +437,7 @@ drawinglayer::primitive2d::Primitive2DSequence ViewRedirector::createRedirectedP aFontAttribute, aLocale, aFontColor)); - drawinglayer::primitive2d::appendPrimitive2DReferenceToPrimitive2DSequence(xRetval, xRef); + xRetval.push_back(xRef); } } } @@ -446,8 +446,7 @@ drawinglayer::primitive2d::Primitive2DSequence ViewRedirector::createRedirectedP if(bDoCreateGeometry) { - drawinglayer::primitive2d::appendPrimitive2DSequenceToPrimitive2DSequence( - xRetval, + xRetval.append( sdr::contact::ViewObjectContactRedirector::createRedirectedPrimitive2DSequence( rOriginal, rDisplayInfo)); |