Title: [199404] releases/WebKitGTK/webkit-2.12
Revision
199404
Author
[email protected]
Date
2016-04-12 23:20:14 -0700 (Tue, 12 Apr 2016)

Log Message

Merge r198284 - Don't invalidate style unnecessarily when setting inline style cssText
https://bugs.webkit.org/show_bug.cgi?id=155541
rdar://problem/23318893

Reviewed by Simon Fraser.

Source/WebCore:

We currently invalidate style when cssText is set whether the style declaration changed or not.

Based on a patch by Simon.

Test: fast/css/style-invalidation-inline-csstext.html

* css/PropertySetCSSStyleDeclaration.cpp:
(WebCore::PropertySetCSSStyleDeclaration::cssText):
(WebCore::PropertySetCSSStyleDeclaration::setCssText):

    Invalidate only if the parsed style changed.

* css/StyleProperties.cpp:
(WebCore::MutableStyleProperties::parseDeclaration):

    Compare the original and new style after parsing, return result.

* css/StyleProperties.h:

LayoutTests:

* fast/css/style-invalidation-inline-csstext-expected.txt: Added.
* fast/css/style-invalidation-inline-csstext.html: Added.

Modified Paths

Added Paths

Diff

Modified: releases/WebKitGTK/webkit-2.12/LayoutTests/ChangeLog (199403 => 199404)


--- releases/WebKitGTK/webkit-2.12/LayoutTests/ChangeLog	2016-04-13 03:57:36 UTC (rev 199403)
+++ releases/WebKitGTK/webkit-2.12/LayoutTests/ChangeLog	2016-04-13 06:20:14 UTC (rev 199404)
@@ -1,3 +1,14 @@
+2016-03-16  Antti Koivisto  <[email protected]>
+
+        Don't invalidate style unnecessarily when setting inline style cssText
+        https://bugs.webkit.org/show_bug.cgi?id=155541
+        rdar://problem/23318893
+
+        Reviewed by Simon Fraser.
+
+        * fast/css/style-invalidation-inline-csstext-expected.txt: Added.
+        * fast/css/style-invalidation-inline-csstext.html: Added.
+
 2016-03-15  Antti Koivisto  <[email protected]>
 
         Class change invalidation does not handle :not correctly

Added: releases/WebKitGTK/webkit-2.12/LayoutTests/fast/css/style-invalidation-inline-csstext-expected.txt (0 => 199404)


--- releases/WebKitGTK/webkit-2.12/LayoutTests/fast/css/style-invalidation-inline-csstext-expected.txt	                        (rev 0)
+++ releases/WebKitGTK/webkit-2.12/LayoutTests/fast/css/style-invalidation-inline-csstext-expected.txt	2016-04-13 06:20:14 UTC (rev 199404)
@@ -0,0 +1,10 @@
+
+PASS Setting cssText invalidates style 
+PASS Adding more properties to cssText invalidates style 
+PASS Changing a property value invalidates style 
+PASS Changing another property value invalidates style 
+PASS Setting cssText without changing it doesn't invalidate style 
+PASS Non-semantic change to cssText doesn't invalidate style 
+PASS Removing a property invalidates style 
+PASS Clearing cssText invalidates style 
+

Added: releases/WebKitGTK/webkit-2.12/LayoutTests/fast/css/style-invalidation-inline-csstext.html (0 => 199404)


--- releases/WebKitGTK/webkit-2.12/LayoutTests/fast/css/style-invalidation-inline-csstext.html	                        (rev 0)
+++ releases/WebKitGTK/webkit-2.12/LayoutTests/fast/css/style-invalidation-inline-csstext.html	2016-04-13 06:20:14 UTC (rev 199404)
@@ -0,0 +1,31 @@
+<script src=""
+<script src=""
+
+<div id=test><div></div></div>
+
+<script>
+var testDiv = document.querySelector('#test');
+var testDivChild = testDiv.firstChild;
+
+function testInvalidation(cssText, shouldInvalidate, name)
+{
+    test(() => {
+        internals.updateLayoutIgnorePendingStylesheetsAndRunPostLayoutTasks();
+
+        testDiv.style.cssText = cssText;
+
+        assert_equals(internals.styleChangeType(testDiv), shouldInvalidate ? "InlineStyleChange" : "NoStyleChange");
+        assert_equals(internals.styleChangeType(testDivChild), "NoStyleChange");
+    }, name);
+}
+
+testInvalidation("color:red", true, "Setting cssText invalidates style");
+testInvalidation("color:red; transform: scale3d(0, 0, 1);", true, "Adding more properties to cssText invalidates style");
+testInvalidation("color:blue; transform: scale3d(0, 0, 1);", true, "Changing a property value invalidates style");
+testInvalidation("color:blue; transform: scale3d(0, 1, 1);", true, "Changing another property value invalidates style");
+testInvalidation("color:blue; transform: scale3d(0, 1, 1);", false, "Setting cssText without changing it doesn't invalidate style");
+testInvalidation(" color:blue; transform: scale3d(0,1,1)", false, "Non-semantic change to cssText doesn't invalidate style");
+testInvalidation("transform: scale3d(0,1,1)", true, "Removing a property invalidates style");
+testInvalidation("", true, "Clearing cssText invalidates style");
+
+</script>

