include/comphelper/configurationlistener.hxx | 2 +- sc/inc/calcconfig.hxx | 4 ++++ sc/source/core/data/formulacell.cxx | 3 +-- sc/source/core/inc/interpre.hxx | 3 ++- sc/source/core/tool/calcconfig.cxx | 16 +++++++++++++++- sc/source/core/tool/formulagroup.cxx | 8 ++++---- sc/source/core/tool/interpr1.cxx | 2 +- sc/source/core/tool/interpr4.cxx | 13 ++++++++++--- sc/source/core/tool/interpr5.cxx | 3 +-- 9 files changed, 39 insertions(+), 15 deletions(-)
New commits: commit 866909c1db1c81fc6b64184bbc715766a09e2d4b Author: Michael Meeks <michael.me...@collabora.com> Date: Wed Oct 14 19:28:47 2015 +0100 Improve performance by using the ScCalcOptions for OpenCL. Use the new configurationlistener to track the relevant setting. Change-Id: I9decea55df25f7eb34cd2fef94743d1907360d16 Reviewed-on: https://gerrit.libreoffice.org/19377 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Michael Meeks <michael.me...@collabora.com> diff --git a/include/comphelper/configurationlistener.hxx b/include/comphelper/configurationlistener.hxx index 2bdb2eec..80194ae 100644 --- a/include/comphelper/configurationlistener.hxx +++ b/include/comphelper/configurationlistener.hxx @@ -57,7 +57,7 @@ public: virtual inline ~ConfigurationListenerProperty(); - uno_type get() { return maValue; } + uno_type get() const { return maValue; } }; class COMPHELPER_DLLPUBLIC ConfigurationListener : diff --git a/sc/inc/calcconfig.hxx b/sc/inc/calcconfig.hxx index 29337ea..158bc1a 100644 --- a/sc/inc/calcconfig.hxx +++ b/sc/inc/calcconfig.hxx @@ -20,6 +20,8 @@ #include <formula/opcode.hxx> #include <rtl/ustring.hxx> +#include <comphelper/configurationlistener.hxx> + // have to match the registry values enum ScRecalcOptions { @@ -46,6 +48,8 @@ struct SC_DLLPUBLIC ScCalcConfig bool mbEmptyStringAsZero:1; bool mbHasStringRefSyntax:1; + comphelper::ConfigurationListenerProperty<bool> mbOpenCLEnabled; + bool mbOpenCLSubsetOnly:1; bool mbOpenCLAutoSelect:1; OUString maOpenCLDevice; diff --git a/sc/source/core/data/formulacell.cxx b/sc/source/core/data/formulacell.cxx index 06f6439..09a06bd 100644 --- a/sc/source/core/data/formulacell.cxx +++ b/sc/source/core/data/formulacell.cxx @@ -60,7 +60,6 @@ #include <listenerquery.hxx> #include <listenerqueryids.hxx> #include <grouparealistener.hxx> -#include <officecfg/Office/Common.hxx> #include <memory> #include <boost/ptr_container/ptr_map.hpp> @@ -3891,7 +3890,7 @@ bool ScFormulaCell::InterpretFormulaGroup() return false; } - if (!officecfg::Office::Common::Misc::UseOpenCL::get()) + if (!ScInterpreter::GetGlobalConfig().mbOpenCLEnabled.get()) return false; // TODO : Disable invariant formula group interpretation for now in order diff --git a/sc/source/core/inc/interpre.hxx b/sc/source/core/inc/interpre.hxx index 280d9d1..22f9d11 100644 --- a/sc/source/core/inc/interpre.hxx +++ b/sc/source/core/inc/interpre.hxx @@ -146,7 +146,8 @@ public: VolatileType GetVolatileType() const { return meVolatileType;} private: - static ScCalcConfig maGlobalConfig; + static ScCalcConfig& GetOrCreateGlobalConfig(); + static ScCalcConfig *mpGlobalConfig; static ScTokenStack* pGlobalStack; static bool bGlobalStackInUse; diff --git a/sc/source/core/tool/calcconfig.cxx b/sc/source/core/tool/calcconfig.cxx index 1f04005..a1ac442 100644 --- a/sc/source/core/tool/calcconfig.cxx +++ b/sc/source/core/tool/calcconfig.cxx @@ -20,11 +20,25 @@ #include "compiler.hxx" #include "docsh.hxx" +#include <comphelper/configurationlistener.hxx> + +using comphelper::ConfigurationListener; + +static rtl::Reference<ConfigurationListener> getMiscListener() +{ + static rtl::Reference<ConfigurationListener> xListener; + if (!xListener.is()) + xListener = rtl::Reference<ConfigurationListener>( + new ConfigurationListener("/org.openoffice.Office.Common/Misc")); + return xListener; +} + ScCalcConfig::ScCalcConfig() : meStringRefAddressSyntax(formula::FormulaGrammar::CONV_UNSPECIFIED), meStringConversion(StringConversion::LOCALE), // old LibreOffice behavior mbEmptyStringAsZero(false), - mbHasStringRefSyntax(false) + mbHasStringRefSyntax(false), + mbOpenCLEnabled(getMiscListener(), "UseOpenCL") { setOpenCLConfigToDefault(); diff --git a/sc/source/core/tool/formulagroup.cxx b/sc/source/core/tool/formulagroup.cxx index f3dcd37..659c231 100644 --- a/sc/source/core/tool/formulagroup.cxx +++ b/sc/source/core/tool/formulagroup.cxx @@ -477,7 +477,7 @@ FormulaGroupInterpreter *FormulaGroupInterpreter::getStatic() { #if HAVE_FEATURE_OPENCL const ScCalcConfig& rConfig = ScInterpreter::GetGlobalConfig(); - if (officecfg::Office::Common::Misc::UseOpenCL::get()) + if (ScInterpreter::GetGlobalConfig().mbOpenCLEnabled.get()) switchOpenCLDevice(rConfig.maOpenCLDevice, rConfig.mbOpenCLAutoSelect); #endif static bool bAllowSoftwareInterpreter = (getenv("SC_ALLOW_BROKEN_SOFTWARE_INTERPRETER") != NULL); @@ -503,7 +503,7 @@ void FormulaGroupInterpreter::fillOpenCLInfo(std::vector<OpenCLPlatformInfo>& rP bool FormulaGroupInterpreter::switchOpenCLDevice(const OUString& rDeviceId, bool bAutoSelect, bool bForceEvaluation) { - bool bOpenCLEnabled = officecfg::Office::Common::Misc::UseOpenCL::get(); + bool bOpenCLEnabled = ScInterpreter::GetGlobalConfig().mbOpenCLEnabled.get(); static bool bAllowSoftwareInterpreter = (getenv("SC_ALLOW_BROKEN_SOFTWARE_INTERPRETER") != NULL); if (!bOpenCLEnabled || (bAllowSoftwareInterpreter && rDeviceId == OPENCL_SOFTWARE_DEVICE_CONFIG_NAME)) { @@ -526,7 +526,7 @@ bool FormulaGroupInterpreter::switchOpenCLDevice(const OUString& rDeviceId, bool delete msInstance; msInstance = NULL; - if ( officecfg::Office::Common::Misc::UseOpenCL::get() ) + if ( ScInterpreter::GetGlobalConfig().mbOpenCLEnabled.get() ) { msInstance = new sc::opencl::FormulaGroupInterpreterOpenCL(); return msInstance != NULL; @@ -539,7 +539,7 @@ void FormulaGroupInterpreter::getOpenCLDeviceInfo(sal_Int32& rDeviceId, sal_Int3 { rDeviceId = -1; rPlatformId = -1; - bool bOpenCLEnabled = officecfg::Office::Common::Misc::UseOpenCL::get(); + bool bOpenCLEnabled = ScInterpreter::GetGlobalConfig().mbOpenCLEnabled.get(); if(!bOpenCLEnabled) return; diff --git a/sc/source/core/tool/interpr1.cxx b/sc/source/core/tool/interpr1.cxx index b9cdc1c..e4838e4 100644 --- a/sc/source/core/tool/interpr1.cxx +++ b/sc/source/core/tool/interpr1.cxx @@ -76,7 +76,7 @@ static const sal_uInt64 n2power48 = SAL_CONST_UINT64( 281474976710656); // 2^48 IMPL_FIXEDMEMPOOL_NEWDEL( ScTokenStack ) IMPL_FIXEDMEMPOOL_NEWDEL( ScInterpreter ) -ScCalcConfig ScInterpreter::maGlobalConfig; +ScCalcConfig *ScInterpreter::mpGlobalConfig = NULL; ScTokenStack* ScInterpreter::pGlobalStack = NULL; bool ScInterpreter::bGlobalStackInUse = false; diff --git a/sc/source/core/tool/interpr4.cxx b/sc/source/core/tool/interpr4.cxx index e8a3b1d..bd84fa6 100644 --- a/sc/source/core/tool/interpr4.cxx +++ b/sc/source/core/tool/interpr4.cxx @@ -3503,19 +3503,26 @@ ScInterpreter::~ScInterpreter() delete pTokenMatrixMap; } +ScCalcConfig& ScInterpreter::GetOrCreateGlobalConfig() +{ + if (!mpGlobalConfig) + mpGlobalConfig = new ScCalcConfig(); + return *mpGlobalConfig; +} + void ScInterpreter::SetGlobalConfig(const ScCalcConfig& rConfig) { - maGlobalConfig = rConfig; + GetOrCreateGlobalConfig() = rConfig; } const ScCalcConfig& ScInterpreter::GetGlobalConfig() { - return maGlobalConfig; + return GetOrCreateGlobalConfig(); } void ScInterpreter::MergeCalcConfig() { - maCalcConfig = maGlobalConfig; + maCalcConfig = GetOrCreateGlobalConfig(); maCalcConfig.MergeDocumentSpecific( pDok->GetCalcConfig()); } diff --git a/sc/source/core/tool/interpr5.cxx b/sc/source/core/tool/interpr5.cxx index 0d2fb0a..88cd12d 100644 --- a/sc/source/core/tool/interpr5.cxx +++ b/sc/source/core/tool/interpr5.cxx @@ -26,7 +26,6 @@ #endif #include <unotools/bootstrap.hxx> -#include <officecfg/Office/Common.hxx> #include <svl/zforlist.hxx> #include "interpre.hxx" @@ -912,7 +911,7 @@ void ScInterpreter::ScMatInv() SCSIZE nC, nR; pMat->GetDimensions(nC, nR); - if (officecfg::Office::Common::Misc::UseOpenCL::get()) + if (ScInterpreter::GetGlobalConfig().mbOpenCLEnabled.get()) { sc::FormulaGroupInterpreter *pInterpreter = sc::FormulaGroupInterpreter::getStatic(); if (pInterpreter != NULL) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits