summaryrefslogtreecommitdiffstats
path: root/cc/layers/layer_unittest.cc
diff options
context:
space:
mode:
authoravallee@chromium.org <avallee@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-05-06 02:58:45 +0000
committeravallee@chromium.org <avallee@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-05-06 02:58:45 +0000
commit83ae0e73a4b8c466b0f5cdd11d6908e3ae63f386 (patch)
tree349956de3a12dbb64d46b8c24fbe7a8db86ca354 /cc/layers/layer_unittest.cc
parent809f98d0eafdd181ec45ee2cce6b218430438bf7 (diff)
downloadchromium_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.cc32
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()