Index: Source/WebCore/css/StyleResolver.cpp |
=================================================================== |
--- Source/WebCore/css/StyleResolver.cpp (revision 141894) |
+++ Source/WebCore/css/StyleResolver.cpp (working copy) |
@@ -1000,6 +1000,13 @@ |
static const unsigned cStyleSearchThreshold = 10; |
static const unsigned cStyleSearchLevelThreshold = 10; |
+static inline bool parentElementPreventsSharing(const Element* parentElement) |
+{ |
+ if (!parentElement) |
+ return false; |
+ return parentElement->hasFlagsSetDuringStylingOfChildren(); |
+} |
+ |
Node* StyleResolver::locateCousinList(Element* parent, unsigned& visitedNodeCount) const |
{ |
if (visitedNodeCount >= cStyleSearchThreshold * cStyleSearchLevelThreshold) |
@@ -1029,7 +1036,8 @@ |
while (thisCousin) { |
while (currentNode) { |
++subcount; |
- if (currentNode->renderStyle() == parentStyle && currentNode->lastChild()) { |
+ if (currentNode->renderStyle() == parentStyle && currentNode->lastChild() |
+ && currentNode->isElementNode() && !parentElementPreventsSharing(toElement(currentNode))) { |
// Adjust for unused reserved tries. |
visitedNodeCount -= cStyleSearchThreshold - subcount; |
return currentNode->lastChild(); |
@@ -1248,16 +1256,6 @@ |
return static_cast<StyledElement*>(node); |
} |
-static inline bool parentElementPreventsSharing(const Element* parentElement) |
-{ |
- if (!parentElement) |
- return false; |
- return parentElement->childrenAffectedByPositionalRules() |
- || parentElement->childrenAffectedByFirstChildRules() |
- || parentElement->childrenAffectedByLastChildRules() |
- || parentElement->childrenAffectedByDirectAdjacentRules(); |
-} |
- |
RenderStyle* StyleResolver::locateSharedStyle() |
{ |
if (!m_styledElement || !m_parentStyle) |