Title: [136883] trunk/Source/WebCore
Revision
136883
Author
[email protected]
Date
2012-12-06 13:41:27 -0800 (Thu, 06 Dec 2012)

Log Message

Unreviewed, rolling out r136871.
http://trac.webkit.org/changeset/136871
https://bugs.webkit.org/show_bug.cgi?id=104293

crashes on bots and memory leaks (Requested by esprehn on
#webkit).

Patch by Sheriff Bot <[email protected]> on 2012-12-06

* dom/Document.h:
(WebCore::Node::treeScope):
* dom/Element.cpp:
(WebCore::Element::createRareData):
* dom/ElementRareData.h:
(ElementRareData):
(WebCore::ElementRareData::ElementRareData):
* dom/Node.cpp:
(WebCore::Node::setTreeScope):
(WebCore::Node::ensureRareData):
(WebCore::Node::createRareData):
(WebCore::Node::clearRareData):
* dom/Node.h:
(WebCore::NodeRareDataBase::~NodeRareDataBase):
(WebCore::NodeRareDataBase::NodeRareDataBase):
(NodeRareDataBase):
(WebCore::Node::renderer):
(WebCore::Node::setRenderer):
(Node):
(WebCore::Node::hasRareData):
* dom/NodeRareData.h:
(WebCore::NodeRareData::NodeRareData):
(NodeRareData):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (136882 => 136883)


--- trunk/Source/WebCore/ChangeLog	2012-12-06 21:26:27 UTC (rev 136882)
+++ trunk/Source/WebCore/ChangeLog	2012-12-06 21:41:27 UTC (rev 136883)
@@ -1,3 +1,36 @@
+2012-12-06  Sheriff Bot  <[email protected]>
+
+        Unreviewed, rolling out r136871.
+        http://trac.webkit.org/changeset/136871
+        https://bugs.webkit.org/show_bug.cgi?id=104293
+
+        crashes on bots and memory leaks (Requested by esprehn on
+        #webkit).
+
+        * dom/Document.h:
+        (WebCore::Node::treeScope):
+        * dom/Element.cpp:
+        (WebCore::Element::createRareData):
+        * dom/ElementRareData.h:
+        (ElementRareData):
+        (WebCore::ElementRareData::ElementRareData):
+        * dom/Node.cpp:
+        (WebCore::Node::setTreeScope):
+        (WebCore::Node::ensureRareData):
+        (WebCore::Node::createRareData):
+        (WebCore::Node::clearRareData):
+        * dom/Node.h:
+        (WebCore::NodeRareDataBase::~NodeRareDataBase):
+        (WebCore::NodeRareDataBase::NodeRareDataBase):
+        (NodeRareDataBase):
+        (WebCore::Node::renderer):
+        (WebCore::Node::setRenderer):
+        (Node):
+        (WebCore::Node::hasRareData):
+        * dom/NodeRareData.h:
+        (WebCore::NodeRareData::NodeRareData):
+        (NodeRareData):
+
 2012-12-06  Adam Klein  <[email protected]>
 
         Remove non-v8 binding files from WebCore.gypi

Modified: trunk/Source/WebCore/dom/Document.h (136882 => 136883)


--- trunk/Source/WebCore/dom/Document.h	2012-12-06 21:26:27 UTC (rev 136882)
+++ trunk/Source/WebCore/dom/Document.h	2012-12-06 21:41:27 UTC (rev 136883)
@@ -1554,7 +1554,7 @@
 
 inline TreeScope* Node::treeScope() const
 {
-    return hasUncommonNodeData() ? m_data.m_rareData->treeScope() : documentInternal();
+    return hasRareData() ? m_data.m_rareData->treeScope() : documentInternal();
 }
 
 inline Node::Node(Document* document, ConstructionType type)

Modified: trunk/Source/WebCore/dom/Element.cpp (136882 => 136883)


--- trunk/Source/WebCore/dom/Element.cpp	2012-12-06 21:26:27 UTC (rev 136882)
+++ trunk/Source/WebCore/dom/Element.cpp	2012-12-06 21:41:27 UTC (rev 136883)
@@ -217,7 +217,7 @@
 
 PassOwnPtr<NodeRareData> Element::createRareData()
 {
-    return adoptPtr(new ElementRareData());
+    return adoptPtr(new ElementRareData(documentInternal()));
 }
 
 DEFINE_VIRTUAL_ATTRIBUTE_EVENT_LISTENER(Element, blur);

Modified: trunk/Source/WebCore/dom/ElementRareData.h (136882 => 136883)


--- trunk/Source/WebCore/dom/ElementRareData.h	2012-12-06 21:26:27 UTC (rev 136882)
+++ trunk/Source/WebCore/dom/ElementRareData.h	2012-12-06 21:41:27 UTC (rev 136883)
@@ -35,7 +35,7 @@
 
 class ElementRareData : public NodeRareData {
 public:
-    ElementRareData();
+    ElementRareData(Document*);
     virtual ~ElementRareData();
 
     void setPseudoElement(PseudoId, PassRefPtr<PseudoElement>);
@@ -130,8 +130,9 @@
     return IntSize(LayoutUnit::max(), LayoutUnit::max());
 }
 
-inline ElementRareData::ElementRareData()
-    : m_minimumSizeForResizing(defaultMinimumSizeForResizing())
+inline ElementRareData::ElementRareData(Document* document)
+    : NodeRareData(document)
+    , m_minimumSizeForResizing(defaultMinimumSizeForResizing())
     , m_generatedBefore(0)
     , m_generatedAfter(0)
 {

Modified: trunk/Source/WebCore/dom/Node.cpp (136882 => 136883)


--- trunk/Source/WebCore/dom/Node.cpp	2012-12-06 21:26:27 UTC (rev 136882)
+++ trunk/Source/WebCore/dom/Node.cpp	2012-12-06 21:41:27 UTC (rev 136883)
@@ -441,14 +441,10 @@
 
 void Node::setTreeScope(TreeScope* scope)
 {
-    if (!hasUncommonNodeData() && scope->rootNode()->isDocumentNode())
+    if (!hasRareData() && scope->rootNode()->isDocumentNode())
         return;
 
-    if (!hasUncommonNodeData()) {
-        m_data.m_rareData = UncommonNodeData::create(scope, m_data.m_renderer);
-        setFlag(HasUncommonNodeData);
-    } else
-        rareData()->setTreeScope(scope);
+    ensureRareData()->setTreeScope(scope);
 }
 
 Node* Node::pseudoAwarePreviousSibling() const
@@ -492,21 +488,15 @@
 
     NodeRareData* data = ""
     ASSERT(data);
-    data->setRenderer(renderer());
-    data->setTreeScope(treeScope());
-
-    if (hasUncommonNodeData())
-        delete m_data.m_rareData;
-
+    data->setRenderer(m_data.m_renderer);
     m_data.m_rareData = data;
-    setFlag(HasUncommonNodeData);
-
+    setFlag(HasRareDataFlag);
     return data;
 }
 
 PassOwnPtr<NodeRareData> Node::createRareData()
 {
-    return adoptPtr(new NodeRareData());
+    return adoptPtr(new NodeRareData(documentInternal()));
 }
 
 void Node::clearRareData()
@@ -520,7 +510,7 @@
     RenderObject* renderer = m_data.m_rareData->renderer();
     delete m_data.m_rareData;
     m_data.m_renderer = renderer;
-    clearFlag(HasUncommonNodeData);
+    clearFlag(HasRareDataFlag);
 }
 
 Node* Node::toNode()

Modified: trunk/Source/WebCore/dom/Node.h (136882 => 136883)


--- trunk/Source/WebCore/dom/Node.h	2012-12-06 21:26:27 UTC (rev 136882)
+++ trunk/Source/WebCore/dom/Node.h	2012-12-06 21:41:27 UTC (rev 136883)
@@ -110,85 +110,23 @@
     SyntheticStyleChange = 3 << nodeStyleChangeShift
 };
 
