Title: [104721] trunk/Source/WebCore
Revision
104721
Author
[email protected]
Date
2012-01-11 10:17:57 -0800 (Wed, 11 Jan 2012)

Log Message

Use HashMap<OwnPtr> for RenderBoxRegionInfo map in RenderRegion
https://bugs.webkit.org/show_bug.cgi?id=75348

Reviewed by Darin Adler.

* rendering/RenderFlowThread.cpp:
(WebCore::RenderFlowThread::logicalWidthChangedInRegions): use OwnPtr.
* rendering/RenderRegion.cpp:
(WebCore::RenderRegion::setRenderBoxRegionInfo): use HashMap::add() instead of
get() potentially followed by set().
(WebCore::RenderRegion::takeRenderBoxRegionInfo): change to return PassOwnPtr.
(WebCore::RenderRegion::removeRenderBoxRegionInfo):
(WebCore::RenderRegion::deleteAllRenderBoxRegionInfo):
* rendering/RenderRegion.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (104720 => 104721)


--- trunk/Source/WebCore/ChangeLog	2012-01-11 18:06:57 UTC (rev 104720)
+++ trunk/Source/WebCore/ChangeLog	2012-01-11 18:17:57 UTC (rev 104721)
@@ -1,3 +1,20 @@
+2012-01-11  Caio Marcelo de Oliveira Filho  <[email protected]>
+
+        Use HashMap<OwnPtr> for RenderBoxRegionInfo map in RenderRegion
+        https://bugs.webkit.org/show_bug.cgi?id=75348
+
+        Reviewed by Darin Adler.
+
+        * rendering/RenderFlowThread.cpp:
+        (WebCore::RenderFlowThread::logicalWidthChangedInRegions): use OwnPtr.
+        * rendering/RenderRegion.cpp:
+        (WebCore::RenderRegion::setRenderBoxRegionInfo): use HashMap::add() instead of
+        get() potentially followed by set().
+        (WebCore::RenderRegion::takeRenderBoxRegionInfo): change to return PassOwnPtr.
+        (WebCore::RenderRegion::removeRenderBoxRegionInfo):
+        (WebCore::RenderRegion::deleteAllRenderBoxRegionInfo):
+        * rendering/RenderRegion.h:
+
 2012-01-11  Joel Webber  <[email protected]>
 
         Implement setCurrentTime() and pauseAnimations() on SVGSVGElement

Modified: trunk/Source/WebCore/rendering/RenderFlowThread.cpp (104720 => 104721)


--- trunk/Source/WebCore/rendering/RenderFlowThread.cpp	2012-01-11 18:06:57 UTC (rev 104720)
+++ trunk/Source/WebCore/rendering/RenderFlowThread.cpp	2012-01-11 18:17:57 UTC (rev 104721)
@@ -650,13 +650,11 @@
 
         ASSERT(!region->needsLayout());
 
-        RenderBoxRegionInfo* oldInfo = region->takeRenderBoxRegionInfo(block);
+        OwnPtr<RenderBoxRegionInfo> oldInfo = region->takeRenderBoxRegionInfo(block);
         if (!oldInfo)
             continue;
 
         LayoutUnit oldLogicalWidth = oldInfo->logicalWidth();
-        delete oldInfo;
-
         RenderBoxRegionInfo* newInfo = block->renderBoxRegionInfo(region, offsetFromLogicalTopOfFirstPage);
         if (!newInfo || newInfo->logicalWidth() != oldLogicalWidth)
             return true;

Modified: trunk/Source/WebCore/rendering/RenderRegion.cpp (104720 => 104721)


--- trunk/Source/WebCore/rendering/RenderRegion.cpp	2012-01-11 18:06:57 UTC (rev 104720)
+++ trunk/Source/WebCore/rendering/RenderRegion.cpp	2012-01-11 18:17:57 UTC (rev 104721)
@@ -50,11 +50,6 @@
 {
 }
 
