Title: [202044] trunk/Source/WebCore
Revision
202044
Author
[email protected]
Date
2016-06-14 09:07:17 -0700 (Tue, 14 Jun 2016)

Log Message

Make RenderBlock::insertInto/RemoveFromTrackedRendererMaps functions static.
https://bugs.webkit.org/show_bug.cgi?id=158722

Reviewed by Simon Fraser.

These functions manipulate static tracker hashmaps. They don't need to be on RenderBlock.
This is also in preparation for decoupling positioned descendant tracking from descendent percentage height handling.
(gPositionedDescendantsMap and gPercentHeightDescendantsMap)

No change in functionality.

* rendering/RenderBlock.cpp:
(WebCore::insertIntoTrackedRendererMaps):
(WebCore::removeFromTrackedRendererMaps):
(WebCore::removeBlockFromDescendantAndContainerMaps):
(WebCore::RenderBlock::insertPositionedObject):
(WebCore::RenderBlock::addPercentHeightDescendant):
(WebCore::RenderBlock::insertIntoTrackedRendererMaps): Deleted.
(WebCore::RenderBlock::removeFromTrackedRendererMaps): Deleted.
* rendering/RenderBlock.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (202043 => 202044)


--- trunk/Source/WebCore/ChangeLog	2016-06-14 15:13:20 UTC (rev 202043)
+++ trunk/Source/WebCore/ChangeLog	2016-06-14 16:07:17 UTC (rev 202044)
@@ -1,3 +1,26 @@
+2016-06-14  Zalan Bujtas  <[email protected]>
+
+        Make RenderBlock::insertInto/RemoveFromTrackedRendererMaps functions static.
+        https://bugs.webkit.org/show_bug.cgi?id=158722
+
+        Reviewed by Simon Fraser.
+
+        These functions manipulate static tracker hashmaps. They don't need to be on RenderBlock.
+        This is also in preparation for decoupling positioned descendant tracking from descendent percentage height handling.
+        (gPositionedDescendantsMap and gPercentHeightDescendantsMap) 
+
+        No change in functionality.
+
+        * rendering/RenderBlock.cpp:
+        (WebCore::insertIntoTrackedRendererMaps):
+        (WebCore::removeFromTrackedRendererMaps):
+        (WebCore::removeBlockFromDescendantAndContainerMaps):
+        (WebCore::RenderBlock::insertPositionedObject):
+        (WebCore::RenderBlock::addPercentHeightDescendant):
+        (WebCore::RenderBlock::insertIntoTrackedRendererMaps): Deleted.
+        (WebCore::RenderBlock::removeFromTrackedRendererMaps): Deleted.
+        * rendering/RenderBlock.h:
+
 2016-06-14  Adam Bergkvist  <[email protected]>
 
         WebRTC: Add media setup test where media is set up in one direction at a time

Modified: trunk/Source/WebCore/rendering/RenderBlock.cpp (202043 => 202044)


--- trunk/Source/WebCore/rendering/RenderBlock.cpp	2016-06-14 15:13:20 UTC (rev 202043)
+++ trunk/Source/WebCore/rendering/RenderBlock.cpp	2016-06-14 16:07:17 UTC (rev 202044)
@@ -92,12 +92,75 @@
 
 COMPILE_ASSERT(sizeof(RenderBlock) == sizeof(SameSizeAsRenderBlock), RenderBlock_should_stay_small);
 
+typedef WTF::HashMap<const RenderBlock*, std::unique_ptr<TrackedRendererListHashSet>> TrackedDescendantsMap;
+typedef WTF::HashMap<const RenderBox*, std::unique_ptr<HashSet<const RenderBlock*>>> TrackedContainerMap;
+
 static TrackedDescendantsMap* gPositionedDescendantsMap;
 static TrackedDescendantsMap* gPercentHeightDescendantsMap;
 
 static TrackedContainerMap* gPositionedContainerMap;
 static TrackedContainerMap* gPercentHeightContainerMap;
 
