[Libreoffice-commits] core.git: 3 commits - compilerplugins/clang sc/inc sc/source sd/source vcl/source

Michael Stahl mstahl at redhat.com
Tue Nov 17 14:52:26 PST 2015


 compilerplugins/clang/badstatics.cxx           |    4 ++--
 sc/inc/colorscale.hxx                          |    6 +++++-
 sc/inc/document.hxx                            |    5 +++++
 sc/source/core/data/colorscale.cxx             |   11 +++++------
 sc/source/core/data/documen2.cxx               |   10 ++++++++++
 sc/source/ui/condformat/condformatdlgentry.cxx |    2 +-
 sc/source/ui/view/output.cxx                   |   20 +++++++++++---------
 sd/source/ui/tools/IconCache.cxx               |   14 +++++++-------
 vcl/source/app/scheduler.cxx                   |   13 ++++++++++++-
 vcl/source/gdi/impimagetree.cxx                |    4 ++--
 10 files changed, 60 insertions(+), 29 deletions(-)

New commits:
commit 526bfba0a0ef5cfa213b2c978eed83e43bb3cd9a
Author: Michael Stahl <mstahl at redhat.com>
Date:   Tue Nov 17 23:43:26 2015 +0100

    vcl, sd: rename some overly generic static variables
    
    Change-Id: I89159df36361f9ceff3401ef379c8230465617b7

diff --git a/compilerplugins/clang/badstatics.cxx b/compilerplugins/clang/badstatics.cxx
index 3b2881f..394c33e 100644
--- a/compilerplugins/clang/badstatics.cxx
+++ b/compilerplugins/clang/badstatics.cxx
@@ -136,7 +136,7 @@ public:
                 || name == "g_pHyphIter" // SwEditShell::HyphEnd()
                 || name == "pFieldEditEngine" // ScGlobal::Clear()
                 || name == "xDrawClipDocShellRef" // ScGlobal::Clear()
-                || name == "instance"
+                || name == "s_ImplImageTree"
                     // ImplImageTree::get(), ImplImageTree::shutDown()
                 || name == "s_pMouseFrame"
                     // vcl/osx/salframeview.mm, mouseEntered/Exited, not owning
@@ -146,7 +146,7 @@ public:
                 || name == "s_pCaptureFrame" // vcl/osx/salframe.cxx, not owning
                 || name == "pBlink"
                     // sw/source/core/text/blink.cxx, _TextFinit()
-                || name == "mpInstance"
+                || name == "s_pIconCache"
                     // sd/source/ui/tools/IconCache.cxx, leaked
                ) // these variables appear unproblematic
             {
diff --git a/sd/source/ui/tools/IconCache.cxx b/sd/source/ui/tools/IconCache.cxx
index 6c46806..ecc15e1 100644
--- a/sd/source/ui/tools/IconCache.cxx
+++ b/sd/source/ui/tools/IconCache.cxx
@@ -37,7 +37,7 @@ private:
         IconCache::Instance() is called to the end of the sd module when the
         cache is destroyed from SdGlobalResourceContainer.
     */
-    static IconCache* mpInstance;
+    static IconCache* s_pIconCache;
 
     typedef std::unordered_map<sal_uInt16,Image> ImageContainer;
     ImageContainer maContainer;
@@ -45,7 +45,7 @@ private:
     Image GetIcon (sal_uInt16 nResourceId);
 };
 
