From 7b0f064dc4e7d33fe9bd927dae35ab0a4ef97b5f Mon Sep 17 00:00:00 2001 From: Bartosz Kosiorek Date: Fri, 1 Dec 2017 23:11:45 +0100 Subject: tdf#109340 Improve performance by reducing matrix multiplication Multiplication of two B2DHomMatrix with operator* is very CPU expensive, because 24 of double-precision floating point multiplication needs to be performed. With this patch I have reduced Multiplication of matrix, by creating combined Scale and Transform matrix at once. It allows to reduce matrix multiplication by one, and improve import time. Change-Id: I85fde6354e458659a0214514c6e05b8e2ee04185 Reviewed-on: https://gerrit.libreoffice.org/45704 Reviewed-by: Patrick Jaap Reviewed-by: Thorsten Behrens Tested-by: Thorsten Behrens --- drawinglayer/source/tools/emfphelperdata.cxx | 6 +++--- drawinglayer/source/tools/emfphelperdata.hxx | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) (limited to 'drawinglayer') diff --git a/drawinglayer/source/tools/emfphelperdata.cxx b/drawinglayer/source/tools/emfphelperdata.cxx index bd1f9e9b071a..a5dda5d2ad96 100644 --- a/drawinglayer/source/tools/emfphelperdata.cxx +++ b/drawinglayer/source/tools/emfphelperdata.cxx @@ -283,8 +283,8 @@ namespace emfplushelper // To evtl. correct and see where this came from, please compare with the implementations // of EmfPlusHelperData::MapToDevice and EmfPlusHelperData::Map* in prev versions maMapTransform = maWorldTransform; - maMapTransform *= basegfx::utils::createScaleB2DHomMatrix(100.0 * mnMmX / mnPixX, 100.0 * mnMmY / mnPixY); - maMapTransform *= basegfx::utils::createTranslateB2DHomMatrix(double(-mnFrameLeft), double(-mnFrameTop)); + maMapTransform *= basegfx::utils::createScaleTranslateB2DHomMatrix(100.0 * mnMmX / mnPixX, 100.0 * mnMmY / mnPixY, + double(-mnFrameLeft), double(-mnFrameTop)); maMapTransform *= maBaseTransform; } @@ -812,7 +812,7 @@ namespace emfplushelper { sal_uInt32 header, version; - rMS.ReadUInt32(header).ReadUInt32(version).ReadInt32(mnHDPI).ReadInt32(mnVDPI); + rMS.ReadUInt32(header).ReadUInt32(version).ReadUInt32(mnHDPI).ReadUInt32(mnVDPI); SAL_INFO("drawinglayer", "EMF+ Header"); SAL_INFO("drawinglayer", "EMF+\theader: 0x" << std::hex << header << " version: " << std::dec << version << " horizontal DPI: " << mnHDPI << " vertical DPI: " << mnVDPI << " dual: " << (flags & 1)); break; diff --git a/drawinglayer/source/tools/emfphelperdata.hxx b/drawinglayer/source/tools/emfphelperdata.hxx index 431e9b0a5c72..729835307633 100644 --- a/drawinglayer/source/tools/emfphelperdata.hxx +++ b/drawinglayer/source/tools/emfphelperdata.hxx @@ -198,8 +198,8 @@ namespace emfplushelper float mfPageScale; sal_Int32 mnOriginX; sal_Int32 mnOriginY; - sal_Int32 mnHDPI; - sal_Int32 mnVDPI; + sal_uInt32 mnHDPI; + sal_uInt32 mnVDPI; /* EMF+ emf header info */ sal_Int32 mnFrameLeft; -- cgit