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/trees/layer_tree_host_common.h" | 5 #include "cc/trees/layer_tree_host_common.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <set> | 10 #include <set> |
11 #include <vector> | 11 #include <vector> |
12 | 12 |
13 #include "cc/animation/animation_host.h" | 13 #include "cc/animation/animation_host.h" |
14 #include "cc/animation/animation_id_provider.h" | 14 #include "cc/animation/animation_id_provider.h" |
15 #include "cc/animation/animation_player.h" | |
15 #include "cc/animation/keyframed_animation_curve.h" | 16 #include "cc/animation/keyframed_animation_curve.h" |
16 #include "cc/animation/layer_animation_controller.h" | 17 #include "cc/animation/layer_animation_controller.h" |
17 #include "cc/animation/transform_operations.h" | 18 #include "cc/animation/transform_operations.h" |
18 #include "cc/base/math_util.h" | 19 #include "cc/base/math_util.h" |
19 #include "cc/input/main_thread_scrolling_reason.h" | 20 #include "cc/input/main_thread_scrolling_reason.h" |
20 #include "cc/layers/content_layer_client.h" | 21 #include "cc/layers/content_layer_client.h" |
21 #include "cc/layers/layer.h" | 22 #include "cc/layers/layer.h" |
22 #include "cc/layers/layer_client.h" | 23 #include "cc/layers/layer_client.h" |
23 #include "cc/layers/layer_impl.h" | 24 #include "cc/layers/layer_impl.h" |
24 #include "cc/layers/layer_iterator.h" | 25 #include "cc/layers/layer_iterator.h" |
(...skipping 3489 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3514 gfx::PointF(10.f, 10.f), gfx::Size(100, 100), | 3515 gfx::PointF(10.f, 10.f), gfx::Size(100, 100), |
3515 false, true, false); | 3516 false, true, false); |
3516 SetLayerPropertiesForTesting(grand_child, rotation, gfx::Point3F(), | 3517 SetLayerPropertiesForTesting(grand_child, rotation, gfx::Point3F(), |
3517 gfx::PointF(), gfx::Size(100, 100), false, true, | 3518 gfx::PointF(), gfx::Size(100, 100), false, true, |
3518 false); | 3519 false); |
3519 | 3520 |
3520 ExecuteCalculateDrawProperties(root); | 3521 ExecuteCalculateDrawProperties(root); |
3521 | 3522 |
3522 // Though all layers have invertible transforms, matrix multiplication using | 3523 // Though all layers have invertible transforms, matrix multiplication using |
3523 // floating-point math makes the draw transform uninvertible. | 3524 // floating-point math makes the draw transform uninvertible. |
3524 EXPECT_FALSE(grand_child->DrawTransform().IsInvertible()); | 3525 EXPECT_FALSE(root->layer_tree_impl() |
3526 ->property_trees() | |
3527 ->transform_tree.Node(grand_child->transform_tree_index()) | |
3528 ->data.ancestors_are_invertible); | |
3525 | 3529 |
3526 // CalcDrawProps only skips a subtree when a layer's own transform is | 3530 // CalcDrawProps skips a subtree when a layer's own transform is uninvertible |
3527 // uninvertible, not when its draw transform is invertible, since CDP makes | 3531 EXPECT_EQ(gfx::Rect(), grand_child->visible_layer_rect()); |
3528 // skipping decisions before computing a layer's draw transform. Property | |
3529 // trees make skipping decisions after computing draw transforms, so could be | |
3530 // made to skip layers with an uninvertible draw transform (once CDP is | |
3531 // deleted). | |
3532 EXPECT_EQ(gfx::Rect(grand_child->bounds()), | |
3533 grand_child->visible_layer_rect()); | |
3534 } | 3532 } |
3535 | 3533 |
3536 TEST_F(LayerTreeHostCommonTest, | 3534 TEST_F(LayerTreeHostCommonTest, |
3537 OcclusionForLayerWithUninvertibleDrawTransform) { | 3535 OcclusionForLayerWithUninvertibleDrawTransform) { |
3538 FakeImplTaskRunnerProvider task_runner_provider; | 3536 FakeImplTaskRunnerProvider task_runner_provider; |
3539 TestSharedBitmapManager shared_bitmap_manager; | 3537 TestSharedBitmapManager shared_bitmap_manager; |
3540 TestTaskGraphRunner task_graph_runner; | 3538 TestTaskGraphRunner task_graph_runner; |
3541 scoped_ptr<OutputSurface> output_surface = FakeOutputSurface::Create3d(); | 3539 scoped_ptr<OutputSurface> output_surface = FakeOutputSurface::Create3d(); |
3542 FakeLayerTreeHostImpl host_impl(&task_runner_provider, &shared_bitmap_manager, | 3540 FakeLayerTreeHostImpl host_impl(&task_runner_provider, &shared_bitmap_manager, |
3543 &task_graph_runner); | 3541 &task_graph_runner); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3582 host_impl.InitializeRenderer(output_surface.get()); | 3580 host_impl.InitializeRenderer(output_surface.get()); |
3583 host_impl.active_tree()->BuildPropertyTreesForTesting(); | 3581 host_impl.active_tree()->BuildPropertyTreesForTesting(); |
3584 bool update_lcd_text = false; | 3582 bool update_lcd_text = false; |
3585 host_impl.active_tree()->UpdateDrawProperties(update_lcd_text); | 3583 host_impl.active_tree()->UpdateDrawProperties(update_lcd_text); |
3586 | 3584 |
3587 LayerImpl* grand_child_ptr = | 3585 LayerImpl* grand_child_ptr = |
3588 host_impl.active_tree()->root_layer()->children()[0]->children()[0]; | 3586 host_impl.active_tree()->root_layer()->children()[0]->children()[0]; |
3589 | 3587 |
3590 // Though all layers have invertible transforms, matrix multiplication using | 3588 // Though all layers have invertible transforms, matrix multiplication using |
3591 // floating-point math makes the draw transform uninvertible. | 3589 // floating-point math makes the draw transform uninvertible. |
3592 EXPECT_FALSE(grand_child_ptr->DrawTransform().IsInvertible()); | 3590 EXPECT_FALSE( |
3591 host_impl.active_tree() | |
3592 ->property_trees() | |
3593 ->transform_tree.Node(grand_child_ptr->transform_tree_index()) | |
3594 ->data.ancestors_are_invertible); | |
ajuma
2016/03/24 15:11:59
Hmm. I think what's going wrong here is that we're
| |
3593 | 3595 |
3594 // Since |grand_child| has an uninvertible draw transform, it is treated as | 3596 // Since |grand_child| has an uninvertible draw transform, it is treated as |
3595 // unoccluded (even though |occluding_child| comes later in draw order, and | 3597 // unoccluded (even though |occluding_child| comes later in draw order, and |
3596 // hence potentially occludes it). | 3598 // hence potentially occludes it). |
3597 gfx::Rect layer_bounds = gfx::Rect(grand_child_ptr->bounds()); | 3599 gfx::Rect layer_bounds = gfx::Rect(); |
3598 EXPECT_EQ( | 3600 EXPECT_EQ( |
3599 layer_bounds, | 3601 layer_bounds, |
3600 grand_child_ptr->draw_properties() | 3602 grand_child_ptr->draw_properties() |
3601 .occlusion_in_content_space.GetUnoccludedContentRect(layer_bounds)); | 3603 .occlusion_in_content_space.GetUnoccludedContentRect(layer_bounds)); |
3602 } | 3604 } |
3603 | 3605 |
3604 TEST_F(LayerTreeHostCommonTest, | 3606 TEST_F(LayerTreeHostCommonTest, |
3605 SingularTransformDoesNotPreventClearingDrawProperties) { | 3607 SingularTransformDoesNotPreventClearingDrawProperties) { |
3606 scoped_refptr<Layer> root = Layer::Create(); | 3608 scoped_refptr<Layer> root = Layer::Create(); |
3607 scoped_refptr<LayerWithForcedDrawsContent> child = | 3609 scoped_refptr<LayerWithForcedDrawsContent> child = |
(...skipping 881 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4489 EXPECT_FALSE(back_facing_child->has_render_surface()); | 4491 EXPECT_FALSE(back_facing_child->has_render_surface()); |
4490 EXPECT_TRUE(front_facing_surface->has_render_surface()); | 4492 EXPECT_TRUE(front_facing_surface->has_render_surface()); |
4491 // We expect that a has_render_surface was created but not used. | 4493 // We expect that a has_render_surface was created but not used. |
4492 EXPECT_TRUE(back_facing_surface->has_render_surface()); | 4494 EXPECT_TRUE(back_facing_surface->has_render_surface()); |
4493 EXPECT_FALSE( | 4495 EXPECT_FALSE( |
4494 front_facing_child_of_front_facing_surface->has_render_surface()); | 4496 front_facing_child_of_front_facing_surface->has_render_surface()); |
4495 EXPECT_FALSE(back_facing_child_of_front_facing_surface->has_render_surface()); | 4497 EXPECT_FALSE(back_facing_child_of_front_facing_surface->has_render_surface()); |
4496 EXPECT_FALSE(front_facing_child_of_back_facing_surface->has_render_surface()); | 4498 EXPECT_FALSE(front_facing_child_of_back_facing_surface->has_render_surface()); |
4497 EXPECT_FALSE(back_facing_child_of_back_facing_surface->has_render_surface()); | 4499 EXPECT_FALSE(back_facing_child_of_back_facing_surface->has_render_surface()); |
4498 | 4500 |
4499 EXPECT_EQ(3u, update_layer_list_impl()->size()); | 4501 EXPECT_EQ(4u, update_layer_list_impl()->size()); |
4500 | 4502 |
4501 EXPECT_TRUE(UpdateLayerListImplContains(front_facing_child->id())); | 4503 EXPECT_TRUE(UpdateLayerListImplContains(front_facing_child->id())); |
4502 EXPECT_TRUE(UpdateLayerListImplContains(front_facing_surface->id())); | 4504 EXPECT_TRUE(UpdateLayerListImplContains(front_facing_surface->id())); |
4503 EXPECT_TRUE(UpdateLayerListImplContains( | 4505 EXPECT_TRUE(UpdateLayerListImplContains( |
4504 front_facing_child_of_front_facing_surface->id())); | 4506 front_facing_child_of_front_facing_surface->id())); |
4505 } | 4507 } |
4506 | 4508 |
4507 TEST_F(LayerTreeHostCommonTest, BackFaceCullingWithAnimatingTransforms) { | 4509 TEST_F(LayerTreeHostCommonTest, BackFaceCullingWithAnimatingTransforms) { |
4508 // Verify that layers are appropriately culled when their back face is showing | 4510 // Verify that layers are appropriately culled when their back face is showing |
4509 // and they are not double sided, while animations are going on. | 4511 // and they are not double sided, while animations are going on. |
(...skipping 1332 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5842 | 5844 |
5843 std::vector<scoped_ptr<CopyOutputRequest>> copy_requests; | 5845 std::vector<scoped_ptr<CopyOutputRequest>> copy_requests; |
5844 copy_requests.push_back( | 5846 copy_requests.push_back( |
5845 CopyOutputRequest::CreateRequest(base::Bind(&EmptyCopyOutputCallback))); | 5847 CopyOutputRequest::CreateRequest(base::Bind(&EmptyCopyOutputCallback))); |
5846 copy_layer->PassCopyRequests(©_requests); | 5848 copy_layer->PassCopyRequests(©_requests); |
5847 EXPECT_TRUE(copy_layer->HasCopyRequest()); | 5849 EXPECT_TRUE(copy_layer->HasCopyRequest()); |
5848 | 5850 |
5849 copy_layer->AddChild(std::move(copy_child)); | 5851 copy_layer->AddChild(std::move(copy_child)); |
5850 copy_parent->AddChild(std::move(copy_layer)); | 5852 copy_parent->AddChild(std::move(copy_layer)); |
5851 root->AddChild(std::move(copy_parent)); | 5853 root->AddChild(std::move(copy_parent)); |
5852 host_impl.pending_tree()->SetRootLayer(std::move(root)); | |
5853 LayerImpl* root_ptr = host_impl.pending_tree()->root_layer(); | |
5854 | 5854 |
5855 LayerImplList render_surface_layer_list; | 5855 LayerImplList render_surface_layer_list; |
5856 root_ptr->layer_tree_impl()->IncrementRenderSurfaceListIdForTesting(); | 5856 root->layer_tree_impl()->IncrementRenderSurfaceListIdForTesting(); |
5857 LayerImpl* root_layer = root.get(); | |
5858 root->layer_tree_impl()->SetRootLayer(std::move(root)); | |
ajuma
2016/03/24 15:11:59
This changes (renaming root_ptr and so on) seem co
sunxd
2016/03/29 14:26:34
Ah, yes, it is a result of rebasing. Because in ot
| |
5857 LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs( | 5859 LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs( |
5858 root_ptr, root_ptr->bounds(), &render_surface_layer_list, | 5860 root_layer, root_layer->bounds(), &render_surface_layer_list, |
5859 root_ptr->layer_tree_impl()->current_render_surface_list_id()); | 5861 root_layer->layer_tree_impl()->current_render_surface_list_id()); |
5860 inputs.can_adjust_raster_scales = true; | 5862 inputs.can_adjust_raster_scales = true; |
5861 LayerTreeHostCommon::CalculateDrawProperties(&inputs); | 5863 LayerTreeHostCommon::CalculateDrawProperties(&inputs); |
5862 | 5864 |
5863 // We should have two render surface, as the others are clipped out. | 5865 // We should have two render surface, as the others are clipped out. |
5864 ASSERT_EQ(2u, render_surface_layer_list.size()); | 5866 ASSERT_EQ(2u, render_surface_layer_list.size()); |
5865 EXPECT_EQ(root_ptr->id(), render_surface_layer_list.at(0)->id()); | 5867 EXPECT_EQ(root_layer->id(), render_surface_layer_list.at(0)->id()); |
5866 | 5868 |
5867 // The root render surface should only have 2 contributing layer, since the | 5869 // The root render surface should only have 2 contributing layer, since the |
5868 // other layers are empty/clipped away. | 5870 // other layers are empty/clipped away. |
5869 ASSERT_EQ(2u, root_ptr->render_surface()->layer_list().size()); | 5871 ASSERT_EQ(2u, root_layer->render_surface()->layer_list().size()); |
5870 EXPECT_EQ(root_ptr->id(), | 5872 EXPECT_EQ(root_layer->id(), |
5871 root_ptr->render_surface()->layer_list().at(0)->id()); | 5873 root_layer->render_surface()->layer_list().at(0)->id()); |
5872 } | 5874 } |
5873 | 5875 |
5874 TEST_F(LayerTreeHostCommonTest, VisibleContentRectInsideSurface) { | 5876 TEST_F(LayerTreeHostCommonTest, VisibleContentRectInsideSurface) { |
5875 FakeImplTaskRunnerProvider task_runner_provider; | 5877 FakeImplTaskRunnerProvider task_runner_provider; |
5876 TestSharedBitmapManager shared_bitmap_manager; | 5878 TestSharedBitmapManager shared_bitmap_manager; |
5877 TestTaskGraphRunner task_graph_runner; | 5879 TestTaskGraphRunner task_graph_runner; |
5878 FakeLayerTreeHostImpl host_impl(&task_runner_provider, &shared_bitmap_manager, | 5880 FakeLayerTreeHostImpl host_impl(&task_runner_provider, &shared_bitmap_manager, |
5879 &task_graph_runner); | 5881 &task_graph_runner); |
5880 host_impl.CreatePendingTree(); | 5882 host_impl.CreatePendingTree(); |
5881 const gfx::Transform identity_matrix; | 5883 const gfx::Transform identity_matrix; |
(...skipping 526 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
6408 SetLayerPropertiesForTesting(child3.get(), identity_matrix, transform_origin, | 6410 SetLayerPropertiesForTesting(child3.get(), identity_matrix, transform_origin, |
6409 position, bounds, true, false, false); | 6411 position, bounds, true, false, false); |
6410 child3->SetDrawsContent(true); | 6412 child3->SetDrawsContent(true); |
6411 | 6413 |
6412 child2->Set3dSortingContextId(1); | 6414 child2->Set3dSortingContextId(1); |
6413 child3->Set3dSortingContextId(1); | 6415 child3->Set3dSortingContextId(1); |
6414 | 6416 |
6415 child2->AddChild(std::move(child3)); | 6417 child2->AddChild(std::move(child3)); |
6416 child1->AddChild(std::move(child2)); | 6418 child1->AddChild(std::move(child2)); |
6417 root->AddChild(std::move(child1)); | 6419 root->AddChild(std::move(child1)); |
6418 host_impl.active_tree()->SetRootLayer(std::move(root)); | 6420 LayerImpl* root_layer = root.get(); |
6419 LayerImpl* root_ptr = host_impl.active_tree()->root_layer(); | 6421 root->layer_tree_impl()->SetRootLayer(std::move(root)); |
6420 | 6422 |
6421 { | 6423 { |
6422 LayerImplList render_surface_layer_list; | 6424 LayerImplList render_surface_layer_list; |
6423 FakeLayerTreeHostImpl::RecursiveUpdateNumChildren(root_ptr); | 6425 FakeLayerTreeHostImpl::RecursiveUpdateNumChildren(root_layer); |
6424 root_ptr->layer_tree_impl()->IncrementRenderSurfaceListIdForTesting(); | 6426 root_layer->layer_tree_impl()->IncrementRenderSurfaceListIdForTesting(); |
6425 LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs( | 6427 LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs( |
6426 root_ptr, root_ptr->bounds(), &render_surface_layer_list, | 6428 root_layer, root_layer->bounds(), &render_surface_layer_list, |
6427 root_ptr->layer_tree_impl()->current_render_surface_list_id()); | 6429 root_layer->layer_tree_impl()->current_render_surface_list_id()); |
6428 inputs.can_render_to_separate_surface = true; | 6430 inputs.can_render_to_separate_surface = true; |
6429 LayerTreeHostCommon::CalculateDrawProperties(&inputs); | 6431 LayerTreeHostCommon::CalculateDrawProperties(&inputs); |
6430 | 6432 |
6431 EXPECT_EQ(2u, render_surface_layer_list.size()); | 6433 EXPECT_EQ(2u, render_surface_layer_list.size()); |
6432 | 6434 |
6433 int count_represents_target_render_surface = 0; | 6435 int count_represents_target_render_surface = 0; |
6434 int count_represents_contributing_render_surface = 0; | 6436 int count_represents_contributing_render_surface = 0; |
6435 int count_represents_itself = 0; | 6437 int count_represents_itself = 0; |
6436 LayerIterator end = LayerIterator::End(&render_surface_layer_list); | 6438 LayerIterator end = LayerIterator::End(&render_surface_layer_list); |
6437 for (LayerIterator it = LayerIterator::Begin(&render_surface_layer_list); | 6439 for (LayerIterator it = LayerIterator::Begin(&render_surface_layer_list); |
6438 it != end; ++it) { | 6440 it != end; ++it) { |
6439 if (it.represents_target_render_surface()) | 6441 if (it.represents_target_render_surface()) |
6440 count_represents_target_render_surface++; | 6442 count_represents_target_render_surface++; |
6441 if (it.represents_contributing_render_surface()) | 6443 if (it.represents_contributing_render_surface()) |
6442 count_represents_contributing_render_surface++; | 6444 count_represents_contributing_render_surface++; |
6443 if (it.represents_itself()) | 6445 if (it.represents_itself()) |
6444 count_represents_itself++; | 6446 count_represents_itself++; |
6445 } | 6447 } |
6446 | 6448 |
6447 // Two render surfaces. | 6449 // Two render surfaces. |
6448 EXPECT_EQ(2, count_represents_target_render_surface); | 6450 EXPECT_EQ(2, count_represents_target_render_surface); |
6449 // Second render surface contributes to root render surface. | 6451 // Second render surface contributes to root render surface. |
6450 EXPECT_EQ(1, count_represents_contributing_render_surface); | 6452 EXPECT_EQ(1, count_represents_contributing_render_surface); |
6451 // All 4 layers represent itself. | 6453 // All 4 layers represent itself. |
6452 EXPECT_EQ(4, count_represents_itself); | 6454 EXPECT_EQ(4, count_represents_itself); |
6453 } | 6455 } |
6454 | 6456 |
6455 { | 6457 { |
6456 LayerImplList render_surface_layer_list; | 6458 LayerImplList render_surface_layer_list; |
6457 root_ptr->layer_tree_impl()->IncrementRenderSurfaceListIdForTesting(); | 6459 root_layer->layer_tree_impl()->IncrementRenderSurfaceListIdForTesting(); |
6458 LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs( | 6460 LayerTreeHostCommon::CalcDrawPropsImplInputsForTesting inputs( |
6459 root_ptr, root_ptr->bounds(), &render_surface_layer_list, | 6461 root_layer, root_layer->bounds(), &render_surface_layer_list, |
6460 root_ptr->layer_tree_impl()->current_render_surface_list_id()); | 6462 root_layer->layer_tree_impl()->current_render_surface_list_id()); |
6461 inputs.can_render_to_separate_surface = false; | 6463 inputs.can_render_to_separate_surface = false; |
6462 LayerTreeHostCommon::CalculateDrawProperties(&inputs); | 6464 LayerTreeHostCommon::CalculateDrawProperties(&inputs); |
6463 | 6465 |
6464 EXPECT_EQ(1u, render_surface_layer_list.size()); | 6466 EXPECT_EQ(1u, render_surface_layer_list.size()); |
6465 | 6467 |
6466 int count_represents_target_render_surface = 0; | 6468 int count_represents_target_render_surface = 0; |
6467 int count_represents_contributing_render_surface = 0; | 6469 int count_represents_contributing_render_surface = 0; |
6468 int count_represents_itself = 0; | 6470 int count_represents_itself = 0; |
6469 LayerIterator end = LayerIterator::End(&render_surface_layer_list); | 6471 LayerIterator end = LayerIterator::End(&render_surface_layer_list); |
6470 for (LayerIterator it = LayerIterator::Begin(&render_surface_layer_list); | 6472 for (LayerIterator it = LayerIterator::Begin(&render_surface_layer_list); |
(...skipping 873 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
7344 AnimationScaleFactorTrackingLayerImpl::Create(host_impl.active_tree(), 4); | 7346 AnimationScaleFactorTrackingLayerImpl::Create(host_impl.active_tree(), 4); |
7345 | 7347 |
7346 AnimationScaleFactorTrackingLayerImpl* parent_raw = parent.get(); | 7348 AnimationScaleFactorTrackingLayerImpl* parent_raw = parent.get(); |
7347 AnimationScaleFactorTrackingLayerImpl* child_raw = child.get(); | 7349 AnimationScaleFactorTrackingLayerImpl* child_raw = child.get(); |
7348 AnimationScaleFactorTrackingLayerImpl* grand_child_raw = grand_child.get(); | 7350 AnimationScaleFactorTrackingLayerImpl* grand_child_raw = grand_child.get(); |
7349 AnimationScaleFactorTrackingLayerImpl* grand_parent_raw = grand_parent.get(); | 7351 AnimationScaleFactorTrackingLayerImpl* grand_parent_raw = grand_parent.get(); |
7350 | 7352 |
7351 child->AddChild(std::move(grand_child)); | 7353 child->AddChild(std::move(grand_child)); |
7352 parent->AddChild(std::move(child)); | 7354 parent->AddChild(std::move(child)); |
7353 grand_parent->AddChild(std::move(parent)); | 7355 grand_parent->AddChild(std::move(parent)); |
7354 host_impl.active_tree()->SetRootLayer(std::move(grand_parent)); | |
7355 | 7356 |
7356 SetLayerPropertiesForTesting(grand_parent_raw, identity_matrix, | 7357 SetLayerPropertiesForTesting(grand_parent_raw, identity_matrix, |
7357 gfx::Point3F(), gfx::PointF(), gfx::Size(1, 2), | 7358 gfx::Point3F(), gfx::PointF(), gfx::Size(1, 2), |
7358 true, false, true); | 7359 true, false, true); |
7359 SetLayerPropertiesForTesting(parent_raw, identity_matrix, gfx::Point3F(), | 7360 SetLayerPropertiesForTesting(parent_raw, identity_matrix, gfx::Point3F(), |
7360 gfx::PointF(), gfx::Size(1, 2), true, false, | 7361 gfx::PointF(), gfx::Size(1, 2), true, false, |
7361 false); | 7362 false); |
7362 SetLayerPropertiesForTesting(child_raw, identity_matrix, gfx::Point3F(), | 7363 SetLayerPropertiesForTesting(child_raw, identity_matrix, gfx::Point3F(), |
7363 gfx::PointF(), gfx::Size(1, 2), true, false, | 7364 gfx::PointF(), gfx::Size(1, 2), true, false, |
7364 false); | 7365 false); |
7365 | 7366 |
7366 SetLayerPropertiesForTesting(grand_child_raw, identity_matrix, gfx::Point3F(), | 7367 SetLayerPropertiesForTesting(grand_child_raw, identity_matrix, gfx::Point3F(), |
7367 gfx::PointF(), gfx::Size(1, 2), true, false, | 7368 gfx::PointF(), gfx::Size(1, 2), true, false, |
7368 false); | 7369 false); |
7369 | 7370 |
7371 host_impl.active_tree()->SetRootLayer(std::move(grand_parent)); | |
7372 | |
7370 ExecuteCalculateDrawProperties(grand_parent_raw); | 7373 ExecuteCalculateDrawProperties(grand_parent_raw); |
7371 | 7374 |
7372 // No layers have animations. | 7375 // No layers have animations. |
7373 EXPECT_EQ( | 7376 EXPECT_EQ( |
7374 0.f, | 7377 0.f, |
7375 grand_parent_raw->draw_properties().maximum_animation_contents_scale); | 7378 grand_parent_raw->draw_properties().maximum_animation_contents_scale); |
7376 EXPECT_EQ(0.f, | 7379 EXPECT_EQ(0.f, |
7377 parent_raw->draw_properties().maximum_animation_contents_scale); | 7380 parent_raw->draw_properties().maximum_animation_contents_scale); |
7378 EXPECT_EQ(0.f, child_raw->draw_properties().maximum_animation_contents_scale); | 7381 EXPECT_EQ(0.f, child_raw->draw_properties().maximum_animation_contents_scale); |
7379 EXPECT_EQ( | 7382 EXPECT_EQ( |
(...skipping 1498 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
8878 scoped_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)), | 8881 scoped_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)), |
8879 animation_id, 1, TargetProperty::OPACITY); | 8882 animation_id, 1, TargetProperty::OPACITY); |
8880 animation->set_fill_mode(Animation::FILL_MODE_NONE); | 8883 animation->set_fill_mode(Animation::FILL_MODE_NONE); |
8881 animation->set_time_offset(base::TimeDelta::FromMilliseconds(-1000)); | 8884 animation->set_time_offset(base::TimeDelta::FromMilliseconds(-1000)); |
8882 AddAnimationToLayerWithExistingPlayer(child->id(), timeline(), | 8885 AddAnimationToLayerWithExistingPlayer(child->id(), timeline(), |
8883 std::move(animation)); | 8886 std::move(animation)); |
8884 ExecuteCalculateDrawPropertiesWithPropertyTrees(root.get()); | 8887 ExecuteCalculateDrawPropertiesWithPropertyTrees(root.get()); |
8885 EXPECT_EQ(gfx::Rect(10, 10), grandchild->visible_layer_rect()); | 8888 EXPECT_EQ(gfx::Rect(10, 10), grandchild->visible_layer_rect()); |
8886 } | 8889 } |
8887 | 8890 |
8888 TEST_F(LayerTreeHostCommonTest, SkippingSubtreeImpl) { | 8891 TEST_F(LayerTreeHostCommonTest, SkippingLayerImpl) { |
8889 FakeImplTaskRunnerProvider task_runner_provider; | 8892 FakeImplTaskRunnerProvider task_runner_provider; |
8890 TestSharedBitmapManager shared_bitmap_manager; | 8893 TestSharedBitmapManager shared_bitmap_manager; |
8891 TestTaskGraphRunner task_graph_runner; | 8894 TestTaskGraphRunner task_graph_runner; |
8892 FakeLayerTreeHostImpl host_impl(&task_runner_provider, &shared_bitmap_manager, | 8895 FakeLayerTreeHostImpl host_impl(&task_runner_provider, &shared_bitmap_manager, |
8893 &task_graph_runner); | 8896 &task_graph_runner); |
8894 | 8897 |
8895 gfx::Transform identity; | 8898 gfx::Transform identity; |
8896 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl.active_tree(), 1); | 8899 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl.active_tree(), 1); |
8897 scoped_ptr<LayerImpl> child = LayerImpl::Create(host_impl.active_tree(), 2); | 8900 scoped_ptr<LayerImpl> child = LayerImpl::Create(host_impl.active_tree(), 2); |
8898 scoped_ptr<LayerImpl> grandchild = | 8901 scoped_ptr<LayerImpl> grandchild = |
(...skipping 28 matching lines...) Expand all Loading... | |
8927 ExecuteCalculateDrawPropertiesWithPropertyTrees(root_ptr); | 8930 ExecuteCalculateDrawPropertiesWithPropertyTrees(root_ptr); |
8928 EXPECT_EQ(gfx::Rect(10, 10), grandchild_ptr->visible_layer_rect()); | 8931 EXPECT_EQ(gfx::Rect(10, 10), grandchild_ptr->visible_layer_rect()); |
8929 | 8932 |
8930 // Now we will reset the visible rect from property trees for the grandchild, | 8933 // Now we will reset the visible rect from property trees for the grandchild, |
8931 // and we will configure |child| in several ways that should force the subtree | 8934 // and we will configure |child| in several ways that should force the subtree |
8932 // to be skipped. The visible content rect for |grandchild| should, therefore, | 8935 // to be skipped. The visible content rect for |grandchild| should, therefore, |
8933 // remain empty. | 8936 // remain empty. |
8934 grandchild_ptr->set_visible_layer_rect(gfx::Rect()); | 8937 grandchild_ptr->set_visible_layer_rect(gfx::Rect()); |
8935 gfx::Transform singular; | 8938 gfx::Transform singular; |
8936 singular.matrix().set(0, 0, 0); | 8939 singular.matrix().set(0, 0, 0); |
8940 singular.matrix().set(0, 1, 1); | |
ajuma
2016/03/24 15:11:59
Is this needed? It looks like the matrix is non-in
sunxd
2016/03/29 14:26:34
The problem here is that a transform matrix
0 0 0
| |
8937 | 8941 |
8938 child_ptr->SetTransform(singular); | 8942 child_ptr->SetTransform(singular); |
8943 host_impl.active_tree()->property_trees()->needs_rebuild = true; | |
8939 ExecuteCalculateDrawPropertiesWithPropertyTrees(root_ptr); | 8944 ExecuteCalculateDrawPropertiesWithPropertyTrees(root_ptr); |
8940 EXPECT_EQ(gfx::Rect(0, 0), grandchild_ptr->visible_layer_rect()); | 8945 EXPECT_EQ(gfx::Rect(0, 0), grandchild_ptr->visible_layer_rect()); |
8941 child_ptr->SetTransform(identity); | 8946 child_ptr->SetTransform(identity); |
8942 | 8947 |
8943 child_ptr->SetHideLayerAndSubtree(true); | 8948 child_ptr->SetHideLayerAndSubtree(true); |
8944 ExecuteCalculateDrawPropertiesWithPropertyTrees(root_ptr); | 8949 ExecuteCalculateDrawPropertiesWithPropertyTrees(root_ptr); |
8945 EXPECT_EQ(gfx::Rect(0, 0), grandchild_ptr->visible_layer_rect()); | 8950 EXPECT_EQ(gfx::Rect(0, 0), grandchild_ptr->visible_layer_rect()); |
8946 child_ptr->SetHideLayerAndSubtree(false); | 8951 child_ptr->SetHideLayerAndSubtree(false); |
8947 | 8952 |
8948 child_ptr->SetOpacity(0.f); | 8953 child_ptr->SetOpacity(0.f); |
8949 ExecuteCalculateDrawPropertiesWithPropertyTrees(root_ptr); | 8954 ExecuteCalculateDrawPropertiesWithPropertyTrees(root_ptr); |
8950 EXPECT_EQ(gfx::Rect(0, 0), grandchild_ptr->visible_layer_rect()); | 8955 EXPECT_EQ(gfx::Rect(0, 0), grandchild_ptr->visible_layer_rect()); |
8956 child_ptr->SetOpacity(1.f); | |
8951 | 8957 |
8958 root_ptr->SetTransform(singular); | |
sunxd
2016/03/30 15:21:34
Add comment
| |
8959 child_ptr->SetScrollClipLayer(root_ptr->id()); | |
ajuma
2016/03/24 15:11:59
This test doesn't seem to involve scrolling at all
sunxd
2016/03/29 14:26:34
This is for creating a transform_node for child, o
| |
8960 host_impl.active_tree()->property_trees()->needs_rebuild = true; | |
8961 ExecuteCalculateDrawPropertiesWithPropertyTrees(root_ptr); | |
8962 EXPECT_EQ(gfx::Rect(0, 0), grandchild_ptr->visible_layer_rect()); | |
8963 root_ptr->SetTransform(identity); | |
8964 child_ptr->SetScrollClipLayer(-1); | |
8965 | |
8966 root_ptr->SetOpacity(0.f); | |
8967 child_ptr->SetOpacity(0.7f); | |
8968 host_impl.active_tree()->property_trees()->needs_rebuild = true; | |
8969 ExecuteCalculateDrawPropertiesWithPropertyTrees(root_ptr); | |
8970 EXPECT_EQ(gfx::Rect(0, 0), grandchild_ptr->visible_layer_rect()); | |
8971 root_ptr->SetOpacity(1.f); | |
8972 | |
8973 child_ptr->SetOpacity(0.f); | |
8952 // Now, even though child has zero opacity, we will configure |grandchild| and | 8974 // Now, even though child has zero opacity, we will configure |grandchild| and |
8953 // |greatgrandchild| in several ways that should force the subtree to be | 8975 // |greatgrandchild| in several ways that should force the subtree to be |
8954 // processed anyhow. | 8976 // processed anyhow. |
8955 std::vector<scoped_ptr<CopyOutputRequest>> requests; | 8977 std::vector<scoped_ptr<CopyOutputRequest>> requests; |
8956 requests.push_back(CopyOutputRequest::CreateEmptyRequest()); | 8978 requests.push_back(CopyOutputRequest::CreateEmptyRequest()); |
8957 | 8979 |
8958 grandchild_ptr->PassCopyRequests(&requests); | 8980 grandchild_ptr->PassCopyRequests(&requests); |
8959 root_ptr->layer_tree_impl()->property_trees()->needs_rebuild = true; | 8981 root_ptr->layer_tree_impl()->property_trees()->needs_rebuild = true; |
8960 ExecuteCalculateDrawPropertiesWithPropertyTrees(root_ptr); | 8982 ExecuteCalculateDrawPropertiesWithPropertyTrees(root_ptr); |
8961 EXPECT_EQ(gfx::Rect(10, 10), grandchild_ptr->visible_layer_rect()); | 8983 EXPECT_EQ(gfx::Rect(10, 10), grandchild_ptr->visible_layer_rect()); |
8984 | |
8985 scoped_ptr<KeyframedTransformAnimationCurve> curve( | |
8986 KeyframedTransformAnimationCurve::Create()); | |
8987 TransformOperations start; | |
8988 start.AppendTranslate(1.f, 2.f, 3.f); | |
8989 gfx::Transform transform; | |
8990 transform.Scale3d(1.0, 2.0, 3.0); | |
8991 TransformOperations operation; | |
8992 operation.AppendMatrix(transform); | |
8993 curve->AddKeyframe( | |
8994 TransformKeyframe::Create(base::TimeDelta(), start, nullptr)); | |
8995 curve->AddKeyframe(TransformKeyframe::Create( | |
8996 base::TimeDelta::FromSecondsD(1.0), operation, nullptr)); | |
8997 scoped_ptr<Animation> transform_animation( | |
8998 Animation::Create(std::move(curve), 3, 3, TargetProperty::TRANSFORM)); | |
8999 scoped_refptr<AnimationPlayer> player(AnimationPlayer::Create(1)); | |
9000 host_impl.active_tree()->animation_host()->RegisterPlayerForLayer( | |
9001 root_ptr->id(), player.get()); | |
9002 host_impl.active_tree() | |
9003 ->animation_host() | |
9004 ->GetControllerForLayerId(root_ptr->id()) | |
9005 ->AddAnimation(std::move(transform_animation)); | |
9006 grandchild_ptr->set_visible_layer_rect(gfx::Rect()); | |
9007 child_ptr->SetScrollClipLayer(root_ptr->id()); | |
9008 root_ptr->SetTransform(singular); | |
9009 child_ptr->SetTransform(singular); | |
9010 root_ptr->layer_tree_impl()->property_trees()->needs_rebuild = true; | |
9011 ExecuteCalculateDrawPropertiesWithPropertyTrees(root_ptr); | |
9012 EXPECT_EQ(gfx::Rect(10, 10), grandchild_ptr->visible_layer_rect()); | |
9013 | |
9014 host_impl.active_tree()->animation_host()->UnregisterPlayerForLayer( | |
9015 root_ptr->id(), player.get()); | |
9016 } | |
9017 | |
9018 TEST_F(LayerTreeHostCommonTest, SkippingPendingLayerImpl) { | |
9019 FakeImplTaskRunnerProvider task_runner_provider; | |
9020 TestSharedBitmapManager shared_bitmap_manager; | |
9021 TestTaskGraphRunner task_graph_runner; | |
9022 FakeLayerTreeHostImpl host_impl(&task_runner_provider, &shared_bitmap_manager, | |
9023 &task_graph_runner); | |
9024 | |
9025 gfx::Transform identity; | |
9026 host_impl.CreatePendingTree(); | |
9027 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl.pending_tree(), 1); | |
9028 scoped_ptr<LayerImpl> child = LayerImpl::Create(host_impl.pending_tree(), 2); | |
9029 scoped_ptr<LayerImpl> grandchild = | |
9030 LayerImpl::Create(host_impl.pending_tree(), 3); | |
9031 | |
9032 scoped_ptr<FakePictureLayerImpl> greatgrandchild( | |
9033 FakePictureLayerImpl::Create(host_impl.pending_tree(), 4)); | |
9034 | |
9035 child->SetDrawsContent(true); | |
9036 grandchild->SetDrawsContent(true); | |
9037 greatgrandchild->SetDrawsContent(true); | |
9038 | |
9039 SetLayerPropertiesForTesting(root.get(), identity, gfx::Point3F(), | |
9040 gfx::PointF(), gfx::Size(100, 100), true, false, | |
9041 true); | |
9042 SetLayerPropertiesForTesting(child.get(), identity, gfx::Point3F(), | |
9043 gfx::PointF(), gfx::Size(10, 10), true, false, | |
9044 false); | |
9045 SetLayerPropertiesForTesting(grandchild.get(), identity, gfx::Point3F(), | |
9046 gfx::PointF(), gfx::Size(10, 10), true, false, | |
9047 false); | |
9048 | |
9049 LayerImpl* root_ptr = root.get(); | |
9050 LayerImpl* grandchild_ptr = grandchild.get(); | |
9051 | |
9052 child->AddChild(std::move(grandchild)); | |
9053 root->AddChild(std::move(child)); | |
9054 | |
9055 host_impl.pending_tree()->SetRootLayer(std::move(root)); | |
9056 | |
9057 // Check the non-skipped case. | |
9058 ExecuteCalculateDrawPropertiesWithPropertyTrees(root_ptr); | |
9059 EXPECT_EQ(gfx::Rect(10, 10), grandchild_ptr->visible_layer_rect()); | |
9060 | |
9061 scoped_ptr<KeyframedFloatAnimationCurve> curve( | |
9062 KeyframedFloatAnimationCurve::Create()); | |
9063 scoped_ptr<TimingFunction> func = EaseTimingFunction::Create(); | |
9064 curve->AddKeyframe( | |
9065 FloatKeyframe::Create(base::TimeDelta(), 0.9f, std::move(func))); | |
9066 curve->AddKeyframe( | |
9067 FloatKeyframe::Create(base::TimeDelta::FromSecondsD(1.0), 0.3f, nullptr)); | |
9068 scoped_ptr<Animation> animation( | |
9069 Animation::Create(std::move(curve), 3, 3, TargetProperty::OPACITY)); | |
9070 scoped_refptr<AnimationPlayer> player(AnimationPlayer::Create(1)); | |
9071 host_impl.active_tree()->animation_host()->RegisterPlayerForLayer( | |
9072 root_ptr->id(), player.get()); | |
9073 host_impl.active_tree() | |
9074 ->animation_host() | |
9075 ->GetControllerForLayerId(root_ptr->id()) | |
9076 ->AddAnimation(std::move(animation)); | |
9077 grandchild_ptr->set_visible_layer_rect(gfx::Rect()); | |
9078 root_ptr->layer_tree_impl()->property_trees()->needs_rebuild = true; | |
9079 ExecuteCalculateDrawPropertiesWithPropertyTrees(root_ptr); | |
9080 EXPECT_EQ(gfx::Rect(10, 10), grandchild_ptr->visible_layer_rect()); | |
9081 | |
9082 host_impl.active_tree()->animation_host()->UnregisterPlayerForLayer( | |
9083 root_ptr->id(), player.get()); | |
8962 } | 9084 } |
8963 | 9085 |
8964 TEST_F(LayerTreeHostCommonTest, SkippingLayer) { | 9086 TEST_F(LayerTreeHostCommonTest, SkippingLayer) { |
8965 gfx::Transform identity; | 9087 gfx::Transform identity; |
8966 scoped_refptr<Layer> root = Layer::Create(); | 9088 scoped_refptr<Layer> root = Layer::Create(); |
8967 FakeContentLayerClient client; | 9089 FakeContentLayerClient client; |
8968 client.set_bounds(root->bounds()); | 9090 client.set_bounds(root->bounds()); |
8969 scoped_refptr<LayerWithForcedDrawsContent> child = | 9091 scoped_refptr<LayerWithForcedDrawsContent> child = |
8970 make_scoped_refptr(new LayerWithForcedDrawsContent()); | 9092 make_scoped_refptr(new LayerWithForcedDrawsContent()); |
8971 SetLayerPropertiesForTesting(root.get(), identity, gfx::Point3F(), | 9093 SetLayerPropertiesForTesting(root.get(), identity, gfx::Point3F(), |
(...skipping 1027 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
9999 EXPECT_EQ(scroll_child6.id, grand_child10->scroll_tree_index()); | 10121 EXPECT_EQ(scroll_child6.id, grand_child10->scroll_tree_index()); |
10000 EXPECT_EQ(scroll_root1.id, parent3->scroll_tree_index()); | 10122 EXPECT_EQ(scroll_root1.id, parent3->scroll_tree_index()); |
10001 EXPECT_EQ(scroll_child7.id, child8->scroll_tree_index()); | 10123 EXPECT_EQ(scroll_child7.id, child8->scroll_tree_index()); |
10002 EXPECT_EQ(scroll_root1.id, parent4->scroll_tree_index()); | 10124 EXPECT_EQ(scroll_root1.id, parent4->scroll_tree_index()); |
10003 EXPECT_EQ(scroll_root1.id, child9->scroll_tree_index()); | 10125 EXPECT_EQ(scroll_root1.id, child9->scroll_tree_index()); |
10004 EXPECT_EQ(scroll_root1.id, grand_child12->scroll_tree_index()); | 10126 EXPECT_EQ(scroll_root1.id, grand_child12->scroll_tree_index()); |
10005 } | 10127 } |
10006 | 10128 |
10007 } // namespace | 10129 } // namespace |
10008 } // namespace cc | 10130 } // namespace cc |
OLD | NEW |