| 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_impl.h" | 5 #include "cc/trees/layer_tree_host_impl.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 #include <cmath> | 10 #include <cmath> |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 97 LayerTreeHostImplTest() | 97 LayerTreeHostImplTest() |
| 98 : task_runner_provider_(base::ThreadTaskRunnerHandle::Get()), | 98 : task_runner_provider_(base::ThreadTaskRunnerHandle::Get()), |
| 99 always_main_thread_blocked_(&task_runner_provider_), | 99 always_main_thread_blocked_(&task_runner_provider_), |
| 100 on_can_draw_state_changed_called_(false), | 100 on_can_draw_state_changed_called_(false), |
| 101 did_notify_ready_to_activate_(false), | 101 did_notify_ready_to_activate_(false), |
| 102 did_request_commit_(false), | 102 did_request_commit_(false), |
| 103 did_request_redraw_(false), | 103 did_request_redraw_(false), |
| 104 did_request_next_frame_(false), | 104 did_request_next_frame_(false), |
| 105 did_request_prepare_tiles_(false), | 105 did_request_prepare_tiles_(false), |
| 106 did_complete_page_scale_animation_(false), | 106 did_complete_page_scale_animation_(false), |
| 107 reduce_memory_result_(true), | 107 reduce_memory_result_(true) { |
| 108 skip_draw_layers_in_on_draw_(false) { | |
| 109 media::InitializeMediaLibrary(); | 108 media::InitializeMediaLibrary(); |
| 110 } | 109 } |
| 111 | 110 |
| 112 LayerTreeSettings DefaultSettings() { | 111 LayerTreeSettings DefaultSettings() { |
| 113 LayerTreeSettings settings; | 112 LayerTreeSettings settings; |
| 114 settings.minimum_occlusion_tracking_size = gfx::Size(); | 113 settings.minimum_occlusion_tracking_size = gfx::Size(); |
| 115 settings.renderer_settings.texture_id_allocation_chunk_size = 1; | 114 settings.renderer_settings.texture_id_allocation_chunk_size = 1; |
| 116 settings.gpu_rasterization_enabled = true; | 115 settings.gpu_rasterization_enabled = true; |
| 117 settings.verify_clip_tree_calculations = true; | 116 settings.verify_clip_tree_calculations = true; |
| 118 settings.verify_transform_tree_calculations = true; | 117 settings.verify_transform_tree_calculations = true; |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 168 void DidPrepareTiles() override {} | 167 void DidPrepareTiles() override {} |
| 169 void DidCompletePageScaleAnimationOnImplThread() override { | 168 void DidCompletePageScaleAnimationOnImplThread() override { |
| 170 did_complete_page_scale_animation_ = true; | 169 did_complete_page_scale_animation_ = true; |
| 171 } | 170 } |
| 172 void OnDrawForOutputSurface(bool resourceless_software_draw) override { | 171 void OnDrawForOutputSurface(bool resourceless_software_draw) override { |
| 173 std::unique_ptr<LayerTreeHostImpl::FrameData> frame( | 172 std::unique_ptr<LayerTreeHostImpl::FrameData> frame( |
| 174 new LayerTreeHostImpl::FrameData); | 173 new LayerTreeHostImpl::FrameData); |
| 175 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(frame.get())); | 174 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(frame.get())); |
| 176 last_on_draw_render_passes_.clear(); | 175 last_on_draw_render_passes_.clear(); |
| 177 RenderPass::CopyAll(frame->render_passes, &last_on_draw_render_passes_); | 176 RenderPass::CopyAll(frame->render_passes, &last_on_draw_render_passes_); |
| 178 if (!skip_draw_layers_in_on_draw_) | 177 host_impl_->DrawLayers(frame.get()); |
| 179 host_impl_->DrawLayers(frame.get()); | |
| 180 host_impl_->DidDrawAllLayers(*frame); | 178 host_impl_->DidDrawAllLayers(*frame); |
| 181 host_impl_->SwapBuffers(*frame); | |
| 182 last_on_draw_frame_ = std::move(frame); | 179 last_on_draw_frame_ = std::move(frame); |
| 183 } | 180 } |
| 184 | 181 |
| 185 void set_reduce_memory_result(bool reduce_memory_result) { | 182 void set_reduce_memory_result(bool reduce_memory_result) { |
| 186 reduce_memory_result_ = reduce_memory_result; | 183 reduce_memory_result_ = reduce_memory_result; |
| 187 } | 184 } |
| 188 | 185 |
| 189 virtual bool CreateHostImpl(const LayerTreeSettings& settings, | 186 virtual bool CreateHostImpl(const LayerTreeSettings& settings, |
| 190 std::unique_ptr<OutputSurface> output_surface) { | 187 std::unique_ptr<OutputSurface> output_surface) { |
| 191 return CreateHostImplWithTaskRunnerProvider( | 188 return CreateHostImplWithTaskRunnerProvider( |
| (...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 450 std::unique_ptr<ScrollState> scroll_state( | 447 std::unique_ptr<ScrollState> scroll_state( |
| 451 new ScrollState(scroll_state_data)); | 448 new ScrollState(scroll_state_data)); |
| 452 return scroll_state; | 449 return scroll_state; |
| 453 } | 450 } |
| 454 | 451 |
| 455 void DrawFrame() { | 452 void DrawFrame() { |
| 456 LayerTreeHostImpl::FrameData frame; | 453 LayerTreeHostImpl::FrameData frame; |
| 457 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 454 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 458 host_impl_->DrawLayers(&frame); | 455 host_impl_->DrawLayers(&frame); |
| 459 host_impl_->DidDrawAllLayers(frame); | 456 host_impl_->DidDrawAllLayers(frame); |
| 460 host_impl_->SwapBuffers(frame); | |
| 461 } | 457 } |
| 462 | 458 |
| 463 void pinch_zoom_pan_viewport_forces_commit_redraw(float device_scale_factor); | 459 void pinch_zoom_pan_viewport_forces_commit_redraw(float device_scale_factor); |
| 464 void pinch_zoom_pan_viewport_test(float device_scale_factor); | 460 void pinch_zoom_pan_viewport_test(float device_scale_factor); |
| 465 void pinch_zoom_pan_viewport_and_scroll_test(float device_scale_factor); | 461 void pinch_zoom_pan_viewport_and_scroll_test(float device_scale_factor); |
| 466 void pinch_zoom_pan_viewport_and_scroll_boundary_test( | 462 void pinch_zoom_pan_viewport_and_scroll_boundary_test( |
| 467 float device_scale_factor); | 463 float device_scale_factor); |
| 468 | 464 |
| 469 void SetupMouseMoveAtWithDeviceScale(float device_scale_factor); | 465 void SetupMouseMoveAtWithDeviceScale(float device_scale_factor); |
| 470 | 466 |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 512 bool on_can_draw_state_changed_called_; | 508 bool on_can_draw_state_changed_called_; |
| 513 bool did_notify_ready_to_activate_; | 509 bool did_notify_ready_to_activate_; |
| 514 bool did_request_commit_; | 510 bool did_request_commit_; |
| 515 bool did_request_redraw_; | 511 bool did_request_redraw_; |
| 516 bool did_request_next_frame_; | 512 bool did_request_next_frame_; |
| 517 bool did_request_prepare_tiles_; | 513 bool did_request_prepare_tiles_; |
| 518 bool did_complete_page_scale_animation_; | 514 bool did_complete_page_scale_animation_; |
| 519 bool reduce_memory_result_; | 515 bool reduce_memory_result_; |
| 520 base::Closure animation_task_; | 516 base::Closure animation_task_; |
| 521 base::TimeDelta requested_animation_delay_; | 517 base::TimeDelta requested_animation_delay_; |
| 522 bool skip_draw_layers_in_on_draw_; | |
| 523 std::unique_ptr<LayerTreeHostImpl::FrameData> last_on_draw_frame_; | 518 std::unique_ptr<LayerTreeHostImpl::FrameData> last_on_draw_frame_; |
| 524 RenderPassList last_on_draw_render_passes_; | 519 RenderPassList last_on_draw_render_passes_; |
| 525 scoped_refptr<AnimationTimeline> timeline_; | 520 scoped_refptr<AnimationTimeline> timeline_; |
| 526 }; | 521 }; |
| 527 | 522 |
| 528 // A test fixture for new animation timelines tests. | 523 // A test fixture for new animation timelines tests. |
| 529 class LayerTreeHostImplTimelinesTest : public LayerTreeHostImplTest { | 524 class LayerTreeHostImplTimelinesTest : public LayerTreeHostImplTest { |
| 530 public: | 525 public: |
| 531 void SetUp() override { | 526 void SetUp() override { |
| 532 CreateHostImpl(DefaultSettings(), CreateOutputSurface()); | 527 CreateHostImpl(DefaultSettings(), CreateOutputSurface()); |
| (...skipping 2952 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3485 DidDrawCheckLayer::Create(host_impl_->active_tree(), 2)); | 3480 DidDrawCheckLayer::Create(host_impl_->active_tree(), 2)); |
| 3486 root->test_properties()->force_render_surface = true; | 3481 root->test_properties()->force_render_surface = true; |
| 3487 DidDrawCheckLayer* layer = | 3482 DidDrawCheckLayer* layer = |
| 3488 static_cast<DidDrawCheckLayer*>(root->test_properties()->children[0]); | 3483 static_cast<DidDrawCheckLayer*>(root->test_properties()->children[0]); |
| 3489 host_impl_->active_tree()->BuildPropertyTreesForTesting(); | 3484 host_impl_->active_tree()->BuildPropertyTreesForTesting(); |
| 3490 | 3485 |
| 3491 { | 3486 { |
| 3492 LayerTreeHostImpl::FrameData frame; | 3487 LayerTreeHostImpl::FrameData frame; |
| 3493 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 3488 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 3494 host_impl_->DrawLayers(&frame); | 3489 host_impl_->DrawLayers(&frame); |
| 3495 host_impl_->SwapBuffers(frame); | |
| 3496 host_impl_->DidDrawAllLayers(frame); | 3490 host_impl_->DidDrawAllLayers(frame); |
| 3497 | 3491 |
| 3498 EXPECT_TRUE(layer->will_draw_called()); | 3492 EXPECT_TRUE(layer->will_draw_called()); |
| 3499 EXPECT_TRUE(layer->append_quads_called()); | 3493 EXPECT_TRUE(layer->append_quads_called()); |
| 3500 EXPECT_TRUE(layer->did_draw_called()); | 3494 EXPECT_TRUE(layer->did_draw_called()); |
| 3501 } | 3495 } |
| 3502 | 3496 |
| 3503 host_impl_->SetViewportDamage(gfx::Rect(10, 10)); | 3497 host_impl_->SetViewportDamage(gfx::Rect(10, 10)); |
| 3504 | 3498 |
| 3505 { | 3499 { |
| 3506 LayerTreeHostImpl::FrameData frame; | 3500 LayerTreeHostImpl::FrameData frame; |
| 3507 | 3501 |
| 3508 layer->set_will_draw_returns_false(); | 3502 layer->set_will_draw_returns_false(); |
| 3509 layer->ClearDidDrawCheck(); | 3503 layer->ClearDidDrawCheck(); |
| 3510 | 3504 |
| 3511 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 3505 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 3512 host_impl_->DrawLayers(&frame); | 3506 host_impl_->DrawLayers(&frame); |
| 3513 host_impl_->SwapBuffers(frame); | |
| 3514 host_impl_->DidDrawAllLayers(frame); | 3507 host_impl_->DidDrawAllLayers(frame); |
| 3515 | 3508 |
| 3516 EXPECT_TRUE(layer->will_draw_called()); | 3509 EXPECT_TRUE(layer->will_draw_called()); |
| 3517 EXPECT_FALSE(layer->append_quads_called()); | 3510 EXPECT_FALSE(layer->append_quads_called()); |
| 3518 EXPECT_FALSE(layer->did_draw_called()); | 3511 EXPECT_FALSE(layer->did_draw_called()); |
| 3519 } | 3512 } |
| 3520 } | 3513 } |
| 3521 | 3514 |
| 3522 TEST_F(LayerTreeHostImplTest, DidDrawNotCalledOnHiddenLayer) { | 3515 TEST_F(LayerTreeHostImplTest, DidDrawNotCalledOnHiddenLayer) { |
| 3523 // The root layer is always drawn, so run this test on a child layer that | 3516 // The root layer is always drawn, so run this test on a child layer that |
| (...skipping 13 matching lines...) Expand all Loading... |
| 3537 layer->SetBounds(gfx::Size(10, 10)); | 3530 layer->SetBounds(gfx::Size(10, 10)); |
| 3538 host_impl_->active_tree()->BuildPropertyTreesForTesting(); | 3531 host_impl_->active_tree()->BuildPropertyTreesForTesting(); |
| 3539 | 3532 |
| 3540 LayerTreeHostImpl::FrameData frame; | 3533 LayerTreeHostImpl::FrameData frame; |
| 3541 | 3534 |
| 3542 EXPECT_FALSE(layer->will_draw_called()); | 3535 EXPECT_FALSE(layer->will_draw_called()); |
| 3543 EXPECT_FALSE(layer->did_draw_called()); | 3536 EXPECT_FALSE(layer->did_draw_called()); |
| 3544 | 3537 |
| 3545 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 3538 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 3546 host_impl_->DrawLayers(&frame); | 3539 host_impl_->DrawLayers(&frame); |
| 3547 host_impl_->SwapBuffers(frame); | |
| 3548 host_impl_->DidDrawAllLayers(frame); | 3540 host_impl_->DidDrawAllLayers(frame); |
| 3549 | 3541 |
| 3550 EXPECT_FALSE(layer->will_draw_called()); | 3542 EXPECT_FALSE(layer->will_draw_called()); |
| 3551 EXPECT_FALSE(layer->did_draw_called()); | 3543 EXPECT_FALSE(layer->did_draw_called()); |
| 3552 | 3544 |
| 3553 EXPECT_TRUE(layer->visible_layer_rect().IsEmpty()); | 3545 EXPECT_TRUE(layer->visible_layer_rect().IsEmpty()); |
| 3554 | 3546 |
| 3555 // Ensure visible_layer_rect for layer is not empty | 3547 // Ensure visible_layer_rect for layer is not empty |
| 3556 layer->SetPosition(gfx::PointF()); | 3548 layer->SetPosition(gfx::PointF()); |
| 3557 layer->NoteLayerPropertyChanged(); | 3549 layer->NoteLayerPropertyChanged(); |
| 3558 host_impl_->active_tree()->BuildPropertyTreesForTesting(); | 3550 host_impl_->active_tree()->BuildPropertyTreesForTesting(); |
| 3559 | 3551 |
| 3560 EXPECT_FALSE(layer->will_draw_called()); | 3552 EXPECT_FALSE(layer->will_draw_called()); |
| 3561 EXPECT_FALSE(layer->did_draw_called()); | 3553 EXPECT_FALSE(layer->did_draw_called()); |
| 3562 | 3554 |
| 3563 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 3555 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 3564 host_impl_->DrawLayers(&frame); | 3556 host_impl_->DrawLayers(&frame); |
| 3565 host_impl_->SwapBuffers(frame); | |
| 3566 host_impl_->DidDrawAllLayers(frame); | 3557 host_impl_->DidDrawAllLayers(frame); |
| 3567 | 3558 |
| 3568 EXPECT_TRUE(layer->will_draw_called()); | 3559 EXPECT_TRUE(layer->will_draw_called()); |
| 3569 EXPECT_TRUE(layer->did_draw_called()); | 3560 EXPECT_TRUE(layer->did_draw_called()); |
| 3570 | 3561 |
| 3571 EXPECT_FALSE(layer->visible_layer_rect().IsEmpty()); | 3562 EXPECT_FALSE(layer->visible_layer_rect().IsEmpty()); |
| 3572 } | 3563 } |
| 3573 | 3564 |
| 3574 TEST_F(LayerTreeHostImplTest, WillDrawNotCalledOnOccludedLayer) { | 3565 TEST_F(LayerTreeHostImplTest, WillDrawNotCalledOnOccludedLayer) { |
| 3575 gfx::Size big_size(1000, 1000); | 3566 gfx::Size big_size(1000, 1000); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 3598 | 3589 |
| 3599 LayerTreeHostImpl::FrameData frame; | 3590 LayerTreeHostImpl::FrameData frame; |
| 3600 | 3591 |
| 3601 EXPECT_FALSE(occluded_layer->will_draw_called()); | 3592 EXPECT_FALSE(occluded_layer->will_draw_called()); |
| 3602 EXPECT_FALSE(occluded_layer->did_draw_called()); | 3593 EXPECT_FALSE(occluded_layer->did_draw_called()); |
| 3603 EXPECT_FALSE(top_layer->will_draw_called()); | 3594 EXPECT_FALSE(top_layer->will_draw_called()); |
| 3604 EXPECT_FALSE(top_layer->did_draw_called()); | 3595 EXPECT_FALSE(top_layer->did_draw_called()); |
| 3605 | 3596 |
| 3606 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 3597 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 3607 host_impl_->DrawLayers(&frame); | 3598 host_impl_->DrawLayers(&frame); |
| 3608 host_impl_->SwapBuffers(frame); | |
| 3609 host_impl_->DidDrawAllLayers(frame); | 3599 host_impl_->DidDrawAllLayers(frame); |
| 3610 | 3600 |
| 3611 EXPECT_FALSE(occluded_layer->will_draw_called()); | 3601 EXPECT_FALSE(occluded_layer->will_draw_called()); |
| 3612 EXPECT_FALSE(occluded_layer->did_draw_called()); | 3602 EXPECT_FALSE(occluded_layer->did_draw_called()); |
| 3613 EXPECT_TRUE(top_layer->will_draw_called()); | 3603 EXPECT_TRUE(top_layer->will_draw_called()); |
| 3614 EXPECT_TRUE(top_layer->did_draw_called()); | 3604 EXPECT_TRUE(top_layer->did_draw_called()); |
| 3615 } | 3605 } |
| 3616 | 3606 |
| 3617 TEST_F(LayerTreeHostImplTest, DidDrawCalledOnAllLayers) { | 3607 TEST_F(LayerTreeHostImplTest, DidDrawCalledOnAllLayers) { |
| 3618 host_impl_->active_tree()->SetRootLayerForTesting( | 3608 host_impl_->active_tree()->SetRootLayerForTesting( |
| (...skipping 18 matching lines...) Expand all Loading... |
| 3637 | 3627 |
| 3638 EXPECT_FALSE(root->did_draw_called()); | 3628 EXPECT_FALSE(root->did_draw_called()); |
| 3639 EXPECT_FALSE(layer1->did_draw_called()); | 3629 EXPECT_FALSE(layer1->did_draw_called()); |
| 3640 EXPECT_FALSE(layer2->did_draw_called()); | 3630 EXPECT_FALSE(layer2->did_draw_called()); |
| 3641 | 3631 |
| 3642 LayerTreeHostImpl::FrameData frame; | 3632 LayerTreeHostImpl::FrameData frame; |
| 3643 FakeLayerTreeHostImpl::RecursiveUpdateNumChildren( | 3633 FakeLayerTreeHostImpl::RecursiveUpdateNumChildren( |
| 3644 *host_impl_->active_tree()->begin()); | 3634 *host_impl_->active_tree()->begin()); |
| 3645 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 3635 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 3646 host_impl_->DrawLayers(&frame); | 3636 host_impl_->DrawLayers(&frame); |
| 3647 host_impl_->SwapBuffers(frame); | |
| 3648 host_impl_->DidDrawAllLayers(frame); | 3637 host_impl_->DidDrawAllLayers(frame); |
| 3649 | 3638 |
| 3650 EXPECT_TRUE(root->did_draw_called()); | 3639 EXPECT_TRUE(root->did_draw_called()); |
| 3651 EXPECT_TRUE(layer1->did_draw_called()); | 3640 EXPECT_TRUE(layer1->did_draw_called()); |
| 3652 EXPECT_TRUE(layer2->did_draw_called()); | 3641 EXPECT_TRUE(layer2->did_draw_called()); |
| 3653 | 3642 |
| 3654 EXPECT_NE(root->render_surface(), layer1->render_surface()); | 3643 EXPECT_NE(root->render_surface(), layer1->render_surface()); |
| 3655 EXPECT_TRUE(layer1->render_surface()); | 3644 EXPECT_TRUE(layer1->render_surface()); |
| 3656 } | 3645 } |
| 3657 | 3646 |
| (...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3808 DidDrawCheckLayer::Create(host_impl_->active_tree(), 1)); | 3797 DidDrawCheckLayer::Create(host_impl_->active_tree(), 1)); |
| 3809 DidDrawCheckLayer* root = | 3798 DidDrawCheckLayer* root = |
| 3810 static_cast<DidDrawCheckLayer*>(*host_impl_->active_tree()->begin()); | 3799 static_cast<DidDrawCheckLayer*>(*host_impl_->active_tree()->begin()); |
| 3811 root->test_properties()->force_render_surface = true; | 3800 root->test_properties()->force_render_surface = true; |
| 3812 host_impl_->active_tree()->BuildPropertyTreesForTesting(); | 3801 host_impl_->active_tree()->BuildPropertyTreesForTesting(); |
| 3813 | 3802 |
| 3814 LayerTreeHostImpl::FrameData frame; | 3803 LayerTreeHostImpl::FrameData frame; |
| 3815 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 3804 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 3816 host_impl_->DrawLayers(&frame); | 3805 host_impl_->DrawLayers(&frame); |
| 3817 host_impl_->DidDrawAllLayers(frame); | 3806 host_impl_->DidDrawAllLayers(frame); |
| 3818 host_impl_->SwapBuffers(frame); | |
| 3819 | 3807 |
| 3820 for (size_t i = 0; i < cases.size(); ++i) { | 3808 for (size_t i = 0; i < cases.size(); ++i) { |
| 3821 // Clean up host_impl_ state. | 3809 // Clean up host_impl_ state. |
| 3822 const auto& testcase = cases[i]; | 3810 const auto& testcase = cases[i]; |
| 3823 std::vector<LayerImpl*> to_remove; | 3811 std::vector<LayerImpl*> to_remove; |
| 3824 for (auto* child : root->test_properties()->children) | 3812 for (auto* child : root->test_properties()->children) |
| 3825 to_remove.push_back(child); | 3813 to_remove.push_back(child); |
| 3826 for (auto* child : to_remove) | 3814 for (auto* child : to_remove) |
| 3827 root->test_properties()->RemoveChild(child); | 3815 root->test_properties()->RemoveChild(child); |
| 3828 timeline()->ClearPlayers(); | 3816 timeline()->ClearPlayers(); |
| 3829 | 3817 |
| 3830 std::ostringstream scope; | 3818 std::ostringstream scope; |
| 3831 scope << "Test case: " << i; | 3819 scope << "Test case: " << i; |
| 3832 SCOPED_TRACE(scope.str()); | 3820 SCOPED_TRACE(scope.str()); |
| 3833 | 3821 |
| 3834 CreateLayerFromState(root, timeline(), testcase.layer_before); | 3822 CreateLayerFromState(root, timeline(), testcase.layer_before); |
| 3835 CreateLayerFromState(root, timeline(), testcase.layer_between); | 3823 CreateLayerFromState(root, timeline(), testcase.layer_between); |
| 3836 CreateLayerFromState(root, timeline(), testcase.layer_after); | 3824 CreateLayerFromState(root, timeline(), testcase.layer_after); |
| 3837 host_impl_->active_tree()->BuildPropertyTreesForTesting(); | 3825 host_impl_->active_tree()->BuildPropertyTreesForTesting(); |
| 3838 | 3826 |
| 3839 if (testcase.high_res_required) | 3827 if (testcase.high_res_required) |
| 3840 host_impl_->SetRequiresHighResToDraw(); | 3828 host_impl_->SetRequiresHighResToDraw(); |
| 3841 | 3829 |
| 3842 LayerTreeHostImpl::FrameData frame; | 3830 LayerTreeHostImpl::FrameData frame; |
| 3843 EXPECT_EQ(testcase.expected_result, host_impl_->PrepareToDraw(&frame)); | 3831 EXPECT_EQ(testcase.expected_result, host_impl_->PrepareToDraw(&frame)); |
| 3844 host_impl_->DrawLayers(&frame); | 3832 host_impl_->DrawLayers(&frame); |
| 3845 host_impl_->DidDrawAllLayers(frame); | 3833 host_impl_->DidDrawAllLayers(frame); |
| 3846 host_impl_->SwapBuffers(frame); | |
| 3847 } | 3834 } |
| 3848 } | 3835 } |
| 3849 | 3836 |
| 3850 TEST_F(LayerTreeHostImplTest, | 3837 TEST_F(LayerTreeHostImplTest, |
| 3851 PrepareToDrawWhenDrawAndSwapFullViewportEveryFrame) { | 3838 PrepareToDrawWhenDrawAndSwapFullViewportEveryFrame) { |
| 3852 CreateHostImpl(DefaultSettings(), | 3839 CreateHostImpl(DefaultSettings(), |
| 3853 FakeOutputSurface::CreateDelegatingSoftware()); | 3840 FakeOutputSurface::CreateDelegatingSoftware()); |
| 3854 | 3841 |
| 3855 const gfx::Transform external_transform; | 3842 const gfx::Transform external_transform; |
| 3856 const gfx::Rect external_viewport; | 3843 const gfx::Rect external_viewport; |
| (...skipping 2809 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6666 | 6653 |
| 6667 // Opaque layer, drawn without blending. | 6654 // Opaque layer, drawn without blending. |
| 6668 layer1->SetContentsOpaque(true); | 6655 layer1->SetContentsOpaque(true); |
| 6669 layer1->SetExpectation(false, false); | 6656 layer1->SetExpectation(false, false); |
| 6670 layer1->SetUpdateRect(gfx::Rect(layer1->bounds())); | 6657 layer1->SetUpdateRect(gfx::Rect(layer1->bounds())); |
| 6671 host_impl_->active_tree()->BuildPropertyTreesForTesting(); | 6658 host_impl_->active_tree()->BuildPropertyTreesForTesting(); |
| 6672 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 6659 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 6673 host_impl_->DrawLayers(&frame); | 6660 host_impl_->DrawLayers(&frame); |
| 6674 EXPECT_TRUE(layer1->quads_appended()); | 6661 EXPECT_TRUE(layer1->quads_appended()); |
| 6675 host_impl_->DidDrawAllLayers(frame); | 6662 host_impl_->DidDrawAllLayers(frame); |
| 6676 host_impl_->SwapBuffers(frame); | |
| 6677 | 6663 |
| 6678 // Layer with translucent content and painting, so drawn with blending. | 6664 // Layer with translucent content and painting, so drawn with blending. |
| 6679 layer1->SetContentsOpaque(false); | 6665 layer1->SetContentsOpaque(false); |
| 6680 layer1->SetExpectation(true, false); | 6666 layer1->SetExpectation(true, false); |
| 6681 layer1->SetUpdateRect(gfx::Rect(layer1->bounds())); | 6667 layer1->SetUpdateRect(gfx::Rect(layer1->bounds())); |
| 6682 host_impl_->active_tree()->BuildPropertyTreesForTesting(); | 6668 host_impl_->active_tree()->BuildPropertyTreesForTesting(); |
| 6683 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 6669 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 6684 host_impl_->DrawLayers(&frame); | 6670 host_impl_->DrawLayers(&frame); |
| 6685 host_impl_->SwapBuffers(frame); | |
| 6686 EXPECT_TRUE(layer1->quads_appended()); | 6671 EXPECT_TRUE(layer1->quads_appended()); |
| 6687 host_impl_->DidDrawAllLayers(frame); | 6672 host_impl_->DidDrawAllLayers(frame); |
| 6688 | 6673 |
| 6689 // Layer with translucent opacity, drawn with blending. | 6674 // Layer with translucent opacity, drawn with blending. |
| 6690 layer1->SetContentsOpaque(true); | 6675 layer1->SetContentsOpaque(true); |
| 6691 layer1->test_properties()->opacity = 0.5f; | 6676 layer1->test_properties()->opacity = 0.5f; |
| 6692 layer1->NoteLayerPropertyChanged(); | 6677 layer1->NoteLayerPropertyChanged(); |
| 6693 layer1->SetExpectation(true, false); | 6678 layer1->SetExpectation(true, false); |
| 6694 layer1->SetUpdateRect(gfx::Rect(layer1->bounds())); | 6679 layer1->SetUpdateRect(gfx::Rect(layer1->bounds())); |
| 6695 host_impl_->active_tree()->BuildPropertyTreesForTesting(); | 6680 host_impl_->active_tree()->BuildPropertyTreesForTesting(); |
| 6696 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 6681 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 6697 host_impl_->DrawLayers(&frame); | 6682 host_impl_->DrawLayers(&frame); |
| 6698 host_impl_->SwapBuffers(frame); | |
| 6699 EXPECT_TRUE(layer1->quads_appended()); | 6683 EXPECT_TRUE(layer1->quads_appended()); |
| 6700 host_impl_->DidDrawAllLayers(frame); | 6684 host_impl_->DidDrawAllLayers(frame); |
| 6701 | 6685 |
| 6702 // Layer with translucent opacity and painting, drawn with blending. | 6686 // Layer with translucent opacity and painting, drawn with blending. |
| 6703 layer1->SetContentsOpaque(true); | 6687 layer1->SetContentsOpaque(true); |
| 6704 layer1->test_properties()->opacity = 0.5f; | 6688 layer1->test_properties()->opacity = 0.5f; |
| 6705 layer1->NoteLayerPropertyChanged(); | 6689 layer1->NoteLayerPropertyChanged(); |
| 6706 layer1->SetExpectation(true, false); | 6690 layer1->SetExpectation(true, false); |
| 6707 layer1->SetUpdateRect(gfx::Rect(layer1->bounds())); | 6691 layer1->SetUpdateRect(gfx::Rect(layer1->bounds())); |
| 6708 host_impl_->active_tree()->BuildPropertyTreesForTesting(); | 6692 host_impl_->active_tree()->BuildPropertyTreesForTesting(); |
| 6709 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 6693 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 6710 host_impl_->DrawLayers(&frame); | 6694 host_impl_->DrawLayers(&frame); |
| 6711 host_impl_->SwapBuffers(frame); | |
| 6712 EXPECT_TRUE(layer1->quads_appended()); | 6695 EXPECT_TRUE(layer1->quads_appended()); |
| 6713 host_impl_->DidDrawAllLayers(frame); | 6696 host_impl_->DidDrawAllLayers(frame); |
| 6714 | 6697 |
| 6715 layer1->test_properties()->AddChild(BlendStateCheckLayer::Create( | 6698 layer1->test_properties()->AddChild(BlendStateCheckLayer::Create( |
| 6716 host_impl_->active_tree(), 3, host_impl_->resource_provider())); | 6699 host_impl_->active_tree(), 3, host_impl_->resource_provider())); |
| 6717 BlendStateCheckLayer* layer2 = static_cast<BlendStateCheckLayer*>( | 6700 BlendStateCheckLayer* layer2 = static_cast<BlendStateCheckLayer*>( |
| 6718 layer1->test_properties()->children[0]); | 6701 layer1->test_properties()->children[0]); |
| 6719 layer2->SetPosition(gfx::PointF(4.f, 4.f)); | 6702 layer2->SetPosition(gfx::PointF(4.f, 4.f)); |
| 6720 | 6703 |
| 6721 // 2 opaque layers, drawn without blending. | 6704 // 2 opaque layers, drawn without blending. |
| 6722 layer1->SetContentsOpaque(true); | 6705 layer1->SetContentsOpaque(true); |
| 6723 layer1->test_properties()->opacity = 1.f; | 6706 layer1->test_properties()->opacity = 1.f; |
| 6724 layer1->NoteLayerPropertyChanged(); | 6707 layer1->NoteLayerPropertyChanged(); |
| 6725 layer1->SetExpectation(false, false); | 6708 layer1->SetExpectation(false, false); |
| 6726 layer1->SetUpdateRect(gfx::Rect(layer1->bounds())); | 6709 layer1->SetUpdateRect(gfx::Rect(layer1->bounds())); |
| 6727 layer2->SetContentsOpaque(true); | 6710 layer2->SetContentsOpaque(true); |
| 6728 layer2->test_properties()->opacity = 1.f; | 6711 layer2->test_properties()->opacity = 1.f; |
| 6729 layer2->NoteLayerPropertyChanged(); | 6712 layer2->NoteLayerPropertyChanged(); |
| 6730 layer2->SetExpectation(false, false); | 6713 layer2->SetExpectation(false, false); |
| 6731 layer2->SetUpdateRect(gfx::Rect(layer1->bounds())); | 6714 layer2->SetUpdateRect(gfx::Rect(layer1->bounds())); |
| 6732 host_impl_->active_tree()->BuildPropertyTreesForTesting(); | 6715 host_impl_->active_tree()->BuildPropertyTreesForTesting(); |
| 6733 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 6716 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 6734 host_impl_->DrawLayers(&frame); | 6717 host_impl_->DrawLayers(&frame); |
| 6735 host_impl_->SwapBuffers(frame); | |
| 6736 EXPECT_TRUE(layer1->quads_appended()); | 6718 EXPECT_TRUE(layer1->quads_appended()); |
| 6737 EXPECT_TRUE(layer2->quads_appended()); | 6719 EXPECT_TRUE(layer2->quads_appended()); |
| 6738 host_impl_->DidDrawAllLayers(frame); | 6720 host_impl_->DidDrawAllLayers(frame); |
| 6739 | 6721 |
| 6740 // Parent layer with translucent content, drawn with blending. | 6722 // Parent layer with translucent content, drawn with blending. |
| 6741 // Child layer with opaque content, drawn without blending. | 6723 // Child layer with opaque content, drawn without blending. |
| 6742 layer1->SetContentsOpaque(false); | 6724 layer1->SetContentsOpaque(false); |
| 6743 layer1->SetExpectation(true, false); | 6725 layer1->SetExpectation(true, false); |
| 6744 layer1->SetUpdateRect(gfx::Rect(layer1->bounds())); | 6726 layer1->SetUpdateRect(gfx::Rect(layer1->bounds())); |
| 6745 layer2->SetExpectation(false, false); | 6727 layer2->SetExpectation(false, false); |
| 6746 layer2->SetUpdateRect(gfx::Rect(layer1->bounds())); | 6728 layer2->SetUpdateRect(gfx::Rect(layer1->bounds())); |
| 6747 host_impl_->active_tree()->BuildPropertyTreesForTesting(); | 6729 host_impl_->active_tree()->BuildPropertyTreesForTesting(); |
| 6748 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 6730 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 6749 host_impl_->DrawLayers(&frame); | 6731 host_impl_->DrawLayers(&frame); |
| 6750 host_impl_->SwapBuffers(frame); | |
| 6751 EXPECT_TRUE(layer1->quads_appended()); | 6732 EXPECT_TRUE(layer1->quads_appended()); |
| 6752 EXPECT_TRUE(layer2->quads_appended()); | 6733 EXPECT_TRUE(layer2->quads_appended()); |
| 6753 host_impl_->DidDrawAllLayers(frame); | 6734 host_impl_->DidDrawAllLayers(frame); |
| 6754 | 6735 |
| 6755 // Parent layer with translucent content but opaque painting, drawn without | 6736 // Parent layer with translucent content but opaque painting, drawn without |
| 6756 // blending. | 6737 // blending. |
| 6757 // Child layer with opaque content, drawn without blending. | 6738 // Child layer with opaque content, drawn without blending. |
| 6758 layer1->SetContentsOpaque(true); | 6739 layer1->SetContentsOpaque(true); |
| 6759 layer1->SetExpectation(false, false); | 6740 layer1->SetExpectation(false, false); |
| 6760 layer1->SetUpdateRect(gfx::Rect(layer1->bounds())); | 6741 layer1->SetUpdateRect(gfx::Rect(layer1->bounds())); |
| 6761 layer2->SetExpectation(false, false); | 6742 layer2->SetExpectation(false, false); |
| 6762 layer2->SetUpdateRect(gfx::Rect(layer1->bounds())); | 6743 layer2->SetUpdateRect(gfx::Rect(layer1->bounds())); |
| 6763 host_impl_->active_tree()->BuildPropertyTreesForTesting(); | 6744 host_impl_->active_tree()->BuildPropertyTreesForTesting(); |
| 6764 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 6745 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 6765 host_impl_->DrawLayers(&frame); | 6746 host_impl_->DrawLayers(&frame); |
| 6766 host_impl_->SwapBuffers(frame); | |
| 6767 EXPECT_TRUE(layer1->quads_appended()); | 6747 EXPECT_TRUE(layer1->quads_appended()); |
| 6768 EXPECT_TRUE(layer2->quads_appended()); | 6748 EXPECT_TRUE(layer2->quads_appended()); |
| 6769 host_impl_->DidDrawAllLayers(frame); | 6749 host_impl_->DidDrawAllLayers(frame); |
| 6770 | 6750 |
| 6771 // Parent layer with translucent opacity and opaque content. Since it has a | 6751 // Parent layer with translucent opacity and opaque content. Since it has a |
| 6772 // drawing child, it's drawn to a render surface which carries the opacity, | 6752 // drawing child, it's drawn to a render surface which carries the opacity, |
| 6773 // so it's itself drawn without blending. | 6753 // so it's itself drawn without blending. |
| 6774 // Child layer with opaque content, drawn without blending (parent surface | 6754 // Child layer with opaque content, drawn without blending (parent surface |
| 6775 // carries the inherited opacity). | 6755 // carries the inherited opacity). |
| 6776 layer1->SetContentsOpaque(true); | 6756 layer1->SetContentsOpaque(true); |
| 6777 layer1->test_properties()->opacity = 0.5f; | 6757 layer1->test_properties()->opacity = 0.5f; |
| 6778 layer1->NoteLayerPropertyChanged(); | 6758 layer1->NoteLayerPropertyChanged(); |
| 6779 layer1->test_properties()->force_render_surface = true; | 6759 layer1->test_properties()->force_render_surface = true; |
| 6780 layer1->SetExpectation(false, true); | 6760 layer1->SetExpectation(false, true); |
| 6781 layer1->SetUpdateRect(gfx::Rect(layer1->bounds())); | 6761 layer1->SetUpdateRect(gfx::Rect(layer1->bounds())); |
| 6782 layer2->SetExpectation(false, false); | 6762 layer2->SetExpectation(false, false); |
| 6783 layer2->SetUpdateRect(gfx::Rect(layer1->bounds())); | 6763 layer2->SetUpdateRect(gfx::Rect(layer1->bounds())); |
| 6784 FakeLayerTreeHostImpl::RecursiveUpdateNumChildren( | 6764 FakeLayerTreeHostImpl::RecursiveUpdateNumChildren( |
| 6785 host_impl_->active_tree()->root_layer_for_testing()); | 6765 host_impl_->active_tree()->root_layer_for_testing()); |
| 6786 host_impl_->active_tree()->BuildPropertyTreesForTesting(); | 6766 host_impl_->active_tree()->BuildPropertyTreesForTesting(); |
| 6787 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 6767 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 6788 host_impl_->DrawLayers(&frame); | 6768 host_impl_->DrawLayers(&frame); |
| 6789 host_impl_->SwapBuffers(frame); | |
| 6790 EXPECT_TRUE(layer1->quads_appended()); | 6769 EXPECT_TRUE(layer1->quads_appended()); |
| 6791 EXPECT_TRUE(layer2->quads_appended()); | 6770 EXPECT_TRUE(layer2->quads_appended()); |
| 6792 host_impl_->DidDrawAllLayers(frame); | 6771 host_impl_->DidDrawAllLayers(frame); |
| 6793 layer1->test_properties()->force_render_surface = false; | 6772 layer1->test_properties()->force_render_surface = false; |
| 6794 | 6773 |
| 6795 // Draw again, but with child non-opaque, to make sure | 6774 // Draw again, but with child non-opaque, to make sure |
| 6796 // layer1 not culled. | 6775 // layer1 not culled. |
| 6797 layer1->SetContentsOpaque(true); | 6776 layer1->SetContentsOpaque(true); |
| 6798 layer1->test_properties()->opacity = 1.f; | 6777 layer1->test_properties()->opacity = 1.f; |
| 6799 layer1->NoteLayerPropertyChanged(); | 6778 layer1->NoteLayerPropertyChanged(); |
| 6800 layer1->SetExpectation(false, false); | 6779 layer1->SetExpectation(false, false); |
| 6801 layer1->SetUpdateRect(gfx::Rect(layer1->bounds())); | 6780 layer1->SetUpdateRect(gfx::Rect(layer1->bounds())); |
| 6802 layer2->SetContentsOpaque(true); | 6781 layer2->SetContentsOpaque(true); |
| 6803 layer2->test_properties()->opacity = 0.5f; | 6782 layer2->test_properties()->opacity = 0.5f; |
| 6804 layer2->NoteLayerPropertyChanged(); | 6783 layer2->NoteLayerPropertyChanged(); |
| 6805 layer2->SetExpectation(true, false); | 6784 layer2->SetExpectation(true, false); |
| 6806 layer2->SetUpdateRect(gfx::Rect(layer1->bounds())); | 6785 layer2->SetUpdateRect(gfx::Rect(layer1->bounds())); |
| 6807 host_impl_->active_tree()->BuildPropertyTreesForTesting(); | 6786 host_impl_->active_tree()->BuildPropertyTreesForTesting(); |
| 6808 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 6787 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 6809 host_impl_->DrawLayers(&frame); | 6788 host_impl_->DrawLayers(&frame); |
| 6810 host_impl_->SwapBuffers(frame); | |
| 6811 EXPECT_TRUE(layer1->quads_appended()); | 6789 EXPECT_TRUE(layer1->quads_appended()); |
| 6812 EXPECT_TRUE(layer2->quads_appended()); | 6790 EXPECT_TRUE(layer2->quads_appended()); |
| 6813 host_impl_->DidDrawAllLayers(frame); | 6791 host_impl_->DidDrawAllLayers(frame); |
| 6814 | 6792 |
| 6815 // A second way of making the child non-opaque. | 6793 // A second way of making the child non-opaque. |
| 6816 layer1->SetContentsOpaque(true); | 6794 layer1->SetContentsOpaque(true); |
| 6817 layer1->test_properties()->opacity = 1.f; | 6795 layer1->test_properties()->opacity = 1.f; |
| 6818 layer1->NoteLayerPropertyChanged(); | 6796 layer1->NoteLayerPropertyChanged(); |
| 6819 layer1->SetExpectation(false, false); | 6797 layer1->SetExpectation(false, false); |
| 6820 layer1->SetUpdateRect(gfx::Rect(layer1->bounds())); | 6798 layer1->SetUpdateRect(gfx::Rect(layer1->bounds())); |
| 6821 layer2->SetContentsOpaque(false); | 6799 layer2->SetContentsOpaque(false); |
| 6822 layer2->test_properties()->opacity = 1.f; | 6800 layer2->test_properties()->opacity = 1.f; |
| 6823 layer2->NoteLayerPropertyChanged(); | 6801 layer2->NoteLayerPropertyChanged(); |
| 6824 layer2->SetExpectation(true, false); | 6802 layer2->SetExpectation(true, false); |
| 6825 layer2->SetUpdateRect(gfx::Rect(layer1->bounds())); | 6803 layer2->SetUpdateRect(gfx::Rect(layer1->bounds())); |
| 6826 host_impl_->active_tree()->BuildPropertyTreesForTesting(); | 6804 host_impl_->active_tree()->BuildPropertyTreesForTesting(); |
| 6827 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 6805 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 6828 host_impl_->DrawLayers(&frame); | 6806 host_impl_->DrawLayers(&frame); |
| 6829 host_impl_->SwapBuffers(frame); | |
| 6830 EXPECT_TRUE(layer1->quads_appended()); | 6807 EXPECT_TRUE(layer1->quads_appended()); |
| 6831 EXPECT_TRUE(layer2->quads_appended()); | 6808 EXPECT_TRUE(layer2->quads_appended()); |
| 6832 host_impl_->DidDrawAllLayers(frame); | 6809 host_impl_->DidDrawAllLayers(frame); |
| 6833 | 6810 |
| 6834 // And when the layer says its not opaque but is painted opaque, it is not | 6811 // And when the layer says its not opaque but is painted opaque, it is not |
| 6835 // blended. | 6812 // blended. |
| 6836 layer1->SetContentsOpaque(true); | 6813 layer1->SetContentsOpaque(true); |
| 6837 layer1->test_properties()->opacity = 1.f; | 6814 layer1->test_properties()->opacity = 1.f; |
| 6838 layer1->NoteLayerPropertyChanged(); | 6815 layer1->NoteLayerPropertyChanged(); |
| 6839 layer1->SetExpectation(false, false); | 6816 layer1->SetExpectation(false, false); |
| 6840 layer1->SetUpdateRect(gfx::Rect(layer1->bounds())); | 6817 layer1->SetUpdateRect(gfx::Rect(layer1->bounds())); |
| 6841 layer2->SetContentsOpaque(true); | 6818 layer2->SetContentsOpaque(true); |
| 6842 layer2->test_properties()->opacity = 1.f; | 6819 layer2->test_properties()->opacity = 1.f; |
| 6843 layer2->NoteLayerPropertyChanged(); | 6820 layer2->NoteLayerPropertyChanged(); |
| 6844 layer2->SetExpectation(false, false); | 6821 layer2->SetExpectation(false, false); |
| 6845 layer2->SetUpdateRect(gfx::Rect(layer1->bounds())); | 6822 layer2->SetUpdateRect(gfx::Rect(layer1->bounds())); |
| 6846 host_impl_->active_tree()->BuildPropertyTreesForTesting(); | 6823 host_impl_->active_tree()->BuildPropertyTreesForTesting(); |
| 6847 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 6824 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 6848 host_impl_->DrawLayers(&frame); | 6825 host_impl_->DrawLayers(&frame); |
| 6849 host_impl_->SwapBuffers(frame); | |
| 6850 EXPECT_TRUE(layer1->quads_appended()); | 6826 EXPECT_TRUE(layer1->quads_appended()); |
| 6851 EXPECT_TRUE(layer2->quads_appended()); | 6827 EXPECT_TRUE(layer2->quads_appended()); |
| 6852 host_impl_->DidDrawAllLayers(frame); | 6828 host_impl_->DidDrawAllLayers(frame); |
| 6853 | 6829 |
| 6854 // Layer with partially opaque contents, drawn with blending. | 6830 // Layer with partially opaque contents, drawn with blending. |
| 6855 layer1->SetContentsOpaque(false); | 6831 layer1->SetContentsOpaque(false); |
| 6856 layer1->SetQuadRect(gfx::Rect(5, 5, 5, 5)); | 6832 layer1->SetQuadRect(gfx::Rect(5, 5, 5, 5)); |
| 6857 layer1->SetQuadVisibleRect(gfx::Rect(5, 5, 5, 5)); | 6833 layer1->SetQuadVisibleRect(gfx::Rect(5, 5, 5, 5)); |
| 6858 layer1->SetOpaqueContentRect(gfx::Rect(5, 5, 2, 5)); | 6834 layer1->SetOpaqueContentRect(gfx::Rect(5, 5, 2, 5)); |
| 6859 layer1->SetExpectation(true, false); | 6835 layer1->SetExpectation(true, false); |
| 6860 layer1->SetUpdateRect(gfx::Rect(layer1->bounds())); | 6836 layer1->SetUpdateRect(gfx::Rect(layer1->bounds())); |
| 6861 host_impl_->active_tree()->BuildPropertyTreesForTesting(); | 6837 host_impl_->active_tree()->BuildPropertyTreesForTesting(); |
| 6862 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 6838 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 6863 host_impl_->DrawLayers(&frame); | 6839 host_impl_->DrawLayers(&frame); |
| 6864 host_impl_->SwapBuffers(frame); | |
| 6865 EXPECT_TRUE(layer1->quads_appended()); | 6840 EXPECT_TRUE(layer1->quads_appended()); |
| 6866 host_impl_->DidDrawAllLayers(frame); | 6841 host_impl_->DidDrawAllLayers(frame); |
| 6867 | 6842 |
| 6868 // Layer with partially opaque contents partially culled, drawn with blending. | 6843 // Layer with partially opaque contents partially culled, drawn with blending. |
| 6869 layer1->SetContentsOpaque(false); | 6844 layer1->SetContentsOpaque(false); |
| 6870 layer1->SetQuadRect(gfx::Rect(5, 5, 5, 5)); | 6845 layer1->SetQuadRect(gfx::Rect(5, 5, 5, 5)); |
| 6871 layer1->SetQuadVisibleRect(gfx::Rect(5, 5, 5, 2)); | 6846 layer1->SetQuadVisibleRect(gfx::Rect(5, 5, 5, 2)); |
| 6872 layer1->SetOpaqueContentRect(gfx::Rect(5, 5, 2, 5)); | 6847 layer1->SetOpaqueContentRect(gfx::Rect(5, 5, 2, 5)); |
| 6873 layer1->SetExpectation(true, false); | 6848 layer1->SetExpectation(true, false); |
| 6874 layer1->SetUpdateRect(gfx::Rect(layer1->bounds())); | 6849 layer1->SetUpdateRect(gfx::Rect(layer1->bounds())); |
| 6875 host_impl_->active_tree()->BuildPropertyTreesForTesting(); | 6850 host_impl_->active_tree()->BuildPropertyTreesForTesting(); |
| 6876 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 6851 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 6877 host_impl_->DrawLayers(&frame); | 6852 host_impl_->DrawLayers(&frame); |
| 6878 host_impl_->SwapBuffers(frame); | |
| 6879 EXPECT_TRUE(layer1->quads_appended()); | 6853 EXPECT_TRUE(layer1->quads_appended()); |
| 6880 host_impl_->DidDrawAllLayers(frame); | 6854 host_impl_->DidDrawAllLayers(frame); |
| 6881 | 6855 |
| 6882 // Layer with partially opaque contents culled, drawn with blending. | 6856 // Layer with partially opaque contents culled, drawn with blending. |
| 6883 layer1->SetContentsOpaque(false); | 6857 layer1->SetContentsOpaque(false); |
| 6884 layer1->SetQuadRect(gfx::Rect(5, 5, 5, 5)); | 6858 layer1->SetQuadRect(gfx::Rect(5, 5, 5, 5)); |
| 6885 layer1->SetQuadVisibleRect(gfx::Rect(7, 5, 3, 5)); | 6859 layer1->SetQuadVisibleRect(gfx::Rect(7, 5, 3, 5)); |
| 6886 layer1->SetOpaqueContentRect(gfx::Rect(5, 5, 2, 5)); | 6860 layer1->SetOpaqueContentRect(gfx::Rect(5, 5, 2, 5)); |
| 6887 layer1->SetExpectation(true, false); | 6861 layer1->SetExpectation(true, false); |
| 6888 layer1->SetUpdateRect(gfx::Rect(layer1->bounds())); | 6862 layer1->SetUpdateRect(gfx::Rect(layer1->bounds())); |
| 6889 host_impl_->active_tree()->BuildPropertyTreesForTesting(); | 6863 host_impl_->active_tree()->BuildPropertyTreesForTesting(); |
| 6890 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 6864 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 6891 host_impl_->DrawLayers(&frame); | 6865 host_impl_->DrawLayers(&frame); |
| 6892 host_impl_->SwapBuffers(frame); | |
| 6893 EXPECT_TRUE(layer1->quads_appended()); | 6866 EXPECT_TRUE(layer1->quads_appended()); |
| 6894 host_impl_->DidDrawAllLayers(frame); | 6867 host_impl_->DidDrawAllLayers(frame); |
| 6895 | 6868 |
| 6896 // Layer with partially opaque contents and translucent contents culled, drawn | 6869 // Layer with partially opaque contents and translucent contents culled, drawn |
| 6897 // without blending. | 6870 // without blending. |
| 6898 layer1->SetContentsOpaque(false); | 6871 layer1->SetContentsOpaque(false); |
| 6899 layer1->SetQuadRect(gfx::Rect(5, 5, 5, 5)); | 6872 layer1->SetQuadRect(gfx::Rect(5, 5, 5, 5)); |
| 6900 layer1->SetQuadVisibleRect(gfx::Rect(5, 5, 2, 5)); | 6873 layer1->SetQuadVisibleRect(gfx::Rect(5, 5, 2, 5)); |
| 6901 layer1->SetOpaqueContentRect(gfx::Rect(5, 5, 2, 5)); | 6874 layer1->SetOpaqueContentRect(gfx::Rect(5, 5, 2, 5)); |
| 6902 layer1->SetExpectation(false, false); | 6875 layer1->SetExpectation(false, false); |
| 6903 layer1->SetUpdateRect(gfx::Rect(layer1->bounds())); | 6876 layer1->SetUpdateRect(gfx::Rect(layer1->bounds())); |
| 6904 host_impl_->active_tree()->BuildPropertyTreesForTesting(); | 6877 host_impl_->active_tree()->BuildPropertyTreesForTesting(); |
| 6905 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 6878 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 6906 host_impl_->DrawLayers(&frame); | 6879 host_impl_->DrawLayers(&frame); |
| 6907 host_impl_->SwapBuffers(frame); | |
| 6908 EXPECT_TRUE(layer1->quads_appended()); | 6880 EXPECT_TRUE(layer1->quads_appended()); |
| 6909 host_impl_->DidDrawAllLayers(frame); | 6881 host_impl_->DidDrawAllLayers(frame); |
| 6910 } | 6882 } |
| 6911 | 6883 |
| 6912 static bool MayContainVideoBitSetOnFrameData(LayerTreeHostImpl* host_impl) { | 6884 static bool MayContainVideoBitSetOnFrameData(LayerTreeHostImpl* host_impl) { |
| 6913 host_impl->active_tree()->BuildPropertyTreesForTesting(); | 6885 host_impl->active_tree()->BuildPropertyTreesForTesting(); |
| 6914 LayerTreeHostImpl::FrameData frame; | 6886 LayerTreeHostImpl::FrameData frame; |
| 6915 EXPECT_EQ(DRAW_SUCCESS, host_impl->PrepareToDraw(&frame)); | 6887 EXPECT_EQ(DRAW_SUCCESS, host_impl->PrepareToDraw(&frame)); |
| 6916 host_impl->DrawLayers(&frame); | 6888 host_impl->DrawLayers(&frame); |
| 6917 host_impl->SwapBuffers(frame); | |
| 6918 host_impl->DidDrawAllLayers(frame); | 6889 host_impl->DidDrawAllLayers(frame); |
| 6919 return frame.may_contain_video; | 6890 return frame.may_contain_video; |
| 6920 } | 6891 } |
| 6921 | 6892 |
| 6922 TEST_F(LayerTreeHostImplTest, MayContainVideo) { | 6893 TEST_F(LayerTreeHostImplTest, MayContainVideo) { |
| 6923 gfx::Size big_size(1000, 1000); | 6894 gfx::Size big_size(1000, 1000); |
| 6924 host_impl_->SetViewportSize(big_size); | 6895 host_impl_->SetViewportSize(big_size); |
| 6925 | 6896 |
| 6926 int layer_id = 1; | 6897 int layer_id = 1; |
| 6927 host_impl_->active_tree()->SetRootLayerForTesting( | 6898 host_impl_->active_tree()->SetRootLayerForTesting( |
| (...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7204 host_impl_->SetViewportSize(DipSizeToPixelSize(viewport_size_)); | 7175 host_impl_->SetViewportSize(DipSizeToPixelSize(viewport_size_)); |
| 7205 SetupActiveTreeLayers(); | 7176 SetupActiveTreeLayers(); |
| 7206 EXPECT_SCOPED(TestLayerCoversFullViewport()); | 7177 EXPECT_SCOPED(TestLayerCoversFullViewport()); |
| 7207 EXPECT_SCOPED(TestEmptyLayer()); | 7178 EXPECT_SCOPED(TestEmptyLayer()); |
| 7208 EXPECT_SCOPED(TestLayerInMiddleOfViewport()); | 7179 EXPECT_SCOPED(TestLayerInMiddleOfViewport()); |
| 7209 EXPECT_SCOPED(TestLayerIsLargerThanViewport()); | 7180 EXPECT_SCOPED(TestLayerIsLargerThanViewport()); |
| 7210 } | 7181 } |
| 7211 | 7182 |
| 7212 TEST_F(LayerTreeHostImplViewportCoveredTest, ActiveTreeGrowViewportInvalid) { | 7183 TEST_F(LayerTreeHostImplViewportCoveredTest, ActiveTreeGrowViewportInvalid) { |
| 7213 viewport_size_ = gfx::Size(1000, 1000); | 7184 viewport_size_ = gfx::Size(1000, 1000); |
| 7214 skip_draw_layers_in_on_draw_ = true; // Resourceless can't draw tiled quads. | |
| 7215 | 7185 |
| 7216 bool software = true; | 7186 bool software = true; |
| 7217 CreateHostImpl(DefaultSettings(), CreateFakeOutputSurface(software)); | 7187 CreateHostImpl(DefaultSettings(), CreateFakeOutputSurface(software)); |
| 7218 | 7188 |
| 7219 // Pending tree to force active_tree size invalid. Not used otherwise. | 7189 // Pending tree to force active_tree size invalid. Not used otherwise. |
| 7220 host_impl_->CreatePendingTree(); | 7190 host_impl_->CreatePendingTree(); |
| 7221 host_impl_->SetViewportSize(DipSizeToPixelSize(viewport_size_)); | 7191 host_impl_->SetViewportSize(DipSizeToPixelSize(viewport_size_)); |
| 7222 EXPECT_TRUE(host_impl_->active_tree()->ViewportSizeInvalid()); | 7192 EXPECT_TRUE(host_impl_->active_tree()->ViewportSizeInvalid()); |
| 7223 | 7193 |
| 7224 SetupActiveTreeLayers(); | 7194 SetupActiveTreeLayers(); |
| 7225 EXPECT_SCOPED(TestEmptyLayerWithOnDraw()); | 7195 EXPECT_SCOPED(TestEmptyLayerWithOnDraw()); |
| 7226 EXPECT_SCOPED(TestLayerInMiddleOfViewportWithOnDraw()); | 7196 EXPECT_SCOPED(TestLayerInMiddleOfViewportWithOnDraw()); |
| 7227 EXPECT_SCOPED(TestLayerIsLargerThanViewportWithOnDraw()); | 7197 EXPECT_SCOPED(TestLayerIsLargerThanViewportWithOnDraw()); |
| 7228 } | 7198 } |
| 7229 | 7199 |
| 7230 TEST_F(LayerTreeHostImplViewportCoveredTest, ActiveTreeShrinkViewportInvalid) { | 7200 TEST_F(LayerTreeHostImplViewportCoveredTest, ActiveTreeShrinkViewportInvalid) { |
| 7231 viewport_size_ = gfx::Size(1000, 1000); | 7201 viewport_size_ = gfx::Size(1000, 1000); |
| 7232 skip_draw_layers_in_on_draw_ = true; // Resourceless can't draw tiled quads. | |
| 7233 | 7202 |
| 7234 bool software = true; | 7203 bool software = true; |
| 7235 CreateHostImpl(DefaultSettings(), CreateFakeOutputSurface(software)); | 7204 CreateHostImpl(DefaultSettings(), CreateFakeOutputSurface(software)); |
| 7236 | 7205 |
| 7237 // Set larger viewport and activate it to active tree. | 7206 // Set larger viewport and activate it to active tree. |
| 7238 host_impl_->CreatePendingTree(); | 7207 host_impl_->CreatePendingTree(); |
| 7239 gfx::Size larger_viewport(viewport_size_.width() + 100, | 7208 gfx::Size larger_viewport(viewport_size_.width() + 100, |
| 7240 viewport_size_.height() + 100); | 7209 viewport_size_.height() + 100); |
| 7241 host_impl_->SetViewportSize(DipSizeToPixelSize(larger_viewport)); | 7210 host_impl_->SetViewportSize(DipSizeToPixelSize(larger_viewport)); |
| 7242 EXPECT_TRUE(host_impl_->active_tree()->ViewportSizeInvalid()); | 7211 EXPECT_TRUE(host_impl_->active_tree()->ViewportSizeInvalid()); |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7305 root->test_properties()->AddChild(std::move(child)); | 7274 root->test_properties()->AddChild(std::move(child)); |
| 7306 layer_tree_host_impl->active_tree()->SetRootLayerForTesting(std::move(root)); | 7275 layer_tree_host_impl->active_tree()->SetRootLayerForTesting(std::move(root)); |
| 7307 layer_tree_host_impl->active_tree()->BuildPropertyTreesForTesting(); | 7276 layer_tree_host_impl->active_tree()->BuildPropertyTreesForTesting(); |
| 7308 | 7277 |
| 7309 LayerTreeHostImpl::FrameData frame; | 7278 LayerTreeHostImpl::FrameData frame; |
| 7310 | 7279 |
| 7311 // First frame, the entire screen should get swapped. | 7280 // First frame, the entire screen should get swapped. |
| 7312 EXPECT_EQ(DRAW_SUCCESS, layer_tree_host_impl->PrepareToDraw(&frame)); | 7281 EXPECT_EQ(DRAW_SUCCESS, layer_tree_host_impl->PrepareToDraw(&frame)); |
| 7313 layer_tree_host_impl->DrawLayers(&frame); | 7282 layer_tree_host_impl->DrawLayers(&frame); |
| 7314 layer_tree_host_impl->DidDrawAllLayers(frame); | 7283 layer_tree_host_impl->DidDrawAllLayers(frame); |
| 7315 layer_tree_host_impl->SwapBuffers(frame); | |
| 7316 gfx::Rect expected_swap_rect(500, 500); | 7284 gfx::Rect expected_swap_rect(500, 500); |
| 7317 EXPECT_EQ(expected_swap_rect.ToString(), | 7285 EXPECT_EQ(expected_swap_rect.ToString(), |
| 7318 fake_output_surface->last_swap_rect().ToString()); | 7286 fake_output_surface->last_swap_rect().ToString()); |
| 7319 | 7287 |
| 7320 // Second frame, only the damaged area should get swapped. Damage should be | 7288 // Second frame, only the damaged area should get swapped. Damage should be |
| 7321 // the union of old and new child rects: gfx::Rect(26, 28). | 7289 // the union of old and new child rects: gfx::Rect(26, 28). |
| 7322 layer_tree_host_impl->active_tree() | 7290 layer_tree_host_impl->active_tree() |
| 7323 ->root_layer_for_testing() | 7291 ->root_layer_for_testing() |
| 7324 ->test_properties() | 7292 ->test_properties() |
| 7325 ->children[0] | 7293 ->children[0] |
| 7326 ->SetPosition(gfx::PointF()); | 7294 ->SetPosition(gfx::PointF()); |
| 7327 layer_tree_host_impl->active_tree() | 7295 layer_tree_host_impl->active_tree() |
| 7328 ->root_layer_for_testing() | 7296 ->root_layer_for_testing() |
| 7329 ->test_properties() | 7297 ->test_properties() |
| 7330 ->children[0] | 7298 ->children[0] |
| 7331 ->NoteLayerPropertyChanged(); | 7299 ->NoteLayerPropertyChanged(); |
| 7332 layer_tree_host_impl->active_tree()->BuildPropertyTreesForTesting(); | 7300 layer_tree_host_impl->active_tree()->BuildPropertyTreesForTesting(); |
| 7333 EXPECT_EQ(DRAW_SUCCESS, layer_tree_host_impl->PrepareToDraw(&frame)); | 7301 EXPECT_EQ(DRAW_SUCCESS, layer_tree_host_impl->PrepareToDraw(&frame)); |
| 7334 layer_tree_host_impl->DrawLayers(&frame); | 7302 layer_tree_host_impl->DrawLayers(&frame); |
| 7335 host_impl_->DidDrawAllLayers(frame); | 7303 host_impl_->DidDrawAllLayers(frame); |
| 7336 layer_tree_host_impl->SwapBuffers(frame); | |
| 7337 | 7304 |
| 7338 expected_swap_rect = gfx::Rect(26, 28); | 7305 expected_swap_rect = gfx::Rect(26, 28); |
| 7339 EXPECT_EQ(expected_swap_rect.ToString(), | 7306 EXPECT_EQ(expected_swap_rect.ToString(), |
| 7340 fake_output_surface->last_swap_rect().ToString()); | 7307 fake_output_surface->last_swap_rect().ToString()); |
| 7341 | 7308 |
| 7342 layer_tree_host_impl->SetViewportSize(gfx::Size(10, 10)); | 7309 layer_tree_host_impl->SetViewportSize(gfx::Size(10, 10)); |
| 7343 // This will damage everything. | 7310 // This will damage everything. |
| 7344 layer_tree_host_impl->active_tree() | 7311 layer_tree_host_impl->active_tree() |
| 7345 ->root_layer_for_testing() | 7312 ->root_layer_for_testing() |
| 7346 ->SetBackgroundColor(SK_ColorBLACK); | 7313 ->SetBackgroundColor(SK_ColorBLACK); |
| 7347 EXPECT_EQ(DRAW_SUCCESS, layer_tree_host_impl->PrepareToDraw(&frame)); | 7314 EXPECT_EQ(DRAW_SUCCESS, layer_tree_host_impl->PrepareToDraw(&frame)); |
| 7348 layer_tree_host_impl->DrawLayers(&frame); | 7315 layer_tree_host_impl->DrawLayers(&frame); |
| 7349 host_impl_->DidDrawAllLayers(frame); | 7316 host_impl_->DidDrawAllLayers(frame); |
| 7350 layer_tree_host_impl->SwapBuffers(frame); | |
| 7351 | 7317 |
| 7352 expected_swap_rect = gfx::Rect(10, 10); | 7318 expected_swap_rect = gfx::Rect(10, 10); |
| 7353 EXPECT_EQ(expected_swap_rect.ToString(), | 7319 EXPECT_EQ(expected_swap_rect.ToString(), |
| 7354 fake_output_surface->last_swap_rect().ToString()); | 7320 fake_output_surface->last_swap_rect().ToString()); |
| 7355 | 7321 |
| 7356 layer_tree_host_impl->ReleaseOutputSurface(); | 7322 layer_tree_host_impl->ReleaseOutputSurface(); |
| 7357 } | 7323 } |
| 7358 | 7324 |
| 7359 TEST_F(LayerTreeHostImplTest, RootLayerDoesntCreateExtraSurface) { | 7325 TEST_F(LayerTreeHostImplTest, RootLayerDoesntCreateExtraSurface) { |
| 7360 std::unique_ptr<LayerImpl> root = | 7326 std::unique_ptr<LayerImpl> root = |
| (...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7568 | 7534 |
| 7569 host_impl_->active_tree()->SetRootLayerForTesting(std::move(root_layer)); | 7535 host_impl_->active_tree()->SetRootLayerForTesting(std::move(root_layer)); |
| 7570 host_impl_->active_tree()->BuildPropertyTreesForTesting(); | 7536 host_impl_->active_tree()->BuildPropertyTreesForTesting(); |
| 7571 | 7537 |
| 7572 EXPECT_EQ(0u, context3d->NumTextures()); | 7538 EXPECT_EQ(0u, context3d->NumTextures()); |
| 7573 | 7539 |
| 7574 LayerTreeHostImpl::FrameData frame; | 7540 LayerTreeHostImpl::FrameData frame; |
| 7575 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 7541 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 7576 host_impl_->DrawLayers(&frame); | 7542 host_impl_->DrawLayers(&frame); |
| 7577 host_impl_->DidDrawAllLayers(frame); | 7543 host_impl_->DidDrawAllLayers(frame); |
| 7578 host_impl_->SwapBuffers(frame); | |
| 7579 | 7544 |
| 7580 EXPECT_GT(context3d->NumTextures(), 0u); | 7545 EXPECT_GT(context3d->NumTextures(), 0u); |
| 7581 | 7546 |
| 7582 // Kill the layer tree. | 7547 // Kill the layer tree. |
| 7583 host_impl_->active_tree()->DetachLayers(); | 7548 host_impl_->active_tree()->DetachLayers(); |
| 7584 // There should be no textures left in use after. | 7549 // There should be no textures left in use after. |
| 7585 EXPECT_EQ(0u, context3d->NumTextures()); | 7550 EXPECT_EQ(0u, context3d->NumTextures()); |
| 7586 } | 7551 } |
| 7587 | 7552 |
| 7588 class MockDrawQuadsToFillScreenContext : public TestWebGraphicsContext3D { | 7553 class MockDrawQuadsToFillScreenContext : public TestWebGraphicsContext3D { |
| (...skipping 15 matching lines...) Expand all Loading... |
| 7604 host_impl_->active_tree()->set_has_transparent_background(false); | 7569 host_impl_->active_tree()->set_has_transparent_background(false); |
| 7605 LayerTreeHostImpl::FrameData frame; | 7570 LayerTreeHostImpl::FrameData frame; |
| 7606 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 7571 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 7607 { | 7572 { |
| 7608 const auto& root_pass = frame.render_passes.back(); | 7573 const auto& root_pass = frame.render_passes.back(); |
| 7609 ASSERT_EQ(1u, root_pass->quad_list.size()); | 7574 ASSERT_EQ(1u, root_pass->quad_list.size()); |
| 7610 EXPECT_EQ(DrawQuad::SOLID_COLOR, root_pass->quad_list.front()->material); | 7575 EXPECT_EQ(DrawQuad::SOLID_COLOR, root_pass->quad_list.front()->material); |
| 7611 } | 7576 } |
| 7612 host_impl_->DrawLayers(&frame); | 7577 host_impl_->DrawLayers(&frame); |
| 7613 host_impl_->DidDrawAllLayers(frame); | 7578 host_impl_->DidDrawAllLayers(frame); |
| 7614 host_impl_->SwapBuffers(frame); | |
| 7615 | 7579 |
| 7616 // Cause damage so we would draw something if possible. | 7580 // Cause damage so we would draw something if possible. |
| 7617 host_impl_->SetFullViewportDamage(); | 7581 host_impl_->SetFullViewportDamage(); |
| 7618 | 7582 |
| 7619 // Verify no quads are drawn when transparent background is set. | 7583 // Verify no quads are drawn when transparent background is set. |
| 7620 host_impl_->active_tree()->set_has_transparent_background(true); | 7584 host_impl_->active_tree()->set_has_transparent_background(true); |
| 7621 host_impl_->SetFullViewportDamage(); | 7585 host_impl_->SetFullViewportDamage(); |
| 7622 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 7586 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 7623 { | 7587 { |
| 7624 const auto& root_pass = frame.render_passes.back(); | 7588 const auto& root_pass = frame.render_passes.back(); |
| 7625 ASSERT_EQ(0u, root_pass->quad_list.size()); | 7589 ASSERT_EQ(0u, root_pass->quad_list.size()); |
| 7626 } | 7590 } |
| 7627 host_impl_->DrawLayers(&frame); | 7591 host_impl_->DrawLayers(&frame); |
| 7628 host_impl_->DidDrawAllLayers(frame); | 7592 host_impl_->DidDrawAllLayers(frame); |
| 7629 host_impl_->SwapBuffers(frame); | |
| 7630 } | 7593 } |
| 7631 | 7594 |
| 7632 class LayerTreeHostImplTestWithDelegatingRenderer | 7595 class LayerTreeHostImplTestWithDelegatingRenderer |
| 7633 : public LayerTreeHostImplTest { | 7596 : public LayerTreeHostImplTest { |
| 7634 protected: | 7597 protected: |
| 7635 std::unique_ptr<OutputSurface> CreateOutputSurface() override { | 7598 std::unique_ptr<OutputSurface> CreateOutputSurface() override { |
| 7636 return FakeOutputSurface::CreateDelegating3d(); | 7599 return FakeOutputSurface::CreateDelegating3d(); |
| 7637 } | 7600 } |
| 7638 | 7601 |
| 7639 void DrawFrameAndTestDamage(const gfx::Rect& expected_damage) { | 7602 void DrawFrameAndTestDamage(const gfx::Rect& expected_damage) { |
| (...skipping 23 matching lines...) Expand all Loading... |
| 7663 gfx::Rect expected_child_visible_rect(child->bounds()); | 7626 gfx::Rect expected_child_visible_rect(child->bounds()); |
| 7664 EXPECT_EQ(expected_child_visible_rect, | 7627 EXPECT_EQ(expected_child_visible_rect, |
| 7665 root_render_pass->quad_list.front()->visible_rect); | 7628 root_render_pass->quad_list.front()->visible_rect); |
| 7666 | 7629 |
| 7667 LayerImpl* root = host_impl_->active_tree()->root_layer_for_testing(); | 7630 LayerImpl* root = host_impl_->active_tree()->root_layer_for_testing(); |
| 7668 gfx::Rect expected_root_visible_rect(root->bounds()); | 7631 gfx::Rect expected_root_visible_rect(root->bounds()); |
| 7669 EXPECT_EQ(expected_root_visible_rect, | 7632 EXPECT_EQ(expected_root_visible_rect, |
| 7670 root_render_pass->quad_list.ElementAt(1)->visible_rect); | 7633 root_render_pass->quad_list.ElementAt(1)->visible_rect); |
| 7671 } | 7634 } |
| 7672 | 7635 |
| 7673 host_impl_->DrawLayers(&frame); | 7636 EXPECT_EQ(expect_to_draw, host_impl_->DrawLayers(&frame)); |
| 7674 host_impl_->DidDrawAllLayers(frame); | 7637 host_impl_->DidDrawAllLayers(frame); |
| 7675 EXPECT_EQ(expect_to_draw, host_impl_->SwapBuffers(frame)); | |
| 7676 } | 7638 } |
| 7677 }; | 7639 }; |
| 7678 | 7640 |
| 7679 TEST_F(LayerTreeHostImplTestWithDelegatingRenderer, FrameIncludesDamageRect) { | 7641 TEST_F(LayerTreeHostImplTestWithDelegatingRenderer, FrameIncludesDamageRect) { |
| 7680 std::unique_ptr<SolidColorLayerImpl> root = | 7642 std::unique_ptr<SolidColorLayerImpl> root = |
| 7681 SolidColorLayerImpl::Create(host_impl_->active_tree(), 1); | 7643 SolidColorLayerImpl::Create(host_impl_->active_tree(), 1); |
| 7682 root->SetPosition(gfx::PointF()); | 7644 root->SetPosition(gfx::PointF()); |
| 7683 root->SetBounds(gfx::Size(10, 10)); | 7645 root->SetBounds(gfx::Size(10, 10)); |
| 7684 root->SetDrawsContent(true); | 7646 root->SetDrawsContent(true); |
| 7685 root->test_properties()->force_render_surface = true; | 7647 root->test_properties()->force_render_surface = true; |
| (...skipping 364 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8050 LayerImpl* root = host_impl_->active_tree()->root_layer_for_testing(); | 8012 LayerImpl* root = host_impl_->active_tree()->root_layer_for_testing(); |
| 8051 root->test_properties()->copy_requests.push_back( | 8013 root->test_properties()->copy_requests.push_back( |
| 8052 CopyOutputRequest::CreateRequest( | 8014 CopyOutputRequest::CreateRequest( |
| 8053 base::Bind(&ShutdownReleasesContext_Callback))); | 8015 base::Bind(&ShutdownReleasesContext_Callback))); |
| 8054 host_impl_->active_tree()->BuildPropertyTreesForTesting(); | 8016 host_impl_->active_tree()->BuildPropertyTreesForTesting(); |
| 8055 | 8017 |
| 8056 LayerTreeHostImpl::FrameData frame; | 8018 LayerTreeHostImpl::FrameData frame; |
| 8057 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 8019 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 8058 host_impl_->DrawLayers(&frame); | 8020 host_impl_->DrawLayers(&frame); |
| 8059 host_impl_->DidDrawAllLayers(frame); | 8021 host_impl_->DidDrawAllLayers(frame); |
| 8060 host_impl_->SwapBuffers(frame); | |
| 8061 | 8022 |
| 8062 // The CopyOutputResult's callback has a ref on the ContextProvider and a | 8023 // The CopyOutputResult's callback has a ref on the ContextProvider and a |
| 8063 // texture in a texture mailbox. | 8024 // texture in a texture mailbox. |
| 8064 EXPECT_FALSE(context_provider->HasOneRef()); | 8025 EXPECT_FALSE(context_provider->HasOneRef()); |
| 8065 EXPECT_EQ(1u, context_provider->TestContext3d()->NumTextures()); | 8026 EXPECT_EQ(1u, context_provider->TestContext3d()->NumTextures()); |
| 8066 | 8027 |
| 8067 host_impl_->ReleaseOutputSurface(); | 8028 host_impl_->ReleaseOutputSurface(); |
| 8068 host_impl_ = nullptr; | 8029 host_impl_ = nullptr; |
| 8069 | 8030 |
| 8070 // The CopyOutputResult's callback was cancelled, the CopyOutputResult | 8031 // The CopyOutputResult's callback was cancelled, the CopyOutputResult |
| (...skipping 405 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8476 // that is a drawn RSLL member, then we should accept this hit. | 8437 // that is a drawn RSLL member, then we should accept this hit. |
| 8477 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD, | 8438 EXPECT_EQ(InputHandler::SCROLL_ON_IMPL_THREAD, |
| 8478 host_impl_->ScrollBegin(BeginState(gfx::Point()).get(), | 8439 host_impl_->ScrollBegin(BeginState(gfx::Point()).get(), |
| 8479 InputHandler::WHEEL) | 8440 InputHandler::WHEEL) |
| 8480 .thread); | 8441 .thread); |
| 8481 | 8442 |
| 8482 EXPECT_EQ(7, host_impl_->CurrentlyScrollingLayer()->id()); | 8443 EXPECT_EQ(7, host_impl_->CurrentlyScrollingLayer()->id()); |
| 8483 } | 8444 } |
| 8484 | 8445 |
| 8485 // Make sure LatencyInfo carried by LatencyInfoSwapPromise are passed | 8446 // Make sure LatencyInfo carried by LatencyInfoSwapPromise are passed |
| 8486 // to CompositorFrameMetadata after SwapBuffers(); | 8447 // in CompositorFrameMetadata. |
| 8487 TEST_F(LayerTreeHostImplTest, LatencyInfoPassedToCompositorFrameMetadata) { | 8448 TEST_F(LayerTreeHostImplTest, LatencyInfoPassedToCompositorFrameMetadata) { |
| 8488 std::unique_ptr<SolidColorLayerImpl> root = | 8449 std::unique_ptr<SolidColorLayerImpl> root = |
| 8489 SolidColorLayerImpl::Create(host_impl_->active_tree(), 1); | 8450 SolidColorLayerImpl::Create(host_impl_->active_tree(), 1); |
| 8490 root->SetPosition(gfx::PointF()); | 8451 root->SetPosition(gfx::PointF()); |
| 8491 root->SetBounds(gfx::Size(10, 10)); | 8452 root->SetBounds(gfx::Size(10, 10)); |
| 8492 root->SetDrawsContent(true); | 8453 root->SetDrawsContent(true); |
| 8493 root->test_properties()->force_render_surface = true; | 8454 root->test_properties()->force_render_surface = true; |
| 8494 | 8455 |
| 8495 host_impl_->active_tree()->SetRootLayerForTesting(std::move(root)); | 8456 host_impl_->active_tree()->SetRootLayerForTesting(std::move(root)); |
| 8496 host_impl_->active_tree()->BuildPropertyTreesForTesting(); | 8457 host_impl_->active_tree()->BuildPropertyTreesForTesting(); |
| 8497 | 8458 |
| 8498 FakeOutputSurface* fake_output_surface = | 8459 FakeOutputSurface* fake_output_surface = |
| 8499 static_cast<FakeOutputSurface*>(host_impl_->output_surface()); | 8460 static_cast<FakeOutputSurface*>(host_impl_->output_surface()); |
| 8500 | 8461 |
| 8501 ui::LatencyInfo latency_info; | 8462 ui::LatencyInfo latency_info; |
| 8502 latency_info.AddLatencyNumber( | 8463 latency_info.AddLatencyNumber( |
| 8503 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, 0, 0); | 8464 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, 0, 0); |
| 8504 std::unique_ptr<SwapPromise> swap_promise( | 8465 std::unique_ptr<SwapPromise> swap_promise( |
| 8505 new LatencyInfoSwapPromise(latency_info)); | 8466 new LatencyInfoSwapPromise(latency_info)); |
| 8506 host_impl_->active_tree()->QueuePinnedSwapPromise(std::move(swap_promise)); | 8467 host_impl_->active_tree()->QueuePinnedSwapPromise(std::move(swap_promise)); |
| 8507 | 8468 |
| 8508 gfx::Rect full_frame_damage(host_impl_->DrawViewportSize()); | 8469 gfx::Rect full_frame_damage(host_impl_->DrawViewportSize()); |
| 8509 LayerTreeHostImpl::FrameData frame; | 8470 LayerTreeHostImpl::FrameData frame; |
| 8510 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 8471 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 8511 host_impl_->DrawLayers(&frame); | 8472 EXPECT_TRUE(host_impl_->DrawLayers(&frame)); |
| 8512 host_impl_->DidDrawAllLayers(frame); | 8473 host_impl_->DidDrawAllLayers(frame); |
| 8513 EXPECT_TRUE(host_impl_->SwapBuffers(frame)); | |
| 8514 | 8474 |
| 8515 const std::vector<ui::LatencyInfo>& metadata_latency_after = | 8475 const std::vector<ui::LatencyInfo>& metadata_latency_after = |
| 8516 fake_output_surface->last_sent_frame()->metadata.latency_info; | 8476 fake_output_surface->last_sent_frame()->metadata.latency_info; |
| 8517 EXPECT_EQ(1u, metadata_latency_after.size()); | 8477 EXPECT_EQ(1u, metadata_latency_after.size()); |
| 8518 EXPECT_TRUE(metadata_latency_after[0].FindLatency( | 8478 EXPECT_TRUE(metadata_latency_after[0].FindLatency( |
| 8519 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, 0, NULL)); | 8479 ui::INPUT_EVENT_LATENCY_BEGIN_RWH_COMPONENT, 0, NULL)); |
| 8520 } | 8480 } |
| 8521 | 8481 |
| 8522 TEST_F(LayerTreeHostImplTest, SelectionBoundsPassedToCompositorFrameMetadata) { | 8482 TEST_F(LayerTreeHostImplTest, SelectionBoundsPassedToCompositorFrameMetadata) { |
| 8523 int root_layer_id = 1; | 8483 int root_layer_id = 1; |
| (...skipping 21 matching lines...) Expand all Loading... |
| 8545 selection.start.edge_top = selection_top; | 8505 selection.start.edge_top = selection_top; |
| 8546 selection.end = selection.start; | 8506 selection.end = selection.start; |
| 8547 host_impl_->active_tree()->RegisterSelection(selection); | 8507 host_impl_->active_tree()->RegisterSelection(selection); |
| 8548 | 8508 |
| 8549 // Trigger a draw-swap sequence. | 8509 // Trigger a draw-swap sequence. |
| 8550 host_impl_->SetNeedsRedraw(); | 8510 host_impl_->SetNeedsRedraw(); |
| 8551 | 8511 |
| 8552 gfx::Rect full_frame_damage(host_impl_->DrawViewportSize()); | 8512 gfx::Rect full_frame_damage(host_impl_->DrawViewportSize()); |
| 8553 LayerTreeHostImpl::FrameData frame; | 8513 LayerTreeHostImpl::FrameData frame; |
| 8554 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 8514 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 8555 host_impl_->DrawLayers(&frame); | 8515 EXPECT_TRUE(host_impl_->DrawLayers(&frame)); |
| 8556 host_impl_->DidDrawAllLayers(frame); | 8516 host_impl_->DidDrawAllLayers(frame); |
| 8557 EXPECT_TRUE(host_impl_->SwapBuffers(frame)); | |
| 8558 | 8517 |
| 8559 // Ensure the selection bounds have propagated to the frame metadata. | 8518 // Ensure the selection bounds have propagated to the frame metadata. |
| 8560 const Selection<gfx::SelectionBound>& selection_after = | 8519 const Selection<gfx::SelectionBound>& selection_after = |
| 8561 fake_output_surface->last_sent_frame()->metadata.selection; | 8520 fake_output_surface->last_sent_frame()->metadata.selection; |
| 8562 EXPECT_EQ(selection.start.type, selection_after.start.type()); | 8521 EXPECT_EQ(selection.start.type, selection_after.start.type()); |
| 8563 EXPECT_EQ(selection.end.type, selection_after.end.type()); | 8522 EXPECT_EQ(selection.end.type, selection_after.end.type()); |
| 8564 EXPECT_EQ(gfx::PointF(selection_bottom), selection_after.start.edge_bottom()); | 8523 EXPECT_EQ(gfx::PointF(selection_bottom), selection_after.start.edge_bottom()); |
| 8565 EXPECT_EQ(gfx::PointF(selection_top), selection_after.start.edge_top()); | 8524 EXPECT_EQ(gfx::PointF(selection_top), selection_after.start.edge_top()); |
| 8566 EXPECT_TRUE(selection_after.start.visible()); | 8525 EXPECT_TRUE(selection_after.start.visible()); |
| 8567 EXPECT_TRUE(selection_after.start.visible()); | 8526 EXPECT_TRUE(selection_after.start.visible()); |
| (...skipping 2645 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 11213 EXPECT_TRUE(host_impl_->use_gpu_rasterization()); | 11172 EXPECT_TRUE(host_impl_->use_gpu_rasterization()); |
| 11214 | 11173 |
| 11215 // Re-initialize with a software output surface. | 11174 // Re-initialize with a software output surface. |
| 11216 output_surface_ = FakeOutputSurface::CreateDelegatingSoftware(); | 11175 output_surface_ = FakeOutputSurface::CreateDelegatingSoftware(); |
| 11217 host_impl_->InitializeRenderer(output_surface_.get()); | 11176 host_impl_->InitializeRenderer(output_surface_.get()); |
| 11218 EXPECT_FALSE(host_impl_->use_gpu_rasterization()); | 11177 EXPECT_FALSE(host_impl_->use_gpu_rasterization()); |
| 11219 } | 11178 } |
| 11220 | 11179 |
| 11221 } // namespace | 11180 } // namespace |
| 11222 } // namespace cc | 11181 } // namespace cc |
| OLD | NEW |