REGRESSION(r106819): ~28% or so performance regression on the ManInBlue HTML benchmark
authorkling@webkit.org <kling@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 7 Feb 2012 12:29:28 +0000 (12:29 +0000)
committerkling@webkit.org <kling@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 7 Feb 2012 12:29:28 +0000 (12:29 +0000)
<http://webkit.org/b/77952>

Reviewed by Andreas Kling.
Patch by Ryosuke Niwa.

The performance regression was caused by using ensureAttributeData() which forces the
regeneration of invalidated attributes ("style" and SVG animatable attributes.)
Added an ensureAttributeDataWithoutUpdate() helper that only ensures the presence
of ElementAttributeData, not the validity of its contents. Use that when grabbing
at an element's inline and attribute styles.

* dom/Element.h:
(Element):
(WebCore::Element::ensureAttributeDataWithoutUpdate):
* dom/StyledElement.h:
(WebCore::StyledElement::ensureInlineStyleDecl):
(WebCore::StyledElement::ensureAttributeStyle):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@106925 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/dom/Element.h
Source/WebCore/dom/StyledElement.h

index e8f3e6a..3e4dce4 100644 (file)
@@ -1,3 +1,24 @@
+2012-02-07  Andreas Kling  <awesomekling@apple.com>
+
+        REGRESSION(r106819): ~28% or so performance regression on the ManInBlue HTML benchmark
+        <http://webkit.org/b/77952>
+
+        Reviewed by Andreas Kling.
+        Patch by Ryosuke Niwa.
+
+        The performance regression was caused by using ensureAttributeData() which forces the
+        regeneration of invalidated attributes ("style" and SVG animatable attributes.)
+        Added an ensureAttributeDataWithoutUpdate() helper that only ensures the presence
+        of ElementAttributeData, not the validity of its contents. Use that when grabbing
+        at an element's inline and attribute styles.
+
+        * dom/Element.h:
+        (Element):
+        (WebCore::Element::ensureAttributeDataWithoutUpdate):
+        * dom/StyledElement.h:
+        (WebCore::StyledElement::ensureInlineStyleDecl):
+        (WebCore::StyledElement::ensureAttributeStyle):
+
 2012-02-07  Michael BrĂ¼ning  <michael.bruning@nokia.com>
 
         [Qt][WK2] Compute and set cache capacities using the current CacheModel
index cf6d9cc..9381e2f 100644 (file)
@@ -242,6 +242,9 @@ public:
     ElementAttributeData* attributeData() const { return m_attributeMap ? m_attributeMap->attributeData() : 0; }
     ElementAttributeData* ensureAttributeData() const { return ensureUpdatedAttributes()->attributeData(); }
 
+    // FIXME: This method should be removed once AttributeData is moved to Element.
+    ElementAttributeData* ensureAttributeDataWithoutUpdate() const { return ensureAttributeMap()->attributeData(); }
+
     void setAttributesFromElement(const Element&);
 
     virtual void copyNonAttributeProperties(const Element* source);
index 52f9cbc..cae6e5e 100644 (file)
@@ -48,11 +48,11 @@ public:
     void invalidateStyleAttribute();
 
     StylePropertySet* inlineStyleDecl() const { return attributeData() ? attributeData()->inlineStyleDecl() : 0; }
-    StylePropertySet* ensureInlineStyleDecl() { return ensureAttributeData()->ensureInlineStyleDecl(this); }
+    StylePropertySet* ensureInlineStyleDecl() { return ensureAttributeDataWithoutUpdate()->ensureInlineStyleDecl(this); }
     virtual CSSStyleDeclaration* style() OVERRIDE { return ensureInlineStyleDecl()->ensureCSSStyleDeclaration(); }
 
     StylePropertySet* attributeStyle() const { return attributeData() ? attributeData()->attributeStyle() : 0; }
-    StylePropertySet* ensureAttributeStyle() { return ensureAttributeData()->ensureAttributeStyle(this); }
+    StylePropertySet* ensureAttributeStyle() { return ensureAttributeDataWithoutUpdate()->ensureAttributeStyle(this); }
 
     const SpaceSplitString& classNames() const;