-IconCache* IconCache::Implementation::mpInstance = nullptr;
+IconCache* IconCache::Implementation::s_pIconCache = nullptr;
 
 Image IconCache::Implementation::GetIcon (sal_uInt16 nResourceId)
 {
@@ -67,17 +67,17 @@ Image IconCache::Implementation::GetIcon (sal_uInt16 nResourceId)
 //static
 IconCache& IconCache::Instance()
 {
-    if (Implementation::mpInstance == nullptr)
+    if (Implementation::s_pIconCache == nullptr)
     {
         ::osl::GetGlobalMutex aMutexFunctor;
         ::osl::MutexGuard aGuard (aMutexFunctor());
-        if (Implementation::mpInstance == nullptr)
+        if (Implementation::s_pIconCache == nullptr)
         {
             IconCache* pCache = new IconCache ();
             SdGlobalResourceContainer::Instance().AddResource (
                 ::std::unique_ptr<SdGlobalResource>(pCache));
             OSL_DOUBLE_CHECKED_LOCKING_MEMORY_BARRIER();
-            Implementation::mpInstance = pCache;
+            Implementation::s_pIconCache = pCache;
         }
     }
     else
@@ -85,9 +85,9 @@ IconCache& IconCache::Instance()
         OSL_DOUBLE_CHECKED_LOCKING_MEMORY_BARRIER();
     }
 
-    DBG_ASSERT(Implementation::mpInstance!=nullptr,
+    DBG_ASSERT(Implementation::s_pIconCache != nullptr,
         "IconCache::Instance(): instance is NULL");
-    return *Implementation::mpInstance;
+    return *Implementation::s_pIconCache;
 }
 
 Image IconCache::GetIcon (sal_uInt16 nResourceId)
diff --git a/vcl/source/gdi/impimagetree.cxx b/vcl/source/gdi/impimagetree.cxx
index 0a8d1a5..6726673 100644
--- a/vcl/source/gdi/impimagetree.cxx
+++ b/vcl/source/gdi/impimagetree.cxx
@@ -100,8 +100,8 @@ static void loadImageFromStream(std::shared_ptr<SvStream> xStream, OUString cons
 }
 
 ImplImageTree & ImplImageTree::get() {
-    static ImplImageTree instance;
-    return instance;
+    static ImplImageTree s_ImplImageTree;
+    return s_ImplImageTree;
 }
 
 ImplImageTree::ImplImageTree()
commit f324e507acf2875ac12d6ab1c1fca4fe95ba1817
Author: Michael Stahl <mstahl at redhat.com>
Date:   Tue Nov 17 23:01:54 2015 +0100

    vcl: avoid re-starting the WNT TimerQueue during shutdown
    
    When running CppunitTest_sc_macros_test in DrMemory, numerous
    unaddressable accesses from SalTimerProc are reported.
    
    During DeInitVCL(), ImplSalStopTimer() shuts down the TimerQueue, but
    then the problem is that some disposing of some sidebar related UNO
    service ends up calling Window::dispose() and Window::Hide() and
    Window::ImplPostPaint(), which starts an Idle job maPaintIdle
    that then re-starts the Win32 TimerQueue.
    
    Change-Id: Ie1ab14330b6f1002c12d5302bb19f2b3f4c3811d

diff --git a/vcl/source/app/scheduler.cxx b/vcl/source/app/scheduler.cxx
index 9e43a932..6092f1d 100644
--- a/vcl/source/app/scheduler.cxx
+++ b/vcl/source/app/scheduler.cxx
@@ -114,6 +114,12 @@ void Scheduler::ImplDeInitScheduler()
 void Scheduler::ImplStartTimer(sal_uInt64 nMS, bool bForce)
 {
     ImplSVData* pSVData = ImplGetSVData();
+    if (pSVData->mbDeInit)
+    {
+        // do not start new timers during shutdown - if that happens after
+        // ImplSalStopTimer() on WNT the timer queue is restarted and never ends
+        return;
+    }
     InitSystemTimer(pSVData);
 
     if ( !nMS )
@@ -215,10 +221,15 @@ void Scheduler::ProcessTaskScheduling( bool bTimer )
 
 void Scheduler::Start()
 {
+    ImplSVData *const pSVData = ImplGetSVData();
+    if (pSVData->mbDeInit)
+    {
+        return;
+    }
+
     // Mark timer active
     mbActive = true;
 
-    ImplSVData* pSVData = ImplGetSVData();
     if ( !mpSchedulerData )
     {
         // insert Scheduler
commit 05896a16412dd48d19ffd2e360ae7da5e41c2725
Author: Michael Stahl <mstahl at redhat.com>
Date:   Tue Nov 17 22:33:28 2015 +0100

    sc: loplugin:badstatics
    
    Not sure if there would be a performance penalty to re-loading these
    icons every time, so move the static map from
    ScIconSetFormat::getBitmap() to a member of ScDocument.
    
    Change-Id: If560d70cea27e25396dd821d9e77a785e3b79820

diff --git a/sc/inc/colorscale.hxx b/sc/inc/colorscale.hxx
index a593e4d..427bf53 100644
--- a/sc/inc/colorscale.hxx
+++ b/sc/inc/colorscale.hxx
@@ -30,6 +30,10 @@ struct ScDataBarInfo;
 class BitmapEx;
 class ScFormulaListener;
 
+namespace sc {
+    class IconSetBitmapMap : public std::map<sal_Int32, BitmapEx> {};
+}
+
 // don't change the order
 // they are also used in the dialog to determine the position
 // in the list box
@@ -375,7 +379,7 @@ public:
     virtual condformat::ScFormatEntryType GetType() const override;
 
     static ScIconSetMap* getIconSetMap();
-    static BitmapEx& getBitmap( ScIconSetType eType, sal_Int32 nIndex );
+    static BitmapEx& getBitmap(sc::IconSetBitmapMap &, ScIconSetType eType, sal_Int32 nIndex);
 
     typedef ScIconSetFormatData::Entries_t::iterator iterator;
     typedef ScIconSetFormatData::Entries_t::const_iterator const_iterator;
diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx
index 1fc5d2d..72a2d2d 100644
--- a/sc/inc/document.hxx
+++ b/sc/inc/document.hxx
@@ -79,6 +79,7 @@ class RefMovedHint;
 struct SortUndoParam;
 struct ReorderParam;
 class FormulaGroupAreaListener;
+class IconSetBitmapMap;
 
 }
 
@@ -467,6 +468,8 @@ private:
 
     bool                mbUseEmbedFonts;
 
+    std::unique_ptr<sc::IconSetBitmapMap> m_pIconSetBitmapMap;
+
 public:
     bool IsCellInChangeTrack(const ScAddress &cell,Color *pColCellBoder);
     void GetCellChangeTrackNote(const ScAddress &cell, OUString &strTrackText, bool &pbLeftEdge);
@@ -1872,6 +1875,8 @@ public:
 
     std::set<Color> GetDocColors();
 
+    sc::IconSetBitmapMap& GetIconSetBitmapMap();
+
 private:
     ScDocument(const ScDocument& r) = delete;
 
diff --git a/sc/source/core/data/colorscale.cxx b/sc/source/core/data/colorscale.cxx
index 2fc9a64..42904e1 100644
--- a/sc/source/core/data/colorscale.cxx
+++ b/sc/source/core/data/colorscale.cxx
@@ -1333,10 +1333,9 @@ static const ScIconSetBitmapMap aBitmapMap[] = {
 
 }
 
-BitmapEx& ScIconSetFormat::getBitmap( ScIconSetType eType, sal_Int32 nIndex )
+BitmapEx& ScIconSetFormat::getBitmap(sc::IconSetBitmapMap & rIconSetBitmapMap,
+        ScIconSetType const eType, sal_Int32 const nIndex)
 {
-    static std::map< sal_Int32, BitmapEx > aIconSetBitmaps;
-
     sal_Int32 nBitmap = -1;
 
     for(size_t i = 0; i < SAL_N_ELEMENTS(aBitmapMap); ++i)
@@ -1349,13 +1348,13 @@ BitmapEx& ScIconSetFormat::getBitmap( ScIconSetType eType, sal_Int32 nIndex )
     }
     assert( nBitmap != -1 );
 
-    std::map<sal_Int32, BitmapEx>::iterator itr = aIconSetBitmaps.find( nBitmap );
-    if(itr != aIconSetBitmaps.end())
+    std::map<sal_Int32, BitmapEx>::iterator itr = rIconSetBitmapMap.find(nBitmap);
+    if (itr != rIconSetBitmapMap.end())
         return itr->second;
 
     BitmapEx aBitmap = BitmapEx(ScResId(nBitmap));
     std::pair<sal_Int32, BitmapEx> aPair( nBitmap, aBitmap );
-    std::pair<std::map<sal_Int32, BitmapEx>::iterator, bool> itrNew = aIconSetBitmaps.insert(aPair);
+    std::pair<std::map<sal_Int32, BitmapEx>::iterator, bool> itrNew = rIconSetBitmapMap.insert(aPair);
     assert(itrNew.second);
 
     return itrNew.first->second;
diff --git a/sc/source/core/data/documen2.cxx b/sc/source/core/data/documen2.cxx
index d0a960e..dd554ec 100644
--- a/sc/source/core/data/documen2.cxx
+++ b/sc/source/core/data/documen2.cxx
@@ -1406,4 +1406,14 @@ ScStyleSheet* ScDocument::GetPreviewCellStyle( SCCOL nCol, SCROW nRow, SCTAB nTa
         pRet = pPreviewCellStyle;
     return pRet;
 }
+
+sc::IconSetBitmapMap& ScDocument::GetIconSetBitmapMap()
+{
+    if (!m_pIconSetBitmapMap)
+    {
+        m_pIconSetBitmapMap.reset(new sc::IconSetBitmapMap);
+    }
+    return *m_pIconSetBitmapMap;
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sc/source/ui/condformat/condformatdlgentry.cxx b/sc/source/ui/condformat/condformatdlgentry.cxx
index 059fbb5..51c0a6b 100644
--- a/sc/source/ui/condformat/condformatdlgentry.cxx
+++ b/sc/source/ui/condformat/condformatdlgentry.cxx
@@ -1418,7 +1418,7 @@ ScIconSetFrmtDataEntry::ScIconSetFrmtDataEntry( vcl::Window* pParent, ScIconSetT
     maEdEntry( VclPtr<Edit>::Create( this, ScResId( ED_ICON_SET_ENTRY_VALUE ) ) ),
     maLbEntryType( VclPtr<ListBox>::Create( this, ScResId( LB_ICON_SET_ENTRY_TYPE ) ) )
 {
-    maImgIcon->SetImage(Image(ScIconSetFormat::getBitmap(eType, i)));
+    maImgIcon->SetImage(Image(ScIconSetFormat::getBitmap(pDoc->GetIconSetBitmapMap(), eType, i)));
     if(pEntry)
     {
         switch(pEntry->GetType())
diff --git a/sc/source/ui/view/output.cxx b/sc/source/ui/view/output.cxx
index 12970ce..16e2499 100644
--- a/sc/source/ui/view/output.cxx
+++ b/sc/source/ui/view/output.cxx
@@ -873,24 +873,26 @@ void drawDataBars(vcl::RenderContext& rRenderContext, const ScDataBarInfo* pOldD
     }
 }
 
-BitmapEx& getIcon( ScIconSetType eType, sal_Int32 nIndex )
+BitmapEx& getIcon(sc::IconSetBitmapMap & rIconSetBitmapMap, ScIconSetType eType, sal_Int32 nIndex)
 {
-    return ScIconSetFormat::getBitmap( eType, nIndex );
+    return ScIconSetFormat::getBitmap(rIconSetBitmapMap, eType, nIndex);
 }
 
-void drawIconSets(vcl::RenderContext& rRenderContext, const ScIconSetInfo* pOldIconSetInfo, const Rectangle& rRect, long nOneX, long nOneY)
+void drawIconSets(vcl::RenderContext& rRenderContext, const ScIconSetInfo* pOldIconSetInfo, const Rectangle& rRect, long nOneX, long nOneY,
+        sc::IconSetBitmapMap & rIconSetBitmapMap)
 {
     //long nSize = 16;
     ScIconSetType eType = pOldIconSetInfo->eIconSetType;
     sal_Int32 nIndex = pOldIconSetInfo->nIconIndex;
-    BitmapEx& rIcon = getIcon( eType, nIndex );
+    BitmapEx& rIcon = getIcon(rIconSetBitmapMap, eType, nIndex);
     long aOrigSize = std::max<long>(0,std::min(rRect.GetSize().getWidth() - 4 * nOneX, rRect.GetSize().getHeight() -4 * nOneY));
     rRenderContext.DrawBitmapEx( Point( rRect.Left() + 2 * nOneX, rRect.Top() + 2 * nOneY), Size(aOrigSize, aOrigSize), rIcon );
 }
 
 void drawCells(vcl::RenderContext& rRenderContext, const Color* pColor, const SvxBrushItem* pBackground, const Color*& pOldColor, const SvxBrushItem*& pOldBackground,
         Rectangle& rRect, long nPosX, long nLayoutSign, long nOneX, long nOneY, const ScDataBarInfo* pDataBarInfo, const ScDataBarInfo*& pOldDataBarInfo,
-        const ScIconSetInfo* pIconSetInfo, const ScIconSetInfo*& pOldIconSetInfo)
+        const ScIconSetInfo* pIconSetInfo, const ScIconSetInfo*& pOldIconSetInfo,
+        sc::IconSetBitmapMap & rIconSetBitmapMap)
 {
     long nSignedOneX = nOneX * nLayoutSign;
     // need to paint if old color scale has been used and now
@@ -907,7 +909,7 @@ void drawCells(vcl::RenderContext& rRenderContext, const Color* pColor, const Sv
         if( pOldDataBarInfo )
             drawDataBars(rRenderContext, pOldDataBarInfo, rRect, nOneX, nOneY);
         if( pOldIconSetInfo )
-            drawIconSets(rRenderContext, pOldIconSetInfo, rRect, nOneX, nOneY);
+            drawIconSets(rRenderContext, pOldIconSetInfo, rRect, nOneX, nOneY, rIconSetBitmapMap);
 
         rRect.Left() = nPosX - nSignedOneX;
     }
@@ -927,7 +929,7 @@ void drawCells(vcl::RenderContext& rRenderContext, const Color* pColor, const Sv
         if( pOldDataBarInfo )
             drawDataBars(rRenderContext, pOldDataBarInfo, rRect, nOneX, nOneY);
         if( pOldIconSetInfo )
-            drawIconSets(rRenderContext, pOldIconSetInfo, rRect, nOneX, nOneY);
+            drawIconSets(rRenderContext, pOldIconSetInfo, rRect, nOneX, nOneY, rIconSetBitmapMap);
 
         rRect.Left() = nPosX - nSignedOneX;
     }
@@ -1087,7 +1089,7 @@ void ScOutputData::DrawBackground(vcl::RenderContext& rRenderContext)
                     if (bWorksInPixels)
                         nPosXLogic = rRenderContext.PixelToLogic(Point(nPosX, 0)).X();
 
-                    drawCells(rRenderContext, pColor, pBackground, pOldColor, pOldBackground, aRect, nPosXLogic, nLayoutSign, nOneXLogic, nOneYLogic, pDataBarInfo, pOldDataBarInfo, pIconSetInfo, pOldIconSetInfo);
+                    drawCells(rRenderContext, pColor, pBackground, pOldColor, pOldBackground, aRect, nPosXLogic, nLayoutSign, nOneXLogic, nOneYLogic, pDataBarInfo, pOldDataBarInfo, pIconSetInfo, pOldIconSetInfo, mpDoc->GetIconSetBitmapMap());
 
                     // extend for all merged cells
                     nMergedCells = 1;
@@ -1111,7 +1113,7 @@ void ScOutputData::DrawBackground(vcl::RenderContext& rRenderContext)
                 if (bWorksInPixels)
                     nPosXLogic = rRenderContext.PixelToLogic(Point(nPosX, 0)).X();
 
-                drawCells(rRenderContext, nullptr, nullptr, pOldColor, pOldBackground, aRect, nPosXLogic, nLayoutSign, nOneXLogic, nOneYLogic, nullptr, pOldDataBarInfo, nullptr, pOldIconSetInfo);
+                drawCells(rRenderContext, nullptr, nullptr, pOldColor, pOldBackground, aRect, nPosXLogic, nLayoutSign, nOneXLogic, nOneYLogic, nullptr, pOldDataBarInfo, nullptr, pOldIconSetInfo, mpDoc->GetIconSetBitmapMap());
 
                 nArrY += nSkip;
             }


More information about the Libreoffice-commits mailing list