Log Message
Web animations- Composite operation accumulation support for transform properties https://bugs.webkit.org/show_bug.cgi?id=236116
Reviewed by Simon Fraser. LayoutTests/imported/w3c: * web-platform-tests/css/css-transforms/animation/transform-matrix-composition-expected.txt: * web-platform-tests/css/css-transforms/animation/transform-rotate-composition-expected.txt: * web-platform-tests/css/css-transforms/animation/transform-skew-composition-expected.txt: * web-platform-tests/css/css-transforms/animation/transform-translate-composition-expected.txt: * web-platform-tests/web-animations/animation-model/animation-types/accumulation-per-property-002-expected.txt: * web-platform-tests/web-animations/animation-model/combining-effects/effect-composition-expected.txt: Source/WebCore: This patch brings further support for accumulation on transform properties. The main aspect being addressed is handling accumulation of TransformationMatrices. This involves accumulating on the decomposed functions, which occurs in blendFloat() and accumulateQuaternion(). Since we need to perform accumulation for one-based values on certain decomposed functions, (scale, diagonals of matrices, etc), we set the operation to accumulate only for these cases. A couple of bugs introduced by this additional support are also addressed. For a property with a different transform operation than the keyframes given, transformFunctionListsMatch() would return true when it shouldn't. Addressed by checking in blendByMatchingOperations and falling back on matrix interpolation. Another bug is that we need to pass the composite operation to TransformationMatrix blend(). Another bug is that we should to use Replace behavior if either of the transform matrices are non-invertible. * animation/CSSPropertyAnimation.cpp: (WebCore::blendFunc): * platform/graphics/transforms/Matrix3DTransformOperation.cpp: (WebCore::createOperation): * platform/graphics/transforms/MatrixTransformOperation.cpp: (WebCore::MatrixTransformOperation::blend): * platform/graphics/transforms/RotateTransformOperation.cpp: (WebCore::RotateTransformOperation::blend): * platform/graphics/transforms/TransformOperations.cpp: (WebCore::TransformOperations::blendByMatchingOperations const): (WebCore::TransformOperations::blendByUsingMatrixInterpolation const): (WebCore::TransformOperations::blend const): * platform/graphics/transforms/TransformOperations.h: (WebCore::TransformOperations::isInvertible const): * platform/graphics/transforms/TransformationMatrix.cpp: (WebCore::blendFloat): (WebCore::TransformationMatrix::blend2): (WebCore::accumulateQuaternion): (WebCore::TransformationMatrix::blend4): (WebCore::TransformationMatrix::blend):
Modified Paths
- trunk/LayoutTests/imported/w3c/ChangeLog
- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-transforms/animation/transform-matrix-composition-expected.txt
- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-transforms/animation/transform-rotate-composition-expected.txt
- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-transforms/animation/transform-skew-composition-expected.txt
- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-transforms/animation/transform-translate-composition-expected.txt
- trunk/LayoutTests/imported/w3c/web-platform-tests/web-animations/animation-model/animation-types/accumulation-per-property-002-expected.txt
- trunk/LayoutTests/imported/w3c/web-platform-tests/web-animations/animation-model/combining-effects/effect-composition-expected.txt
- trunk/Source/WebCore/ChangeLog
- trunk/Source/WebCore/animation/CSSPropertyAnimation.cpp
- trunk/Source/WebCore/platform/graphics/transforms/Matrix3DTransformOperation.cpp
- trunk/Source/WebCore/platform/graphics/transforms/MatrixTransformOperation.cpp
- trunk/Source/WebCore/platform/graphics/transforms/RotateTransformOperation.cpp
- trunk/Source/WebCore/platform/graphics/transforms/TransformOperations.cpp
- trunk/Source/WebCore/platform/graphics/transforms/TransformOperations.h
- trunk/Source/WebCore/platform/graphics/transforms/TransformationMatrix.cpp
Diff
Modified: trunk/LayoutTests/imported/w3c/ChangeLog (289598 => 289599)
--- trunk/LayoutTests/imported/w3c/ChangeLog 2022-02-11 02:03:18 UTC (rev 289598)
+++ trunk/LayoutTests/imported/w3c/ChangeLog 2022-02-11 02:27:02 UTC (rev 289599)
@@ -1,3 +1,17 @@
+2022-02-10 Nikolaos Mouchtaris <nmouchta...@apple.com>
+
+ Web animations- Composite operation accumulation support for transform properties
+ https://bugs.webkit.org/show_bug.cgi?id=236116
+
+ Reviewed by Simon Fraser.
+
+ * web-platform-tests/css/css-transforms/animation/transform-matrix-composition-expected.txt:
+ * web-platform-tests/css/css-transforms/animation/transform-rotate-composition-expected.txt:
+ * web-platform-tests/css/css-transforms/animation/transform-skew-composition-expected.txt:
+ * web-platform-tests/css/css-transforms/animation/transform-translate-composition-expected.txt:
+ * web-platform-tests/web-animations/animation-model/animation-types/accumulation-per-property-002-expected.txt:
+ * web-platform-tests/web-animations/animation-model/combining-effects/effect-composition-expected.txt:
+
2022-02-10 Chris Dumez <cdu...@apple.com>
Resync web-platform-tests/service-workers from upstream
Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-transforms/animation/transform-matrix-composition-expected.txt (289598 => 289599)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-transforms/animation/transform-matrix-composition-expected.txt 2022-02-11 02:03:18 UTC (rev 289598)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-transforms/animation/transform-matrix-composition-expected.txt 2022-02-11 02:27:02 UTC (rev 289599)
@@ -27,20 +27,20 @@
FAIL Compositing: property <transform> underlying [matrix(1, 0, 0, 1, 100, 0)] from add [matrix(1, 1, 0, 0, 0, 100)] to add [matrix(1, 0, 0, 1, 200, 0)] at (0.75) should be [matrix(1, 0, 0, 1, 300, 0)] assert_equals: expected "matrix ( 1 , 0 , 0 , 1 , 300 , 0 ) " but got "matrix ( 0.97 , 0.32 , - 0.04 , 0.63 , 234.38 , 40.63 ) "
PASS Compositing: property <transform> underlying [matrix(1, 0, 0, 1, 100, 0)] from add [matrix(1, 1, 0, 0, 0, 100)] to add [matrix(1, 0, 0, 1, 200, 0)] at (1) should be [matrix(1, 0, 0, 1, 300, 0)]
FAIL Compositing: property <transform> underlying [matrix(1, 0, 0, 1, 100, 0)] from add [matrix(1, 1, 0, 0, 0, 100)] to add [matrix(1, 0, 0, 1, 200, 0)] at (1.5) should be [matrix(1, 0, 0, 1, 300, 0)] assert_equals: expected "matrix ( 1 , 0 , 0 , 1 , 300 , 0 ) " but got "matrix ( 0.99 , - 0.56 , 0.37 , 1.59 , 487.5 , - 137.5 ) "
-FAIL Compositing: property <transform> underlying [matrix(0, 1, -1, 0, 100, 0)] from accumulate [matrix(1, 0, 0, 1, 100, 0)] to accumulate [matrix(1, 0, 0, 1, 200, 0)] at (-0.5) should be [matrix(0, 1, -1, 0, 150, 0)] assert_equals: expected "matrix ( 0 , 1 , - 1 , 0 , 150 , 0 ) " but got "matrix ( 1 , 0 , 0 , 1 , 50 , 0 ) "
-FAIL Compositing: property <transform> underlying [matrix(0, 1, -1, 0, 100, 0)] from accumulate [matrix(1, 0, 0, 1, 100, 0)] to accumulate [matrix(1, 0, 0, 1, 200, 0)] at (0) should be [matrix(0, 1, -1, 0, 200, 0)] assert_equals: expected "matrix ( 0 , 1 , - 1 , 0 , 200 , 0 ) " but got "matrix ( 1 , 0 , 0 , 1 , 100 , 0 ) "
-FAIL Compositing: property <transform> underlying [matrix(0, 1, -1, 0, 100, 0)] from accumulate [matrix(1, 0, 0, 1, 100, 0)] to accumulate [matrix(1, 0, 0, 1, 200, 0)] at (0.25) should be [matrix(0, 1, -1, 0, 225, 0)] assert_equals: expected "matrix ( 0 , 1 , - 1 , 0 , 225 , 0 ) " but got "matrix ( 1 , 0 , 0 , 1 , 125 , 0 ) "
-FAIL Compositing: property <transform> underlying [matrix(0, 1, -1, 0, 100, 0)] from accumulate [matrix(1, 0, 0, 1, 100, 0)] to accumulate [matrix(1, 0, 0, 1, 200, 0)] at (0.5) should be [matrix(0, 1, -1, 0, 250, 0)] assert_equals: expected "matrix ( 0 , 1 , - 1 , 0 , 250 , 0 ) " but got "matrix ( 1 , 0 , 0 , 1 , 150 , 0 ) "
-FAIL Compositing: property <transform> underlying [matrix(0, 1, -1, 0, 100, 0)] from accumulate [matrix(1, 0, 0, 1, 100, 0)] to accumulate [matrix(1, 0, 0, 1, 200, 0)] at (0.75) should be [matrix(0, 1, -1, 0, 275, 0)] assert_equals: expected "matrix ( 0 , 1 , - 1 , 0 , 275 , 0 ) " but got "matrix ( 1 , 0 , 0 , 1 , 175 , 0 ) "
-FAIL Compositing: property <transform> underlying [matrix(0, 1, -1, 0, 100, 0)] from accumulate [matrix(1, 0, 0, 1, 100, 0)] to accumulate [matrix(1, 0, 0, 1, 200, 0)] at (1) should be [matrix(0, 1, -1, 0, 300, 0)] assert_equals: expected "matrix ( 0 , 1 , - 1 , 0 , 300 , 0 ) " but got "matrix ( 1 , 0 , 0 , 1 , 200 , 0 ) "
-FAIL Compositing: property <transform> underlying [matrix(0, 1, -1, 0, 100, 0)] from accumulate [matrix(1, 0, 0, 1, 100, 0)] to accumulate [matrix(1, 0, 0, 1, 200, 0)] at (1.5) should be [matrix(0, 1, -1, 0, 350, 0)] assert_equals: expected "matrix ( 0 , 1 , - 1 , 0 , 350 , 0 ) " but got "matrix ( 1 , 0 , 0 , 1 , 250 , 0 ) "
-FAIL Compositing: property <transform> underlying [matrix3d(0.8535533905932737,0.1464466094067262,-0.5,0,0.1464466094067262,0.8535533905932737,0.5,0,0.5,-0.5,0.7071067811865476,0,100,0,0,1)] from accumulate [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 100, 0, 0, 1)] to accumulate [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 200, 0, 0, 1)] at (-0.5) should be [translateX(150px) rotate3d(1, 1, 0, 45deg)] assert_equals: expected "matrix3d ( 0.85 , 0.15 , - 0.5 , 0 , 0.15 , 0.85 , 0.5 , 0 , 0.5 , - 0.5 , 0.71 , 0 , 150 , 0 , 0 , 1 ) " but got "matrix ( 1 , 0 , 0 , 1 , 50 , 0 ) "
-FAIL Compositing: property <transform> underlying [matrix3d(0.8535533905932737,0.1464466094067262,-0.5,0,0.1464466094067262,0.8535533905932737,0.5,0,0.5,-0.5,0.7071067811865476,0,100,0,0,1)] from accumulate [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 100, 0, 0, 1)] to accumulate [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 200, 0, 0, 1)] at (0) should be [translateX(200px) rotate3d(1, 1, 0, 45deg)] assert_equals: expected "matrix3d ( 0.85 , 0.15 , - 0.5 , 0 , 0.15 , 0.85 , 0.5 , 0 , 0.5 , - 0.5 , 0.71 , 0 , 200 , 0 , 0 , 1 ) " but got "matrix ( 1 , 0 , 0 , 1 , 100 , 0 ) "
-FAIL Compositing: property <transform> underlying [matrix3d(0.8535533905932737,0.1464466094067262,-0.5,0,0.1464466094067262,0.8535533905932737,0.5,0,0.5,-0.5,0.7071067811865476,0,100,0,0,1)] from accumulate [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 100, 0, 0, 1)] to accumulate [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 200, 0, 0, 1)] at (0.25) should be [translateX(225px) rotate3d(1, 1, 0, 45deg)] assert_equals: expected "matrix3d ( 0.85 , 0.15 , - 0.5 , 0 , 0.15 , 0.85 , 0.5 , 0 , 0.5 , - 0.5 , 0.71 , 0 , 225 , 0 , 0 , 1 ) " but got "matrix ( 1 , 0 , 0 , 1 , 125 , 0 ) "
-FAIL Compositing: property <transform> underlying [matrix3d(0.8535533905932737,0.1464466094067262,-0.5,0,0.1464466094067262,0.8535533905932737,0.5,0,0.5,-0.5,0.7071067811865476,0,100,0,0,1)] from accumulate [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 100, 0, 0, 1)] to accumulate [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 200, 0, 0, 1)] at (0.5) should be [translateX(250px) rotate3d(1, 1, 0, 45deg)] assert_equals: expected "matrix3d ( 0.85 , 0.15 , - 0.5 , 0 , 0.15 , 0.85 , 0.5 , 0 , 0.5 , - 0.5 , 0.71 , 0 , 250 , 0 , 0 , 1 ) " but got "matrix ( 1 , 0 , 0 , 1 , 150 , 0 ) "
-FAIL Compositing: property <transform> underlying [matrix3d(0.8535533905932737,0.1464466094067262,-0.5,0,0.1464466094067262,0.8535533905932737,0.5,0,0.5,-0.5,0.7071067811865476,0,100,0,0,1)] from accumulate [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 100, 0, 0, 1)] to accumulate [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 200, 0, 0, 1)] at (0.75) should be [translateX(275px) rotate3d(1, 1, 0, 45deg)] assert_equals: expected "matrix3d ( 0.85 , 0.15 , - 0.5 , 0 , 0.15 , 0.85 , 0.5 , 0 , 0.5 , - 0.5 , 0.71 , 0 , 275 , 0 , 0 , 1 ) " but got "matrix ( 1 , 0 , 0 , 1 , 175 , 0 ) "
-FAIL Compositing: property <transform> underlying [matrix3d(0.8535533905932737,0.1464466094067262,-0.5,0,0.1464466094067262,0.8535533905932737,0.5,0,0.5,-0.5,0.7071067811865476,0,100,0,0,1)] from accumulate [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 100, 0, 0, 1)] to accumulate [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 200, 0, 0, 1)] at (1) should be [translateX(300px) rotate3d(1, 1, 0, 45deg)] assert_equals: expected "matrix3d ( 0.85 , 0.15 , - 0.5 , 0 , 0.15 , 0.85 , 0.5 , 0 , 0.5 , - 0.5 , 0.71 , 0 , 300 , 0 , 0 , 1 ) " but got "matrix ( 1 , 0 , 0 , 1 , 200 , 0 ) "
-FAIL Compositing: property <transform> underlying [matrix3d(0.8535533905932737,0.1464466094067262,-0.5,0,0.1464466094067262,0.8535533905932737,0.5,0,0.5,-0.5,0.7071067811865476,0,100,0,0,1)] from accumulate [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 100, 0, 0, 1)] to accumulate [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 200, 0, 0, 1)] at (1.5) should be [translateX(350px) rotate3d(1, 1, 0, 45deg)] assert_equals: expected "matrix3d ( 0.85 , 0.15 , - 0.5 , 0 , 0.15 , 0.85 , 0.5 , 0 , 0.5 , - 0.5 , 0.71 , 0 , 350 , 0 , 0 , 1 ) " but got "matrix ( 1 , 0 , 0 , 1 , 250 , 0 ) "
+PASS Compositing: property <transform> underlying [matrix(0, 1, -1, 0, 100, 0)] from accumulate [matrix(1, 0, 0, 1, 100, 0)] to accumulate [matrix(1, 0, 0, 1, 200, 0)] at (-0.5) should be [matrix(0, 1, -1, 0, 150, 0)]
+PASS Compositing: property <transform> underlying [matrix(0, 1, -1, 0, 100, 0)] from accumulate [matrix(1, 0, 0, 1, 100, 0)] to accumulate [matrix(1, 0, 0, 1, 200, 0)] at (0) should be [matrix(0, 1, -1, 0, 200, 0)]
+PASS Compositing: property <transform> underlying [matrix(0, 1, -1, 0, 100, 0)] from accumulate [matrix(1, 0, 0, 1, 100, 0)] to accumulate [matrix(1, 0, 0, 1, 200, 0)] at (0.25) should be [matrix(0, 1, -1, 0, 225, 0)]
+PASS Compositing: property <transform> underlying [matrix(0, 1, -1, 0, 100, 0)] from accumulate [matrix(1, 0, 0, 1, 100, 0)] to accumulate [matrix(1, 0, 0, 1, 200, 0)] at (0.5) should be [matrix(0, 1, -1, 0, 250, 0)]
+PASS Compositing: property <transform> underlying [matrix(0, 1, -1, 0, 100, 0)] from accumulate [matrix(1, 0, 0, 1, 100, 0)] to accumulate [matrix(1, 0, 0, 1, 200, 0)] at (0.75) should be [matrix(0, 1, -1, 0, 275, 0)]
+PASS Compositing: property <transform> underlying [matrix(0, 1, -1, 0, 100, 0)] from accumulate [matrix(1, 0, 0, 1, 100, 0)] to accumulate [matrix(1, 0, 0, 1, 200, 0)] at (1) should be [matrix(0, 1, -1, 0, 300, 0)]
+PASS Compositing: property <transform> underlying [matrix(0, 1, -1, 0, 100, 0)] from accumulate [matrix(1, 0, 0, 1, 100, 0)] to accumulate [matrix(1, 0, 0, 1, 200, 0)] at (1.5) should be [matrix(0, 1, -1, 0, 350, 0)]
+PASS Compositing: property <transform> underlying [matrix3d(0.8535533905932737,0.1464466094067262,-0.5,0,0.1464466094067262,0.8535533905932737,0.5,0,0.5,-0.5,0.7071067811865476,0,100,0,0,1)] from accumulate [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 100, 0, 0, 1)] to accumulate [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 200, 0, 0, 1)] at (-0.5) should be [translateX(150px) rotate3d(1, 1, 0, 45deg)]
+PASS Compositing: property <transform> underlying [matrix3d(0.8535533905932737,0.1464466094067262,-0.5,0,0.1464466094067262,0.8535533905932737,0.5,0,0.5,-0.5,0.7071067811865476,0,100,0,0,1)] from accumulate [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 100, 0, 0, 1)] to accumulate [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 200, 0, 0, 1)] at (0) should be [translateX(200px) rotate3d(1, 1, 0, 45deg)]
+PASS Compositing: property <transform> underlying [matrix3d(0.8535533905932737,0.1464466094067262,-0.5,0,0.1464466094067262,0.8535533905932737,0.5,0,0.5,-0.5,0.7071067811865476,0,100,0,0,1)] from accumulate [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 100, 0, 0, 1)] to accumulate [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 200, 0, 0, 1)] at (0.25) should be [translateX(225px) rotate3d(1, 1, 0, 45deg)]
+PASS Compositing: property <transform> underlying [matrix3d(0.8535533905932737,0.1464466094067262,-0.5,0,0.1464466094067262,0.8535533905932737,0.5,0,0.5,-0.5,0.7071067811865476,0,100,0,0,1)] from accumulate [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 100, 0, 0, 1)] to accumulate [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 200, 0, 0, 1)] at (0.5) should be [translateX(250px) rotate3d(1, 1, 0, 45deg)]
+PASS Compositing: property <transform> underlying [matrix3d(0.8535533905932737,0.1464466094067262,-0.5,0,0.1464466094067262,0.8535533905932737,0.5,0,0.5,-0.5,0.7071067811865476,0,100,0,0,1)] from accumulate [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 100, 0, 0, 1)] to accumulate [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 200, 0, 0, 1)] at (0.75) should be [translateX(275px) rotate3d(1, 1, 0, 45deg)]
+PASS Compositing: property <transform> underlying [matrix3d(0.8535533905932737,0.1464466094067262,-0.5,0,0.1464466094067262,0.8535533905932737,0.5,0,0.5,-0.5,0.7071067811865476,0,100,0,0,1)] from accumulate [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 100, 0, 0, 1)] to accumulate [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 200, 0, 0, 1)] at (1) should be [translateX(300px) rotate3d(1, 1, 0, 45deg)]
+PASS Compositing: property <transform> underlying [matrix3d(0.8535533905932737,0.1464466094067262,-0.5,0,0.1464466094067262,0.8535533905932737,0.5,0,0.5,-0.5,0.7071067811865476,0,100,0,0,1)] from accumulate [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 100, 0, 0, 1)] to accumulate [matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 200, 0, 0, 1)] at (1.5) should be [translateX(350px) rotate3d(1, 1, 0, 45deg)]
PASS Compositing: property <transform> underlying [matrix(1, 1, 0, 0, 0, 100)] from accumulate [matrix(1, 0, 0, 1, 100, 0)] to accumulate [matrix(1, 0, 0, 1, 200, 0)] at (-0.5) should be [matrix(1, 0, 0, 1, 50, 0)]
PASS Compositing: property <transform> underlying [matrix(1, 1, 0, 0, 0, 100)] from accumulate [matrix(1, 0, 0, 1, 100, 0)] to accumulate [matrix(1, 0, 0, 1, 200, 0)] at (0) should be [matrix(1, 0, 0, 1, 100, 0)]
PASS Compositing: property <transform> underlying [matrix(1, 1, 0, 0, 0, 100)] from accumulate [matrix(1, 0, 0, 1, 100, 0)] to accumulate [matrix(1, 0, 0, 1, 200, 0)] at (0.25) should be [matrix(1, 0, 0, 1, 125, 0)]
@@ -48,11 +48,11 @@
PASS Compositing: property <transform> underlying [matrix(1, 1, 0, 0, 0, 100)] from accumulate [matrix(1, 0, 0, 1, 100, 0)] to accumulate [matrix(1, 0, 0, 1, 200, 0)] at (0.75) should be [matrix(1, 0, 0, 1, 175, 0)]
PASS Compositing: property <transform> underlying [matrix(1, 1, 0, 0, 0, 100)] from accumulate [matrix(1, 0, 0, 1, 100, 0)] to accumulate [matrix(1, 0, 0, 1, 200, 0)] at (1) should be [matrix(1, 0, 0, 1, 200, 0)]
PASS Compositing: property <transform> underlying [matrix(1, 1, 0, 0, 0, 100)] from accumulate [matrix(1, 0, 0, 1, 100, 0)] to accumulate [matrix(1, 0, 0, 1, 200, 0)] at (1.5) should be [matrix(1, 0, 0, 1, 250, 0)]
-FAIL Compositing: property <transform> underlying [matrix(1, 0, 0, 1, 100, 0)] from accumulate [matrix(1, 1, 0, 0, 0, 100)] to accumulate [matrix(1, 0, 0, 1, 200, 0)] at (-0.5) should be [matrix(1, 1, 0, 0, 0, 100)] assert_equals: expected "matrix ( 1 , 1 , 0 , 0 , 0 , 100 ) " but got "matrix ( 1.28 , 0.84 , - 0.03 , 0.3 , 87.5 , - 37.5 ) "
+FAIL Compositing: property <transform> underlying [matrix(1, 0, 0, 1, 100, 0)] from accumulate [matrix(1, 1, 0, 0, 0, 100)] to accumulate [matrix(1, 0, 0, 1, 200, 0)] at (-0.5) should be [matrix(1, 1, 0, 0, 0, 100)] assert_equals: expected "matrix ( 1 , 1 , 0 , 0 , 0 , 100 ) " but got "matrix ( 1.28 , 0.84 , - 0.03 , 0.3 , 75 , - 75 ) "
PASS Compositing: property <transform> underlying [matrix(1, 0, 0, 1, 100, 0)] from accumulate [matrix(1, 1, 0, 0, 0, 100)] to accumulate [matrix(1, 0, 0, 1, 200, 0)] at (0) should be [matrix(1, 1, 0, 0, 0, 100)]
-FAIL Compositing: property <transform> underlying [matrix(1, 0, 0, 1, 100, 0)] from accumulate [matrix(1, 1, 0, 0, 0, 100)] to accumulate [matrix(1, 0, 0, 1, 200, 0)] at (0.25) should be [matrix(1, 1, 0, 0, 0, 100)] assert_equals: expected "matrix ( 1 , 1 , 0 , 0 , 0 , 100 ) " but got "matrix ( 0.95 , 0.86 , - 0.01 , 0.08 , 59.38 , 65.63 ) "
-FAIL Compositing: property <transform> underlying [matrix(1, 0, 0, 1, 100, 0)] from accumulate [matrix(1, 1, 0, 0, 0, 100)] to accumulate [matrix(1, 0, 0, 1, 200, 0)] at (0.5) should be [matrix(1, 0, 0, 1, 300, 0)] assert_equals: expected "matrix ( 1 , 0 , 0 , 1 , 300 , 0 ) " but got "matrix ( 0.95 , 0.63 , - 0.03 , 0.3 , 87.5 , 62.5 ) "
-FAIL Compositing: property <transform> underlying [matrix(1, 0, 0, 1, 100, 0)] from accumulate [matrix(1, 1, 0, 0, 0, 100)] to accumulate [matrix(1, 0, 0, 1, 200, 0)] at (0.75) should be [matrix(1, 0, 0, 1, 300, 0)] assert_equals: expected "matrix ( 1 , 0 , 0 , 1 , 300 , 0 ) " but got "matrix ( 0.97 , 0.32 , - 0.04 , 0.63 , 134.38 , 40.63 ) "
-FAIL Compositing: property <transform> underlying [matrix(1, 0, 0, 1, 100, 0)] from accumulate [matrix(1, 1, 0, 0, 0, 100)] to accumulate [matrix(1, 0, 0, 1, 200, 0)] at (1) should be [matrix(1, 0, 0, 1, 300, 0)] assert_equals: expected "matrix ( 1 , 0 , 0 , 1 , 300 , 0 ) " but got "matrix ( 1 , 0 , 0 , 1 , 200 , 0 ) "
-FAIL Compositing: property <transform> underlying [matrix(1, 0, 0, 1, 100, 0)] from accumulate [matrix(1, 1, 0, 0, 0, 100)] to accumulate [matrix(1, 0, 0, 1, 200, 0)] at (1.5) should be [matrix(1, 0, 0, 1, 300, 0)] assert_equals: expected "matrix ( 1 , 0 , 0 , 1 , 300 , 0 ) " but got "matrix ( 0.99 , - 0.56 , 0.37 , 1.59 , 387.5 , - 137.5 ) "
+FAIL Compositing: property <transform> underlying [matrix(1, 0, 0, 1, 100, 0)] from accumulate [matrix(1, 1, 0, 0, 0, 100)] to accumulate [matrix(1, 0, 0, 1, 200, 0)] at (0.25) should be [matrix(1, 1, 0, 0, 0, 100)] assert_equals: expected "matrix ( 1 , 1 , 0 , 0 , 0 , 100 ) " but got "matrix ( 0.95 , 0.86 , - 0.01 , 0.08 , 75 , 75 ) "
+FAIL Compositing: property <transform> underlying [matrix(1, 0, 0, 1, 100, 0)] from accumulate [matrix(1, 1, 0, 0, 0, 100)] to accumulate [matrix(1, 0, 0, 1, 200, 0)] at (0.5) should be [matrix(1, 0, 0, 1, 300, 0)] assert_equals: expected "matrix ( 1 , 0 , 0 , 1 , 300 , 0 ) " but got "matrix ( 0.95 , 0.63 , - 0.03 , 0.3 , 125 , 75 ) "
+FAIL Compositing: property <transform> underlying [matrix(1, 0, 0, 1, 100, 0)] from accumulate [matrix(1, 1, 0, 0, 0, 100)] to accumulate [matrix(1, 0, 0, 1, 200, 0)] at (0.75) should be [matrix(1, 0, 0, 1, 300, 0)] assert_equals: expected "matrix ( 1 , 0 , 0 , 1 , 300 , 0 ) " but got "matrix ( 0.97 , 0.32 , - 0.04 , 0.63 , 200 , 50 ) "
+PASS Compositing: property <transform> underlying [matrix(1, 0, 0, 1, 100, 0)] from accumulate [matrix(1, 1, 0, 0, 0, 100)] to accumulate [matrix(1, 0, 0, 1, 200, 0)] at (1) should be [matrix(1, 0, 0, 1, 300, 0)]
+FAIL Compositing: property <transform> underlying [matrix(1, 0, 0, 1, 100, 0)] from accumulate [matrix(1, 1, 0, 0, 0, 100)] to accumulate [matrix(1, 0, 0, 1, 200, 0)] at (1.5) should be [matrix(1, 0, 0, 1, 300, 0)] assert_equals: expected "matrix ( 1 , 0 , 0 , 1 , 300 , 0 ) " but got "matrix ( 0.99 , - 0.56 , 0.37 , 1.59 , 575 , - 175 ) "
Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-transforms/animation/transform-rotate-composition-expected.txt (289598 => 289599)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-transforms/animation/transform-rotate-composition-expected.txt 2022-02-11 02:03:18 UTC (rev 289598)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-transforms/animation/transform-rotate-composition-expected.txt 2022-02-11 02:27:02 UTC (rev 289599)
@@ -48,13 +48,13 @@
PASS Compositing: property <transform> underlying [rotateZ(20deg)] from accumulate [rotateZ(40deg)] to accumulate [rotateZ(60deg)] at (0.75) should be [rotateZ(75deg)]
PASS Compositing: property <transform> underlying [rotateZ(20deg)] from accumulate [rotateZ(40deg)] to accumulate [rotateZ(60deg)] at (1) should be [rotateZ(80deg)]
PASS Compositing: property <transform> underlying [rotateZ(20deg)] from accumulate [rotateZ(40deg)] to accumulate [rotateZ(60deg)] at (1.5) should be [rotateZ(90deg)]
-FAIL Compositing: property <transform> underlying [rotateX(45deg)] from accumulate [rotateY(30deg)] to accumulate [rotateY(70deg)] at (-0.5) should be [rotateX(45deg) rotateY(10deg)] assert_equals: expected "matrix3d ( 0.98 , 0.12 , - 0.12 , 0 , 0 , 0.71 , 0.71 , 0 , 0.17 , - 0.7 , 0.7 , 0 , 0 , 0 , 0 , 1 ) " but got "matrix3d ( 0.98 , 0 , - 0.17 , 0 , 0 , 1 , 0 , 0 , 0.17 , 0 , 0.98 , 0 , 0 , 0 , 0 , 1 ) "
-FAIL Compositing: property <transform> underlying [rotateX(45deg)] from accumulate [rotateY(30deg)] to accumulate [rotateY(70deg)] at (0) should be [rotateX(45deg) rotateY(30deg)] assert_equals: expected "matrix3d ( 0.87 , 0.35 , - 0.35 , 0 , 0 , 0.71 , 0.71 , 0 , 0.5 , - 0.61 , 0.61 , 0 , 0 , 0 , 0 , 1 ) " but got "matrix3d ( 0.87 , 0 , - 0.5 , 0 , 0 , 1 , 0 , 0 , 0.5 , 0 , 0.87 , 0 , 0 , 0 , 0 , 1 ) "
-FAIL Compositing: property <transform> underlying [rotateX(45deg)] from accumulate [rotateY(30deg)] to accumulate [rotateY(70deg)] at (0.25) should be [rotateX(45deg) rotateY(40deg)] assert_equals: expected "matrix3d ( 0.77 , 0.45 , - 0.45 , 0 , 0 , 0.71 , 0.71 , 0 , 0.64 , - 0.54 , 0.54 , 0 , 0 , 0 , 0 , 1 ) " but got "matrix3d ( 0.77 , 0 , - 0.64 , 0 , 0 , 1 , 0 , 0 , 0.64 , 0 , 0.77 , 0 , 0 , 0 , 0 , 1 ) "
-FAIL Compositing: property <transform> underlying [rotateX(45deg)] from accumulate [rotateY(30deg)] to accumulate [rotateY(70deg)] at (0.5) should be [rotateX(45deg) rotateY(50deg)] assert_equals: expected "matrix3d ( 0.64 , 0.54 , - 0.54 , 0 , 0 , 0.71 , 0.71 , 0 , 0.77 , - 0.45 , 0.45 , 0 , 0 , 0 , 0 , 1 ) " but got "matrix3d ( 0.64 , 0 , - 0.77 , 0 , 0 , 1 , 0 , 0 , 0.77 , 0 , 0.64 , 0 , 0 , 0 , 0 , 1 ) "
-FAIL Compositing: property <transform> underlying [rotateX(45deg)] from accumulate [rotateY(30deg)] to accumulate [rotateY(70deg)] at (0.75) should be [rotateX(45deg) rotateY(60deg)] assert_equals: expected "matrix3d ( 0.5 , 0.61 , - 0.61 , 0 , 0 , 0.71 , 0.71 , 0 , 0.87 , - 0.35 , 0.35 , 0 , 0 , 0 , 0 , 1 ) " but got "matrix3d ( 0.5 , 0 , - 0.87 , 0 , 0 , 1 , 0 , 0 , 0.87 , 0 , 0.5 , 0 , 0 , 0 , 0 , 1 ) "
-FAIL Compositing: property <transform> underlying [rotateX(45deg)] from accumulate [rotateY(30deg)] to accumulate [rotateY(70deg)] at (1) should be [rotateX(45deg) rotateY(70deg)] assert_equals: expected "matrix3d ( 0.34 , 0.66 , - 0.66 , 0 , 0 , 0.71 , 0.71 , 0 , 0.94 , - 0.24 , 0.24 , 0 , 0 , 0 , 0 , 1 ) " but got "matrix3d ( 0.34 , 0 , - 0.94 , 0 , 0 , 1 , 0 , 0 , 0.94 , 0 , 0.34 , 0 , 0 , 0 , 0 , 1 ) "
-FAIL Compositing: property <transform> underlying [rotateX(45deg)] from accumulate [rotateY(30deg)] to accumulate [rotateY(70deg)] at (1.5) should be [rotateX(45deg) rotateY(90deg)] assert_equals: expected "matrix3d ( 0 , 0.71 , - 0.71 , 0 , 0 , 0.71 , 0.71 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 1 ) " but got "matrix3d ( 0 , 0 , - 1 , 0 , 0 , 1 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 1 ) "
+PASS Compositing: property <transform> underlying [rotateX(45deg)] from accumulate [rotateY(30deg)] to accumulate [rotateY(70deg)] at (-0.5) should be [rotateX(45deg) rotateY(10deg)]
+PASS Compositing: property <transform> underlying [rotateX(45deg)] from accumulate [rotateY(30deg)] to accumulate [rotateY(70deg)] at (0) should be [rotateX(45deg) rotateY(30deg)]
+PASS Compositing: property <transform> underlying [rotateX(45deg)] from accumulate [rotateY(30deg)] to accumulate [rotateY(70deg)] at (0.25) should be [rotateX(45deg) rotateY(40deg)]
+PASS Compositing: property <transform> underlying [rotateX(45deg)] from accumulate [rotateY(30deg)] to accumulate [rotateY(70deg)] at (0.5) should be [rotateX(45deg) rotateY(50deg)]
+PASS Compositing: property <transform> underlying [rotateX(45deg)] from accumulate [rotateY(30deg)] to accumulate [rotateY(70deg)] at (0.75) should be [rotateX(45deg) rotateY(60deg)]
+PASS Compositing: property <transform> underlying [rotateX(45deg)] from accumulate [rotateY(30deg)] to accumulate [rotateY(70deg)] at (1) should be [rotateX(45deg) rotateY(70deg)]
+PASS Compositing: property <transform> underlying [rotateX(45deg)] from accumulate [rotateY(30deg)] to accumulate [rotateY(70deg)] at (1.5) should be [rotateX(45deg) rotateY(90deg)]
PASS Compositing: property <transform> underlying [rotate(45deg) skew(10deg, 20deg)] from accumulate [rotate(45deg)] to accumulate [rotate(225deg)] at (-0.5) should be [rotate(0deg) skew(10deg, 20deg)]
PASS Compositing: property <transform> underlying [rotate(45deg) skew(10deg, 20deg)] from accumulate [rotate(45deg)] to accumulate [rotate(225deg)] at (0) should be [rotate(90deg) skew(10deg, 20deg)]
PASS Compositing: property <transform> underlying [rotate(45deg) skew(10deg, 20deg)] from accumulate [rotate(45deg)] to accumulate [rotate(225deg)] at (0.25) should be [rotate(135deg) skew(10deg, 20deg)]
Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-transforms/animation/transform-skew-composition-expected.txt (289598 => 289599)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-transforms/animation/transform-skew-composition-expected.txt 2022-02-11 02:03:18 UTC (rev 289598)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-transforms/animation/transform-skew-composition-expected.txt 2022-02-11 02:27:02 UTC (rev 289599)
@@ -41,5 +41,5 @@
PASS Compositing: property <transform> underlying [skew(10deg, 45deg)] from accumulate [skew(20deg, 30deg)] to accumulate [skew(40deg, 70deg)] at (0.75) should be [skew(45deg, 105deg)]
PASS Compositing: property <transform> underlying [skew(10deg, 45deg)] from accumulate [skew(20deg, 30deg)] to accumulate [skew(40deg, 70deg)] at (1) should be [skew(50deg, 115deg)]
PASS Compositing: property <transform> underlying [skew(10deg, 45deg)] from accumulate [skew(20deg, 30deg)] to accumulate [skew(40deg, 70deg)] at (1.5) should be [skew(60deg, 135deg)]
-FAIL Compositing: property <transform> underlying [skewX(45deg)] from accumulate [skewY(45deg)] to accumulate [skewY(45deg)] at (0.5) should be [matrix(1, 1, 0.5, 1.5, 0, 0)] assert_equals: expected "matrix ( 1 , 1 , 0.5 , 1.5 , 0 , 0 ) " but got "matrix ( 1 , 1 , 0 , 1 , 0 , 0 ) "
+FAIL Compositing: property <transform> underlying [skewX(45deg)] from accumulate [skewY(45deg)] to accumulate [skewY(45deg)] at (0.5) should be [matrix(1, 1, 0.5, 1.5, 0, 0)] assert_equals: expected "matrix ( 1 , 1 , 0.5 , 1.5 , 0 , 0 ) " but got "matrix ( 1.71 , 0.71 , 0.71 , 1.12 , 0 , 0 ) "
Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-transforms/animation/transform-translate-composition-expected.txt (289598 => 289599)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-transforms/animation/transform-translate-composition-expected.txt 2022-02-11 02:03:18 UTC (rev 289598)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-transforms/animation/transform-translate-composition-expected.txt 2022-02-11 02:27:02 UTC (rev 289599)
@@ -48,11 +48,11 @@
PASS Compositing: property <transform> underlying [translate(100px, 50px)] from accumulate [translateZ(50px)] to accumulate [translateZ(250px)] at (0.75) should be [translate3d(100px, 50px, 200px)]
PASS Compositing: property <transform> underlying [translate(100px, 50px)] from accumulate [translateZ(50px)] to accumulate [translateZ(250px)] at (1) should be [translate3d(100px, 50px, 250px)]
PASS Compositing: property <transform> underlying [translate(100px, 50px)] from accumulate [translateZ(50px)] to accumulate [translateZ(250px)] at (1.5) should be [translate3d(100px, 50px, 350px)]
-FAIL Compositing: property <transform> underlying [translateX(100px) rotate(90deg)] from accumulate [translateX(100px)] to accumulate [translateX(200px)] at (-0.5) should be [translateX(150px) rotate(90deg)] assert_equals: expected "matrix ( 0 , 1 , - 1 , 0 , 150 , 0 ) " but got "matrix ( 1 , 0 , 0 , 1 , 150 , 0 ) "
-FAIL Compositing: property <transform> underlying [translateX(100px) rotate(90deg)] from accumulate [translateX(100px)] to accumulate [translateX(200px)] at (0) should be [translateX(200px) rotate(90deg)] assert_equals: expected "matrix ( 0 , 1 , - 1 , 0 , 200 , 0 ) " but got "matrix ( 1 , 0 , 0 , 1 , 200 , 0 ) "
-FAIL Compositing: property <transform> underlying [translateX(100px) rotate(90deg)] from accumulate [translateX(100px)] to accumulate [translateX(200px)] at (0.25) should be [translateX(225px) rotate(90deg)] assert_equals: expected "matrix ( 0 , 1 , - 1 , 0 , 225 , 0 ) " but got "matrix ( 1 , 0 , 0 , 1 , 225 , 0 ) "
-FAIL Compositing: property <transform> underlying [translateX(100px) rotate(90deg)] from accumulate [translateX(100px)] to accumulate [translateX(200px)] at (0.5) should be [translateX(250px) rotate(90deg)] assert_equals: expected "matrix ( 0 , 1 , - 1 , 0 , 250 , 0 ) " but got "matrix ( 1 , 0 , 0 , 1 , 250 , 0 ) "
-FAIL Compositing: property <transform> underlying [translateX(100px) rotate(90deg)] from accumulate [translateX(100px)] to accumulate [translateX(200px)] at (0.75) should be [translateX(275px) rotate(90deg)] assert_equals: expected "matrix ( 0 , 1 , - 1 , 0 , 275 , 0 ) " but got "matrix ( 1 , 0 , 0 , 1 , 275 , 0 ) "
-FAIL Compositing: property <transform> underlying [translateX(100px) rotate(90deg)] from accumulate [translateX(100px)] to accumulate [translateX(200px)] at (1) should be [translateX(300px) rotate(90deg)] assert_equals: expected "matrix ( 0 , 1 , - 1 , 0 , 300 , 0 ) " but got "matrix ( 1 , 0 , 0 , 1 , 300 , 0 ) "
-FAIL Compositing: property <transform> underlying [translateX(100px) rotate(90deg)] from accumulate [translateX(100px)] to accumulate [translateX(200px)] at (1.5) should be [translateX(350px) rotate(90deg)] assert_equals: expected "matrix ( 0 , 1 , - 1 , 0 , 350 , 0 ) " but got "matrix ( 1 , 0 , 0 , 1 , 350 , 0 ) "
+PASS Compositing: property <transform> underlying [translateX(100px) rotate(90deg)] from accumulate [translateX(100px)] to accumulate [translateX(200px)] at (-0.5) should be [translateX(150px) rotate(90deg)]
+PASS Compositing: property <transform> underlying [translateX(100px) rotate(90deg)] from accumulate [translateX(100px)] to accumulate [translateX(200px)] at (0) should be [translateX(200px) rotate(90deg)]
+PASS Compositing: property <transform> underlying [translateX(100px) rotate(90deg)] from accumulate [translateX(100px)] to accumulate [translateX(200px)] at (0.25) should be [translateX(225px) rotate(90deg)]
+PASS Compositing: property <transform> underlying [translateX(100px) rotate(90deg)] from accumulate [translateX(100px)] to accumulate [translateX(200px)] at (0.5) should be [translateX(250px) rotate(90deg)]
+PASS Compositing: property <transform> underlying [translateX(100px) rotate(90deg)] from accumulate [translateX(100px)] to accumulate [translateX(200px)] at (0.75) should be [translateX(275px) rotate(90deg)]
+PASS Compositing: property <transform> underlying [translateX(100px) rotate(90deg)] from accumulate [translateX(100px)] to accumulate [translateX(200px)] at (1) should be [translateX(300px) rotate(90deg)]
+PASS Compositing: property <transform> underlying [translateX(100px) rotate(90deg)] from accumulate [translateX(100px)] to accumulate [translateX(200px)] at (1.5) should be [translateX(350px) rotate(90deg)]
Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/web-animations/animation-model/animation-types/accumulation-per-property-002-expected.txt (289598 => 289599)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/web-animations/animation-model/animation-types/accumulation-per-property-002-expected.txt 2022-02-11 02:03:18 UTC (rev 289598)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/web-animations/animation-model/animation-types/accumulation-per-property-002-expected.txt 2022-02-11 02:27:02 UTC (rev 289599)
@@ -178,20 +178,20 @@
PASS transform: rotate
PASS transform: scale
PASS transform: skew
-FAIL transform: rotate on translate assert_approx_equals: expected matrix(0, 1, -1, 0, 100, 0) but got matrix(0, 1, -1, 0, 0, 0): The value should be matrix(0, 1, -1, 0, 100, 0) at 0ms but got matrix(0, 1, -1, 0, 0, 0) expected 100 +/- 0.0001 but got 0
-FAIL transform: translate on rotate assert_approx_equals: expected matrix(0, 1, -1, 0, 100, 0) but got matrix(1, 0, 0, 1, 100, 0): The value should be matrix(0, 1, -1, 0, 100, 0) at 0ms but got matrix(1, 0, 0, 1, 100, 0) expected 0 +/- 0.0001 but got 1
+PASS transform: rotate on translate
+PASS transform: translate on rotate
PASS transform: rotate and translate on rotate
PASS transform: rotate on rotate and translate
-FAIL transform: matrix assert_approx_equals: expected matrix(0, 1, -1, 0, 100, 0) but got matrix(1, 0, 0, 1, 100, 0): The value should be matrix(0, 1, -1, 0, 100, 0) at 0ms but got matrix(1, 0, 0, 1, 100, 0) expected 0 +/- 0.0001 but got 1
+PASS transform: matrix
PASS transform: rotate3d
-FAIL transform: matrix3d assert_approx_equals: expected matrix3d(0.853553, 0.146447, 0.5, 0, 0.146447, 0.853553, -0.5, 0, -0.5, 0.5, 0.707107, 0, 0, 0, 0, 1) but got matrix3d(0.5, 0.5, 0.707107, 0, 0.5, 0.5, -0.707107, 0, -0.707107, 0.707107, 0, 0, 0, 0, 0, 1): The value should be matrix3d(0.853553, 0.146447, 0.5, 0, 0.146447, 0.853553, -0.5, 0, -0.5, 0.5, 0.707107, 0, 0, 0, 0, 1) at 0ms but got matrix3d(0.5, 0.5, 0.707107, 0, 0.5, 0.5, -0.707107, 0, -0.707107, 0.707107, 0, 0, 0, 0, 0, 1) expected 0.853553 +/- 0.0001 but got 0.5
-FAIL transform: none assert_equals: dimension of the matrix: The value should be matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1) at 0ms but got matrix(1, 0, 0, 1, 0, 0) expected 16 but got 6
+PASS transform: matrix3d
+PASS transform: none
PASS transform: non-invertible matrices (non-invertible onto invertible)
PASS transform: non-invertible matrices (invertible onto non-invertible)
-FAIL transform: non-invertible matrices in matched transform lists (non-invertible onto invertible) assert_approx_equals: expected matrix(-1, -1, 0, 0, 100, 100) but got matrix(0, 0, 1, 1, 150, 100): The value should be matrix(-1, -1, 0, 0, 100, 100) at 0ms but got matrix(0, 0, 1, 1, 150, 100) expected -1 +/- 0.0001 but got 0
-FAIL transform: non-invertible matrices in matched transform lists (invertible onto non-invertible) assert_approx_equals: expected matrix(0, -1, 1, 0, 250, 0) but got matrix(0, 1, -1, 0, 350, 0): The value should be matrix(0, -1, 1, 0, 250, 0) at 0ms but got matrix(0, 1, -1, 0, 350, 0) expected -1 +/- 0.0001 but got 1
-FAIL transform: non-invertible matrices in mismatched transform lists (non-invertible onto invertible) assert_approx_equals: expected matrix(1, 1, 1, 1, 100, 100) but got matrix(1, 1, 1, 1, 150, 100): The value should be matrix(1, 1, 1, 1, 100, 100) at 0ms but got matrix(1, 1, 1, 1, 150, 100) expected 100 +/- 0.0001 but got 150
-FAIL transform: non-invertible matrices in mismatched transform lists (invertible onto non-invertible) assert_approx_equals: expected matrix(-2, 0, 0, -2, 250, 0) but got matrix(-2, 0, 0, -2, 350, 0): The value should be matrix(-2, 0, 0, -2, 250, 0) at 0ms but got matrix(-2, 0, 0, -2, 350, 0) expected 250 +/- 0.0001 but got 350
+PASS transform: non-invertible matrices in matched transform lists (non-invertible onto invertible)
+PASS transform: non-invertible matrices in matched transform lists (invertible onto non-invertible)
+PASS transform: non-invertible matrices in mismatched transform lists (non-invertible onto invertible)
+PASS transform: non-invertible matrices in mismatched transform lists (invertible onto non-invertible)
PASS transform-box (type: discrete) has testAccumulation function
PASS transform-box: "border-box" onto "fill-box"
PASS transform-box: "fill-box" onto "border-box"
Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/web-animations/animation-model/combining-effects/effect-composition-expected.txt (289598 => 289599)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/web-animations/animation-model/combining-effects/effect-composition-expected.txt 2022-02-11 02:03:18 UTC (rev 289598)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/web-animations/animation-model/combining-effects/effect-composition-expected.txt 2022-02-11 02:27:02 UTC (rev 289599)
@@ -1,8 +1,8 @@
PASS accumulate onto the base value
PASS accumulate onto an underlying animation value
-FAIL accumulate onto an underlying animation value with implicit from values assert_equals: Animated style at 50% expected "matrix(1, 0, 0, 1, 50, 50)" but got "matrix(1, 0, 0, 1, 25, 50)"
-FAIL accumulate onto an underlying animation value with implicit to values assert_equals: Animated style at 50% expected "matrix(1, 0, 0, 1, 50, 50)" but got "matrix(1, 0, 0, 1, 25, 50)"
+PASS accumulate onto an underlying animation value with implicit from values
+PASS accumulate onto an underlying animation value with implicit to values
PASS Composite when mixing accumulate and replace
PASS accumulate specified on a keyframe overrides the composite mode of the effect
PASS unspecified composite mode on a keyframe is overriden by setting accumulate of the effect
Modified: trunk/Source/WebCore/ChangeLog (289598 => 289599)
--- trunk/Source/WebCore/ChangeLog 2022-02-11 02:03:18 UTC (rev 289598)
+++ trunk/Source/WebCore/ChangeLog 2022-02-11 02:27:02 UTC (rev 289599)
@@ -1,3 +1,44 @@
+2022-02-10 Nikolaos Mouchtaris <nmouchta...@apple.com>
+
+ Web animations- Composite operation accumulation support for transform properties
+ https://bugs.webkit.org/show_bug.cgi?id=236116
+
+ Reviewed by Simon Fraser.
+
+ This patch brings further support for accumulation on transform properties. The main aspect being addressed
+ is handling accumulation of TransformationMatrices. This involves accumulating on the decomposed functions,
+ which occurs in blendFloat() and accumulateQuaternion(). Since we need to perform accumulation for one-based
+ values on certain decomposed functions, (scale, diagonals of matrices, etc), we set the operation to accumulate
+ only for these cases.
+
+ A couple of bugs introduced by this additional support are also addressed. For a property with a
+ different transform operation than the keyframes given, transformFunctionListsMatch() would return
+ true when it shouldn't. Addressed by checking in blendByMatchingOperations and falling back on matrix
+ interpolation. Another bug is that we need to pass the composite operation to TransformationMatrix blend().
+ Another bug is that we should to use Replace behavior if either of the transform matrices are
+ non-invertible.
+
+ * animation/CSSPropertyAnimation.cpp:
+ (WebCore::blendFunc):
+ * platform/graphics/transforms/Matrix3DTransformOperation.cpp:
+ (WebCore::createOperation):
+ * platform/graphics/transforms/MatrixTransformOperation.cpp:
+ (WebCore::MatrixTransformOperation::blend):
+ * platform/graphics/transforms/RotateTransformOperation.cpp:
+ (WebCore::RotateTransformOperation::blend):
+ * platform/graphics/transforms/TransformOperations.cpp:
+ (WebCore::TransformOperations::blendByMatchingOperations const):
+ (WebCore::TransformOperations::blendByUsingMatrixInterpolation const):
+ (WebCore::TransformOperations::blend const):
+ * platform/graphics/transforms/TransformOperations.h:
+ (WebCore::TransformOperations::isInvertible const):
+ * platform/graphics/transforms/TransformationMatrix.cpp:
+ (WebCore::blendFloat):
+ (WebCore::TransformationMatrix::blend2):
+ (WebCore::accumulateQuaternion):
+ (WebCore::TransformationMatrix::blend4):
+ (WebCore::TransformationMatrix::blend):
+
2022-02-10 Antoine Quint <grao...@webkit.org>
[web-animations] accelerated animations should not run accelerated
Modified: trunk/Source/WebCore/animation/CSSPropertyAnimation.cpp (289598 => 289599)
--- trunk/Source/WebCore/animation/CSSPropertyAnimation.cpp 2022-02-11 02:03:18 UTC (rev 289598)
+++ trunk/Source/WebCore/animation/CSSPropertyAnimation.cpp 2022-02-11 02:27:02 UTC (rev 289599)
@@ -170,10 +170,10 @@
resultOperations.operations().append(operation);
return resultOperations;
}
-
+ auto boxSize = is<RenderBox>(context.client->renderer()) ? downcast<RenderBox>(*context.client->renderer()).borderBoxRect().size() : LayoutSize();
if (context.client->transformFunctionListsMatch())
- return to.blendByMatchingOperations(from, context);
- return to.blendByUsingMatrixInterpolation(from, context, is<RenderBox>(context.client->renderer()) ? downcast<RenderBox>(*context.client->renderer()).borderBoxRect().size() : LayoutSize());
+ return to.blendByMatchingOperations(from, context, boxSize);
+ return to.blendByUsingMatrixInterpolation(from, context, boxSize);
}
static RefPtr<ScaleTransformOperation> blendFunc(ScaleTransformOperation* from, ScaleTransformOperation* to, const CSSPropertyBlendingContext& context)
Modified: trunk/Source/WebCore/platform/graphics/transforms/Matrix3DTransformOperation.cpp (289598 => 289599)
--- trunk/Source/WebCore/platform/graphics/transforms/Matrix3DTransformOperation.cpp 2022-02-11 02:03:18 UTC (rev 289598)
+++ trunk/Source/WebCore/platform/graphics/transforms/Matrix3DTransformOperation.cpp 2022-02-11 02:27:02 UTC (rev 289599)
@@ -39,7 +39,7 @@
static Ref<TransformOperation> createOperation(TransformationMatrix& to, TransformationMatrix& from, const BlendingContext& context)
{
- to.blend(from, context.progress);
+ to.blend(from, context.progress, context.compositeOperation);
return Matrix3DTransformOperation::create(to);
}
Modified: trunk/Source/WebCore/platform/graphics/transforms/MatrixTransformOperation.cpp (289598 => 289599)
--- trunk/Source/WebCore/platform/graphics/transforms/MatrixTransformOperation.cpp 2022-02-11 02:03:18 UTC (rev 289598)
+++ trunk/Source/WebCore/platform/graphics/transforms/MatrixTransformOperation.cpp 2022-02-11 02:27:02 UTC (rev 289599)
@@ -39,7 +39,7 @@
Ref<TransformOperation> MatrixTransformOperation::blend(const TransformOperation* from, const BlendingContext& context, bool blendToIdentity)
{
auto createOperation = [] (TransformationMatrix& to, TransformationMatrix& from, const BlendingContext& context) {
- to.blend(from, context.progress);
+ to.blend(from, context.progress, context.compositeOperation);
return MatrixTransformOperation::create(to);
};
Modified: trunk/Source/WebCore/platform/graphics/transforms/RotateTransformOperation.cpp (289598 => 289599)
--- trunk/Source/WebCore/platform/graphics/transforms/RotateTransformOperation.cpp 2022-02-11 02:03:18 UTC (rev 289598)
+++ trunk/Source/WebCore/platform/graphics/transforms/RotateTransformOperation.cpp 2022-02-11 02:27:02 UTC (rev 289599)
@@ -39,9 +39,11 @@
Ref<TransformOperation> RotateTransformOperation::blend(const TransformOperation* from, const BlendingContext& context, bool blendToIdentity)
{
- if (blendToIdentity)
+ if (blendToIdentity) {
+ if (context.compositeOperation == CompositeOperation::Accumulate)
+ return RotateTransformOperation::create(m_x, m_y, m_z, m_angle, type());
return RotateTransformOperation::create(m_x, m_y, m_z, m_angle - m_angle * context.progress, type());
-
+ }
auto outputType = sharedPrimitiveType(from);
if (!outputType)
return *this;
Modified: trunk/Source/WebCore/platform/graphics/transforms/TransformOperations.cpp (289598 => 289599)
--- trunk/Source/WebCore/platform/graphics/transforms/TransformOperations.cpp 2022-02-11 02:03:18 UTC (rev 289598)
+++ trunk/Source/WebCore/platform/graphics/transforms/TransformOperations.cpp 2022-02-11 02:27:02 UTC (rev 289599)
@@ -74,16 +74,22 @@
return false;
}
-TransformOperations TransformOperations::blendByMatchingOperations(const TransformOperations& from, const BlendingContext& context) const
+TransformOperations TransformOperations::blendByMatchingOperations(const TransformOperations& from, const BlendingContext& context, const LayoutSize& boxSize) const
{
TransformOperations result;
- unsigned fromSize = from.operations().size();
- unsigned toSize = operations().size();
- unsigned size = std::max(fromSize, toSize);
- for (unsigned i = 0; i < size; i++) {
- RefPtr<TransformOperation> fromOperation = (i < fromSize) ? from.operations()[i].get() : nullptr;
- RefPtr<TransformOperation> toOperation = (i < toSize) ? operations()[i].get() : nullptr;
+ unsigned fromOperationCount = from.operations().size();
+ unsigned toOperationCount = operations().size();
+ unsigned maxOperationCount = std::max(fromOperationCount, toOperationCount);
+
+ if (context.compositeOperation == CompositeOperation::Accumulate && (!from.isInvertible(boxSize) || !isInvertible(boxSize)))
+ return blendByUsingMatrixInterpolation(from, context, boxSize);
+
+ for (unsigned i = 0; i < maxOperationCount; i++) {
+ RefPtr<TransformOperation> fromOperation = (i < fromOperationCount) ? from.operations()[i].get() : nullptr;
+ RefPtr<TransformOperation> toOperation = (i < toOperationCount) ? operations()[i].get() : nullptr;
+ if (fromOperation && toOperation && !fromOperation->sharedPrimitiveType(toOperation.get()))
+ return blendByUsingMatrixInterpolation(from, context, boxSize);
RefPtr<TransformOperation> blendedOperation = toOperation ? toOperation->blend(fromOperation.get(), context) : (fromOperation ? RefPtr<TransformOperation>(fromOperation->blend(nullptr, context, true)) : nullptr);
if (blendedOperation)
result.operations().append(blendedOperation);
@@ -99,7 +105,7 @@
return result;
}
-TransformOperations TransformOperations::blendByUsingMatrixInterpolation(const TransformOperations& from, const BlendingContext& context, const LayoutSize& size) const
+TransformOperations TransformOperations::blendByUsingMatrixInterpolation(const TransformOperations& from, const BlendingContext& context, const LayoutSize& boxSize) const
{
TransformOperations result;
@@ -106,11 +112,9 @@
// Convert the TransformOperations into matrices
TransformationMatrix fromTransform;
TransformationMatrix toTransform;
- from.apply(size, fromTransform);
- apply(size, toTransform);
-
- toTransform.blend(fromTransform, context.progress);
-
+ from.apply(boxSize, fromTransform);
+ apply(boxSize, toTransform);
+ toTransform.blend(fromTransform, context.progress, context.compositeOperation);
// Append the result
result.operations().append(Matrix3DTransformOperation::create(toTransform));
@@ -123,7 +127,7 @@
return *this;
if (from.size() && from.operationsMatch(*this))
- return blendByMatchingOperations(from, context);
+ return blendByMatchingOperations(from, context, size);
return blendByUsingMatrixInterpolation(from, context, size);
}
Modified: trunk/Source/WebCore/platform/graphics/transforms/TransformOperations.h (289598 => 289599)
--- trunk/Source/WebCore/platform/graphics/transforms/TransformOperations.h 2022-02-11 02:03:18 UTC (rev 289598)
+++ trunk/Source/WebCore/platform/graphics/transforms/TransformOperations.h 2022-02-11 02:27:02 UTC (rev 289599)
@@ -84,8 +84,14 @@
size_t size() const { return m_operations.size(); }
const TransformOperation* at(size_t index) const { return index < m_operations.size() ? m_operations.at(index).get() : 0; }
-
- TransformOperations blendByMatchingOperations(const TransformOperations& from, const BlendingContext&) const;
+ bool isInvertible(const LayoutSize& size) const
+ {
+ TransformationMatrix transform;
+ apply(size, transform);
+ return transform.isInvertible();
+ }
+
+ TransformOperations blendByMatchingOperations(const TransformOperations& from, const BlendingContext&, const LayoutSize&) const;
TransformOperations blendByUsingMatrixInterpolation(const TransformOperations& from, const BlendingContext&, const LayoutSize&) const;
TransformOperations blend(const TransformOperations& from, const BlendingContext&, const LayoutSize&) const;
Modified: trunk/Source/WebCore/platform/graphics/transforms/TransformationMatrix.cpp (289598 => 289599)
--- trunk/Source/WebCore/platform/graphics/transforms/TransformationMatrix.cpp 2022-02-11 02:03:18 UTC (rev 289598)
+++ trunk/Source/WebCore/platform/graphics/transforms/TransformationMatrix.cpp 2022-02-11 02:27:02 UTC (rev 289599)
@@ -1637,10 +1637,17 @@
static inline void blendFloat(double& from, double to, double progress, CompositeOperation compositeOperation)
{
- if (compositeOperation == CompositeOperation::Replace)
+ switch (compositeOperation) {
+ case CompositeOperation::Replace:
from = from + (to - from) * progress;
- else
+ break;
+ case CompositeOperation::Accumulate:
+ from += from + (to - from - 1) * progress;
+ break;
+ case CompositeOperation::Add:
from += from + (to - from) * progress;
+ break;
+ }
}
void TransformationMatrix::blend2(const TransformationMatrix& from, double progress, CompositeOperation compositeOperation)
@@ -1672,20 +1679,46 @@
else
toDecomp.angle -= 360;
}
-
+
+ // When compositeOperation is accumulate, if the decomposed function is a 1-based value (for affine matrix these properties are
+ // m11, m22, scaleX and scaleY), use one based accumulation. Otherwise, use behavior for add.
+ auto operationForNonOneBasedValues = compositeOperation == CompositeOperation::Accumulate ? CompositeOperation::Add : compositeOperation;
blendFloat(fromDecomp.m11, toDecomp.m11, progress, compositeOperation);
- blendFloat(fromDecomp.m12, toDecomp.m12, progress, compositeOperation);
- blendFloat(fromDecomp.m21, toDecomp.m21, progress, compositeOperation);
+ blendFloat(fromDecomp.m12, toDecomp.m12, progress, operationForNonOneBasedValues);
+ blendFloat(fromDecomp.m21, toDecomp.m21, progress, operationForNonOneBasedValues);
blendFloat(fromDecomp.m22, toDecomp.m22, progress, compositeOperation);
- blendFloat(fromDecomp.translateX, toDecomp.translateX, progress, compositeOperation);
- blendFloat(fromDecomp.translateY, toDecomp.translateY, progress, compositeOperation);
+ blendFloat(fromDecomp.translateX, toDecomp.translateX, progress, operationForNonOneBasedValues);
+ blendFloat(fromDecomp.translateY, toDecomp.translateY, progress, operationForNonOneBasedValues);
blendFloat(fromDecomp.scaleX, toDecomp.scaleX, progress, compositeOperation);
blendFloat(fromDecomp.scaleY, toDecomp.scaleY, progress, compositeOperation);
- blendFloat(fromDecomp.angle, toDecomp.angle, progress, compositeOperation);
-
+ blendFloat(fromDecomp.angle, toDecomp.angle, progress, operationForNonOneBasedValues);
recompose2(fromDecomp);
}
+// Compute quaternion multiplication
+static void accumulateQuaternion(double qa[4], const double qb[4])
+{
+ auto qx = (qb[3] * qa[0]) + (qb[0] * qa[3]) + (qb[1] * qa[2]) - (qb[2] * qa[1]);
+ auto qy = (qb[3] * qa[1]) + (qb[1] * qa[3]) + (qb[2] * qa[0]) - (qb[0] * qa[2]);
+ auto qz = (qb[3] * qa[2]) + (qb[2] * qa[3]) + (qb[0] * qa[1]) - (qb[1] * qa[0]);
+ auto qw = (qb[3] * qa[3]) - (qb[0] * qa[0]) - (qb[1] * qa[1]) - (qb[2] * qa[2]);
+ qa[0] = qx; qa[1] = qy; qa[2] = qz; qa[3] = qw;
+}
+
+static void interpolateQuaternion(TransformationMatrix::Decomposed4Type& fromDecomp, TransformationMatrix::Decomposed4Type& toDecomp, double progress, CompositeOperation compositeOperation)
+{
+ double qa[4] = { fromDecomp.quaternionX, fromDecomp.quaternionY, fromDecomp.quaternionZ, fromDecomp.quaternionW };
+ double qb[4] = { toDecomp.quaternionX, toDecomp.quaternionY, toDecomp.quaternionZ, toDecomp.quaternionW };
+ if (compositeOperation == CompositeOperation::Accumulate)
+ accumulateQuaternion(qa, qb);
+ else
+ slerp(qa, qb, progress);
+ fromDecomp.quaternionX = qa[0];
+ fromDecomp.quaternionY = qa[1];
+ fromDecomp.quaternionZ = qa[2];
+ fromDecomp.quaternionW = qa[3];
+
+}
void TransformationMatrix::blend4(const TransformationMatrix& from, double progress, CompositeOperation compositeOperation)
{
Decomposed4Type fromDecomp;
@@ -1695,28 +1728,34 @@
*this = from;
return;
}
+
+ // When compositeOperation is accumulate, if the decomposed function is a 1-based value (for non-affine matrix these properties are
+ // scaleX, scaleY, scaleZ, and perspectiveW), use one based accumulation. Otherwise, use behavior for add.
+ auto operationForNonOneBasedValues = compositeOperation == CompositeOperation::Accumulate ? CompositeOperation::Add : compositeOperation;
blendFloat(fromDecomp.scaleX, toDecomp.scaleX, progress, compositeOperation);
blendFloat(fromDecomp.scaleY, toDecomp.scaleY, progress, compositeOperation);
blendFloat(fromDecomp.scaleZ, toDecomp.scaleZ, progress, compositeOperation);
- blendFloat(fromDecomp.skewXY, toDecomp.skewXY, progress, compositeOperation);
- blendFloat(fromDecomp.skewXZ, toDecomp.skewXZ, progress, compositeOperation);
- blendFloat(fromDecomp.skewYZ, toDecomp.skewYZ, progress, compositeOperation);
- blendFloat(fromDecomp.translateX, toDecomp.translateX, progress, compositeOperation);
- blendFloat(fromDecomp.translateY, toDecomp.translateY, progress, compositeOperation);
- blendFloat(fromDecomp.translateZ, toDecomp.translateZ, progress, compositeOperation);
- blendFloat(fromDecomp.perspectiveX, toDecomp.perspectiveX, progress, compositeOperation);
- blendFloat(fromDecomp.perspectiveY, toDecomp.perspectiveY, progress, compositeOperation);
- blendFloat(fromDecomp.perspectiveZ, toDecomp.perspectiveZ, progress, compositeOperation);
+ blendFloat(fromDecomp.skewXY, toDecomp.skewXY, progress, operationForNonOneBasedValues);
+ blendFloat(fromDecomp.skewXZ, toDecomp.skewXZ, progress, operationForNonOneBasedValues);
+ blendFloat(fromDecomp.skewYZ, toDecomp.skewYZ, progress, operationForNonOneBasedValues);
+ blendFloat(fromDecomp.translateX, toDecomp.translateX, progress, operationForNonOneBasedValues);
+ blendFloat(fromDecomp.translateY, toDecomp.translateY, progress, operationForNonOneBasedValues);
+ blendFloat(fromDecomp.translateZ, toDecomp.translateZ, progress, operationForNonOneBasedValues);
+ blendFloat(fromDecomp.perspectiveX, toDecomp.perspectiveX, progress, operationForNonOneBasedValues);
+ blendFloat(fromDecomp.perspectiveY, toDecomp.perspectiveY, progress, operationForNonOneBasedValues);
+ blendFloat(fromDecomp.perspectiveZ, toDecomp.perspectiveZ, progress, operationForNonOneBasedValues);
blendFloat(fromDecomp.perspectiveW, toDecomp.perspectiveW, progress, compositeOperation);
+ interpolateQuaternion(fromDecomp, toDecomp, progress, compositeOperation);
- slerp(&fromDecomp.quaternionX, &toDecomp.quaternionX, progress);
-
recompose4(fromDecomp);
}
void TransformationMatrix::blend(const TransformationMatrix& from, double progress, CompositeOperation compositeOperation)
{
+ if (compositeOperation == CompositeOperation::Accumulate && (!from.isInvertible() || !isInvertible()))
+ compositeOperation = CompositeOperation::Replace;
+
if (!progress && compositeOperation == CompositeOperation::Replace) {
*this = from;
return;
_______________________________________________ webkit-changes mailing list webkit-changes@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-changes