sc/Module_sc.mk | 4 -- sc/source/core/data/formulacell.cxx | 49 ++++++++++++++++++++++++++---------- 2 files changed, 37 insertions(+), 16 deletions(-)
New commits: commit 5783999465fe01fac923d2d5d764a0334bbe195c Author: Tor Lillqvist <[email protected]> Date: Mon Nov 18 20:43:09 2013 +0200 Enable sc_opencl_test again Change-Id: I28079dbda04529b1d9a63aca04a1a6b95ca4aa14 diff --git a/sc/Module_sc.mk b/sc/Module_sc.mk index c4a38ee..2ca7ad2 100644 --- a/sc/Module_sc.mk +++ b/sc/Module_sc.mk @@ -47,13 +47,11 @@ $(eval $(call gb_Module_add_targets,sc,\ endif -# Disabled because fails on too many machines in -# the OpenCL compiler -# CppunitTest_sc_opencl_test \ $(eval $(call gb_Module_add_check_targets,sc,\ CppunitTest_sc_ucalc \ CppunitTest_sc_filters_test \ CppunitTest_sc_rangelst_test \ + CppunitTest_sc_opencl_test \ )) $(eval $(call gb_Module_add_slowcheck_targets,sc, \ commit 389570d1133d7307f02f8a7b2f899d453511d5b3 Author: Tor Lillqvist <[email protected]> Date: Mon Nov 18 20:27:48 2013 +0200 Try to make the background OpenCL compilation conditional at run-time Change-Id: I2366465f4e786f905c32b17a15c16486c4c21d38 diff --git a/sc/source/core/data/formulacell.cxx b/sc/source/core/data/formulacell.cxx index cf4516d..8a7d644 100644 --- a/sc/source/core/data/formulacell.cxx +++ b/sc/source/core/data/formulacell.cxx @@ -18,6 +18,7 @@ */ #include "formulacell.hxx" +#include "grouptokenconverter.hxx" #include "compiler.hxx" #include "document.hxx" @@ -414,14 +415,18 @@ ScFormulaCellGroup::ScFormulaCellGroup() : mbSubTotal(false), meCalcState(sc::GroupCalcEnabled) { - if (ScInterpreter::GetGlobalConfig().mbOpenCLEnabled) + static bool bBackgroundCompilation = getenv("SC_BACKGROUND_COMPILATION") != NULL; + if (bBackgroundCompilation) { - osl::MutexGuard aGuard(getOpenCLCompilationThreadMutex()); - if (mnCount++ == 0) + if (ScInterpreter::GetGlobalConfig().mbOpenCLEnabled) { - assert(!mxCLKernelThread.is()); - mxCLKernelThread.set(new sc::CLBuildKernelThread); - mxCLKernelThread->launch(); + osl::MutexGuard aGuard(getOpenCLCompilationThreadMutex()); + if (mnCount++ == 0) + { + assert(!mxCLKernelThread.is()); + mxCLKernelThread.set(new sc::CLBuildKernelThread); + mxCLKernelThread->launch(); + } } } } @@ -431,7 +436,7 @@ ScFormulaCellGroup::~ScFormulaCellGroup() if (ScInterpreter::GetGlobalConfig().mbOpenCLEnabled) { osl::MutexGuard aGuard(getOpenCLCompilationThreadMutex()); - if (--mnCount == 0) + if (--mnCount == 0 && mxCLKernelThread.is()) { assert(mxCLKernelThread.is()); mxCLKernelThread->finish(); @@ -3480,17 +3485,35 @@ bool ScFormulaCell::InterpretFormulaGroup() if (mxGroup->mbInvariant && false) return InterpretInvariantFormulaGroup(); - ScTokenArray aDummy; if (mxGroup->meCalcState == sc::GroupCalcEnabled) + { + ScTokenArray aCode; + ScAddress aTopPos = aPos; + aTopPos.SetRow(mxGroup->mpTopCell->aPos.Row()); + ScGroupTokenConverter aConverter(aCode, *pDocument, *this, mxGroup->mpTopCell->aPos); + if (!aConverter.convert(*pCode)) + { + mxGroup->meCalcState = sc::GroupCalcDisabled; + return false; + } mxGroup->meCalcState = sc::GroupCalcRunning; - if (!sc::FormulaGroupInterpreter::getStatic()->interpret(*pDocument, mxGroup->mpTopCell->aPos, mxGroup, aDummy)) + if (!sc::FormulaGroupInterpreter::getStatic()->interpret(*pDocument, mxGroup->mpTopCell->aPos, mxGroup, aCode)) + { + mxGroup->meCalcState = sc::GroupCalcDisabled; + return false; + } + mxGroup->meCalcState = sc::GroupCalcEnabled; + } + else { - mxGroup->meCalcState = sc::GroupCalcDisabled; - return false; + ScTokenArray aDummy; + if (!sc::FormulaGroupInterpreter::getStatic()->interpret(*pDocument, mxGroup->mpTopCell->aPos, mxGroup, aDummy)) + { + mxGroup->meCalcState = sc::GroupCalcDisabled; + return false; + } } - if (mxGroup->meCalcState == sc::GroupCalcRunning) - mxGroup->meCalcState = sc::GroupCalcEnabled; return true; } _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