+static void insertIntoTrackedRendererMaps(const RenderBlock& container, RenderBox& descendant, TrackedDescendantsMap*& descendantsMap, TrackedContainerMap*& containerMap, bool forceNewEntry)
+{
+    if (!descendantsMap) {
+        descendantsMap = new TrackedDescendantsMap;
+        containerMap = new TrackedContainerMap;
+    }
+    
+    auto* descendantSet = descendantsMap->get(&container);
+    if (!descendantSet) {
+        descendantSet = new TrackedRendererListHashSet;
+        descendantsMap->set(&container, std::unique_ptr<TrackedRendererListHashSet>(descendantSet));
+    }
+    
+    if (forceNewEntry) {
+        descendantSet->remove(&descendant);
+        containerMap->remove(&descendant);
+    }
+    
+    bool added = descendantSet->add(&descendant).isNewEntry;
+    if (!added) {
+        ASSERT(containerMap->get(&descendant));
+        ASSERT(containerMap->get(&descendant)->contains(&container));
+        return;
+    }
+    
+    auto* containerSet = containerMap->get(&descendant);
+    if (!containerSet) {
+        containerSet = new HashSet<const RenderBlock*>;
+        containerMap->set(&descendant, std::unique_ptr<HashSet<const RenderBlock*>>(containerSet));
+    }    
+    ASSERT(!containerSet->contains(&container));
+    containerSet->add(&container);
+}
+
+static void removeFromTrackedRendererMaps(RenderBox& descendant, TrackedDescendantsMap*& descendantsMap, TrackedContainerMap*& containerMap)
+{
+    if (!descendantsMap)
+        return;
+    
+    std::unique_ptr<HashSet<const RenderBlock*>> containerSet = containerMap->take(&descendant);
+    if (!containerSet)
+        return;
+    
+    for (auto* container : *containerSet) {
+        // FIXME: Disabling this assert temporarily until we fix the layout
+        // bugs associated with positioned objects not properly cleared from
+        // their ancestor chain before being moved. See webkit bug 93766.
+        // ASSERT(descendant->isDescendantOf(container));
+        auto descendantsMapIterator = descendantsMap->find(container);
+        ASSERT(descendantsMapIterator != descendantsMap->end());
+        if (descendantsMapIterator == descendantsMap->end())
+            continue;
+        auto* descendantSet = descendantsMapIterator->value.get();
+        ASSERT(descendantSet->contains(&descendant));
+        descendantSet->remove(&descendant);
+        if (descendantSet->isEmpty())
+            descendantsMap->remove(descendantsMapIterator);
+    }
+}
+
 typedef HashMap<RenderBlock*, std::unique_ptr<ListHashSet<RenderInline*>>> ContinuationOutlineTableMap;
 
 struct UpdateScrollInfoAfterLayoutTransaction {
@@ -201,7 +264,7 @@
             ASSERT(it != containerMap->end());
             if (it == containerMap->end())
                 continue;
-            HashSet<RenderBlock*>* containerSet = it->value.get();
+            auto* containerSet = it->value.get();
             ASSERT(containerSet->contains(block));
             containerSet->remove(block);
             if (containerSet->isEmpty())
@@ -2113,69 +2176,6 @@
     return beforeBlock;
 }
 
