summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTor Lillqvist <tml@collabora.com>2017-09-29 17:43:24 +0300
committerDennis Francis <dennis.francis@collabora.co.uk>2017-11-21 13:49:51 +0530
commitd2e2f4b7b69c97f8741bbaadbf2a88219c4ce483 (patch)
treef9941462e53fcfbf6c470d3f4ef9695864f690f8
parent74956f3108579c603eecf3410d73866c2c4e2c50 (diff)
Disable formula group threading for macros and table ops
Those are likely highly problematic to do in parallel. Change-Id: I50cc32eb72f6b7951d247ecd787b2942cd7d9163
-rw-r--r--sc/source/core/tool/token.cxx16
1 files changed, 14 insertions, 2 deletions
diff --git a/sc/source/core/tool/token.cxx b/sc/source/core/tool/token.cxx
index dcbcc72f1de5..0a586073c7c6 100644
--- a/sc/source/core/tool/token.cxx
+++ b/sc/source/core/tool/token.cxx
@@ -1337,16 +1337,28 @@ bool ScTokenArray::AddFormulaToken(
void ScTokenArray::CheckToken( const FormulaToken& r )
{
+ static const std::set<OpCode> aThreadedCalcBlackList({
+ ocMacro,
+ ocTableOp
+ });
+
if (IsFormulaVectorDisabled())
// It's already disabled. No more checking needed.
return;
static const bool bThreadingRequested = std::getenv("CPU_THREADED_CALCULATION");
+ OpCode eOp = r.GetOpCode();
+
if (!ScCalcConfig::isOpenCLEnabled() && bThreadingRequested)
+ {
+ if (aThreadedCalcBlackList.count(eOp))
+ {
+ meVectorState = FormulaVectorDisabledNotInSubSet;
+ SAL_INFO("sc.core.formulagroup", "opcode " << formula::FormulaCompiler().GetOpCodeMap(sheet::FormulaLanguage::ENGLISH)->getSymbol(eOp) << " disables threaded calculation of formula group");
+ }
return;
-
- OpCode eOp = r.GetOpCode();
+ }
if (SC_OPCODE_START_FUNCTION <= eOp && eOp < SC_OPCODE_STOP_FUNCTION)
{