diff options
author | Tor Lillqvist <tml@collabora.com> | 2017-09-29 17:43:24 +0300 |
---|---|---|
committer | Dennis Francis <dennis.francis@collabora.co.uk> | 2017-11-21 13:49:51 +0530 |
commit | d2e2f4b7b69c97f8741bbaadbf2a88219c4ce483 (patch) | |
tree | f9941462e53fcfbf6c470d3f4ef9695864f690f8 | |
parent | 74956f3108579c603eecf3410d73866c2c4e2c50 (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.cxx | 16 |
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) { |