-RenderRegion::~RenderRegion()
-{
-    deleteAllRenderBoxRegionInfo();
-}
-
 LayoutRect RenderRegion::regionOverflowRect() const
 {
     // FIXME: Would like to just use hasOverflowClip() but we aren't a block yet. When RenderRegion is eliminated and
@@ -206,30 +201,27 @@
     if (!m_isValid || !m_flowThread)
         return 0;
 
-    RenderBoxRegionInfo* existingBoxInfo = m_renderBoxRegionInfo.get(box);
-    if (existingBoxInfo) {
-        *existingBoxInfo = RenderBoxRegionInfo(logicalLeftInset, logicalRightInset, containingBlockChainIsInset);
-        return existingBoxInfo;
-    }
-    
-    RenderBoxRegionInfo* newBoxInfo = new RenderBoxRegionInfo(logicalLeftInset, logicalRightInset, containingBlockChainIsInset);
-    m_renderBoxRegionInfo.set(box, newBoxInfo);
-    return newBoxInfo;
+    OwnPtr<RenderBoxRegionInfo>& boxInfo = m_renderBoxRegionInfo.add(box, nullptr).first->second;
+    if (boxInfo)
+        *boxInfo = RenderBoxRegionInfo(logicalLeftInset, logicalRightInset, containingBlockChainIsInset);
+    else
+        boxInfo = adoptPtr(new RenderBoxRegionInfo(logicalLeftInset, logicalRightInset, containingBlockChainIsInset));
+
+    return boxInfo.get();
 }
 
-RenderBoxRegionInfo* RenderRegion::takeRenderBoxRegionInfo(const RenderBox* box)
+PassOwnPtr<RenderBoxRegionInfo> RenderRegion::takeRenderBoxRegionInfo(const RenderBox* box)
 {
     return m_renderBoxRegionInfo.take(box);
 }
 
 void RenderRegion::removeRenderBoxRegionInfo(const RenderBox* box)
 {
-    delete m_renderBoxRegionInfo.take(box);
+    m_renderBoxRegionInfo.remove(box);
 }
 
 void RenderRegion::deleteAllRenderBoxRegionInfo()
 {
-    deleteAllValues(m_renderBoxRegionInfo);
     m_renderBoxRegionInfo.clear();
 }
 

Modified: trunk/Source/WebCore/rendering/RenderRegion.h (104720 => 104721)


--- trunk/Source/WebCore/rendering/RenderRegion.h	2012-01-11 18:06:57 UTC (rev 104720)
+++ trunk/Source/WebCore/rendering/RenderRegion.h	2012-01-11 18:17:57 UTC (rev 104721)
@@ -41,7 +41,6 @@
 class RenderRegion : public RenderReplaced {
 public:
     explicit RenderRegion(Node*, RenderFlowThread*);
-    virtual ~RenderRegion();
 
     virtual bool isRenderRegion() const { return true; }
 
@@ -71,7 +70,7 @@
     RenderBoxRegionInfo* renderBoxRegionInfo(const RenderBox*) const;
     RenderBoxRegionInfo* setRenderBoxRegionInfo(const RenderBox*, LayoutUnit logicalLeftInset, LayoutUnit logicalRightInset,
         bool containingBlockChainIsInset);
-    RenderBoxRegionInfo* takeRenderBoxRegionInfo(const RenderBox*);
+    PassOwnPtr<RenderBoxRegionInfo> takeRenderBoxRegionInfo(const RenderBox*);
     void removeRenderBoxRegionInfo(const RenderBox*);
 
     void deleteAllRenderBoxRegionInfo();
@@ -96,7 +95,7 @@
     // A RenderBoxRegionInfo* tells us about any layout information for a RenderBox that
     // is unique to the region. For now it just holds logical width information for RenderBlocks, but eventually
     // it will also hold a custom style for any box (for region styling).
-    HashMap<const RenderBox*, RenderBoxRegionInfo*> m_renderBoxRegionInfo;
+    HashMap<const RenderBox*, OwnPtr<RenderBoxRegionInfo> > m_renderBoxRegionInfo;
 
     bool m_isValid;
     bool m_hasCustomRegionStyle;
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to