Title: [266198] trunk/Source/WebCore
Revision
266198
Author
[email protected]
Date
2020-08-26 15:34:49 -0700 (Wed, 26 Aug 2020)

Log Message

Avoid unnecessarily copying a Vector in WebCore::transformsForValue
https://bugs.webkit.org/show_bug.cgi?id=215858

Reviewed by Tim Horton.

Avoid copying the `Vector` of `TransformOperation`s in this helper function by directly appending newly created
transform operations to the given `TransformOperations`. This does, however, mean that we need to clear these
items in the case where conversion fails and we return false.

* css/TransformFunctions.cpp:
(WebCore::transformsForValue):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (266197 => 266198)


--- trunk/Source/WebCore/ChangeLog	2020-08-26 22:27:35 UTC (rev 266197)
+++ trunk/Source/WebCore/ChangeLog	2020-08-26 22:34:49 UTC (rev 266198)
@@ -1,3 +1,17 @@
+2020-08-26  Wenson Hsieh  <[email protected]>
+
+        Avoid unnecessarily copying a Vector in WebCore::transformsForValue
+        https://bugs.webkit.org/show_bug.cgi?id=215858
+
+        Reviewed by Tim Horton.
+
+        Avoid copying the `Vector` of `TransformOperation`s in this helper function by directly appending newly created
+        transform operations to the given `TransformOperations`. This does, however, mean that we need to clear these
+        items in the case where conversion fails and we return false.
+
+        * css/TransformFunctions.cpp:
+        (WebCore::transformsForValue):
+
 2020-08-26  Dean Jackson  <[email protected]>
 
         Flickering on sedona.dev

Modified: trunk/Source/WebCore/css/TransformFunctions.cpp (266197 => 266198)


--- trunk/Source/WebCore/css/TransformFunctions.cpp	2020-08-26 22:27:35 UTC (rev 266197)
+++ trunk/Source/WebCore/css/TransformFunctions.cpp	2020-08-26 22:34:49 UTC (rev 266198)
@@ -104,12 +104,11 @@
 
 bool transformsForValue(const CSSValue& value, const CSSToLengthConversionData& conversionData, TransformOperations& outOperations)
 {
-    if (!is<CSSValueList>(value)) {
-        outOperations.clear();
+    ASSERT(!outOperations.size());
+    if (!is<CSSValueList>(value))
         return false;
-    }
 
-    TransformOperations operations;
+    auto& operations = outOperations.operations();
     for (auto& currentValue : downcast<CSSValueList>(value)) {
         if (!is<CSSFunctionValue>(currentValue))
             continue;
@@ -148,7 +147,7 @@
                         sy = sx;
                 }
             }
-            operations.operations().append(ScaleTransformOperation::create(sx, sy, 1.0, transformOperationType(transformValue.name())));
+            operations.append(ScaleTransformOperation::create(sx, sy, 1.0, transformOperationType(transformValue.name())));
             break;
         }
         case CSSValueScaleZ:
@@ -174,7 +173,7 @@
                         sy = sx;
                 }
             }
-            operations.operations().append(ScaleTransformOperation::create(sx, sy, sz, transformOperationType(transformValue.name())));
+            operations.append(ScaleTransformOperation::create(sx, sy, sz, transformOperationType(transformValue.name())));
             break;
         }
         case CSSValueTranslate:
@@ -194,10 +193,12 @@
                 }
             }
 
-            if (tx.isUndefined() || ty.isUndefined())
+            if (tx.isUndefined() || ty.isUndefined()) {
+                operations.clear();
                 return false;
+            }
 
-            operations.operations().append(TranslateTransformOperation::create(tx, ty, Length(0, Fixed), transformOperationType(transformValue.name())));
+            operations.append(TranslateTransformOperation::create(tx, ty, Length(0, Fixed), transformOperationType(transformValue.name())));
             break;
         }
         case CSSValueTranslateZ:
@@ -223,15 +224,17 @@
                 }
             }
 
