[Libreoffice-commits] core.git: Branch 'feature/perfwork5' - 3 commits - include/svl sc/inc sc/source svl/source
Kohei Yoshida
kohei.yoshida at collabora.com
Tue Nov 11 18:56:38 PST 2014
include/svl/broadcast.hxx | 3 +-
sc/inc/calcmacros.hxx | 3 +-
sc/inc/document.hxx | 4 ++
sc/source/core/data/bcaslot.cxx | 56 +++++++++++++++++++++++++++++++++++++++
sc/source/core/data/document.cxx | 8 +++++
sc/source/core/inc/bcaslot.hxx | 44 ++++++++++++++++++------------
svl/source/notify/broadcast.cxx | 9 ++++++
7 files changed, 107 insertions(+), 20 deletions(-)
New commits:
commit 0d15d80fe33edff7f71ce384ba03db702414b521
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date: Tue Nov 11 21:53:57 2014 -0500
Add a means to dump the state of the area broadcaster slot machine.
Change-Id: I158307de667dbe621376dfc01adeef89aa12faaa
diff --git a/sc/inc/calcmacros.hxx b/sc/inc/calcmacros.hxx
index e56712d..8810247 100644
--- a/sc/inc/calcmacros.hxx
+++ b/sc/inc/calcmacros.hxx
@@ -13,8 +13,9 @@
#define DEBUG_COLUMN_STORAGE 0
#define DEBUG_PIVOT_TABLE 0
#define DEBUG_FORMULA_COMPILER 0
+#define DEBUG_AREA_BROADCASTER 0
-#if DEBUG_PIVOT_TABLE || DEBUG_COLUMN_STORAGE || DEBUG_FORMULA_COMPILER
+#if DEBUG_PIVOT_TABLE || DEBUG_COLUMN_STORAGE || DEBUG_FORMULA_COMPILER || DEBUG_AREA_BROADCASTER
#include <iostream>
#include <string>
#include <cstdio>
diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx
index 47387bd..3974b47 100644
--- a/sc/inc/document.hxx
+++ b/sc/inc/document.hxx
@@ -2106,6 +2106,10 @@ public:
SC_DLLPUBLIC void DumpFormulaGroups( SCTAB nTab, SCCOL nCol ) const;
#endif
+#if DEBUG_AREA_BROADCASTER
+ SC_DLLPUBLIC void DumpAreaBroadcasters() const;
+#endif
+
void SetCalcConfig( const ScCalcConfig& rConfig );
const ScCalcConfig& GetCalcConfig() const { return maCalcConfig; }
diff --git a/sc/source/core/data/bcaslot.cxx b/sc/source/core/data/bcaslot.cxx
index f2609a4..8229d68 100644
--- a/sc/source/core/data/bcaslot.cxx
+++ b/sc/source/core/data/bcaslot.cxx
@@ -28,6 +28,10 @@
#include "refupdat.hxx"
#include "table.hxx"
+#if DEBUG_AREA_BROADCASTER
+#include <formulacell.hxx>
+#endif
+
// Number of slots per dimension
// must be integer divisors of MAXCOLCOUNT respectively MAXROWCOUNT
#define BCA_SLOTS_COL ((MAXCOLCOUNT_DEFINE) / 16)
@@ -489,6 +493,33 @@ void ScBroadcastAreaSlot::GetAllListeners(
}
}
+#if DEBUG_AREA_BROADCASTER
+void ScBroadcastAreaSlot::Dump() const
+{
+ ScBroadcastAreas::const_iterator it = aBroadcastAreaTbl.begin(), itEnd = aBroadcastAreaTbl.end();
+ for (; it != itEnd; ++it)
+ {
+ const ScBroadcastAreaEntry& rEntry = *it;
+ const ScBroadcastArea* pArea = rEntry.mpArea;
+ cout << " * range: " << rtl::OUStringToOString(pArea->GetRange().Format(SCA_VALID|SCA_TAB_3D, pDoc), RTL_TEXTENCODING_UTF8).getStr() << endl;
+ const SvtBroadcaster& rBC = pArea->GetBroadcaster();
+ const SvtBroadcaster::ListenersType& rListeners = rBC.GetAllListeners();
+ size_t n = rListeners.size();
+ cout << " * listener count: " << n << endl;
+ for (size_t i = 0; i < n; ++i)
+ {
+ const ScFormulaCell* pFC = dynamic_cast<const ScFormulaCell*>(rListeners[i]);
+ if (!pFC)
+ continue;
+
+ cout << " * listener: formula cell: "
+ << rtl::OUStringToOString(pFC->aPos.Format(SCA_VALID|SCA_TAB_3D, pDoc), RTL_TEXTENCODING_UTF8).getStr()
+ << endl;
+ }
+ }
+}
+#endif
+
void ScBroadcastAreaSlot::FinallyEraseAreas()
{
pBASM->FinallyEraseAreas( this);
@@ -1026,4 +1057,29 @@ std::vector<sc::AreaListener> ScBroadcastAreaSlotMachine::GetAllListeners(
return aRet;
}
+#if DEBUG_AREA_BROADCASTER
+void ScBroadcastAreaSlotMachine::Dump() const
+{
+ cout << "slot distribution count: " << nBcaSlots << endl;
+ TableSlotsMap::const_iterator it = aTableSlotsMap.begin(), itEnd = aTableSlotsMap.end();
+ for (; it != itEnd; ++it)
+ {
+ cout << "-- sheet (index: " << it->first << ")" << endl;
+
+ TableSlots* pTabSlots = it->second;
+ assert(pTabSlots);
+ ScBroadcastAreaSlot** ppSlots = pTabSlots->getSlots();
+ for (SCSIZE i = 0; i < nBcaSlots; ++i)
+ {
+ const ScBroadcastAreaSlot* pSlot = ppSlots[i];
+ if (pSlot)
+ {
+ cout << "* slot " << i << endl;
+ pSlot->Dump();
+ }
+ }
+ }
+}
+#endif
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/core/data/document.cxx b/sc/source/core/data/document.cxx
index c8c8af7..b3a3fc1 100644
--- a/sc/source/core/data/document.cxx
+++ b/sc/source/core/data/document.cxx
@@ -2352,6 +2352,14 @@ void ScDocument::DumpFormulaGroups( SCTAB nTab, SCCOL nCol ) const
}
#endif
+#if DEBUG_AREA_BROADCASTER
+void ScDocument::DumpAreaBroadcasters() const
+{
+ if (pBASM)
+ pBASM->Dump();
+}
+#endif
+
bool ScDocument::TableExists( SCTAB nTab ) const
{
return ValidTab(nTab) && static_cast<size_t>(nTab) < maTabs.size() && maTabs[nTab];
diff --git a/sc/source/core/inc/bcaslot.hxx b/sc/source/core/inc/bcaslot.hxx
index a790890..2f63207 100644
--- a/sc/source/core/inc/bcaslot.hxx
+++ b/sc/source/core/inc/bcaslot.hxx
@@ -225,6 +225,10 @@ public:
void GetAllListeners(
const ScRange& rRange, std::vector<sc::AreaListener>& rListeners, sc::AreaOverlapType eType );
+
+#if DEBUG_AREA_BROADCASTER
+ void Dump() const;
+#endif
};
/**
@@ -321,6 +325,10 @@ public:
std::vector<sc::AreaListener> GetAllListeners(
const ScRange& rRange, sc::AreaOverlapType eType );
+
+#if DEBUG_AREA_BROADCASTER
+ void Dump() const;
+#endif
};
class ScBulkBroadcast
commit d9e67908070db26b40e6dee05bf506c6043e3d99
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date: Tue Nov 11 19:15:25 2014 -0500
Make these non-inline and add the const version of the getter.
Change-Id: I8c175dcaaa51e2b05895226907697b070a2e2f77
diff --git a/include/svl/broadcast.hxx b/include/svl/broadcast.hxx
index 62e343f..5615255 100644
--- a/include/svl/broadcast.hxx
+++ b/include/svl/broadcast.hxx
@@ -56,7 +56,8 @@ public:
void Broadcast( const SfxHint &rHint );
- ListenersType& GetAllListeners() { return maListeners;}
+ ListenersType& GetAllListeners();
+ const ListenersType& GetAllListeners() const;
bool HasListeners() const;
diff --git a/svl/source/notify/broadcast.cxx b/svl/source/notify/broadcast.cxx
index 30e7bd0..c0dfe4f 100644
--- a/svl/source/notify/broadcast.cxx
+++ b/svl/source/notify/broadcast.cxx
@@ -138,6 +138,15 @@ void SvtBroadcaster::Broadcast( const SfxHint &rHint )
void SvtBroadcaster::ListenersGone() {}
+SvtBroadcaster::ListenersType& SvtBroadcaster::GetAllListeners()
+{
+ return maListeners;
+}
+
+const SvtBroadcaster::ListenersType& SvtBroadcaster::GetAllListeners() const
+{
+ return maListeners;
+}
bool SvtBroadcaster::HasListeners() const
{
commit e2235454e1c160ba62d1b81b981db5ad9af02334
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date: Tue Nov 11 18:10:21 2014 -0500
Unindent.
Change-Id: I3c644b6ff9916f6ec99ff6208ea073dd1612b4b3
diff --git a/sc/source/core/inc/bcaslot.hxx b/sc/source/core/inc/bcaslot.hxx
index 830ddea..a790890 100644
--- a/sc/source/core/inc/bcaslot.hxx
+++ b/sc/source/core/inc/bcaslot.hxx
@@ -249,24 +249,24 @@ private:
class TableSlots
{
- public:
- TableSlots();
- ~TableSlots();
- inline ScBroadcastAreaSlot** getSlots() { return ppSlots; }
-
- /**
- Obtain slot pointer, no check on validity! It is assumed that
- all calls are made with the results of ComputeSlotOffset(),
- ComputeAreaPoints() and ComputeNextSlot()
- */
- inline ScBroadcastAreaSlot* getAreaSlot( SCSIZE nOff ) { return *(ppSlots + nOff); }
-
- private:
- ScBroadcastAreaSlot** ppSlots;
-
- // prevent usage
- TableSlots( const TableSlots& );
- TableSlots& operator=( const TableSlots& );
+ public:
+ TableSlots();
+ ~TableSlots();
+ inline ScBroadcastAreaSlot** getSlots() { return ppSlots; }
+
+ /**
+ Obtain slot pointer, no check on validity! It is assumed that
+ all calls are made with the results of ComputeSlotOffset(),
+ ComputeAreaPoints() and ComputeNextSlot()
+ */
+ inline ScBroadcastAreaSlot* getAreaSlot( SCSIZE nOff ) { return *(ppSlots + nOff); }
+
+ private:
+ ScBroadcastAreaSlot** ppSlots;
+
+ // prevent usage
+ TableSlots( const TableSlots& );
+ TableSlots& operator=( const TableSlots& );
};
typedef ::std::map< SCTAB, TableSlots* > TableSlotsMap;
More information about the Libreoffice-commits
mailing list