sc/source/core/opencl/openclwrapper.cxx | 1 - sc/source/filter/excel/excform.cxx | 14 +++++++++++--- sc/source/filter/excel/impop.cxx | 5 +++-- sc/source/filter/inc/imp_op.hxx | 6 ++++-- 4 files changed, 18 insertions(+), 8 deletions(-)
New commits: commit bc90f1c6fb5a8c4868e0f12212a373c754c9010c Author: Kohei Yoshida <kohei.yosh...@collabora.com> Date: Tue Sep 17 20:53:24 2013 -0400 Add a heuristic to avoid always pre-compile OpenCL kernels (for xls). If we still have 3 MB worth of stream to parse after the first formula record, we pre-compile OpenCL kernels in a separate thread. Change-Id: I129d95c26f26e4b1eb989bc2a1764a3f87f71fcb diff --git a/sc/source/core/opencl/openclwrapper.cxx b/sc/source/core/opencl/openclwrapper.cxx index 2b2f8f7..78d3bef 100644 --- a/sc/source/core/opencl/openclwrapper.cxx +++ b/sc/source/core/opencl/openclwrapper.cxx @@ -2770,7 +2770,6 @@ void compileKernels(const OUString* pDeviceId) if (nStatus != CL_SUCCESS) r.mpKernel = NULL; } - } }} diff --git a/sc/source/filter/excel/excform.cxx b/sc/source/filter/excel/excform.cxx index 49ca6ca..b557de5 100644 --- a/sc/source/filter/excel/excform.cxx +++ b/sc/source/filter/excel/excform.cxx @@ -136,11 +136,19 @@ void ImportExcel::Formula( } } - if (!mxCLKernelThread.is()) + if (mbRunCLKernelThread && !mxCLKernelThread.is()) { - mxCLKernelThread.set(new sc::CLBuildKernelThread); - mxCLKernelThread->launch(); + double fRemainSize = maStrm.GetSvStreamSize() - maStrm.GetSvStreamPos(); + fRemainSize /= 1048576; // Switch to MB. + if (fRemainSize > 3.0) + { + // We still have more than 3MB of stream to parse. Start a thread to pre-compile OpenCL kernels. + mxCLKernelThread.set(new sc::CLBuildKernelThread); + mxCLKernelThread->launch(); + } + mbRunCLKernelThread = false; } + ConvErr eErr = pFormConv->Convert( pResult, maStrm, nFormLen, true, FT_CellFormula); ScFormulaCell* pCell = NULL; diff --git a/sc/source/filter/excel/impop.cxx b/sc/source/filter/excel/impop.cxx index e03980b..16c4ac5 100644 --- a/sc/source/filter/excel/impop.cxx +++ b/sc/source/filter/excel/impop.cxx @@ -116,8 +116,9 @@ ImportExcel::ImportExcel( XclImpRootData& rImpData, SvStream& rStrm ): maScOleSize( ScAddress::INITIALIZE_INVALID ), mnLastRefIdx( 0 ), mnIxfeIndex( 0 ), - mbBiff2HasXfs( false ), - mbBiff2HasXfsValid( false ) + mbBiff2HasXfs(false), + mbBiff2HasXfsValid(false), + mbRunCLKernelThread(true) { nBdshtTab = 0; diff --git a/sc/source/filter/inc/imp_op.hxx b/sc/source/filter/inc/imp_op.hxx index 613ae30..6e44f31 100644 --- a/sc/source/filter/inc/imp_op.hxx +++ b/sc/source/filter/inc/imp_op.hxx @@ -106,8 +106,6 @@ protected: sal_Int16 mnLastRefIdx; sal_uInt16 mnIxfeIndex; /// Current XF identifier from IXFE record. - bool mbBiff2HasXfs; /// Select XF formatting or direct formatting in BIFF2. - bool mbBiff2HasXfsValid; /// False = mbBiff2HasXfs is undetermined yet. SCTAB nBdshtTab; // Counter fuer Boundsheet ScFormulaCell* pLastFormCell; // fuer String-Records @@ -115,6 +113,10 @@ protected: sal_Bool bTabTruncated; // wenn Bereichsueberschreitung zum // Abschneiden von Zellen fuehrt + bool mbBiff2HasXfs:1; /// Select XF formatting or direct formatting in BIFF2. + bool mbBiff2HasXfsValid:1; /// False = mbBiff2HasXfs is undetermined yet. + bool mbRunCLKernelThread:1; + // Record-Funktionen void ReadFileSharing(); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits