Changeset 266198 in webkit
- Timestamp:
- Aug 26, 2020, 3:34:49 PM (6 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 2 edited
-
ChangeLog (modified) (1 diff)
-
css/TransformFunctions.cpp (modified) (12 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r266189 r266198 1 2020-08-26 Wenson Hsieh <wenson_hsieh@apple.com> 2 3 Avoid unnecessarily copying a Vector in WebCore::transformsForValue 4 https://bugs.webkit.org/show_bug.cgi?id=215858 5 6 Reviewed by Tim Horton. 7 8 Avoid copying the `Vector` of `TransformOperation`s in this helper function by directly appending newly created 9 transform operations to the given `TransformOperations`. This does, however, mean that we need to clear these 10 items in the case where conversion fails and we return false. 11 12 * css/TransformFunctions.cpp: 13 (WebCore::transformsForValue): 14 1 15 2020-08-26 Dean Jackson <dino@apple.com> 2 16 -
trunk/Source/WebCore/css/TransformFunctions.cpp
r254703 r266198 105 105 bool transformsForValue(const CSSValue& value, const CSSToLengthConversionData& conversionData, TransformOperations& outOperations) 106 106 { 107 if (!is<CSSValueList>(value)) {108 outOperations.clear();107 ASSERT(!outOperations.size()); 108 if (!is<CSSValueList>(value)) 109 109 return false; 110 } 111 112 TransformOperations operations; 110 111 auto& operations = outOperations.operations(); 113 112 for (auto& currentValue : downcast<CSSValueList>(value)) { 114 113 if (!is<CSSFunctionValue>(currentValue)) … … 149 148 } 150 149 } 151 operations. operations().append(ScaleTransformOperation::create(sx, sy, 1.0, transformOperationType(transformValue.name())));150 operations.append(ScaleTransformOperation::create(sx, sy, 1.0, transformOperationType(transformValue.name()))); 152 151 break; 153 152 } … … 175 174 } 176 175 } 177 operations. operations().append(ScaleTransformOperation::create(sx, sy, sz, transformOperationType(transformValue.name())));176 operations.append(ScaleTransformOperation::create(sx, sy, sz, transformOperationType(transformValue.name()))); 178 177 break; 179 178 } … … 195 194 } 196 195 197 if (tx.isUndefined() || ty.isUndefined()) 196 if (tx.isUndefined() || ty.isUndefined()) { 197 operations.clear(); 198 198 return false; 199 200 operations.operations().append(TranslateTransformOperation::create(tx, ty, Length(0, Fixed), transformOperationType(transformValue.name()))); 199 } 200 201 operations.append(TranslateTransformOperation::create(tx, ty, Length(0, Fixed), transformOperationType(transformValue.name()))); 201 202 break; 202 203 } … … 224 225 } 225 226 226 if (tx.isUndefined() || ty.isUndefined() || tz.isUndefined()) 227 if (tx.isUndefined() || ty.isUndefined() || tz.isUndefined()) { 228 operations.clear(); 227 229 return false; 228 229 operations.operations().append(TranslateTransformOperation::create(tx, ty, tz, transformOperationType(transformValue.name()))); 230 } 231 232 operations.append(TranslateTransformOperation::create(tx, ty, tz, transformOperationType(transformValue.name()))); 230 233 break; 231 234 } 232 235 case CSSValueRotate: { 233 236 double angle = firstValue.computeDegrees(); 234 operations. operations().append(RotateTransformOperation::create(0, 0, 1, angle, transformOperationType(transformValue.name())));237 operations.append(RotateTransformOperation::create(0, 0, 1, angle, transformOperationType(transformValue.name()))); 235 238 break; 236 239 } … … 249 252 else 250 253 z = 1; 251 operations. operations().append(RotateTransformOperation::create(x, y, z, angle, transformOperationType(transformValue.name())));254 operations.append(RotateTransformOperation::create(x, y, z, angle, transformOperationType(transformValue.name()))); 252 255 break; 253 256 } … … 262 265 double z = thirdValue.doubleValue(); 263 266 double angle = fourthValue.computeDegrees(); 264 operations. operations().append(RotateTransformOperation::create(x, y, z, angle, transformOperationType(transformValue.name())));267 operations.append(RotateTransformOperation::create(x, y, z, angle, transformOperationType(transformValue.name()))); 265 268 break; 266 269 } … … 282 285 } 283 286 } 284 operations. operations().append(SkewTransformOperation::create(angleX, angleY, transformOperationType(transformValue.name())));287 operations.append(SkewTransformOperation::create(angleX, angleY, transformOperationType(transformValue.name()))); 285 288 break; 286 289 } … … 294 297 double e = conversionData.zoom() * downcast<CSSPrimitiveValue>(*transformValue.itemWithoutBoundsCheck(4)).doubleValue(); 295 298 double f = conversionData.zoom() * downcast<CSSPrimitiveValue>(*transformValue.itemWithoutBoundsCheck(5)).doubleValue(); 296 operations. operations().append(MatrixTransformOperation::create(a, b, c, d, e, f));299 operations.append(MatrixTransformOperation::create(a, b, c, d, e, f)); 297 300 break; 298 301 } … … 316 319 downcast<CSSPrimitiveValue>(*transformValue.itemWithoutBoundsCheck(14)).doubleValue(), 317 320 downcast<CSSPrimitiveValue>(*transformValue.itemWithoutBoundsCheck(15)).doubleValue()); 318 operations. operations().append(Matrix3DTransformOperation::create(matrix));321 operations.append(Matrix3DTransformOperation::create(matrix)); 319 322 break; 320 323 } … … 329 332 } 330 333 331 if (p.isUndefined()) 334 if (p.isUndefined()) { 335 operations.clear(); 332 336 return false; 333 334 operations.operations().append(PerspectiveTransformOperation::create(p)); 337 } 338 339 operations.append(PerspectiveTransformOperation::create(p)); 335 340 break; 336 341 } … … 341 346 } 342 347 343 outOperations = operations;344 348 return true; 345 349 }
Note:
See TracChangeset
for help on using the changeset viewer.