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);