offapi/com/sun/star/sheet/opencl/XOpenCLSelection.idl |   25 ++++++++++
 sc/inc/docuno.hxx                                     |   14 +++++
 sc/source/ui/unoobj/docuno.cxx                        |   45 ++++++++++++++++++
 3 files changed, 84 insertions(+)

New commits:
commit 88fe046c158d5a20f8f9fa14a7d734ea3aaa85be
Author: Tor Lillqvist <[email protected]>
Date:   Mon Jan 5 20:39:55 2015 +0200

    Extend the Calc UNO API for the conditions whether to use OpenCL for a 
formula
    
    Setters/getters for the flag whether to restrict OpenCL to formulas that 
use a
    subset of opcodes, and the lower limit on number of cells a fomula should
    refer to in order for OpenCL to be considered.
    
    Change-Id: Ifeb11d4e4003f13e392fe03f1ce2f89147f46e38

diff --git a/offapi/com/sun/star/sheet/opencl/XOpenCLSelection.idl 
b/offapi/com/sun/star/sheet/opencl/XOpenCLSelection.idl
index cbf1af0..b7f47b8 100644
--- a/offapi/com/sun/star/sheet/opencl/XOpenCLSelection.idl
+++ b/offapi/com/sun/star/sheet/opencl/XOpenCLSelection.idl
@@ -74,6 +74,31 @@ interface XOpenCLSelection : com::sun::star::uno::XInterface
      */
     sequence< OpenCLPlatform > getOpenCLPlatforms();
 
+    /*
+     * Sets OpenCL to be considered only for formulas that use only a specific 
subset of opcodes.
+     */
+    void enableOpcodeSubsetTest();
+
+    /*
+     * Sets OpenCL to be considered for formulas regardless of what opcodes 
they contain.
+     */
+    void disableOpcodeSubsetTest();
+
+    /*
+     * Returns whether OpenCL is considered or not depending on the opcodes a 
formula uses.
+     */
+    boolean isOpcodeSubsetTested();
+
+    /*
+     * Sets the lower limit on the number of cells involved in a formula for 
OpenCL to be considered.
+     */
+    void setFormulaCellNumberLimit( [in] long number );
+
+    /*
+     * Returns the lower limit on the number of cells involved in a formula 
for OpenCL to be considered.
+     */
+    long getFormulaCellNumberLimit();
+
 };
 
 }; }; }; }; };
diff --git a/sc/inc/docuno.hxx b/sc/inc/docuno.hxx
index da0ea25..9f7ed0a 100644
--- a/sc/inc/docuno.hxx
+++ b/sc/inc/docuno.hxx
@@ -353,6 +353,20 @@ public:
         SAL_CALL getOpenCLPlatforms()
                                 throw(::com::sun::star::uno::RuntimeException, 
std::exception) SAL_OVERRIDE;
 
+    virtual void SAL_CALL enableOpcodeSubsetTest()
+                                throw 
(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+
+    virtual void SAL_CALL disableOpcodeSubsetTest()
+                                throw 
(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+
+    virtual sal_Bool SAL_CALL isOpcodeSubsetTested()
+                                throw 
(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+
+    virtual void SAL_CALL setFormulaCellNumberLimit( sal_Int32 number )
+                                throw 
(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
+
+    virtual sal_Int32 SAL_CALL getFormulaCellNumberLimit()
+                                throw 
(::com::sun::star::uno::RuntimeException, std::exception) SAL_OVERRIDE;
 
     // ITiledRenderable
     virtual void paintTile( VirtualDevice& rDevice,
diff --git a/sc/source/ui/unoobj/docuno.cxx b/sc/source/ui/unoobj/docuno.cxx
index 6993c04..10f50aa 100644
--- a/sc/source/ui/unoobj/docuno.cxx
+++ b/sc/source/ui/unoobj/docuno.cxx
@@ -28,6 +28,7 @@
 #include <svx/unoshape.hxx>
 
 #include <officecfg/Office/Common.hxx>
+#include <officecfg/Office/Calc.hxx>
 #include <svl/numuno.hxx>
 #include <svl/smplhint.hxx>
 #include <unotools/moduleoptions.hxx>
@@ -2448,6 +2449,50 @@ uno::Sequence< sheet::opencl::OpenCLPlatform > 
ScModelObj::getOpenCLPlatforms()
 #endif
 }
 
+namespace {
+
+void setOpcodeSubsetTest(bool bFlag)
+    throw (uno::RuntimeException, std::exception)
+{
+    boost::shared_ptr<comphelper::ConfigurationChanges> 
batch(comphelper::ConfigurationChanges::create());
+    
officecfg::Office::Calc::Formula::Calculation::OpenCLSubsetOnly::set(bFlag, 
batch);
+    batch->commit();
+}
+
+}
+
+void ScModelObj::enableOpcodeSubsetTest()
+    throw (uno::RuntimeException, std::exception)
+{
+    setOpcodeSubsetTest(true);
+}
+
+void ScModelObj::disableOpcodeSubsetTest()
+    throw (uno::RuntimeException, std::exception)
+{
+    setOpcodeSubsetTest(false);
+}
+
+sal_Bool ScModelObj::isOpcodeSubsetTested()
+    throw (uno::RuntimeException, std::exception)
+{
+    return 
officecfg::Office::Calc::Formula::Calculation::OpenCLSubsetOnly::get();
+}
+
+void ScModelObj::setFormulaCellNumberLimit( sal_Int32 number )
+    throw (uno::RuntimeException, std::exception)
+{
+    boost::shared_ptr<comphelper::ConfigurationChanges> 
batch(comphelper::ConfigurationChanges::create());
+    
officecfg::Office::Calc::Formula::Calculation::OpenCLMinimumDataSize::set(number,
 batch);
+    batch->commit();
+}
+
+sal_Int32 ScModelObj::getFormulaCellNumberLimit()
+    throw (uno::RuntimeException, std::exception)
+{
+    return 
officecfg::Office::Calc::Formula::Calculation::OpenCLMinimumDataSize::get().get();
+}
+
 ScDrawPagesObj::ScDrawPagesObj(ScDocShell* pDocSh) :
     pDocShell( pDocSh )
 {
_______________________________________________
Libreoffice-commits mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to