Modified: releases/WebKitGTK/webkit-2.12/Source/WebCore/ChangeLog (199403 => 199404)


--- releases/WebKitGTK/webkit-2.12/Source/WebCore/ChangeLog	2016-04-13 03:57:36 UTC (rev 199403)
+++ releases/WebKitGTK/webkit-2.12/Source/WebCore/ChangeLog	2016-04-13 06:20:14 UTC (rev 199404)
@@ -1,3 +1,30 @@
+2016-03-16  Antti Koivisto  <[email protected]>
+
+        Don't invalidate style unnecessarily when setting inline style cssText
+        https://bugs.webkit.org/show_bug.cgi?id=155541
+        rdar://problem/23318893
+
+        Reviewed by Simon Fraser.
+
+        We currently invalidate style when cssText is set whether the style declaration changed or not.
+
+        Based on a patch by Simon.
+
+        Test: fast/css/style-invalidation-inline-csstext.html
+
+        * css/PropertySetCSSStyleDeclaration.cpp:
+        (WebCore::PropertySetCSSStyleDeclaration::cssText):
+        (WebCore::PropertySetCSSStyleDeclaration::setCssText):
+
+            Invalidate only if the parsed style changed.
+
+        * css/StyleProperties.cpp:
+        (WebCore::MutableStyleProperties::parseDeclaration):
+
+            Compare the original and new style after parsing, return result.
+
+        * css/StyleProperties.h:
+
 2016-03-15  Simon Fraser  <[email protected]>
 
         Occasional crash under GraphicsContext::platformContext when dragging Google maps

Modified: releases/WebKitGTK/webkit-2.12/Source/WebCore/css/PropertySetCSSStyleDeclaration.cpp (199403 => 199404)


--- releases/WebKitGTK/webkit-2.12/Source/WebCore/css/PropertySetCSSStyleDeclaration.cpp	2016-04-13 03:57:36 UTC (rev 199403)
+++ releases/WebKitGTK/webkit-2.12/Source/WebCore/css/PropertySetCSSStyleDeclaration.cpp	2016-04-13 06:20:14 UTC (rev 199404)
@@ -145,18 +145,16 @@
 {
     return m_propertySet->asText();
 }
-    
-void PropertySetCSSStyleDeclaration::setCssText(const String& text, ExceptionCode& ec)
+
+void PropertySetCSSStyleDeclaration::setCssText(const String& text, ExceptionCode&)
 {
     StyleAttributeMutationScope mutationScope(this);
     if (!willMutate())
         return;
 
-    ec = 0;
-    // FIXME: Detect syntax errors and set ec.
-    m_propertySet->parseDeclaration(text, contextStyleSheet());
+    bool changed = m_propertySet->parseDeclaration(text, contextStyleSheet());
 
-    didMutate(PropertyChanged);
+    didMutate(changed ? PropertyChanged : NoChanges);
 
     mutationScope.enqueueMutationRecord();    
 }

Modified: releases/WebKitGTK/webkit-2.12/Source/WebCore/css/StyleProperties.cpp (199403 => 199404)


--- releases/WebKitGTK/webkit-2.12/Source/WebCore/css/StyleProperties.cpp	2016-04-13 03:57:36 UTC (rev 199403)
+++ releases/WebKitGTK/webkit-2.12/Source/WebCore/css/StyleProperties.cpp	2016-04-13 06:20:14 UTC (rev 199404)
@@ -843,8 +843,9 @@
     return setProperty(CSSProperty(propertyID, CSSValuePool::singleton().createIdentifierValue(identifier), important));
 }
 
-void MutableStyleProperties::parseDeclaration(const String& styleDeclaration, StyleSheetContents* contextStyleSheet)
+bool MutableStyleProperties::parseDeclaration(const String& styleDeclaration, StyleSheetContents* contextStyleSheet)
 {
+    auto oldProperties = WTFMove(m_propertyVector);
     m_propertyVector.clear();
 
     CSSParserContext context(cssParserMode());
@@ -854,6 +855,9 @@
     }
     CSSParser parser(context);
     parser.parseDeclaration(this, styleDeclaration, 0, contextStyleSheet);
+
+    // We could do better. Just changing property order does not require style invalidation.
+    return oldProperties != m_propertyVector;
 }
 
 bool MutableStyleProperties::addParsedProperties(const CSSParser::ParsedPropertyVector& properties)

Modified: releases/WebKitGTK/webkit-2.12/Source/WebCore/css/StyleProperties.h (199403 => 199404)


--- releases/WebKitGTK/webkit-2.12/Source/WebCore/css/StyleProperties.h	2016-04-13 03:57:36 UTC (rev 199403)
+++ releases/WebKitGTK/webkit-2.12/Source/WebCore/css/StyleProperties.h	2016-04-13 06:20:14 UTC (rev 199404)
@@ -223,7 +223,7 @@
     void mergeAndOverrideOnConflict(const StyleProperties&);
 
     void clear();
-    void parseDeclaration(const String& styleDeclaration, StyleSheetContents* contextStyleSheet);
+    bool parseDeclaration(const String& styleDeclaration, StyleSheetContents* contextStyleSheet);
 
     WEBCORE_EXPORT CSSStyleDeclaration* ensureCSSStyleDeclaration();
     CSSStyleDeclaration* ensureInlineCSSStyleDeclaration(StyledElement* parentElement);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to