diff options
author | avallee@chromium.org <avallee@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-05-06 02:58:45 +0000 |
---|---|---|
committer | avallee@chromium.org <avallee@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-05-06 02:58:45 +0000 |
commit | 83ae0e73a4b8c466b0f5cdd11d6908e3ae63f386 (patch) | |
tree | 349956de3a12dbb64d46b8c24fbe7a8db86ca354 /cc/layers/layer_unittest.cc | |
parent | 809f98d0eafdd181ec45ee2cce6b218430438bf7 (diff) | |
download | chromium_src-83ae0e73a4b8c466b0f5cdd11d6908e3ae63f386.zip chromium_src-83ae0e73a4b8c466b0f5cdd11d6908e3ae63f386.tar.gz chromium_src-83ae0e73a4b8c466b0f5cdd11d6908e3ae63f386.tar.bz2 |
Fix crash in SetTransformAndInvertibility().
On OSX there was a crash while animating some transforms which lead to a DCHECK
failure. It turns out that the animation was setting the transform without
setting invertibility.
~ Changed transform_ = transform to SetTransform.
+ Added test that fails teh DCHECK without the above change.
BUG=367993
Review URL: https://codereview.chromium.org/265843008
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@268379 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc/layers/layer_unittest.cc')
-rw-r--r-- | cc/layers/layer_unittest.cc | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/cc/layers/layer_unittest.cc b/cc/layers/layer_unittest.cc index 21cf4d2..e914857 100644 --- a/cc/layers/layer_unittest.cc +++ b/cc/layers/layer_unittest.cc @@ -835,6 +835,38 @@ TEST_F(LayerTest, CheckTranformIsInvertible) { Mock::VerifyAndClearExpectations(layer_tree_host_.get()); } +TEST_F(LayerTest, TranformIsInvertibleAnimation) { + scoped_refptr<Layer> layer = Layer::Create(); + scoped_ptr<LayerImpl> impl_layer = + LayerImpl::Create(host_impl_.active_tree(), 1); + EXPECT_CALL(*layer_tree_host_, SetNeedsFullTreeSync()).Times(1); + EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(AnyNumber()); + layer_tree_host_->SetRootLayer(layer); + + EXPECT_TRUE(layer->transform_is_invertible()); + + gfx::Transform singular_transform; + singular_transform.Scale3d( + SkDoubleToMScalar(1.0), SkDoubleToMScalar(1.0), SkDoubleToMScalar(0.0)); + + layer->SetTransform(singular_transform); + layer->PushPropertiesTo(impl_layer.get()); + + EXPECT_FALSE(layer->transform_is_invertible()); + EXPECT_FALSE(impl_layer->transform_is_invertible()); + + gfx::Transform identity_transform; + + layer->SetTransform(identity_transform); + static_cast<LayerAnimationValueObserver*>(layer) + ->OnTransformAnimated(singular_transform); + layer->PushPropertiesTo(impl_layer.get()); + EXPECT_FALSE(layer->transform_is_invertible()); + EXPECT_FALSE(impl_layer->transform_is_invertible()); + + Mock::VerifyAndClearExpectations(layer_tree_host_.get()); +} + class LayerTreeHostFactory { public: LayerTreeHostFactory() |