diff options
author | loyso <loyso@chromium.org> | 2016-02-17 20:00:55 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-02-18 04:02:03 +0000 |
commit | 3479a2cd4a2926b56ea8091e6182f1a32e9bbeae (patch) | |
tree | aced65d391f490ea8abe4bcc4839728e503a17ae | |
parent | 4d5765f4066be1198558f6c07ebd5f53ea74be8e (diff) | |
download | chromium_src-3479a2cd4a2926b56ea8091e6182f1a32e9bbeae.zip chromium_src-3479a2cd4a2926b56ea8091e6182f1a32e9bbeae.tar.gz chromium_src-3479a2cd4a2926b56ea8091e6182f1a32e9bbeae.tar.bz2 |
Blink Compositor: Erase virtuals on Transform and Filter operations.
BUG=577016
CQ_INCLUDE_TRYBOTS=tryserver.blink:linux_blink_rel
Review URL: https://codereview.chromium.org/1698213002
Cr-Commit-Position: refs/heads/master@{#376085}
11 files changed, 95 insertions, 99 deletions
diff --git a/cc/animation/transform_operations.h b/cc/animation/transform_operations.h index d173ace..b97ba36 100644 --- a/cc/animation/transform_operations.h +++ b/cc/animation/transform_operations.h @@ -7,6 +7,7 @@ #include <vector> +#include "base/logging.h" #include "base/macros.h" #include "base/memory/scoped_ptr.h" #include "cc/animation/transform_operation.h" @@ -90,6 +91,13 @@ class CC_EXPORT TransformOperations { void AppendIdentity(); bool IsIdentity() const; + size_t size() const { return operations_.size(); } + + const TransformOperation& at(size_t index) const { + DCHECK_LT(index, size()); + return operations_[index]; + } + private: bool BlendInternal(const TransformOperations& from, SkMScalar progress, diff --git a/third_party/WebKit/Source/core/animation/CompositorAnimations.cpp b/third_party/WebKit/Source/core/animation/CompositorAnimations.cpp index 41a8acf..362c833 100644 --- a/third_party/WebKit/Source/core/animation/CompositorAnimations.cpp +++ b/third_party/WebKit/Source/core/animation/CompositorAnimations.cpp @@ -31,7 +31,6 @@ #include "core/animation/CompositorAnimations.h" #include "core/animation/AnimationEffect.h" -#include "core/animation/AnimationTranslationUtil.h" #include "core/animation/CompositorAnimationsImpl.h" #include "core/animation/ElementAnimations.h" #include "core/animation/animatable/AnimatableDouble.h" @@ -43,6 +42,7 @@ #include "core/layout/compositing/CompositedLayerMapping.h" #include "core/paint/PaintLayer.h" #include "platform/RuntimeEnabledFeatures.h" +#include "platform/animation/AnimationTranslationUtil.h" #include "platform/animation/CompositorAnimation.h" #include "platform/animation/CompositorAnimationPlayer.h" #include "platform/animation/CompositorFilterAnimationCurve.h" diff --git a/third_party/WebKit/Source/core/core.gypi b/third_party/WebKit/Source/core/core.gypi index 86e94bf..c6806bf 100644 --- a/third_party/WebKit/Source/core/core.gypi +++ b/third_party/WebKit/Source/core/core.gypi @@ -848,8 +848,6 @@ 'animation/AnimationStack.h', 'animation/AnimationTimeline.cpp', 'animation/AnimationTimeline.h', - 'animation/AnimationTranslationUtil.cpp', - 'animation/AnimationTranslationUtil.h', 'animation/CSSColorInterpolationType.cpp', 'animation/CSSColorInterpolationType.h', 'animation/CSSFontWeightInterpolationType.cpp', @@ -3816,7 +3814,6 @@ 'animation/AnimationTestHelper.cpp', 'animation/AnimationTestHelper.h', 'animation/AnimationTimelineTest.cpp', - 'animation/AnimationTranslationUtilTest.cpp', 'animation/CompositorAnimationsTest.cpp', 'animation/CompositorAnimationsTestHelper.h', 'animation/DeferredLegacyStyleInterpolationTest.cpp', diff --git a/third_party/WebKit/Source/core/animation/AnimationTranslationUtil.cpp b/third_party/WebKit/Source/platform/animation/AnimationTranslationUtil.cpp index be90b73..e0be8ec 100644 --- a/third_party/WebKit/Source/core/animation/AnimationTranslationUtil.cpp +++ b/third_party/WebKit/Source/platform/animation/AnimationTranslationUtil.cpp @@ -23,7 +23,7 @@ */ -#include "core/animation/AnimationTranslationUtil.h" +#include "platform/animation/AnimationTranslationUtil.h" #include "platform/animation/CompositorTransformOperations.h" #include "platform/graphics/filters/FilterOperations.h" @@ -41,7 +41,7 @@ namespace blink { -void toCompositorTransformOperations(const TransformOperations& transformOperations, CompositorTransformOperations* webTransformOperations) +void toCompositorTransformOperations(const TransformOperations& transformOperations, CompositorTransformOperations* outTransformOperations) { // We need to do a deep copy the transformOperations may contain ref pointers to TransformOperation objects. for (size_t j = 0; j < transformOperations.size(); ++j) { @@ -52,7 +52,7 @@ void toCompositorTransformOperations(const TransformOperations& transformOperati case TransformOperation::Scale3D: case TransformOperation::Scale: { ScaleTransformOperation* transform = static_cast<ScaleTransformOperation*>(transformOperations.operations()[j].get()); - webTransformOperations->appendScale(transform->x(), transform->y(), transform->z()); + outTransformOperations->appendScale(transform->x(), transform->y(), transform->z()); break; } case TransformOperation::TranslateX: @@ -62,7 +62,7 @@ void toCompositorTransformOperations(const TransformOperations& transformOperati case TransformOperation::Translate: { TranslateTransformOperation* transform = static_cast<TranslateTransformOperation*>(transformOperations.operations()[j].get()); ASSERT(transform->x().isFixed() && transform->y().isFixed()); - webTransformOperations->appendTranslate(transform->x().value(), transform->y().value(), transform->z()); + outTransformOperations->appendTranslate(transform->x().value(), transform->y().value(), transform->z()); break; } case TransformOperation::RotateX: @@ -70,41 +70,41 @@ void toCompositorTransformOperations(const TransformOperations& transformOperati case TransformOperation::Rotate3D: case TransformOperation::Rotate: { RotateTransformOperation* transform = static_cast<RotateTransformOperation*>(transformOperations.operations()[j].get()); - webTransformOperations->appendRotate(transform->x(), transform->y(), transform->z(), transform->angle()); + outTransformOperations->appendRotate(transform->x(), transform->y(), transform->z(), transform->angle()); break; } case TransformOperation::SkewX: case TransformOperation::SkewY: case TransformOperation::Skew: { SkewTransformOperation* transform = static_cast<SkewTransformOperation*>(transformOperations.operations()[j].get()); - webTransformOperations->appendSkew(transform->angleX(), transform->angleY()); + outTransformOperations->appendSkew(transform->angleX(), transform->angleY()); break; } case TransformOperation::Matrix: { MatrixTransformOperation* transform = static_cast<MatrixTransformOperation*>(transformOperations.operations()[j].get()); TransformationMatrix m = transform->matrix(); - webTransformOperations->appendMatrix(TransformationMatrix::toSkMatrix44(m)); + outTransformOperations->appendMatrix(TransformationMatrix::toSkMatrix44(m)); break; } case TransformOperation::Matrix3D: { Matrix3DTransformOperation* transform = static_cast<Matrix3DTransformOperation*>(transformOperations.operations()[j].get()); TransformationMatrix m = transform->matrix(); - webTransformOperations->appendMatrix(TransformationMatrix::toSkMatrix44(m)); + outTransformOperations->appendMatrix(TransformationMatrix::toSkMatrix44(m)); break; } case TransformOperation::Perspective: { PerspectiveTransformOperation* transform = static_cast<PerspectiveTransformOperation*>(transformOperations.operations()[j].get()); - webTransformOperations->appendPerspective(transform->perspective()); + outTransformOperations->appendPerspective(transform->perspective()); break; } case TransformOperation::Interpolated: { TransformationMatrix m; transformOperations.operations()[j]->apply(m, FloatSize()); - webTransformOperations->appendMatrix(TransformationMatrix::toSkMatrix44(m)); + outTransformOperations->appendMatrix(TransformationMatrix::toSkMatrix44(m)); break; } case TransformOperation::Identity: - webTransformOperations->appendIdentity(); + outTransformOperations->appendIdentity(); break; case TransformOperation::None: // Do nothing. diff --git a/third_party/WebKit/Source/core/animation/AnimationTranslationUtil.h b/third_party/WebKit/Source/platform/animation/AnimationTranslationUtil.h index 08be9f4..f0c7a77 100644 --- a/third_party/WebKit/Source/core/animation/AnimationTranslationUtil.h +++ b/third_party/WebKit/Source/platform/animation/AnimationTranslationUtil.h @@ -31,7 +31,7 @@ #ifndef AnimationTranslationUtil_h #define AnimationTranslationUtil_h -#include "core/CoreExport.h" +#include "platform/PlatformExport.h" namespace blink { @@ -40,8 +40,8 @@ class CompositorTransformOperations; class FilterOperations; class TransformOperations; -CORE_EXPORT void toCompositorTransformOperations(const TransformOperations& inOperations, CompositorTransformOperations* outOperations); -CORE_EXPORT void toCompositorFilterOperations(const FilterOperations& inOperations, CompositorFilterOperations* outOperations); +PLATFORM_EXPORT void toCompositorTransformOperations(const TransformOperations& inOperations, CompositorTransformOperations* outOperations); +PLATFORM_EXPORT void toCompositorFilterOperations(const FilterOperations& inOperations, CompositorFilterOperations* outOperations); } // namespace blink diff --git a/third_party/WebKit/Source/core/animation/AnimationTranslationUtilTest.cpp b/third_party/WebKit/Source/platform/animation/AnimationTranslationUtilTest.cpp index 39cb648..d727ffd 100644 --- a/third_party/WebKit/Source/core/animation/AnimationTranslationUtilTest.cpp +++ b/third_party/WebKit/Source/platform/animation/AnimationTranslationUtilTest.cpp @@ -22,7 +22,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include "core/animation/AnimationTranslationUtil.h" +#include "platform/animation/AnimationTranslationUtil.h" #include "platform/animation/CompositorTransformOperations.h" #include "platform/graphics/CompositorFilterOperations.h" @@ -32,75 +32,73 @@ #include "platform/transforms/ScaleTransformOperation.h" #include "platform/transforms/TransformOperations.h" #include "platform/transforms/TranslateTransformOperation.h" -#include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "wtf/RefPtr.h" namespace blink { -class WebTransformOperationsMock : public CompositorTransformOperations { -public: - MOCK_CONST_METHOD1(canBlendWith, bool(const CompositorTransformOperations&)); - MOCK_METHOD3(appendTranslate, void(double, double, double)); - MOCK_METHOD4(appendRotate, void(double, double, double, double)); - MOCK_METHOD3(appendScale, void(double, double, double)); - MOCK_METHOD2(appendSkew, void(double, double)); - MOCK_METHOD1(appendPerspective, void(double)); - MOCK_METHOD1(appendMatrix, void(const SkMatrix44&)); - MOCK_METHOD0(appendIdentity, void()); - MOCK_CONST_METHOD0(isIdentity, bool()); -}; - -class WebFilterOperationsMock : public CompositorFilterOperations { -public: - MOCK_METHOD1(appendGrayscaleFilter, void(float)); - MOCK_METHOD1(appendSepiaFilter, void(float)); - MOCK_METHOD1(appendSaturateFilter, void(float)); - MOCK_METHOD1(appendHueRotateFilter, void(float)); - MOCK_METHOD1(appendInvertFilter, void(float)); - MOCK_METHOD1(appendBrightnessFilter, void(float)); - MOCK_METHOD1(appendContrastFilter, void(float)); - MOCK_METHOD1(appendOpacityFilter, void(float)); - MOCK_METHOD1(appendBlurFilter, void(float)); - MOCK_METHOD3(appendDropShadowFilter, void(IntPoint, float, Color)); - MOCK_METHOD1(appendColorMatrixFilter, void(SkScalar[20])); - MOCK_METHOD2(appendZoomFilter, void(float, int)); - MOCK_METHOD1(appendSaturatingBrightnessFilter, void(float)); - MOCK_METHOD1(appendReferenceFilter, void(SkImageFilter*)); - MOCK_METHOD0(clear, void()); - MOCK_CONST_METHOD0(isEmpty, bool()); -}; - TEST(AnimationTranslationUtilTest, transformsWork) { TransformOperations ops; - WebTransformOperationsMock outOps; - - EXPECT_CALL(outOps, appendTranslate(2, 0, 0)); - EXPECT_CALL(outOps, appendRotate(0.1, 0.2, 0.3, 200000.4)); - EXPECT_CALL(outOps, appendScale(50.2, 100, -4)); + CompositorTransformOperations outOps; ops.operations().append(TranslateTransformOperation::create(Length(2, Fixed), Length(0, Fixed), TransformOperation::TranslateX)); ops.operations().append(RotateTransformOperation::create(0.1, 0.2, 0.3, 200000.4, TransformOperation::Rotate3D)); ops.operations().append(ScaleTransformOperation::create(50.2, 100, -4, TransformOperation::Scale3D)); toCompositorTransformOperations(ops, &outOps); + + EXPECT_EQ(3UL, outOps.asTransformOperations().size()); + const float err = 0.0001; + + auto& op0 = outOps.asTransformOperations().at(0); + EXPECT_EQ(cc::TransformOperation::TRANSFORM_OPERATION_TRANSLATE, op0.type); + EXPECT_NEAR(op0.translate.x, 2.0f, err); + EXPECT_NEAR(op0.translate.y, 0.0f, err); + EXPECT_NEAR(op0.translate.z, 0.0f, err); + + auto& op1 = outOps.asTransformOperations().at(1); + EXPECT_EQ(cc::TransformOperation::TRANSFORM_OPERATION_ROTATE, op1.type); + EXPECT_NEAR(op1.rotate.axis.x, 0.1f, err); + EXPECT_NEAR(op1.rotate.axis.y, 0.2f, err); + EXPECT_NEAR(op1.rotate.axis.z, 0.3f, err); + EXPECT_NEAR(op1.rotate.angle, 200000.4f, 0.01f); + + auto& op2 = outOps.asTransformOperations().at(2); + EXPECT_EQ(cc::TransformOperation::TRANSFORM_OPERATION_SCALE, op2.type); + EXPECT_NEAR(op2.scale.x, 50.2f, err); + EXPECT_NEAR(op2.scale.y, 100.0f, err); + EXPECT_NEAR(op2.scale.z, -4.0f, err); } TEST(AnimationTranslationUtilTest, filtersWork) { FilterOperations ops; - WebFilterOperationsMock outOps; - - EXPECT_CALL(outOps, appendSaturateFilter(0.5)); - EXPECT_CALL(outOps, appendGrayscaleFilter(0.2f)); - EXPECT_CALL(outOps, appendSepiaFilter(0.8f)); - EXPECT_CALL(outOps, appendOpacityFilter(0.1f)); + CompositorFilterOperations outOps; ops.operations().append(BasicColorMatrixFilterOperation::create(0.5, FilterOperation::SATURATE)); ops.operations().append(BasicColorMatrixFilterOperation::create(0.2, FilterOperation::GRAYSCALE)); ops.operations().append(BasicColorMatrixFilterOperation::create(0.8, FilterOperation::SEPIA)); ops.operations().append(BasicComponentTransferFilterOperation::create(0.1, FilterOperation::OPACITY)); toCompositorFilterOperations(ops, &outOps); + + EXPECT_EQ(4UL, outOps.asFilterOperations().size()); + const float err = 0.0001; + + auto& op0 = outOps.asFilterOperations().at(0); + EXPECT_EQ(cc::FilterOperation::SATURATE, op0.type()); + EXPECT_NEAR(op0.amount(), 0.5f, err); + + auto& op1 = outOps.asFilterOperations().at(1); + EXPECT_EQ(cc::FilterOperation::GRAYSCALE, op1.type()); + EXPECT_NEAR(op1.amount(), 0.2f, err); + + auto& op2 = outOps.asFilterOperations().at(2); + EXPECT_EQ(cc::FilterOperation::SEPIA, op2.type()); + EXPECT_NEAR(op2.amount(), 0.8f, err); + + auto& op3 = outOps.asFilterOperations().at(3); + EXPECT_EQ(cc::FilterOperation::OPACITY, op3.type()); + EXPECT_NEAR(op3.amount(), 0.1f, err); } } // namespace blink diff --git a/third_party/WebKit/Source/platform/animation/CompositorTransformOperations.cpp b/third_party/WebKit/Source/platform/animation/CompositorTransformOperations.cpp index 02c8a66c..db6f309 100644 --- a/third_party/WebKit/Source/platform/animation/CompositorTransformOperations.cpp +++ b/third_party/WebKit/Source/platform/animation/CompositorTransformOperations.cpp @@ -13,10 +13,6 @@ CompositorTransformOperations::CompositorTransformOperations() { } -CompositorTransformOperations::~CompositorTransformOperations() -{ -} - const cc::TransformOperations& CompositorTransformOperations::asTransformOperations() const { return m_transformOperations; diff --git a/third_party/WebKit/Source/platform/animation/CompositorTransformOperations.h b/third_party/WebKit/Source/platform/animation/CompositorTransformOperations.h index 63be715..d21d11b 100644 --- a/third_party/WebKit/Source/platform/animation/CompositorTransformOperations.h +++ b/third_party/WebKit/Source/platform/animation/CompositorTransformOperations.h @@ -17,24 +17,23 @@ class PLATFORM_EXPORT CompositorTransformOperations { WTF_MAKE_NONCOPYABLE(CompositorTransformOperations); public: CompositorTransformOperations(); - virtual ~CompositorTransformOperations(); const cc::TransformOperations& asTransformOperations() const; // Returns true if these operations can be blended. It will only return // false if we must resort to matrix interpolation, and matrix interpolation // fails (this can happen if either matrix cannot be decomposed). - virtual bool canBlendWith(const CompositorTransformOperations& other) const; + bool canBlendWith(const CompositorTransformOperations& other) const; - virtual void appendTranslate(double x, double y, double z); - virtual void appendRotate(double x, double y, double z, double degrees); - virtual void appendScale(double x, double y, double z); - virtual void appendSkew(double x, double y); - virtual void appendPerspective(double depth); - virtual void appendMatrix(const SkMatrix44&); - virtual void appendIdentity(); + void appendTranslate(double x, double y, double z); + void appendRotate(double x, double y, double z, double degrees); + void appendScale(double x, double y, double z); + void appendSkew(double x, double y); + void appendPerspective(double depth); + void appendMatrix(const SkMatrix44&); + void appendIdentity(); - virtual bool isIdentity() const; + bool isIdentity() const; private: cc::TransformOperations m_transformOperations; diff --git a/third_party/WebKit/Source/platform/blink_platform.gypi b/third_party/WebKit/Source/platform/blink_platform.gypi index 8bcdff7..4bad7ff 100644 --- a/third_party/WebKit/Source/platform/blink_platform.gypi +++ b/third_party/WebKit/Source/platform/blink_platform.gypi @@ -147,6 +147,8 @@ 'Widget.cpp', 'Widget.h', 'WindowsKeyboardCodes.h', + 'animation/AnimationTranslationUtil.cpp', + 'animation/AnimationTranslationUtil.h', 'animation/AnimationUtilities.h', 'animation/CubicBezierControlPoints.cpp', 'animation/CubicBezierControlPoints.h', @@ -1103,6 +1105,7 @@ 'UUIDTest.cpp', 'WebScreenInfoTest.cpp', 'WebVectorTest.cpp', + 'animation/AnimationTranslationUtilTest.cpp', 'animation/TimingFunctionTest.cpp', 'animation/UnitBezierTest.cpp', 'animation/CompositorAnimationPlayerTest.cpp', diff --git a/third_party/WebKit/Source/platform/graphics/CompositorFilterOperations.cpp b/third_party/WebKit/Source/platform/graphics/CompositorFilterOperations.cpp index f575c1f..0c5de98 100644 --- a/third_party/WebKit/Source/platform/graphics/CompositorFilterOperations.cpp +++ b/third_party/WebKit/Source/platform/graphics/CompositorFilterOperations.cpp @@ -13,10 +13,6 @@ CompositorFilterOperations::CompositorFilterOperations() { } -CompositorFilterOperations::~CompositorFilterOperations() -{ -} - const cc::FilterOperations& CompositorFilterOperations::asFilterOperations() const { return m_filterOperations; diff --git a/third_party/WebKit/Source/platform/graphics/CompositorFilterOperations.h b/third_party/WebKit/Source/platform/graphics/CompositorFilterOperations.h index 97368e4..c5c0f2e 100644 --- a/third_party/WebKit/Source/platform/graphics/CompositorFilterOperations.h +++ b/third_party/WebKit/Source/platform/graphics/CompositorFilterOperations.h @@ -21,29 +21,28 @@ class PLATFORM_EXPORT CompositorFilterOperations { WTF_MAKE_NONCOPYABLE(CompositorFilterOperations); public: CompositorFilterOperations(); - virtual ~CompositorFilterOperations(); const cc::FilterOperations& asFilterOperations() const; - virtual void appendGrayscaleFilter(float amount); - virtual void appendSepiaFilter(float amount); - virtual void appendSaturateFilter(float amount); - virtual void appendHueRotateFilter(float amount); - virtual void appendInvertFilter(float amount); - virtual void appendBrightnessFilter(float amount); - virtual void appendContrastFilter(float amount); - virtual void appendOpacityFilter(float amount); - virtual void appendBlurFilter(float amount); - virtual void appendDropShadowFilter(IntPoint offset, float stdDeviation, Color); - virtual void appendColorMatrixFilter(SkScalar matrix[20]); - virtual void appendZoomFilter(float amount, int inset); - virtual void appendSaturatingBrightnessFilter(float amount); + void appendGrayscaleFilter(float amount); + void appendSepiaFilter(float amount); + void appendSaturateFilter(float amount); + void appendHueRotateFilter(float amount); + void appendInvertFilter(float amount); + void appendBrightnessFilter(float amount); + void appendContrastFilter(float amount); + void appendOpacityFilter(float amount); + void appendBlurFilter(float amount); + void appendDropShadowFilter(IntPoint offset, float stdDeviation, Color); + void appendColorMatrixFilter(SkScalar matrix[20]); + void appendZoomFilter(float amount, int inset); + void appendSaturatingBrightnessFilter(float amount); // This grabs a ref on the passed-in filter. - virtual void appendReferenceFilter(SkImageFilter*); + void appendReferenceFilter(SkImageFilter*); - virtual void clear(); - virtual bool isEmpty() const; + void clear(); + bool isEmpty() const; private: cc::FilterOperations m_filterOperations; |