Title: [181069] trunk/Source/WebCore
Revision
181069
Author
simon.fra...@apple.com
Date
2015-03-04 21:41:42 -0800 (Wed, 04 Mar 2015)

Log Message

Clarify RenderElement::adjustStyleDifference()
https://bugs.webkit.org/show_bug.cgi?id=142256

Reviewed by David Hyatt.

Make RenderElement::adjustStyleDifference() clearer in two ways.

First, replace lots of if (diff < X) diff = X with
diff = std::max(diff, X). I did this even in cases where diff was
being set unconditionally, because it's never correct to change the diff
to a lesser value.

Second the "set at least SimplifiedLayout, but if we have PositionedMovementOnly
set it to SimplifiedLayoutAndPositionedMovement" was confusingly written.

* rendering/RenderElement.cpp:
(WebCore::RenderElement::adjustStyleDifference):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (181068 => 181069)


--- trunk/Source/WebCore/ChangeLog	2015-03-05 05:30:46 UTC (rev 181068)
+++ trunk/Source/WebCore/ChangeLog	2015-03-05 05:41:42 UTC (rev 181069)
@@ -1,3 +1,23 @@
+2015-03-04  Simon Fraser  <simon.fra...@apple.com>
+
+        Clarify RenderElement::adjustStyleDifference()
+        https://bugs.webkit.org/show_bug.cgi?id=142256
+
+        Reviewed by David Hyatt.
+
+        Make RenderElement::adjustStyleDifference() clearer in two ways.
+        
+        First, replace lots of if (diff < X) diff = X with
+        diff = std::max(diff, X). I did this even in cases where diff was
+        being set unconditionally, because it's never correct to change the diff
+        to a lesser value.
+        
+        Second the "set at least SimplifiedLayout, but if we have PositionedMovementOnly
+        set it to SimplifiedLayoutAndPositionedMovement" was confusingly written.
+
+        * rendering/RenderElement.cpp:
+        (WebCore::RenderElement::adjustStyleDifference):
+
 2015-03-04  David Kilzer  <ddkil...@apple.com>
 
         Switch new soft-linking debug asserts to release asserts

Modified: trunk/Source/WebCore/rendering/RenderElement.cpp (181068 => 181069)


--- trunk/Source/WebCore/rendering/RenderElement.cpp	2015-03-05 05:30:46 UTC (rev 181068)
+++ trunk/Source/WebCore/rendering/RenderElement.cpp	2015-03-05 05:41:42 UTC (rev 181069)
@@ -263,37 +263,35 @@
 {
     // If transform changed, and we are not composited, need to do a layout.
     if (contextSensitiveProperties & ContextSensitivePropertyTransform) {
-        // Text nodes share style with their parents but transforms don't apply to them,
-        // hence the !isText() check.
         // FIXME: when transforms are taken into account for overflow, we will need to do a layout.
         if (!hasLayer() || !downcast<RenderLayerModelObject>(*this).layer()->isComposited()) {
-            // We need to set at least SimplifiedLayout, but if PositionedMovementOnly is already set
-            // then we actually need SimplifiedLayoutAndPositionedMovement.
             if (!hasLayer())
-                diff = StyleDifferenceLayout; // FIXME: Do this for now since SimplifiedLayout cannot handle updating floating objects lists.
-            else if (diff < StyleDifferenceLayoutPositionedMovementOnly)
-                diff = StyleDifferenceSimplifiedLayout;
-            else if (diff < StyleDifferenceSimplifiedLayout)
-                diff = StyleDifferenceSimplifiedLayoutAndPositionedMovement;
-        } else if (diff < StyleDifferenceRecompositeLayer)
-            diff = StyleDifferenceRecompositeLayer;
+                diff = std::max(diff, StyleDifferenceLayout);
+            else {
+                // We need to set at least SimplifiedLayout, but if PositionedMovementOnly is already set
+                // then we actually need SimplifiedLayoutAndPositionedMovement.
+                diff = std::max(diff, (diff == StyleDifferenceLayoutPositionedMovementOnly) ? StyleDifferenceSimplifiedLayoutAndPositionedMovement : StyleDifferenceSimplifiedLayout);
+            }
+        
+        } else
+            diff = std::max(diff, StyleDifferenceRecompositeLayer);
     }
 
     // If opacity changed, and we are not composited, need to repaint (also
     // ignoring text nodes)
     if (contextSensitiveProperties & ContextSensitivePropertyOpacity) {
         if (!hasLayer() || !downcast<RenderLayerModelObject>(*this).layer()->isComposited())
-            diff = StyleDifferenceRepaintLayer;
-        else if (diff < StyleDifferenceRecompositeLayer)
-            diff = StyleDifferenceRecompositeLayer;
+            diff = std::max(diff, StyleDifferenceRepaintLayer);
+        else
+            diff = std::max(diff, StyleDifferenceRecompositeLayer);
     }
 
     if ((contextSensitiveProperties & ContextSensitivePropertyFilter) && hasLayer()) {
         RenderLayer* layer = downcast<RenderLayerModelObject>(*this).layer();
         if (!layer->isComposited() || layer->paintsWithFilters())
-            diff = StyleDifferenceRepaintLayer;
-        else if (diff < StyleDifferenceRecompositeLayer)
-            diff = StyleDifferenceRecompositeLayer;
+            diff = std::max(diff, StyleDifferenceRepaintLayer);
+        else
+            diff = std::max(diff, StyleDifferenceRecompositeLayer);
     }
     
     // The answer to requiresLayer() for plugins, iframes, and canvas can change without the actual
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to