-class UncommonNodeData {
+class NodeRareDataBase {
 public:
-    static UncommonNodeData* create(TreeScope* scope, RenderObject* renderer)
-    {
-        return new UncommonNodeData(scope, renderer);
-    }
-
     RenderObject* renderer() const { return m_renderer; }
     void setRenderer(RenderObject* renderer) { m_renderer = renderer; }
 
     TreeScope* treeScope() const { return m_treeScope; }
     void setTreeScope(TreeScope* scope) { m_treeScope = scope; }
 
-    virtual ~UncommonNodeData() { }
-
-    bool isNodeRareData() const { return m_isNodeRareData; }
-
+    virtual ~NodeRareDataBase() { }
 protected:
-    UncommonNodeData()
-        : m_tabIndex(0)
-        , m_childIndex(0)
-        , m_isNodeRareData(true)
-        , m_tabIndexWasSetExplicitly(false)
-        , m_isFocused(false)
-        , m_needsFocusAppearanceUpdateSoonAfterAttach(false)
-        , m_styleAffectedByEmpty(false)
-        , m_isInCanvasSubtree(false)
-#if ENABLE(FULLSCREEN_API)
-        , m_containsFullScreenElement(false)
-#endif
-#if ENABLE(DIALOG_ELEMENT)
-        , m_isInTopLayer(false)
-#endif
-        , m_childrenAffectedByHover(false)
-        , m_childrenAffectedByActive(false)
-        , m_childrenAffectedByDrag(false)
-        , m_childrenAffectedByFirstChildRules(false)
-        , m_childrenAffectedByLastChildRules(false)
-        , m_childrenAffectedByDirectAdjacentRules(false)
-        , m_childrenAffectedByForwardPositionalRules(false)
-        , m_childrenAffectedByBackwardPositionalRules(false)
+    NodeRareDataBase(TreeScope* scope)
+        : m_treeScope(scope)
     {
     }
 private:
-    UncommonNodeData(TreeScope* scope, RenderObject* renderer)
-        : m_renderer(renderer)
-        , m_treeScope(scope)
-        , m_isNodeRareData(false)
-    {
-    }
-
     RenderObject* m_renderer;
     TreeScope* m_treeScope;
-protected:
-    short m_tabIndex;
-    unsigned short m_childIndex;
-    bool m_isNodeRareData : 1;
-    bool m_tabIndexWasSetExplicitly : 1;
-    bool m_isFocused : 1;
-    bool m_needsFocusAppearanceUpdateSoonAfterAttach : 1;
-    bool m_styleAffectedByEmpty : 1;
-    bool m_isInCanvasSubtree : 1;
-#if ENABLE(FULLSCREEN_API)
-    bool m_containsFullScreenElement : 1;
-#endif
-#if ENABLE(DIALOG_ELEMENT)
-    bool m_isInTopLayer : 1;
-#endif
-    bool m_childrenAffectedByHover : 1;
-    bool m_childrenAffectedByActive : 1;
-    bool m_childrenAffectedByDrag : 1;
-    // Bits for dynamic child matching.
-    // We optimize for :first-child and :last-child. The other positional child selectors like nth-child or
-    // *-child-of-type, we will just give up and re-evaluate whenever children change at all.
-    bool m_childrenAffectedByFirstChildRules : 1;
-    bool m_childrenAffectedByLastChildRules : 1;
-    bool m_childrenAffectedByDirectAdjacentRules : 1;
-    bool m_childrenAffectedByForwardPositionalRules : 1;
-    bool m_childrenAffectedByBackwardPositionalRules : 1;
 };
 
 class Node : public EventTarget, public ScriptWrappable, public TreeShared<Node, ContainerNode> {
@@ -585,10 +523,10 @@
     // Integration with rendering tree
 
     // As renderer() includes a branch you should avoid calling it repeatedly in hot code paths.
-    RenderObject* renderer() const { return hasUncommonNodeData() ? m_data.m_rareData->renderer() : m_data.m_renderer; };
+    RenderObject* renderer() const { return hasRareData() ? m_data.m_rareData->renderer() : m_data.m_renderer; };
     void setRenderer(RenderObject* renderer)
     {
-        if (hasUncommonNodeData())
+        if (hasRareData())
             m_data.m_rareData->setRenderer(renderer);
         else
             m_data.m_renderer = renderer;
@@ -772,7 +710,7 @@
         IsActiveFlag = 1 << 10,
         IsHoveredFlag = 1 << 11,
         InActiveChainFlag = 1 << 12,
-        HasUncommonNodeData = 1 << 13,
+        HasRareDataFlag = 1 << 13,
         IsDocumentFragmentFlag = 1 << 14,
 
         // These bits are used by derived classes, pulled up here so they can
@@ -836,9 +774,9 @@
     virtual void addSubresourceAttributeURLs(ListHashSet<KURL>&) const { }
     void setTabIndexExplicitly(short);
     void clearTabIndexExplicitly();
+    
+    bool hasRareData() const { return getFlag(HasRareDataFlag); }
 
-    bool hasRareData() const { return hasUncommonNodeData() && m_data.m_rareData->isNodeRareData(); }
-
     NodeRareData* rareData() const;
     NodeRareData* ensureRareData();
     void clearRareData();
@@ -870,7 +808,6 @@
     virtual void refEventTarget();
     virtual void derefEventTarget();
 
-    bool hasUncommonNodeData() const { return getFlag(HasUncommonNodeData); }
     virtual PassOwnPtr<NodeRareData> createRareData();
     bool rareDataFocused() const;
 
@@ -907,7 +844,7 @@
     union DataUnion {
         DataUnion() : m_renderer(0) { }
         RenderObject* m_renderer;
-        UncommonNodeData* m_rareData;
+        NodeRareDataBase* m_rareData;
     } m_data;
 
 protected:

Modified: trunk/Source/WebCore/dom/NodeRareData.h (136882 => 136883)


--- trunk/Source/WebCore/dom/NodeRareData.h	2012-12-06 21:26:27 UTC (rev 136882)
+++ trunk/Source/WebCore/dom/NodeRareData.h	2012-12-06 21:41:27 UTC (rev 136883)
@@ -196,11 +196,33 @@
     TagNodeListCacheNS m_tagNodeListCacheNS;
 };
 
-class NodeRareData : public UncommonNodeData {
+class NodeRareData : public NodeRareDataBase {
     WTF_MAKE_NONCOPYABLE(NodeRareData); WTF_MAKE_FAST_ALLOCATED;
 public:    
-    NodeRareData()
-        : m_childNodeList(0)
+    NodeRareData(Document* document)
+        : NodeRareDataBase(document)
+        , m_childNodeList(0)
+        , m_tabIndex(0)
+        , m_childIndex(0)
+        , m_tabIndexWasSetExplicitly(false)
+        , m_isFocused(false)
+        , m_needsFocusAppearanceUpdateSoonAfterAttach(false)
+        , m_styleAffectedByEmpty(false)
+        , m_isInCanvasSubtree(false)
+#if ENABLE(FULLSCREEN_API)
+        , m_containsFullScreenElement(false)
+#endif
+#if ENABLE(DIALOG_ELEMENT)
+        , m_isInTopLayer(false)
+#endif
+        , m_childrenAffectedByHover(false)
+        , m_childrenAffectedByActive(false)
+        , m_childrenAffectedByDrag(false)
+        , m_childrenAffectedByFirstChildRules(false)
+        , m_childrenAffectedByLastChildRules(false)
+        , m_childrenAffectedByDirectAdjacentRules(false)
+        , m_childrenAffectedByForwardPositionalRules(false)
+        , m_childrenAffectedByBackwardPositionalRules(false)
     {
     }
 
@@ -304,9 +326,33 @@
 
     virtual void reportMemoryUsage(MemoryObjectInfo*) const;
 
-private:
+protected:
     OwnPtr<NodeListsNodeData> m_nodeLists;
     ChildNodeList* m_childNodeList;
+    short m_tabIndex;
+    unsigned short m_childIndex;
+    bool m_tabIndexWasSetExplicitly : 1;
+    bool m_isFocused : 1;
+    bool m_needsFocusAppearanceUpdateSoonAfterAttach : 1;
+    bool m_styleAffectedByEmpty : 1;
+    bool m_isInCanvasSubtree : 1;
+#if ENABLE(FULLSCREEN_API)
+    bool m_containsFullScreenElement : 1;
+#endif
+#if ENABLE(DIALOG_ELEMENT)
+    bool m_isInTopLayer : 1;
+#endif
+    bool m_childrenAffectedByHover : 1;
+    bool m_childrenAffectedByActive : 1;
+    bool m_childrenAffectedByDrag : 1;
+    // Bits for dynamic child matching.
+    // We optimize for :first-child and :last-child. The other positional child selectors like nth-child or
+    // *-child-of-type, we will just give up and re-evaluate whenever children change at all.
+    bool m_childrenAffectedByFirstChildRules : 1;
+    bool m_childrenAffectedByLastChildRules : 1;
+    bool m_childrenAffectedByDirectAdjacentRules : 1;
+    bool m_childrenAffectedByForwardPositionalRules : 1;
+    bool m_childrenAffectedByBackwardPositionalRules : 1;
 
 #if ENABLE(MUTATION_OBSERVERS)
     OwnPtr<Vector<OwnPtr<MutationObserverRegistration> > > m_mutationObserverRegistry;
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to