tdf#120216 improve svx table performance.

By defining operator== for SdrConnectStyleData and
SdrFrameBorderData, and make a deeper comparison instead
of the pointer stored shared_ptr in SdrFrameBorderPrimitive2D.
The SdrFrameBorderPrimitive2D::operator== always
return false before. The response time of clicking a cell
and then entering editing mode improved from 4s to 0.5s
in my environment.

Change-Id: I625d9f69a07f42cac4a6cba45ec9e1c4195b6d58
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/90120
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
This commit is contained in:
Mark Hung
2020-03-06 20:40:17 +01:00
committed by Noel Grandin
parent e3b14639dc
commit 32c8bd660e
2 changed files with 22 additions and 1 deletions
@@ -54,6 +54,7 @@ namespace drawinglayer
const svx::frame::Style& getStyle() const { return maStyle; }
const basegfx::B2DVector& getNormalizedPerpendicular() const { return maNormalizedPerpendicular; }
bool getStyleMirrored() const { return mbStyleMirrored; }
bool operator==(const SdrConnectStyleData& rCompare) const;
};
std::vector<SdrConnectStyleData> maStart;
@@ -77,6 +78,7 @@ namespace drawinglayer
double fMinDiscreteUnit) const;
double getMinimalNonZeroBorderWidth() const;
bool operator==(const SdrFrameBorderData& rCompare) const;
};
typedef std::vector<SdrFrameBorderData> SdrFrameBorderDataVector;
@@ -654,6 +654,13 @@ namespace drawinglayer::primitive2d
{
}
bool SdrFrameBorderData::SdrConnectStyleData::operator==(const SdrFrameBorderData::SdrConnectStyleData& rCompare) const
{
return mbStyleMirrored == rCompare.mbStyleMirrored
&& maStyle == rCompare.maStyle
&& maNormalizedPerpendicular == rCompare.maNormalizedPerpendicular;
}
SdrFrameBorderData::SdrFrameBorderData(
const basegfx::B2DPoint& rOrigin,
const basegfx::B2DVector& rX,
@@ -748,6 +755,16 @@ namespace drawinglayer::primitive2d
}
bool SdrFrameBorderData::operator==(const SdrFrameBorderData& rCompare) const
{
return maOrigin == rCompare.maOrigin
&& maX == rCompare.maX
&& maStyle == rCompare.maStyle
&& maColor == rCompare.maColor
&& mbForceColor == rCompare.mbForceColor
&& maStart == rCompare.maStart
&& maEnd == rCompare.maEnd;
}
void SdrFrameBorderPrimitive2D::create2DDecomposition(
@@ -860,7 +877,9 @@ namespace drawinglayer::primitive2d
{
const SdrFrameBorderPrimitive2D& rCompare = static_cast<const SdrFrameBorderPrimitive2D&>(rPrimitive);
return getFrameBorders() == rCompare.getFrameBorders()
return (getFrameBorders() == rCompare.getFrameBorders()
|| (getFrameBorders() && rCompare.getFrameBorders()
&& *getFrameBorders() == *rCompare.getFrameBorders()))
&& doForceToSingleDiscreteUnit() == rCompare.doForceToSingleDiscreteUnit();
}