Index: cc/trees/layer_tree_host_unittest.cc |
diff --git a/cc/trees/layer_tree_host_unittest.cc b/cc/trees/layer_tree_host_unittest.cc |
index 13f54ee97cf0600ea478ed1a99294956eed03631..54870523a8e0e6bdd7f58ff243cbc0a97d65a2d2 100644 |
--- a/cc/trees/layer_tree_host_unittest.cc |
+++ b/cc/trees/layer_tree_host_unittest.cc |
@@ -1004,6 +1004,74 @@ class LayerTreeHostTestEffectTreeSync : public LayerTreeHostTest { |
SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestEffectTreeSync); |
+class LayerTreeHostTestTransformTreeSync : public LayerTreeHostTest { |
+ protected: |
+ void SetupTree() override { |
+ root_ = Layer::Create(); |
+ layer_tree_host()->SetRootLayer(root_); |
+ LayerTreeHostTest::SetupTree(); |
+ } |
+ |
+ void BeginTest() override { PostSetNeedsCommitToMainThread(); } |
+ |
+ void DidCommit() override { |
+ TransformTree& transform_tree = |
+ layer_tree_host()->property_trees()->transform_tree; |
+ TransformNode* node = transform_tree.Node(root_->transform_tree_index()); |
+ gfx::Transform rotate10; |
+ rotate10.Rotate(10.f); |
+ switch (layer_tree_host()->source_frame_number()) { |
+ case 1: |
+ node->data.local = rotate10; |
+ node->data.is_currently_animating = true; |
+ break; |
+ case 2: |
+ node->data.is_currently_animating = true; |
+ break; |
+ case 3: |
+ node->data.is_currently_animating = false; |
+ break; |
+ } |
+ } |
+ |
+ void CommitCompleteOnThread(LayerTreeHostImpl* impl) override { |
+ TransformTree& transform_tree = |
+ impl->sync_tree()->property_trees()->transform_tree; |
+ TransformNode* node = transform_tree.Node( |
+ impl->sync_tree()->root_layer()->transform_tree_index()); |
+ gfx::Transform rotate10; |
+ rotate10.Rotate(10.f); |
+ gfx::Transform rotate20; |
+ rotate20.Rotate(20.f); |
+ switch (impl->sync_tree()->source_frame_number()) { |
+ case 0: |
+ impl->sync_tree()->root_layer()->OnTransformAnimated(rotate20); |
+ PostSetNeedsCommitToMainThread(); |
+ break; |
+ case 1: |
+ EXPECT_EQ(node->data.local, rotate20); |
+ impl->sync_tree()->root_layer()->OnTransformAnimated(rotate20); |
+ PostSetNeedsCommitToMainThread(); |
+ break; |
+ case 2: |
+ EXPECT_EQ(node->data.local, rotate20); |
+ impl->sync_tree()->root_layer()->OnTransformAnimated(rotate20); |
+ PostSetNeedsCommitToMainThread(); |
+ break; |
+ case 3: |
+ EXPECT_EQ(node->data.local, rotate10); |
+ EndTest(); |
+ } |
+ } |
+ |
+ void AfterTest() override {} |
+ |
+ private: |
+ scoped_refptr<Layer> root_; |
+}; |
+ |
+SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestTransformTreeSync); |
+ |
// Verify damage status is updated even when the transform tree doesn't need |
// to be updated at draw time. |
class LayerTreeHostTestTransformTreeDamageIsUpdated : public LayerTreeHostTest { |