REGRESSION(r106756): 10% performance hit on DOM/Template.
authorkling@webkit.org <kling@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 6 Feb 2012 23:14:11 +0000 (23:14 +0000)
committerkling@webkit.org <kling@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 6 Feb 2012 23:14:11 +0000 (23:14 +0000)
commitb3460f9ba52074a92eadae4f3188e000e1492b2c
treeedb90dc50ff527d72fdbc499b67ad59d46585cc9
parent44979978b27ebfc5e06edb19c50f754883c8021b
REGRESSION(r106756): 10% performance hit on DOM/Template.
<http://webkit.org/b/77831>

Reviewed by Ryosuke Niwa.

Let the StylePropertySet used for element attribute style have the element as its parent.
This is accomplished by adding an m_parentIsElement bit to StylePropertySet and sharing
some of the internal logic with inline styles.

In the end, this means that CSSParser will now pick up the document's CSSValuePool when
parsing properties for attribute styles, which fixes the perf regression from r106756.

* css/StylePropertySet.cpp:
(WebCore::StylePropertySet::StylePropertySet):
(WebCore::StylePropertySet::contextStyleSheet):

    Find contextStyleSheet via the parentElement() when there is one.

(WebCore::StylePropertySet::setNeedsStyleRecalc):

    Always set FullStyleChange for attribute style mutations. We can probably use the
    same lighter invalidation as inline styles, but that's a topic for another patch.

* css/StylePropertySet.h:
(WebCore::StylePropertySet::createInline):
(WebCore::StylePropertySet::createAttributeStyle):
(WebCore::StylePropertySet::parentRuleInternal):
(WebCore::StylePropertySet::clearParentRule):
(StylePropertySet):
(WebCore::StylePropertySet::parentElement):
(WebCore::StylePropertySet::clearParentElement):

    Added m_parentIsElement bit and update assertions as appropriate to not just
    cover the inline style case. Added a createAttributeStyle() helper to create
    a StylePropertySet for use as Element::attributeStyle().

* dom/StyledElement.h:
* dom/ElementAttributeData.h:
* dom/ElementAttributeData.cpp:
(WebCore::ElementAttributeData::ensureAttributeStyle):

    Use StylePropertySet::createAttributeStyle().

* dom/StyledElement.cpp:
(WebCore::StyledElement::removeCSSProperties):
(WebCore::StyledElement::addCSSProperty):
(WebCore::StyledElement::addCSSImageProperty):

    Remove setNeedsStyleRecalc() calls since that is now handled automatically by
    StylePropertySet's mutation methods.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@106863 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Source/WebCore/ChangeLog
Source/WebCore/css/StylePropertySet.cpp
Source/WebCore/css/StylePropertySet.h
Source/WebCore/dom/ElementAttributeData.cpp
Source/WebCore/dom/ElementAttributeData.h
Source/WebCore/dom/StyledElement.cpp
Source/WebCore/dom/StyledElement.h