[Libreoffice-commits] .: Branch 'feature/gsoc-calc-perf2' - sc/inc sc/source
Daniel Bankston
dbank at kemper.freedesktop.org
Thu Jul 5 16:25:00 PDT 2012
sc/inc/document.hxx | 3 ---
sc/source/core/data/cell.cxx | 3 +--
sc/source/core/data/documen2.cxx | 1 -
sc/source/core/data/document.cxx | 1 -
sc/source/filter/xml/xmlcelli.cxx | 9 +++------
sc/source/filter/xml/xmlimprt.cxx | 8 +-------
sc/source/ui/docshell/docsh.cxx | 14 +++++++++++++-
7 files changed, 18 insertions(+), 21 deletions(-)
New commits:
commit 93319669a0c7892af96221bc1e832ba01c5e2d54
Author: Daniel Bankston <daniel.e.bankston at gmail.com>
Date: Thu Jul 5 18:15:45 2012 -0500
Use cached formula results instead of recalculating
This commit undoes some of previous commit in attempt to be less "hackish".
-When importing LibreOffice generated ODS documents, use cached formula
results instead of always recalcuating.
-For other generators, do hard-recalc.
Still need to:
-Stop matrix formula cells from being set dirty to avoid recalculating them.
-Implement special cases for functions that should always be recalculated.
Change-Id: I959872aa2f446b80f9204ee26e94de7140f1f6f9
diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx
index 7559a4e..b4df35b 100644
--- a/sc/inc/document.hxx
+++ b/sc/inc/document.hxx
@@ -371,7 +371,6 @@ private:
bool bInsertingFromOtherDoc;
bool bLoadingMedium;
bool bImportingXML; // special handling of formula text
- bool bImportingLiboGenDoc; //to avoid recalculating formula results of libo generated docs
bool bXMLFromWrapper; // distinguish ScXMLImportWrapper from external component
bool bCalcingAfterLoad; // in CalcAfterLoad TRUE
// don't construct/destruct listeners temporarily
@@ -1564,8 +1563,6 @@ public:
void SetLoadingMedium( bool bVal );
void SetImportingXML( bool bVal );
bool IsImportingXML() const { return bImportingXML; }
- void SetImportingLiboGenDoc( bool bVal ) { bImportingLiboGenDoc = bVal; };
- bool IsImportingLiboGenDoc() const { return bImportingLiboGenDoc; }
void SetXMLFromWrapper( bool bVal );
bool IsXMLFromWrapper() const { return bXMLFromWrapper; }
void SetCalcingAfterLoad( bool bVal ) { bCalcingAfterLoad = bVal; }
diff --git a/sc/source/core/data/cell.cxx b/sc/source/core/data/cell.cxx
index 4d12292..338b0ab 100644
--- a/sc/source/core/data/cell.cxx
+++ b/sc/source/core/data/cell.cxx
@@ -1830,8 +1830,7 @@ void ScFormulaCell::SetDirty()
void ScFormulaCell::SetDirtyVar()
{
- if(!pDocument->IsImportingLiboGenDoc())
- bDirty = true;
+ bDirty = true;
// mark the sheet of this cell to be calculated
//#FIXME do we need to revert this remnant of old fake vba events? pDocument->AddCalculateTable( aPos.Tab() );
}
diff --git a/sc/source/core/data/documen2.cxx b/sc/source/core/data/documen2.cxx
index 0921f20..2419859 100644
--- a/sc/source/core/data/documen2.cxx
+++ b/sc/source/core/data/documen2.cxx
@@ -188,7 +188,6 @@ ScDocument::ScDocument( ScDocumentMode eMode,
bInsertingFromOtherDoc( false ),
bLoadingMedium( false ),
bImportingXML( false ),
- bImportingLiboGenDoc( false ),
bXMLFromWrapper( false ),
bCalcingAfterLoad( false ),
bNoListening( false ),
diff --git a/sc/source/core/data/document.cxx b/sc/source/core/data/document.cxx
index 475a49f..b5e5cc1 100644
--- a/sc/source/core/data/document.cxx
+++ b/sc/source/core/data/document.cxx
@@ -3410,7 +3410,6 @@ void ScDocument::CompileXML()
if ( pValidationList )
pValidationList->CompileXML();
- SetDirty();
SetAutoCalc( bOldAutoCalc );
}
diff --git a/sc/source/filter/xml/xmlcelli.cxx b/sc/source/filter/xml/xmlcelli.cxx
index fac8481..86c7034 100644
--- a/sc/source/filter/xml/xmlcelli.cxx
+++ b/sc/source/filter/xml/xmlcelli.cxx
@@ -757,8 +757,7 @@ void ScXMLTableRowCellContext::AddTextCellToDoc( const ScAddress& rCurrentPos,
pFCell->SetHybridString( *pOUText );
else
bDoIncrement = false;
- if(rXMLImport.GetDocument()->IsImportingLiboGenDoc())
- pFCell->ResetDirty();
+ pFCell->ResetDirty();
}
}
else
@@ -793,8 +792,7 @@ void ScXMLTableRowCellContext::AddNumberCellToDoc( const ScAddress& rCurrentPos
{
ScFormulaCell* pFCell = static_cast<ScFormulaCell*>(pCell);
pFCell->SetHybridDouble( fValue );
- if(rXMLImport.GetDocument()->IsImportingLiboGenDoc())
- pFCell->ResetDirty();
+ pFCell->ResetDirty();
}
}
else
@@ -1025,8 +1023,7 @@ void ScXMLTableRowCellContext::AddNonMatrixFormulaCell( const ScAddress& rCellPo
pFCell->SetHybridString( *pOUTextValue );
else
pFCell->SetHybridDouble( fValue );
- if(pDoc->IsImportingLiboGenDoc())
- pFCell->ResetDirty();
+ pFCell->ResetDirty();
}
else if ( aText[0] == '\'' && aText.getLength() > 1 )
{
diff --git a/sc/source/filter/xml/xmlimprt.cxx b/sc/source/filter/xml/xmlimprt.cxx
index 4b4b605..ccce62e 100644
--- a/sc/source/filter/xml/xmlimprt.cxx
+++ b/sc/source/filter/xml/xmlimprt.cxx
@@ -52,6 +52,7 @@
#include "xmlimprt.hxx"
#include "document.hxx"
+#include "docsh.hxx"
#include "docuno.hxx"
#include "nameuno.hxx"
#include "xmlbodyi.hxx"
@@ -99,7 +100,6 @@
#define SC_REPEAT_ROW "repeat-row"
#define SC_FILTER "filter"
#define SC_PRINT_RANGE "print-range"
-#define SC_LIBO_PROD_NAME "LibreOffice"
using namespace com::sun::star;
using namespace ::xmloff::token;
@@ -2810,12 +2810,6 @@ throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::R
xActionLockable->addActionLock();
pDoc->EnableAdjustHeight(false);
-
- uno::Reference<document::XDocumentPropertiesSupplier> xDPS(GetModel(), uno::UNO_QUERY_THROW);
- uno::Reference<document::XDocumentProperties> xDocProps = xDPS->getDocumentProperties();
- rtl::OUString sGenerator(xDocProps->getGenerator());
- if(sGenerator.match(SC_LIBO_PROD_NAME))
- pDoc->SetImportingLiboGenDoc(true);
}
// XServiceInfo
diff --git a/sc/source/ui/docshell/docsh.cxx b/sc/source/ui/docshell/docsh.cxx
index 8b96ca6..d6b77de 100644
--- a/sc/source/ui/docshell/docsh.cxx
+++ b/sc/source/ui/docshell/docsh.cxx
@@ -137,6 +137,8 @@
#include <vector>
#include <boost/shared_ptr.hpp>
+#define SC_LIBO_PROD_NAME "LibreOffice"
+
using namespace com::sun::star;
using ::com::sun::star::uno::Reference;
using ::com::sun::star::uno::UNO_QUERY;
@@ -384,7 +386,12 @@ void ScDocShell::AfterXMLLoading(sal_Bool bRet)
if (pModificator)
{
+ sal_uInt16 nRecalcState = aDocument.GetHardRecalcState();
+ //temporarily set hard-recalc to prevent calling ScFormulaCell::Notify()
+ //which will set the cells dirty.
+ aDocument.SetHardRecalcState(2);
delete pModificator;
+ aDocument.SetHardRecalcState(nRecalcState);
pModificator = NULL;
}
else
@@ -443,9 +450,14 @@ sal_Bool ScDocShell::LoadXML( SfxMedium* pLoadMedium, const ::com::sun::star::un
if ( nError )
pLoadMedium->SetError( nError, ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( OSL_LOG_PREFIX ) ) );
+ uno::Reference<document::XDocumentPropertiesSupplier> xDPS(GetModel(), uno::UNO_QUERY_THROW);
+ uno::Reference<document::XDocumentProperties> xDocProps = xDPS->getDocumentProperties();
+ rtl::OUString sGenerator(xDocProps->getGenerator());
+ if(!sGenerator.match(SC_LIBO_PROD_NAME))
+ DoHardRecalc(false);
+
aDocument.SetXMLFromWrapper( false );
AfterXMLLoading(bRet);
- aDocument.SetImportingLiboGenDoc(false);
//! row heights...
return bRet;
More information about the Libreoffice-commits
mailing list