| OLD | NEW |
| 1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "cc/layers/layer.h" | 5 #include "cc/layers/layer.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include "base/thread_task_runner_handle.h" | 9 #include "base/thread_task_runner_handle.h" |
| 10 #include "cc/animation/animation_host.h" | 10 #include "cc/animation/animation_host.h" |
| (...skipping 1028 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1039 node = layer_tree_host_->property_trees()->transform_tree.Node( | 1039 node = layer_tree_host_->property_trees()->transform_tree.Node( |
| 1040 child->transform_tree_index()); | 1040 child->transform_tree_index()); |
| 1041 EXPECT_FALSE(node->data.transform_changed); | 1041 EXPECT_FALSE(node->data.transform_changed); |
| 1042 | 1042 |
| 1043 gfx::Point3F arbitrary_point_3f = gfx::Point3F(0.125f, 0.25f, 0.f); | 1043 gfx::Point3F arbitrary_point_3f = gfx::Point3F(0.125f, 0.25f, 0.f); |
| 1044 EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(1); | 1044 EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(1); |
| 1045 root->SetTransformOrigin(arbitrary_point_3f); | 1045 root->SetTransformOrigin(arbitrary_point_3f); |
| 1046 node = layer_tree_host_->property_trees()->transform_tree.Node( | 1046 node = layer_tree_host_->property_trees()->transform_tree.Node( |
| 1047 root->transform_tree_index()); | 1047 root->transform_tree_index()); |
| 1048 EXPECT_TRUE(node->data.transform_changed); | 1048 EXPECT_TRUE(node->data.transform_changed); |
| 1049 EXECUTE_AND_VERIFY_SUBTREE_CHANGES_RESET( |
| 1050 root->PushPropertiesTo(root_impl.get()); |
| 1051 child->PushPropertiesTo(child_impl.get()); |
| 1052 child2->PushPropertiesTo(child2_impl.get()); |
| 1053 grand_child->PushPropertiesTo(grand_child_impl.get()); |
| 1054 layer_tree_host_->property_trees()->transform_tree.ResetChangeTracking()); |
| 1055 |
| 1056 gfx::Transform arbitrary_transform; |
| 1057 arbitrary_transform.Scale3d(0.1f, 0.2f, 0.3f); |
| 1058 EXPECT_CALL(*layer_tree_host_, SetNeedsCommit()).Times(1); |
| 1059 root->SetTransform(arbitrary_transform); |
| 1060 node = layer_tree_host_->property_trees()->transform_tree.Node( |
| 1061 root->transform_tree_index()); |
| 1062 EXPECT_TRUE(node->data.transform_changed); |
| 1049 } | 1063 } |
| 1050 | 1064 |
| 1051 TEST_F(LayerTest, AddAndRemoveChild) { | 1065 TEST_F(LayerTest, AddAndRemoveChild) { |
| 1052 scoped_refptr<Layer> parent = Layer::Create(layer_settings_); | 1066 scoped_refptr<Layer> parent = Layer::Create(layer_settings_); |
| 1053 scoped_refptr<Layer> child = Layer::Create(layer_settings_); | 1067 scoped_refptr<Layer> child = Layer::Create(layer_settings_); |
| 1054 | 1068 |
| 1055 // Upon creation, layers should not have children or parent. | 1069 // Upon creation, layers should not have children or parent. |
| 1056 ASSERT_EQ(0U, parent->children().size()); | 1070 ASSERT_EQ(0U, parent->children().size()); |
| 1057 EXPECT_FALSE(child->parent()); | 1071 EXPECT_FALSE(child->parent()); |
| 1058 | 1072 |
| (...skipping 532 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1591 EXPECT_SET_NEEDS_COMMIT(1, test_layer->SetOpacity(0.5f)); | 1605 EXPECT_SET_NEEDS_COMMIT(1, test_layer->SetOpacity(0.5f)); |
| 1592 | 1606 |
| 1593 EXPECT_FALSE(impl_layer->LayerPropertyChanged()); | 1607 EXPECT_FALSE(impl_layer->LayerPropertyChanged()); |
| 1594 | 1608 |
| 1595 test_layer->PushPropertiesTo(impl_layer.get()); | 1609 test_layer->PushPropertiesTo(impl_layer.get()); |
| 1596 | 1610 |
| 1597 EXPECT_TRUE(impl_layer->LayerPropertyChanged()); | 1611 EXPECT_TRUE(impl_layer->LayerPropertyChanged()); |
| 1598 } | 1612 } |
| 1599 | 1613 |
| 1600 TEST_F(LayerTest, | 1614 TEST_F(LayerTest, |
| 1601 PushPropsDoesntCauseLayerPropertyChangedDuringImplOnlyTransformAnim) { | |
| 1602 scoped_refptr<Layer> test_layer = Layer::Create(layer_settings_); | |
| 1603 scoped_ptr<LayerImpl> impl_layer = | |
| 1604 LayerImpl::Create(host_impl_.active_tree(), 1); | |
| 1605 | |
| 1606 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, | |
| 1607 layer_tree_host_->SetRootLayer(test_layer)); | |
| 1608 | |
| 1609 scoped_ptr<AnimationRegistrar> registrar; | |
| 1610 if (settings().use_compositor_animation_timelines) { | |
| 1611 AddAnimatedTransformToLayerWithPlayer(impl_layer->id(), timeline_impl(), | |
| 1612 1.0, 0, 100); | |
| 1613 } else { | |
| 1614 registrar = AnimationRegistrar::Create(); | |
| 1615 impl_layer->layer_animation_controller()->SetAnimationRegistrar( | |
| 1616 registrar.get()); | |
| 1617 | |
| 1618 AddAnimatedTransformToController(impl_layer->layer_animation_controller(), | |
| 1619 1.0, 0, 100); | |
| 1620 } | |
| 1621 | |
| 1622 gfx::Transform transform; | |
| 1623 transform.Rotate(45.0); | |
| 1624 EXPECT_SET_NEEDS_COMMIT(1, test_layer->SetTransform(transform)); | |
| 1625 | |
| 1626 EXPECT_FALSE(impl_layer->LayerPropertyChanged()); | |
| 1627 test_layer->PushPropertiesTo(impl_layer.get()); | |
| 1628 EXPECT_TRUE(impl_layer->LayerPropertyChanged()); | |
| 1629 | |
| 1630 impl_layer->ResetAllChangeTrackingForSubtree(); | |
| 1631 if (settings().use_compositor_animation_timelines) { | |
| 1632 int animation_id = AddAnimatedTransformToLayerWithPlayer( | |
| 1633 impl_layer->id(), timeline_impl(), 1.0, 0, 100); | |
| 1634 GetAnimationFromLayerWithExistingPlayer(impl_layer->id(), timeline_impl(), | |
| 1635 animation_id) | |
| 1636 ->set_is_impl_only(true); | |
| 1637 } else { | |
| 1638 AddAnimatedTransformToController(impl_layer->layer_animation_controller(), | |
| 1639 1.0, 0, 100); | |
| 1640 impl_layer->layer_animation_controller() | |
| 1641 ->GetAnimation(Animation::TRANSFORM) | |
| 1642 ->set_is_impl_only(true); | |
| 1643 } | |
| 1644 transform.Rotate(45.0); | |
| 1645 EXPECT_SET_NEEDS_COMMIT(1, test_layer->SetTransform(transform)); | |
| 1646 | |
| 1647 EXPECT_FALSE(impl_layer->LayerPropertyChanged()); | |
| 1648 test_layer->PushPropertiesTo(impl_layer.get()); | |
| 1649 EXPECT_FALSE(impl_layer->LayerPropertyChanged()); | |
| 1650 } | |
| 1651 | |
| 1652 TEST_F(LayerTest, | |
| 1653 PushPropsDoesntCauseLayerPropertyChangedDuringImplOnlyOpacityAnim) { | 1615 PushPropsDoesntCauseLayerPropertyChangedDuringImplOnlyOpacityAnim) { |
| 1654 scoped_refptr<Layer> test_layer = Layer::Create(layer_settings_); | 1616 scoped_refptr<Layer> test_layer = Layer::Create(layer_settings_); |
| 1655 scoped_ptr<LayerImpl> impl_layer = | 1617 scoped_ptr<LayerImpl> impl_layer = |
| 1656 LayerImpl::Create(host_impl_.active_tree(), 1); | 1618 LayerImpl::Create(host_impl_.active_tree(), 1); |
| 1657 | 1619 |
| 1658 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, | 1620 EXPECT_SET_NEEDS_FULL_TREE_SYNC(1, |
| 1659 layer_tree_host_->SetRootLayer(test_layer)); | 1621 layer_tree_host_->SetRootLayer(test_layer)); |
| 1660 | 1622 |
| 1661 scoped_ptr<AnimationRegistrar> registrar; | 1623 scoped_ptr<AnimationRegistrar> registrar; |
| 1662 if (settings().use_compositor_animation_timelines) { | 1624 if (settings().use_compositor_animation_timelines) { |
| (...skipping 875 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2538 scoped_refptr<Layer> layer_src_b_replica = Layer::Create(LayerSettings()); | 2500 scoped_refptr<Layer> layer_src_b_replica = Layer::Create(LayerSettings()); |
| 2539 scoped_refptr<Layer> layer_src_c = Layer::Create(LayerSettings()); | 2501 scoped_refptr<Layer> layer_src_c = Layer::Create(LayerSettings()); |
| 2540 scoped_refptr<Layer> layer_src_d = Layer::Create(LayerSettings()); | 2502 scoped_refptr<Layer> layer_src_d = Layer::Create(LayerSettings()); |
| 2541 layer_src_root->AddChild(layer_src_a); | 2503 layer_src_root->AddChild(layer_src_a); |
| 2542 layer_src_root->AddChild(layer_src_b); | 2504 layer_src_root->AddChild(layer_src_b); |
| 2543 layer_src_a->AddChild(layer_src_c); | 2505 layer_src_a->AddChild(layer_src_c); |
| 2544 layer_src_b->AddChild(layer_src_d); | 2506 layer_src_b->AddChild(layer_src_d); |
| 2545 layer_src_b->SetMaskLayer(layer_src_b_mask.get()); | 2507 layer_src_b->SetMaskLayer(layer_src_b_mask.get()); |
| 2546 layer_src_b->SetReplicaLayer(layer_src_b_replica.get()); | 2508 layer_src_b->SetReplicaLayer(layer_src_b_replica.get()); |
| 2547 | 2509 |
| 2510 proto::LayerUpdate layer_update_root; |
| 2511 // Only layers with descendants that require pushing properties will |
| 2512 // return true from ToLayerPropertiesProto and AddChild will change the |
| 2513 // stacking order of child which will make it push properties. |
| 2514 EXPECT_TRUE(layer_src_root->ToLayerPropertiesProto(&layer_update_root)); |
| 2515 proto::LayerUpdate layer_update_a; |
| 2516 EXPECT_TRUE(layer_src_a->ToLayerPropertiesProto(&layer_update_a)); |
| 2517 proto::LayerUpdate layer_update_b; |
| 2518 EXPECT_TRUE(layer_src_b->ToLayerPropertiesProto(&layer_update_b)); |
| 2519 proto::LayerUpdate layer_update_c; |
| 2520 EXPECT_FALSE(layer_src_c->ToLayerPropertiesProto(&layer_update_c)); |
| 2521 proto::LayerUpdate layer_update_d; |
| 2522 EXPECT_FALSE(layer_src_d->ToLayerPropertiesProto(&layer_update_d)); |
| 2523 layer_update_root.Clear(); |
| 2524 layer_update_a.Clear(); |
| 2525 layer_update_b.Clear(); |
| 2526 layer_update_c.Clear(); |
| 2527 layer_update_d.Clear(); |
| 2528 |
| 2548 layer_src_a->SetNeedsPushProperties(); | 2529 layer_src_a->SetNeedsPushProperties(); |
| 2549 layer_src_b->SetNeedsPushProperties(); | 2530 layer_src_b->SetNeedsPushProperties(); |
| 2550 layer_src_b_mask->SetNeedsPushProperties(); | 2531 layer_src_b_mask->SetNeedsPushProperties(); |
| 2551 layer_src_d->SetNeedsPushProperties(); | 2532 layer_src_d->SetNeedsPushProperties(); |
| 2552 | 2533 |
| 2553 // Only layers with descendants that require pushing properties will | 2534 // Only layers with descendants that require pushing properties will |
| 2554 // return true from ToLayerPropertiesProto. | 2535 // return true from ToLayerPropertiesProto. |
| 2555 proto::LayerUpdate layer_update_root; | |
| 2556 EXPECT_TRUE(layer_src_root->ToLayerPropertiesProto(&layer_update_root)); | 2536 EXPECT_TRUE(layer_src_root->ToLayerPropertiesProto(&layer_update_root)); |
| 2557 proto::LayerUpdate layer_update_a; | |
| 2558 EXPECT_FALSE(layer_src_a->ToLayerPropertiesProto(&layer_update_a)); | 2537 EXPECT_FALSE(layer_src_a->ToLayerPropertiesProto(&layer_update_a)); |
| 2559 proto::LayerUpdate layer_update_b; | |
| 2560 EXPECT_TRUE(layer_src_b->ToLayerPropertiesProto(&layer_update_b)); | 2538 EXPECT_TRUE(layer_src_b->ToLayerPropertiesProto(&layer_update_b)); |
| 2561 proto::LayerUpdate layer_update_b_mask; | 2539 proto::LayerUpdate layer_update_b_mask; |
| 2562 EXPECT_FALSE(layer_src_b_mask->ToLayerPropertiesProto(&layer_update_b_mask)); | 2540 EXPECT_FALSE(layer_src_b_mask->ToLayerPropertiesProto(&layer_update_b_mask)); |
| 2563 proto::LayerUpdate layer_update_b_replica; | 2541 proto::LayerUpdate layer_update_b_replica; |
| 2564 EXPECT_FALSE( | 2542 EXPECT_FALSE( |
| 2565 layer_src_b_replica->ToLayerPropertiesProto(&layer_update_b_replica)); | 2543 layer_src_b_replica->ToLayerPropertiesProto(&layer_update_b_replica)); |
| 2566 proto::LayerUpdate layer_update_c; | |
| 2567 EXPECT_FALSE(layer_src_c->ToLayerPropertiesProto(&layer_update_c)); | 2544 EXPECT_FALSE(layer_src_c->ToLayerPropertiesProto(&layer_update_c)); |
| 2568 proto::LayerUpdate layer_update_d; | |
| 2569 EXPECT_FALSE(layer_src_d->ToLayerPropertiesProto(&layer_update_d)); | 2545 EXPECT_FALSE(layer_src_d->ToLayerPropertiesProto(&layer_update_d)); |
| 2570 | 2546 |
| 2571 // All flags for pushing properties should have been cleared. | 2547 // All flags for pushing properties should have been cleared. |
| 2572 EXPECT_FALSE(layer_src_root->needs_push_properties()); | 2548 EXPECT_FALSE(layer_src_root->needs_push_properties()); |
| 2573 EXPECT_FALSE(layer_src_root->descendant_needs_push_properties()); | 2549 EXPECT_FALSE(layer_src_root->descendant_needs_push_properties()); |
| 2574 EXPECT_FALSE(layer_src_a->needs_push_properties()); | 2550 EXPECT_FALSE(layer_src_a->needs_push_properties()); |
| 2575 EXPECT_FALSE(layer_src_a->descendant_needs_push_properties()); | 2551 EXPECT_FALSE(layer_src_a->descendant_needs_push_properties()); |
| 2576 EXPECT_FALSE(layer_src_b->needs_push_properties()); | 2552 EXPECT_FALSE(layer_src_b->needs_push_properties()); |
| 2577 EXPECT_FALSE(layer_src_b->descendant_needs_push_properties()); | 2553 EXPECT_FALSE(layer_src_b->descendant_needs_push_properties()); |
| 2578 EXPECT_FALSE(layer_src_b_mask->needs_push_properties()); | 2554 EXPECT_FALSE(layer_src_b_mask->needs_push_properties()); |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2691 EXPECT_EQ(MutableProperty::kNone, impl_layer->mutable_properties()); | 2667 EXPECT_EQ(MutableProperty::kNone, impl_layer->mutable_properties()); |
| 2692 | 2668 |
| 2693 test_layer->PushPropertiesTo(impl_layer.get()); | 2669 test_layer->PushPropertiesTo(impl_layer.get()); |
| 2694 | 2670 |
| 2695 EXPECT_EQ(2lu, impl_layer->element_id()); | 2671 EXPECT_EQ(2lu, impl_layer->element_id()); |
| 2696 EXPECT_EQ(MutableProperty::kTransform, impl_layer->mutable_properties()); | 2672 EXPECT_EQ(MutableProperty::kTransform, impl_layer->mutable_properties()); |
| 2697 } | 2673 } |
| 2698 | 2674 |
| 2699 } // namespace | 2675 } // namespace |
| 2700 } // namespace cc | 2676 } // namespace cc |
| OLD | NEW |