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 screen space transform is |
3527 // uninvertible, not when its draw transform is invertible, since CDP makes | 3531 // uninvertible |
3528 // skipping decisions before computing a layer's draw transform. Property | 3532 EXPECT_EQ(gfx::Rect(), grand_child->visible_layer_rect()); |
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 } | 3533 } |
3535 | 3534 |
3536 TEST_F(LayerTreeHostCommonTest, | 3535 TEST_F(LayerTreeHostCommonTest, |
3537 OcclusionForLayerWithUninvertibleDrawTransform) { | 3536 OcclusionForLayerWithUninvertibleDrawTransform) { |
3538 FakeImplTaskRunnerProvider task_runner_provider; | 3537 FakeImplTaskRunnerProvider task_runner_provider; |
3539 TestSharedBitmapManager shared_bitmap_manager; | 3538 TestSharedBitmapManager shared_bitmap_manager; |
3540 TestTaskGraphRunner task_graph_runner; | 3539 TestTaskGraphRunner task_graph_runner; |
3541 scoped_ptr<OutputSurface> output_surface = FakeOutputSurface::Create3d(); | 3540 scoped_ptr<OutputSurface> output_surface = FakeOutputSurface::Create3d(); |
3542 FakeLayerTreeHostImpl host_impl(&task_runner_provider, &shared_bitmap_manager, | 3541 FakeLayerTreeHostImpl host_impl(&task_runner_provider, &shared_bitmap_manager, |
3543 &task_graph_runner); | 3542 &task_graph_runner); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3582 host_impl.InitializeRenderer(output_surface.get()); | 3581 host_impl.InitializeRenderer(output_surface.get()); |
3583 host_impl.active_tree()->BuildPropertyTreesForTesting(); | 3582 host_impl.active_tree()->BuildPropertyTreesForTesting(); |
3584 bool update_lcd_text = false; | 3583 bool update_lcd_text = false; |
3585 host_impl.active_tree()->UpdateDrawProperties(update_lcd_text); | 3584 host_impl.active_tree()->UpdateDrawProperties(update_lcd_text); |
3586 | 3585 |
3587 LayerImpl* grand_child_ptr = | 3586 LayerImpl* grand_child_ptr = |
3588 host_impl.active_tree()->root_layer()->children()[0]->children()[0]; | 3587 host_impl.active_tree()->root_layer()->children()[0]->children()[0]; |
3589 | 3588 |
3590 // Though all layers have invertible transforms, matrix multiplication using | 3589 // Though all layers have invertible transforms, matrix multiplication using |
3591 // floating-point math makes the draw transform uninvertible. | 3590 // floating-point math makes the draw transform uninvertible. |
3592 EXPECT_FALSE(grand_child_ptr->DrawTransform().IsInvertible()); | 3591 EXPECT_FALSE( |
3592 host_impl.active_tree() | |
3593 ->property_trees() | |
3594 ->transform_tree.Node(grand_child_ptr->transform_tree_index()) | |
3595 ->data.ancestors_are_invertible); | |
3593 | 3596 |
3594 // Since |grand_child| has an uninvertible draw transform, it is treated as | 3597 // Since |grand_child| has an univertible draw transform, it is skipped so |
ajuma
2016/03/31 19:22:32
uninvertible (missing 'n')
Also, replace "draw tra
sunxd
2016/04/01 17:57:45
Done.
| |
3595 // unoccluded (even though |occluding_child| comes later in draw order, and | 3598 // that we are not computing its occlusion_in_content_space. |
3596 // hence potentially occludes it). | 3599 gfx::Rect layer_bounds = gfx::Rect(); |
3597 gfx::Rect layer_bounds = gfx::Rect(grand_child_ptr->bounds()); | |
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 2234 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->layer_tree_impl()->SetRootLayer(std::move(root)); | |
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->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 309 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
6780 ExecuteCalculateDrawProperties(root); | 6782 ExecuteCalculateDrawProperties(root); |
6781 | 6783 |
6782 EXPECT_EQ(3u, render_surface_layer_list_impl()->size()); | 6784 EXPECT_EQ(3u, render_surface_layer_list_impl()->size()); |
6783 | 6785 |
6784 gfx::Transform singular_transform; | 6786 gfx::Transform singular_transform; |
6785 singular_transform.Scale3d( | 6787 singular_transform.Scale3d( |
6786 SkDoubleToMScalar(1.0), SkDoubleToMScalar(1.0), SkDoubleToMScalar(0.0)); | 6788 SkDoubleToMScalar(1.0), SkDoubleToMScalar(1.0), SkDoubleToMScalar(0.0)); |
6787 | 6789 |
6788 child->SetTransform(singular_transform); | 6790 child->SetTransform(singular_transform); |
6789 | 6791 |
6792 root->layer_tree_impl()->property_trees()->needs_rebuild = true; | |
6790 ExecuteCalculateDrawProperties(root); | 6793 ExecuteCalculateDrawProperties(root); |
6791 | 6794 |
6792 EXPECT_EQ(2u, render_surface_layer_list_impl()->size()); | 6795 EXPECT_EQ(2u, render_surface_layer_list_impl()->size()); |
6793 | 6796 |
6794 // Ensure that the entire subtree under a layer with singular transform does | 6797 // Ensure that the entire subtree under a layer with singular transform does |
6795 // not get rendered. | 6798 // not get rendered. |
6796 parent->SetTransform(singular_transform); | 6799 parent->SetTransform(singular_transform); |
6797 child->SetTransform(identity_transform); | 6800 child->SetTransform(identity_transform); |
6798 | 6801 |
6802 root->layer_tree_impl()->property_trees()->needs_rebuild = true; | |
6799 ExecuteCalculateDrawProperties(root); | 6803 ExecuteCalculateDrawProperties(root); |
6800 | 6804 |
6801 EXPECT_EQ(1u, render_surface_layer_list_impl()->size()); | 6805 EXPECT_EQ(1u, render_surface_layer_list_impl()->size()); |
6802 } | 6806 } |
6803 | 6807 |
6804 TEST_F(LayerTreeHostCommonTest, ClippedByOutOfOrderScrollParent) { | 6808 TEST_F(LayerTreeHostCommonTest, ClippedByOutOfOrderScrollParent) { |
6805 // Checks that clipping by a scroll parent that follows you in paint order | 6809 // Checks that clipping by a scroll parent that follows you in paint order |
6806 // still results in correct clipping. | 6810 // still results in correct clipping. |
6807 // | 6811 // |
6808 // + root | 6812 // + root |
(...skipping 535 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
7344 AnimationScaleFactorTrackingLayerImpl::Create(host_impl.active_tree(), 4); | 7348 AnimationScaleFactorTrackingLayerImpl::Create(host_impl.active_tree(), 4); |
7345 | 7349 |
7346 AnimationScaleFactorTrackingLayerImpl* parent_raw = parent.get(); | 7350 AnimationScaleFactorTrackingLayerImpl* parent_raw = parent.get(); |
7347 AnimationScaleFactorTrackingLayerImpl* child_raw = child.get(); | 7351 AnimationScaleFactorTrackingLayerImpl* child_raw = child.get(); |
7348 AnimationScaleFactorTrackingLayerImpl* grand_child_raw = grand_child.get(); | 7352 AnimationScaleFactorTrackingLayerImpl* grand_child_raw = grand_child.get(); |
7349 AnimationScaleFactorTrackingLayerImpl* grand_parent_raw = grand_parent.get(); | 7353 AnimationScaleFactorTrackingLayerImpl* grand_parent_raw = grand_parent.get(); |
7350 | 7354 |
7351 child->AddChild(std::move(grand_child)); | 7355 child->AddChild(std::move(grand_child)); |
7352 parent->AddChild(std::move(child)); | 7356 parent->AddChild(std::move(child)); |
7353 grand_parent->AddChild(std::move(parent)); | 7357 grand_parent->AddChild(std::move(parent)); |
7354 host_impl.active_tree()->SetRootLayer(std::move(grand_parent)); | |
7355 | 7358 |
7356 SetLayerPropertiesForTesting(grand_parent_raw, identity_matrix, | 7359 SetLayerPropertiesForTesting(grand_parent_raw, identity_matrix, |
7357 gfx::Point3F(), gfx::PointF(), gfx::Size(1, 2), | 7360 gfx::Point3F(), gfx::PointF(), gfx::Size(1, 2), |
7358 true, false, true); | 7361 true, false, true); |
7359 SetLayerPropertiesForTesting(parent_raw, identity_matrix, gfx::Point3F(), | 7362 SetLayerPropertiesForTesting(parent_raw, identity_matrix, gfx::Point3F(), |
7360 gfx::PointF(), gfx::Size(1, 2), true, false, | 7363 gfx::PointF(), gfx::Size(1, 2), true, false, |
7361 false); | 7364 false); |
7362 SetLayerPropertiesForTesting(child_raw, identity_matrix, gfx::Point3F(), | 7365 SetLayerPropertiesForTesting(child_raw, identity_matrix, gfx::Point3F(), |
7363 gfx::PointF(), gfx::Size(1, 2), true, false, | 7366 gfx::PointF(), gfx::Size(1, 2), true, false, |
7364 false); | 7367 false); |
7365 | 7368 |
7366 SetLayerPropertiesForTesting(grand_child_raw, identity_matrix, gfx::Point3F(), | 7369 SetLayerPropertiesForTesting(grand_child_raw, identity_matrix, gfx::Point3F(), |
7367 gfx::PointF(), gfx::Size(1, 2), true, false, | 7370 gfx::PointF(), gfx::Size(1, 2), true, false, |
7368 false); | 7371 false); |
7369 | 7372 |
7373 host_impl.active_tree()->SetRootLayer(std::move(grand_parent)); | |
7374 | |
7370 ExecuteCalculateDrawProperties(grand_parent_raw); | 7375 ExecuteCalculateDrawProperties(grand_parent_raw); |
7371 | 7376 |
7372 // No layers have animations. | 7377 // No layers have animations. |
7373 EXPECT_EQ( | 7378 EXPECT_EQ( |
7374 0.f, | 7379 0.f, |
7375 grand_parent_raw->draw_properties().maximum_animation_contents_scale); | 7380 grand_parent_raw->draw_properties().maximum_animation_contents_scale); |
7376 EXPECT_EQ(0.f, | 7381 EXPECT_EQ(0.f, |
7377 parent_raw->draw_properties().maximum_animation_contents_scale); | 7382 parent_raw->draw_properties().maximum_animation_contents_scale); |
7378 EXPECT_EQ(0.f, child_raw->draw_properties().maximum_animation_contents_scale); | 7383 EXPECT_EQ(0.f, child_raw->draw_properties().maximum_animation_contents_scale); |
7379 EXPECT_EQ( | 7384 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)), | 8883 scoped_ptr<AnimationCurve>(new FakeFloatTransition(1.0, 0.f, 1.f)), |
8879 animation_id, 1, TargetProperty::OPACITY); | 8884 animation_id, 1, TargetProperty::OPACITY); |
8880 animation->set_fill_mode(Animation::FILL_MODE_NONE); | 8885 animation->set_fill_mode(Animation::FILL_MODE_NONE); |
8881 animation->set_time_offset(base::TimeDelta::FromMilliseconds(-1000)); | 8886 animation->set_time_offset(base::TimeDelta::FromMilliseconds(-1000)); |
8882 AddAnimationToLayerWithExistingPlayer(child->id(), timeline(), | 8887 AddAnimationToLayerWithExistingPlayer(child->id(), timeline(), |
8883 std::move(animation)); | 8888 std::move(animation)); |
8884 ExecuteCalculateDrawPropertiesWithPropertyTrees(root.get()); | 8889 ExecuteCalculateDrawPropertiesWithPropertyTrees(root.get()); |
8885 EXPECT_EQ(gfx::Rect(10, 10), grandchild->visible_layer_rect()); | 8890 EXPECT_EQ(gfx::Rect(10, 10), grandchild->visible_layer_rect()); |
8886 } | 8891 } |
8887 | 8892 |
8888 TEST_F(LayerTreeHostCommonTest, SkippingSubtreeImpl) { | 8893 TEST_F(LayerTreeHostCommonTest, SkippingLayerImpl) { |
8889 FakeImplTaskRunnerProvider task_runner_provider; | 8894 FakeImplTaskRunnerProvider task_runner_provider; |
8890 TestSharedBitmapManager shared_bitmap_manager; | 8895 TestSharedBitmapManager shared_bitmap_manager; |
8891 TestTaskGraphRunner task_graph_runner; | 8896 TestTaskGraphRunner task_graph_runner; |
8892 FakeLayerTreeHostImpl host_impl(&task_runner_provider, &shared_bitmap_manager, | 8897 FakeLayerTreeHostImpl host_impl(&task_runner_provider, &shared_bitmap_manager, |
8893 &task_graph_runner); | 8898 &task_graph_runner); |
8894 | 8899 |
8895 gfx::Transform identity; | 8900 gfx::Transform identity; |
8896 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl.active_tree(), 1); | 8901 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl.active_tree(), 1); |
8897 scoped_ptr<LayerImpl> child = LayerImpl::Create(host_impl.active_tree(), 2); | 8902 scoped_ptr<LayerImpl> child = LayerImpl::Create(host_impl.active_tree(), 2); |
8898 scoped_ptr<LayerImpl> grandchild = | 8903 scoped_ptr<LayerImpl> grandchild = |
(...skipping 18 matching lines...) Expand all Loading... | |
8917 | 8922 |
8918 LayerImpl* root_ptr = root.get(); | 8923 LayerImpl* root_ptr = root.get(); |
8919 LayerImpl* child_ptr = child.get(); | 8924 LayerImpl* child_ptr = child.get(); |
8920 LayerImpl* grandchild_ptr = grandchild.get(); | 8925 LayerImpl* grandchild_ptr = grandchild.get(); |
8921 | 8926 |
8922 child->AddChild(std::move(grandchild)); | 8927 child->AddChild(std::move(grandchild)); |
8923 root->AddChild(std::move(child)); | 8928 root->AddChild(std::move(child)); |
8924 host_impl.active_tree()->SetRootLayer(std::move(root)); | 8929 host_impl.active_tree()->SetRootLayer(std::move(root)); |
8925 | 8930 |
8926 // Check the non-skipped case. | 8931 // Check the non-skipped case. |
8927 ExecuteCalculateDrawPropertiesWithPropertyTrees(root_ptr); | 8932 // ExecuteCalculateDrawPropertiesWithPropertyTrees(root_ptr); |
8928 EXPECT_EQ(gfx::Rect(10, 10), grandchild_ptr->visible_layer_rect()); | 8933 // EXPECT_EQ(gfx::Rect(10, 10), grandchild_ptr->visible_layer_rect()); |
8929 | 8934 |
8930 // Now we will reset the visible rect from property trees for the grandchild, | 8935 // 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 | 8936 // 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, | 8937 // to be skipped. The visible content rect for |grandchild| should, therefore, |
8933 // remain empty. | 8938 // remain empty. |
8934 grandchild_ptr->set_visible_layer_rect(gfx::Rect()); | 8939 grandchild_ptr->set_visible_layer_rect(gfx::Rect()); |
8940 | |
8935 gfx::Transform singular; | 8941 gfx::Transform singular; |
8936 singular.matrix().set(0, 0, 0); | 8942 singular.matrix().set(0, 0, 0); |
8943 // This line is used to make the results of skipping and not skipping layers | |
8944 // different. | |
8945 singular.matrix().set(0, 1, 1); | |
8946 | |
8947 gfx::Transform rotate; | |
8948 rotate.Rotate(90); | |
8949 | |
8950 gfx::Transform rotate_back_and_translate; | |
8951 rotate_back_and_translate.RotateAboutYAxis(180); | |
8952 rotate_back_and_translate.Translate(-10, 0); | |
8937 | 8953 |
8938 child_ptr->SetTransform(singular); | 8954 child_ptr->SetTransform(singular); |
8955 host_impl.active_tree()->property_trees()->needs_rebuild = true; | |
8939 ExecuteCalculateDrawPropertiesWithPropertyTrees(root_ptr); | 8956 ExecuteCalculateDrawPropertiesWithPropertyTrees(root_ptr); |
8940 EXPECT_EQ(gfx::Rect(0, 0), grandchild_ptr->visible_layer_rect()); | 8957 EXPECT_EQ(gfx::Rect(0, 0), grandchild_ptr->visible_layer_rect()); |
8941 child_ptr->SetTransform(identity); | 8958 child_ptr->SetTransform(identity); |
8942 | 8959 |
8943 child_ptr->SetHideLayerAndSubtree(true); | 8960 child_ptr->SetHideLayerAndSubtree(true); |
8944 ExecuteCalculateDrawPropertiesWithPropertyTrees(root_ptr); | 8961 ExecuteCalculateDrawPropertiesWithPropertyTrees(root_ptr); |
8945 EXPECT_EQ(gfx::Rect(0, 0), grandchild_ptr->visible_layer_rect()); | 8962 EXPECT_EQ(gfx::Rect(0, 0), grandchild_ptr->visible_layer_rect()); |
8946 child_ptr->SetHideLayerAndSubtree(false); | 8963 child_ptr->SetHideLayerAndSubtree(false); |
8947 | 8964 |
8948 child_ptr->SetOpacity(0.f); | 8965 child_ptr->SetOpacity(0.f); |
8949 ExecuteCalculateDrawPropertiesWithPropertyTrees(root_ptr); | 8966 ExecuteCalculateDrawPropertiesWithPropertyTrees(root_ptr); |
8950 EXPECT_EQ(gfx::Rect(0, 0), grandchild_ptr->visible_layer_rect()); | 8967 EXPECT_EQ(gfx::Rect(0, 0), grandchild_ptr->visible_layer_rect()); |
8968 child_ptr->SetOpacity(1.f); | |
8951 | 8969 |
8970 root_ptr->SetTransform(singular); | |
8971 // Force transform tree to have a node for child, so that ancestor's | |
8972 // invertible transform can be tested. | |
8973 child_ptr->SetTransform(rotate); | |
8974 host_impl.active_tree()->property_trees()->needs_rebuild = true; | |
8975 ExecuteCalculateDrawPropertiesWithPropertyTrees(root_ptr); | |
8976 EXPECT_EQ(gfx::Rect(0, 0), grandchild_ptr->visible_layer_rect()); | |
8977 root_ptr->SetTransform(identity); | |
8978 child_ptr->SetTransform(identity); | |
8979 | |
8980 root_ptr->SetOpacity(0.f); | |
8981 child_ptr->SetOpacity(0.7f); | |
8982 host_impl.active_tree()->property_trees()->needs_rebuild = true; | |
8983 ExecuteCalculateDrawPropertiesWithPropertyTrees(root_ptr); | |
8984 EXPECT_EQ(gfx::Rect(0, 0), grandchild_ptr->visible_layer_rect()); | |
8985 root_ptr->SetOpacity(1.f); | |
8986 | |
8987 child_ptr->SetOpacity(0.f); | |
8952 // Now, even though child has zero opacity, we will configure |grandchild| and | 8988 // Now, even though child has zero opacity, we will configure |grandchild| and |
8953 // |greatgrandchild| in several ways that should force the subtree to be | 8989 // |greatgrandchild| in several ways that should force the subtree to be |
8954 // processed anyhow. | 8990 // processed anyhow. |
8955 std::vector<scoped_ptr<CopyOutputRequest>> requests; | 8991 std::vector<scoped_ptr<CopyOutputRequest>> requests; |
8956 requests.push_back(CopyOutputRequest::CreateEmptyRequest()); | 8992 requests.push_back(CopyOutputRequest::CreateEmptyRequest()); |
8957 | 8993 |
8958 grandchild_ptr->PassCopyRequests(&requests); | 8994 grandchild_ptr->PassCopyRequests(&requests); |
8959 root_ptr->layer_tree_impl()->property_trees()->needs_rebuild = true; | 8995 root_ptr->layer_tree_impl()->property_trees()->needs_rebuild = true; |
8960 ExecuteCalculateDrawPropertiesWithPropertyTrees(root_ptr); | 8996 ExecuteCalculateDrawPropertiesWithPropertyTrees(root_ptr); |
8961 EXPECT_EQ(gfx::Rect(10, 10), grandchild_ptr->visible_layer_rect()); | 8997 EXPECT_EQ(gfx::Rect(10, 10), grandchild_ptr->visible_layer_rect()); |
8998 requests.clear(); | |
8999 grandchild_ptr->PassCopyRequests(&requests); | |
9000 child_ptr->SetOpacity(1.f); | |
9001 | |
9002 // A double sided render surface with backface visible should not be skipped | |
9003 grandchild_ptr->set_visible_layer_rect(gfx::Rect()); | |
9004 child_ptr->SetHasRenderSurface(true); | |
9005 child_ptr->SetDoubleSided(true); | |
9006 child_ptr->SetTransform(rotate_back_and_translate); | |
9007 root_ptr->layer_tree_impl()->property_trees()->needs_rebuild = true; | |
9008 ExecuteCalculateDrawPropertiesWithPropertyTrees(root_ptr); | |
9009 EXPECT_EQ(gfx::Rect(10, 10), grandchild_ptr->visible_layer_rect()); | |
9010 child_ptr->ClearRenderSurfaceLayerList(); | |
ajuma
2016/03/31 19:22:33
Is this line needed? We don't normally call this d
sunxd
2016/04/01 17:57:45
Hmm, the test can still pass without this line. I
| |
9011 child_ptr->SetTransform(identity); | |
9012 | |
9013 scoped_ptr<KeyframedTransformAnimationCurve> curve( | |
9014 KeyframedTransformAnimationCurve::Create()); | |
9015 TransformOperations start; | |
9016 start.AppendTranslate(1.f, 2.f, 3.f); | |
9017 gfx::Transform transform; | |
9018 transform.Scale3d(1.0, 2.0, 3.0); | |
9019 TransformOperations operation; | |
9020 operation.AppendMatrix(transform); | |
9021 curve->AddKeyframe( | |
9022 TransformKeyframe::Create(base::TimeDelta(), start, nullptr)); | |
9023 curve->AddKeyframe(TransformKeyframe::Create( | |
9024 base::TimeDelta::FromSecondsD(1.0), operation, nullptr)); | |
9025 scoped_ptr<Animation> transform_animation( | |
9026 Animation::Create(std::move(curve), 3, 3, TargetProperty::TRANSFORM)); | |
9027 scoped_refptr<AnimationPlayer> player(AnimationPlayer::Create(1)); | |
9028 host_impl.active_tree()->animation_host()->RegisterPlayerForLayer( | |
9029 root_ptr->id(), player.get()); | |
9030 host_impl.active_tree() | |
9031 ->animation_host() | |
9032 ->GetControllerForLayerId(root_ptr->id()) | |
9033 ->AddAnimation(std::move(transform_animation)); | |
9034 grandchild_ptr->set_visible_layer_rect(gfx::Rect()); | |
9035 child_ptr->SetScrollClipLayer(root_ptr->id()); | |
9036 root_ptr->SetTransform(singular); | |
9037 child_ptr->SetTransform(singular); | |
9038 root_ptr->layer_tree_impl()->property_trees()->needs_rebuild = true; | |
9039 ExecuteCalculateDrawPropertiesWithPropertyTrees(root_ptr); | |
9040 EXPECT_EQ(gfx::Rect(10, 10), grandchild_ptr->visible_layer_rect()); | |
9041 | |
9042 host_impl.active_tree()->animation_host()->UnregisterPlayerForLayer( | |
9043 root_ptr->id(), player.get()); | |
9044 } | |
9045 | |
9046 TEST_F(LayerTreeHostCommonTest, SkippingPendingLayerImpl) { | |
9047 FakeImplTaskRunnerProvider task_runner_provider; | |
9048 TestSharedBitmapManager shared_bitmap_manager; | |
9049 TestTaskGraphRunner task_graph_runner; | |
9050 FakeLayerTreeHostImpl host_impl(&task_runner_provider, &shared_bitmap_manager, | |
9051 &task_graph_runner); | |
9052 | |
9053 gfx::Transform identity; | |
9054 host_impl.CreatePendingTree(); | |
9055 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl.pending_tree(), 1); | |
9056 scoped_ptr<LayerImpl> child = LayerImpl::Create(host_impl.pending_tree(), 2); | |
9057 scoped_ptr<LayerImpl> grandchild = | |
9058 LayerImpl::Create(host_impl.pending_tree(), 3); | |
9059 | |
9060 scoped_ptr<FakePictureLayerImpl> greatgrandchild( | |
9061 FakePictureLayerImpl::Create(host_impl.pending_tree(), 4)); | |
9062 | |
9063 child->SetDrawsContent(true); | |
9064 grandchild->SetDrawsContent(true); | |
9065 greatgrandchild->SetDrawsContent(true); | |
9066 | |
9067 SetLayerPropertiesForTesting(root.get(), identity, gfx::Point3F(), | |
9068 gfx::PointF(), gfx::Size(100, 100), true, false, | |
9069 true); | |
9070 SetLayerPropertiesForTesting(child.get(), identity, gfx::Point3F(), | |
9071 gfx::PointF(), gfx::Size(10, 10), true, false, | |
9072 false); | |
9073 SetLayerPropertiesForTesting(grandchild.get(), identity, gfx::Point3F(), | |
9074 gfx::PointF(), gfx::Size(10, 10), true, false, | |
9075 false); | |
9076 | |
9077 LayerImpl* root_ptr = root.get(); | |
9078 LayerImpl* grandchild_ptr = grandchild.get(); | |
9079 | |
9080 child->AddChild(std::move(grandchild)); | |
9081 root->AddChild(std::move(child)); | |
9082 | |
9083 host_impl.pending_tree()->SetRootLayer(std::move(root)); | |
9084 | |
9085 // Check the non-skipped case. | |
9086 ExecuteCalculateDrawPropertiesWithPropertyTrees(root_ptr); | |
9087 EXPECT_EQ(gfx::Rect(10, 10), grandchild_ptr->visible_layer_rect()); | |
9088 | |
9089 scoped_ptr<KeyframedFloatAnimationCurve> curve( | |
9090 KeyframedFloatAnimationCurve::Create()); | |
9091 scoped_ptr<TimingFunction> func = EaseTimingFunction::Create(); | |
9092 curve->AddKeyframe( | |
9093 FloatKeyframe::Create(base::TimeDelta(), 0.9f, std::move(func))); | |
9094 curve->AddKeyframe( | |
9095 FloatKeyframe::Create(base::TimeDelta::FromSecondsD(1.0), 0.3f, nullptr)); | |
9096 scoped_ptr<Animation> animation( | |
9097 Animation::Create(std::move(curve), 3, 3, TargetProperty::OPACITY)); | |
9098 scoped_refptr<AnimationPlayer> player(AnimationPlayer::Create(1)); | |
9099 host_impl.active_tree()->animation_host()->RegisterPlayerForLayer( | |
9100 root_ptr->id(), player.get()); | |
9101 host_impl.active_tree() | |
9102 ->animation_host() | |
9103 ->GetControllerForLayerId(root_ptr->id()) | |
9104 ->AddAnimation(std::move(animation)); | |
9105 root_ptr->SetOpacity(0); | |
9106 grandchild_ptr->set_visible_layer_rect(gfx::Rect()); | |
9107 root_ptr->layer_tree_impl()->property_trees()->needs_rebuild = true; | |
9108 ExecuteCalculateDrawPropertiesWithPropertyTrees(root_ptr); | |
9109 EXPECT_EQ(gfx::Rect(10, 10), grandchild_ptr->visible_layer_rect()); | |
9110 | |
9111 host_impl.active_tree()->animation_host()->UnregisterPlayerForLayer( | |
9112 root_ptr->id(), player.get()); | |
8962 } | 9113 } |
8963 | 9114 |
8964 TEST_F(LayerTreeHostCommonTest, SkippingLayer) { | 9115 TEST_F(LayerTreeHostCommonTest, SkippingLayer) { |
8965 gfx::Transform identity; | 9116 gfx::Transform identity; |
8966 scoped_refptr<Layer> root = Layer::Create(); | 9117 scoped_refptr<Layer> root = Layer::Create(); |
8967 FakeContentLayerClient client; | 9118 FakeContentLayerClient client; |
8968 client.set_bounds(root->bounds()); | 9119 client.set_bounds(root->bounds()); |
8969 scoped_refptr<LayerWithForcedDrawsContent> child = | 9120 scoped_refptr<LayerWithForcedDrawsContent> child = |
8970 make_scoped_refptr(new LayerWithForcedDrawsContent()); | 9121 make_scoped_refptr(new LayerWithForcedDrawsContent()); |
8971 SetLayerPropertiesForTesting(root.get(), identity, gfx::Point3F(), | 9122 SetLayerPropertiesForTesting(root.get(), identity, gfx::Point3F(), |
(...skipping 767 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
9739 true); | 9890 true); |
9740 SetLayerPropertiesForTesting(render_surface1, large_transform, gfx::Point3F(), | 9891 SetLayerPropertiesForTesting(render_surface1, large_transform, gfx::Point3F(), |
9741 gfx::PointF(), gfx::Size(30, 30), true, false, | 9892 gfx::PointF(), gfx::Size(30, 30), true, false, |
9742 true); | 9893 true); |
9743 SetLayerPropertiesForTesting(render_surface2, identity_matrix, gfx::Point3F(), | 9894 SetLayerPropertiesForTesting(render_surface2, identity_matrix, gfx::Point3F(), |
9744 gfx::PointF(), gfx::Size(30, 30), true, false, | 9895 gfx::PointF(), gfx::Size(30, 30), true, false, |
9745 true); | 9896 true); |
9746 | 9897 |
9747 ExecuteCalculateDrawProperties(root); | 9898 ExecuteCalculateDrawProperties(root); |
9748 | 9899 |
9749 bool is_inf_or_nan = | 9900 // render_surface2 is skipped because of singular transform |
9750 std::isinf( | 9901 EXPECT_EQ(identity_matrix, |
jaydasika
2016/03/31 18:32:56
Why was it not skipped before this CL ? In any cas
sunxd
2016/04/01 17:57:45
None of the transforms of the layer and its ancest
jaydasika
2016/04/01 19:10:11
That's weird because only one layer has non-identi
| |
9751 render_surface2->render_surface()->draw_transform().matrix().get( | 9902 render_surface2->render_surface()->draw_transform()); |
9752 0, 0)) || | |
9753 std::isnan( | |
9754 render_surface2->render_surface()->draw_transform().matrix().get(0, | |
9755 0)); | |
9756 EXPECT_TRUE(is_inf_or_nan); | |
9757 is_inf_or_nan = | |
9758 std::isinf( | |
9759 render_surface2->render_surface()->draw_transform().matrix().get( | |
9760 1, 1)) || | |
9761 std::isnan( | |
9762 render_surface2->render_surface()->draw_transform().matrix().get(1, | |
9763 1)); | |
9764 EXPECT_TRUE(is_inf_or_nan); | |
9765 EXPECT_EQ(gfx::RectF(), | 9903 EXPECT_EQ(gfx::RectF(), |
9766 render_surface2->render_surface()->DrawableContentRect()); | 9904 render_surface2->render_surface()->DrawableContentRect()); |
9767 | 9905 |
9768 std::vector<LayerImpl*>* rsll = render_surface_layer_list_impl(); | 9906 std::vector<LayerImpl*>* rsll = render_surface_layer_list_impl(); |
9769 bool root_in_rsll = | 9907 bool root_in_rsll = |
9770 std::find(rsll->begin(), rsll->end(), root) != rsll->end(); | 9908 std::find(rsll->begin(), rsll->end(), root) != rsll->end(); |
9771 EXPECT_TRUE(root_in_rsll); | 9909 EXPECT_TRUE(root_in_rsll); |
9772 bool render_surface2_in_rsll = | 9910 bool render_surface2_in_rsll = |
9773 std::find(rsll->begin(), rsll->end(), render_surface2) != rsll->end(); | 9911 std::find(rsll->begin(), rsll->end(), render_surface2) != rsll->end(); |
9774 EXPECT_FALSE(render_surface2_in_rsll); | 9912 EXPECT_FALSE(render_surface2_in_rsll); |
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
9999 EXPECT_EQ(scroll_child6.id, grand_child10->scroll_tree_index()); | 10137 EXPECT_EQ(scroll_child6.id, grand_child10->scroll_tree_index()); |
10000 EXPECT_EQ(scroll_root1.id, parent3->scroll_tree_index()); | 10138 EXPECT_EQ(scroll_root1.id, parent3->scroll_tree_index()); |
10001 EXPECT_EQ(scroll_child7.id, child8->scroll_tree_index()); | 10139 EXPECT_EQ(scroll_child7.id, child8->scroll_tree_index()); |
10002 EXPECT_EQ(scroll_root1.id, parent4->scroll_tree_index()); | 10140 EXPECT_EQ(scroll_root1.id, parent4->scroll_tree_index()); |
10003 EXPECT_EQ(scroll_root1.id, child9->scroll_tree_index()); | 10141 EXPECT_EQ(scroll_root1.id, child9->scroll_tree_index()); |
10004 EXPECT_EQ(scroll_root1.id, grand_child12->scroll_tree_index()); | 10142 EXPECT_EQ(scroll_root1.id, grand_child12->scroll_tree_index()); |
10005 } | 10143 } |
10006 | 10144 |
10007 } // namespace | 10145 } // namespace |
10008 } // namespace cc | 10146 } // namespace cc |
OLD | NEW |