-            if (tx.isUndefined() || ty.isUndefined() || tz.isUndefined())
+            if (tx.isUndefined() || ty.isUndefined() || tz.isUndefined()) {
+                operations.clear();
                 return false;
+            }
 
-            operations.operations().append(TranslateTransformOperation::create(tx, ty, tz, transformOperationType(transformValue.name())));
+            operations.append(TranslateTransformOperation::create(tx, ty, tz, transformOperationType(transformValue.name())));
             break;
         }
         case CSSValueRotate: {
             double angle = firstValue.computeDegrees();
-            operations.operations().append(RotateTransformOperation::create(0, 0, 1, angle, transformOperationType(transformValue.name())));
+            operations.append(RotateTransformOperation::create(0, 0, 1, angle, transformOperationType(transformValue.name())));
             break;
         }
         case CSSValueRotateX:
@@ -248,7 +251,7 @@
                 y = 1;
             else
                 z = 1;
-            operations.operations().append(RotateTransformOperation::create(x, y, z, angle, transformOperationType(transformValue.name())));
+            operations.append(RotateTransformOperation::create(x, y, z, angle, transformOperationType(transformValue.name())));
             break;
         }
         case CSSValueRotate3d: {
@@ -261,7 +264,7 @@
             double y = secondValue.doubleValue();
             double z = thirdValue.doubleValue();
             double angle = fourthValue.computeDegrees();
-            operations.operations().append(RotateTransformOperation::create(x, y, z, angle, transformOperationType(transformValue.name())));
+            operations.append(RotateTransformOperation::create(x, y, z, angle, transformOperationType(transformValue.name())));
             break;
         }
         case CSSValueSkew:
@@ -281,7 +284,7 @@
                     }
                 }
             }
-            operations.operations().append(SkewTransformOperation::create(angleX, angleY, transformOperationType(transformValue.name())));
+            operations.append(SkewTransformOperation::create(angleX, angleY, transformOperationType(transformValue.name())));
             break;
         }
         case CSSValueMatrix: {
@@ -293,7 +296,7 @@
             double d = downcast<CSSPrimitiveValue>(*transformValue.itemWithoutBoundsCheck(3)).doubleValue();
             double e = conversionData.zoom() * downcast<CSSPrimitiveValue>(*transformValue.itemWithoutBoundsCheck(4)).doubleValue();
             double f = conversionData.zoom() * downcast<CSSPrimitiveValue>(*transformValue.itemWithoutBoundsCheck(5)).doubleValue();
-            operations.operations().append(MatrixTransformOperation::create(a, b, c, d, e, f));
+            operations.append(MatrixTransformOperation::create(a, b, c, d, e, f));
             break;
         }
         case CSSValueMatrix3d: {
@@ -315,7 +318,7 @@
                 conversionData.zoom() * downcast<CSSPrimitiveValue>(*transformValue.itemWithoutBoundsCheck(13)).doubleValue(),
                 downcast<CSSPrimitiveValue>(*transformValue.itemWithoutBoundsCheck(14)).doubleValue(),
                 downcast<CSSPrimitiveValue>(*transformValue.itemWithoutBoundsCheck(15)).doubleValue());
-            operations.operations().append(Matrix3DTransformOperation::create(matrix));
+            operations.append(Matrix3DTransformOperation::create(matrix));
             break;
         }
         case CSSValuePerspective: {
@@ -328,10 +331,12 @@
                 p = val >= 0 ? Length(clampToPositiveInteger(val), Fixed) : Length(Undefined);
             }
 
-            if (p.isUndefined())
+            if (p.isUndefined()) {
+                operations.clear();
                 return false;
+            }
 
-            operations.operations().append(PerspectiveTransformOperation::create(p));
+            operations.append(PerspectiveTransformOperation::create(p));
             break;
         }
         default:
@@ -340,7 +345,6 @@
         }
     }
 
-    outOperations = operations;
     return true;
 }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to