-void RenderBlock::insertIntoTrackedRendererMaps(RenderBox& descendant, TrackedDescendantsMap*& descendantsMap, TrackedContainerMap*& containerMap, bool forceNewEntry)
-{
-    if (!descendantsMap) {
-        descendantsMap = new TrackedDescendantsMap;
-        containerMap = new TrackedContainerMap;
-    }
-    
-    TrackedRendererListHashSet* descendantSet = descendantsMap->get(this);
-    if (!descendantSet) {
-        descendantSet = new TrackedRendererListHashSet;
-        descendantsMap->set(this, std::unique_ptr<TrackedRendererListHashSet>(descendantSet));
-    }
-    
-    if (forceNewEntry) {
-        descendantSet->remove(&descendant);
-        containerMap->remove(&descendant);
-    }
-    
-    bool added = descendantSet->add(&descendant).isNewEntry;
-    if (!added) {
-        ASSERT(containerMap->get(&descendant));
-        ASSERT(containerMap->get(&descendant)->contains(this));
-        return;
-    }
-    
-    HashSet<RenderBlock*>* containerSet = containerMap->get(&descendant);
-    if (!containerSet) {
-        containerSet = new HashSet<RenderBlock*>;
-        containerMap->set(&descendant, std::unique_ptr<HashSet<RenderBlock*>>(containerSet));
-    }    
-    ASSERT(!containerSet->contains(this));
-    containerSet->add(this);
-}
-
-void RenderBlock::removeFromTrackedRendererMaps(RenderBox& descendant, TrackedDescendantsMap*& descendantsMap, TrackedContainerMap*& containerMap)
-{
-    if (!descendantsMap)
-        return;
-    
-    std::unique_ptr<HashSet<RenderBlock*>> containerSet = containerMap->take(&descendant);
-    if (!containerSet)
-        return;
-    
-    for (auto it = containerSet->begin(), end = containerSet->end(); it != end; ++it) {
-        RenderBlock* container = *it;
-
-        // FIXME: Disabling this assert temporarily until we fix the layout
-        // bugs associated with positioned objects not properly cleared from
-        // their ancestor chain before being moved. See webkit bug 93766.
-        // ASSERT(descendant->isDescendantOf(container));
-
-        TrackedDescendantsMap::iterator descendantsMapIterator = descendantsMap->find(container);
-        ASSERT(descendantsMapIterator != descendantsMap->end());
-        if (descendantsMapIterator == descendantsMap->end())
-            continue;
-        TrackedRendererListHashSet* descendantSet = descendantsMapIterator->value.get();
-        ASSERT(descendantSet->contains(&descendant));
-        descendantSet->remove(&descendant);
-        if (descendantSet->isEmpty())
-            descendantsMap->remove(descendantsMapIterator);
-    }
-}
-
 TrackedRendererListHashSet* RenderBlock::positionedObjects() const
 {
     if (gPositionedDescendantsMap)
@@ -2189,8 +2189,8 @@
 
     if (positioned.isRenderFlowThread())
         return;
-    
-    insertIntoTrackedRendererMaps(positioned, gPositionedDescendantsMap, gPositionedContainerMap, isRenderView());
+
+    insertIntoTrackedRendererMaps(*this, positioned, gPositionedDescendantsMap, gPositionedContainerMap, isRenderView());
 }
 
 void RenderBlock::removePositionedObject(RenderBox& rendererToRemove)
@@ -2225,7 +2225,7 @@
 
 void RenderBlock::addPercentHeightDescendant(RenderBox& descendant)
 {
-    insertIntoTrackedRendererMaps(descendant, gPercentHeightDescendantsMap, gPercentHeightContainerMap);
+    insertIntoTrackedRendererMaps(*this, descendant, gPercentHeightDescendantsMap, gPercentHeightContainerMap, false);
 }
 
 void RenderBlock::removePercentHeightDescendant(RenderBox& descendant)

Modified: trunk/Source/WebCore/rendering/RenderBlock.h (202043 => 202044)


--- trunk/Source/WebCore/rendering/RenderBlock.h	2016-06-14 15:13:20 UTC (rev 202043)
+++ trunk/Source/WebCore/rendering/RenderBlock.h	2016-06-14 16:07:17 UTC (rev 202044)
@@ -42,8 +42,6 @@
 struct PaintInfo;
 
 typedef WTF::ListHashSet<RenderBox*> TrackedRendererListHashSet;
-typedef WTF::HashMap<const RenderBlock*, std::unique_ptr<TrackedRendererListHashSet>> TrackedDescendantsMap;
-typedef WTF::HashMap<const RenderBox*, std::unique_ptr<HashSet<RenderBlock*>>> TrackedContainerMap;
 
 enum CaretType { CursorCaret, DragCaret };
 enum ContainingBlockState { NewContainingBlock, SameContainingBlock };
@@ -420,9 +418,6 @@
     // FIXME-BLOCKFLOW: Remove virtualizaion when all callers have moved to RenderBlockFlow
     virtual bool hasLines() const { return false; }
 
-    void insertIntoTrackedRendererMaps(RenderBox& descendant, TrackedDescendantsMap*&, TrackedContainerMap*&, bool forceNewEntry = false);
-    static void removeFromTrackedRendererMaps(RenderBox& descendant, TrackedDescendantsMap*&, TrackedContainerMap*&);
-
     void createFirstLetterRenderer(RenderElement* firstLetterBlock, RenderText* currentTextChild);
     void updateFirstLetterStyle(RenderElement* firstLetterBlock, RenderObject* firstLetterContainer);
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to