Chromium Code Reviews| 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 <algorithm> | 7 #include <algorithm> |
| 8 #include <cmath> | 8 #include <cmath> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 112 void TearDown() override {} | 112 void TearDown() override {} |
| 113 | 113 |
| 114 void UpdateRendererCapabilitiesOnImplThread() override {} | 114 void UpdateRendererCapabilitiesOnImplThread() override {} |
| 115 void DidLoseOutputSurfaceOnImplThread() override {} | 115 void DidLoseOutputSurfaceOnImplThread() override {} |
| 116 void CommitVSyncParameters(base::TimeTicks timebase, | 116 void CommitVSyncParameters(base::TimeTicks timebase, |
| 117 base::TimeDelta interval) override {} | 117 base::TimeDelta interval) override {} |
| 118 void SetEstimatedParentDrawTime(base::TimeDelta draw_time) override {} | 118 void SetEstimatedParentDrawTime(base::TimeDelta draw_time) override {} |
| 119 void SetMaxSwapsPendingOnImplThread(int max) override {} | 119 void SetMaxSwapsPendingOnImplThread(int max) override {} |
| 120 void DidSwapBuffersOnImplThread() override {} | 120 void DidSwapBuffersOnImplThread() override {} |
| 121 void DidSwapBuffersCompleteOnImplThread() override {} | 121 void DidSwapBuffersCompleteOnImplThread() override {} |
| 122 void OnResourcelessSoftareDrawStateChanged(bool resourceless_draw) override {} | |
| 123 void OnCanDrawStateChanged(bool can_draw) override { | 122 void OnCanDrawStateChanged(bool can_draw) override { |
| 124 on_can_draw_state_changed_called_ = true; | 123 on_can_draw_state_changed_called_ = true; |
| 125 } | 124 } |
| 126 void NotifyReadyToActivate() override { | 125 void NotifyReadyToActivate() override { |
| 127 did_notify_ready_to_activate_ = true; | 126 did_notify_ready_to_activate_ = true; |
| 128 host_impl_->ActivateSyncTree(); | 127 host_impl_->ActivateSyncTree(); |
| 129 } | 128 } |
| 130 void NotifyReadyToDraw() override {} | 129 void NotifyReadyToDraw() override {} |
| 131 void SetNeedsRedrawOnImplThread() override { did_request_redraw_ = true; } | 130 void SetNeedsRedrawOnImplThread() override { did_request_redraw_ = true; } |
| 132 void SetNeedsRedrawRectOnImplThread(const gfx::Rect& damage_rect) override { | 131 void SetNeedsRedrawRectOnImplThread(const gfx::Rect& damage_rect) override { |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 146 base::TimeDelta delay) override { | 145 base::TimeDelta delay) override { |
| 147 animation_task_ = task; | 146 animation_task_ = task; |
| 148 requested_animation_delay_ = delay; | 147 requested_animation_delay_ = delay; |
| 149 } | 148 } |
| 150 void DidActivateSyncTree() override {} | 149 void DidActivateSyncTree() override {} |
| 151 void WillPrepareTiles() override {} | 150 void WillPrepareTiles() override {} |
| 152 void DidPrepareTiles() override {} | 151 void DidPrepareTiles() override {} |
| 153 void DidCompletePageScaleAnimationOnImplThread() override { | 152 void DidCompletePageScaleAnimationOnImplThread() override { |
| 154 did_complete_page_scale_animation_ = true; | 153 did_complete_page_scale_animation_ = true; |
| 155 } | 154 } |
| 156 void OnDrawForOutputSurface() override {} | 155 void OnDrawForOutputSurface(bool resourceless_software_draw) override { |
| 156 scoped_ptr<LayerTreeHostImpl::FrameData> frame( | |
| 157 new LayerTreeHostImpl::FrameData); | |
| 158 EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(frame.get())); | |
| 159 host_impl_->DrawLayers(frame.get()); | |
| 160 host_impl_->DidDrawAllLayers(*frame); | |
| 161 host_impl_->SwapBuffers(*frame); | |
| 162 last_on_draw_frame_ = frame.Pass(); | |
|
danakj
2015/11/24 21:17:31
std::move (include <utility> too)
boliu
2015/11/24 23:27:38
Done \o/
| |
| 163 } | |
| 157 void PostFrameTimingEventsOnImplThread( | 164 void PostFrameTimingEventsOnImplThread( |
| 158 scoped_ptr<FrameTimingTracker::CompositeTimingSet> composite_events, | 165 scoped_ptr<FrameTimingTracker::CompositeTimingSet> composite_events, |
| 159 scoped_ptr<FrameTimingTracker::MainFrameTimingSet> main_frame_events) | 166 scoped_ptr<FrameTimingTracker::MainFrameTimingSet> main_frame_events) |
| 160 override {} | 167 override {} |
| 161 | 168 |
| 162 void set_reduce_memory_result(bool reduce_memory_result) { | 169 void set_reduce_memory_result(bool reduce_memory_result) { |
| 163 reduce_memory_result_ = reduce_memory_result; | 170 reduce_memory_result_ = reduce_memory_result; |
| 164 } | 171 } |
| 165 | 172 |
| 166 virtual bool CreateHostImpl(const LayerTreeSettings& settings, | 173 virtual bool CreateHostImpl(const LayerTreeSettings& settings, |
| (...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 442 bool on_can_draw_state_changed_called_; | 449 bool on_can_draw_state_changed_called_; |
| 443 bool did_notify_ready_to_activate_; | 450 bool did_notify_ready_to_activate_; |
| 444 bool did_request_commit_; | 451 bool did_request_commit_; |
| 445 bool did_request_redraw_; | 452 bool did_request_redraw_; |
| 446 bool did_request_animate_; | 453 bool did_request_animate_; |
| 447 bool did_request_prepare_tiles_; | 454 bool did_request_prepare_tiles_; |
| 448 bool did_complete_page_scale_animation_; | 455 bool did_complete_page_scale_animation_; |
| 449 bool reduce_memory_result_; | 456 bool reduce_memory_result_; |
| 450 base::Closure animation_task_; | 457 base::Closure animation_task_; |
| 451 base::TimeDelta requested_animation_delay_; | 458 base::TimeDelta requested_animation_delay_; |
| 459 scoped_ptr<LayerTreeHostImpl::FrameData> last_on_draw_frame_; | |
| 452 }; | 460 }; |
| 453 | 461 |
| 454 // A test fixture for new animation timelines tests. | 462 // A test fixture for new animation timelines tests. |
| 455 class LayerTreeHostImplTimelinesTest : public LayerTreeHostImplTest { | 463 class LayerTreeHostImplTimelinesTest : public LayerTreeHostImplTest { |
| 456 public: | 464 public: |
| 457 void SetUp() override { | 465 void SetUp() override { |
| 458 LayerTreeSettings settings = DefaultSettings(); | 466 LayerTreeSettings settings = DefaultSettings(); |
| 459 settings.use_compositor_animation_timelines = true; | 467 settings.use_compositor_animation_timelines = true; |
| 460 CreateHostImpl(settings, CreateOutputSurface()); | 468 CreateHostImpl(settings, CreateOutputSurface()); |
| 461 } | 469 } |
| 462 }; | 470 }; |
| 463 | 471 |
| 464 TEST_F(LayerTreeHostImplTest, NotifyIfCanDrawChanged) { | 472 TEST_F(LayerTreeHostImplTest, NotifyIfCanDrawChanged) { |
| 465 bool always_draw = false; | 473 bool always_draw = false; |
| 466 CheckNotifyCalledIfCanDrawChanged(always_draw); | 474 CheckNotifyCalledIfCanDrawChanged(always_draw); |
| 467 } | 475 } |
| 468 | 476 |
| 469 TEST_F(LayerTreeHostImplTest, CanDrawIncompleteFrames) { | 477 TEST_F(LayerTreeHostImplTest, CanDrawIncompleteFrames) { |
| 470 CreateHostImpl(DefaultSettings(), | 478 CreateHostImpl(DefaultSettings(), |
| 471 FakeOutputSurface::CreateSoftware( | 479 FakeOutputSurface::CreateSoftware( |
| 472 make_scoped_ptr(new SoftwareOutputDevice()))); | 480 make_scoped_ptr(new SoftwareOutputDevice()))); |
| 473 const gfx::Transform external_transform; | |
| 474 const gfx::Rect external_viewport; | |
| 475 const gfx::Rect external_clip; | |
| 476 const bool resourceless_software_draw = true; | 481 const bool resourceless_software_draw = true; |
| 477 host_impl_->SetExternalDrawConstraints( | 482 host_impl_->SetResourcelessSoftwareDrawForTesting(resourceless_software_draw); |
| 478 external_transform, external_viewport, external_clip, external_viewport, | |
| 479 external_transform, resourceless_software_draw); | |
| 480 | 483 |
| 481 bool always_draw = true; | 484 bool always_draw = true; |
| 482 CheckNotifyCalledIfCanDrawChanged(always_draw); | 485 CheckNotifyCalledIfCanDrawChanged(always_draw); |
| 483 } | 486 } |
| 484 | 487 |
| 485 TEST_F(LayerTreeHostImplTest, ScrollDeltaNoLayers) { | 488 TEST_F(LayerTreeHostImplTest, ScrollDeltaNoLayers) { |
| 486 ASSERT_FALSE(host_impl_->active_tree()->root_layer()); | 489 ASSERT_FALSE(host_impl_->active_tree()->root_layer()); |
| 487 | 490 |
| 488 scoped_ptr<ScrollAndScaleSet> scroll_info = host_impl_->ProcessScrollDeltas(); | 491 scoped_ptr<ScrollAndScaleSet> scroll_info = host_impl_->ProcessScrollDeltas(); |
| 489 ASSERT_EQ(scroll_info->scrolls.size(), 0u); | 492 ASSERT_EQ(scroll_info->scrolls.size(), 0u); |
| (...skipping 2635 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3125 TEST_F(LayerTreeHostImplTest, | 3128 TEST_F(LayerTreeHostImplTest, |
| 3126 PrepareToDrawWhenDrawAndSwapFullViewportEveryFrame) { | 3129 PrepareToDrawWhenDrawAndSwapFullViewportEveryFrame) { |
| 3127 CreateHostImpl(DefaultSettings(), | 3130 CreateHostImpl(DefaultSettings(), |
| 3128 FakeOutputSurface::CreateSoftware( | 3131 FakeOutputSurface::CreateSoftware( |
| 3129 make_scoped_ptr(new SoftwareOutputDevice()))); | 3132 make_scoped_ptr(new SoftwareOutputDevice()))); |
| 3130 | 3133 |
| 3131 const gfx::Transform external_transform; | 3134 const gfx::Transform external_transform; |
| 3132 const gfx::Rect external_viewport; | 3135 const gfx::Rect external_viewport; |
| 3133 const gfx::Rect external_clip; | 3136 const gfx::Rect external_clip; |
| 3134 const bool resourceless_software_draw = true; | 3137 const bool resourceless_software_draw = true; |
| 3135 host_impl_->SetExternalDrawConstraints( | 3138 host_impl_->SetExternalDrawConstraints(external_viewport, external_transform); |
| 3136 external_transform, external_viewport, external_clip, external_viewport, | |
| 3137 external_transform, resourceless_software_draw); | |
| 3138 | 3139 |
| 3139 std::vector<PrepareToDrawSuccessTestCase> cases; | 3140 std::vector<PrepareToDrawSuccessTestCase> cases; |
| 3140 | 3141 |
| 3141 // 0. Default case. | 3142 // 0. Default case. |
| 3142 cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS)); | 3143 cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS)); |
| 3143 // 1. Animation with missing tile. | 3144 // 1. Animation with missing tile. |
| 3144 cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS)); | 3145 cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS)); |
| 3145 cases.back().layer_between.has_missing_tile = true; | 3146 cases.back().layer_between.has_missing_tile = true; |
| 3146 cases.back().layer_between.is_animating = true; | 3147 cases.back().layer_between.is_animating = true; |
| 3147 // 2. High res required with incomplete tile. | 3148 // 2. High res required with incomplete tile. |
| 3148 cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS)); | 3149 cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS)); |
| 3149 cases.back().high_res_required = true; | 3150 cases.back().high_res_required = true; |
| 3150 cases.back().layer_between.has_incomplete_tile = true; | 3151 cases.back().layer_between.has_incomplete_tile = true; |
| 3151 // 3. High res required with missing tile. | 3152 // 3. High res required with missing tile. |
| 3152 cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS)); | 3153 cases.push_back(PrepareToDrawSuccessTestCase(DRAW_SUCCESS)); |
| 3153 cases.back().high_res_required = true; | 3154 cases.back().high_res_required = true; |
| 3154 cases.back().layer_between.has_missing_tile = true; | 3155 cases.back().layer_between.has_missing_tile = true; |
| 3155 | 3156 |
| 3156 host_impl_->active_tree()->SetRootLayer( | 3157 host_impl_->active_tree()->SetRootLayer( |
| 3157 DidDrawCheckLayer::Create(host_impl_->active_tree(), 1)); | 3158 DidDrawCheckLayer::Create(host_impl_->active_tree(), 1)); |
| 3158 DidDrawCheckLayer* root = | 3159 DidDrawCheckLayer* root = |
| 3159 static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer()); | 3160 static_cast<DidDrawCheckLayer*>(host_impl_->active_tree()->root_layer()); |
| 3160 root->SetHasRenderSurface(true); | 3161 root->SetHasRenderSurface(true); |
| 3161 | 3162 |
| 3162 LayerTreeHostImpl::FrameData frame; | 3163 host_impl_->OnDraw(external_transform, external_viewport, external_clip, |
| 3163 EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); | 3164 resourceless_software_draw); |
| 3164 host_impl_->DrawLayers(&frame); | |
| 3165 host_impl_->DidDrawAllLayers(frame); | |
| 3166 host_impl_->SwapBuffers(frame); | |
| 3167 | 3165 |
| 3168 for (size_t i = 0; i < cases.size(); ++i) { | 3166 for (size_t i = 0; i < cases.size(); ++i) { |
| 3169 const auto& testcase = cases[i]; | 3167 const auto& testcase = cases[i]; |
| 3170 std::vector<LayerImpl*> to_remove; | 3168 std::vector<LayerImpl*> to_remove; |
| 3171 for (auto* child : root->children()) | 3169 for (auto* child : root->children()) |
| 3172 to_remove.push_back(child); | 3170 to_remove.push_back(child); |
| 3173 for (auto* child : to_remove) | 3171 for (auto* child : to_remove) |
| 3174 root->RemoveChild(child); | 3172 root->RemoveChild(child); |
| 3175 | 3173 |
| 3176 std::ostringstream scope; | 3174 std::ostringstream scope; |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 3200 testcase.layer_after.has_incomplete_tile, | 3198 testcase.layer_after.has_incomplete_tile, |
| 3201 testcase.layer_after.is_animating, host_impl_->resource_provider())); | 3199 testcase.layer_after.is_animating, host_impl_->resource_provider())); |
| 3202 DidDrawCheckLayer* after = | 3200 DidDrawCheckLayer* after = |
| 3203 static_cast<DidDrawCheckLayer*>(root->children().back()); | 3201 static_cast<DidDrawCheckLayer*>(root->children().back()); |
| 3204 if (testcase.layer_after.has_copy_request) | 3202 if (testcase.layer_after.has_copy_request) |
| 3205 after->AddCopyRequest(); | 3203 after->AddCopyRequest(); |
| 3206 | 3204 |
| 3207 if (testcase.high_res_required) | 3205 if (testcase.high_res_required) |
| 3208 host_impl_->SetRequiresHighResToDraw(); | 3206 host_impl_->SetRequiresHighResToDraw(); |
| 3209 | 3207 |
| 3210 LayerTreeHostImpl::FrameData frame; | 3208 host_impl_->OnDraw(external_transform, external_viewport, external_clip, |
| 3211 EXPECT_EQ(testcase.expected_result, PrepareToDrawFrame(&frame)); | 3209 resourceless_software_draw); |
| 3212 host_impl_->DrawLayers(&frame); | |
| 3213 host_impl_->DidDrawAllLayers(frame); | |
| 3214 host_impl_->SwapBuffers(frame); | |
| 3215 } | 3210 } |
| 3216 } | 3211 } |
| 3217 | 3212 |
| 3218 TEST_F(LayerTreeHostImplTest, ScrollRootIgnored) { | 3213 TEST_F(LayerTreeHostImplTest, ScrollRootIgnored) { |
| 3219 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl_->active_tree(), 1); | 3214 scoped_ptr<LayerImpl> root = LayerImpl::Create(host_impl_->active_tree(), 1); |
| 3220 root->SetScrollClipLayer(Layer::INVALID_ID); | 3215 root->SetScrollClipLayer(Layer::INVALID_ID); |
| 3221 root->SetHasRenderSurface(true); | 3216 root->SetHasRenderSurface(true); |
| 3222 host_impl_->active_tree()->SetRootLayer(root.Pass()); | 3217 host_impl_->active_tree()->SetRootLayer(root.Pass()); |
| 3223 DrawFrame(); | 3218 DrawFrame(); |
| 3224 | 3219 |
| (...skipping 2461 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5686 texture_quad->rect.bottom() / gutter_texture_size_pixels.height()); | 5681 texture_quad->rect.bottom() / gutter_texture_size_pixels.height()); |
| 5687 } | 5682 } |
| 5688 } | 5683 } |
| 5689 | 5684 |
| 5690 gfx::Size DipSizeToPixelSize(const gfx::Size& size) { | 5685 gfx::Size DipSizeToPixelSize(const gfx::Size& size) { |
| 5691 return gfx::ScaleToRoundedSize( | 5686 return gfx::ScaleToRoundedSize( |
| 5692 size, host_impl_->active_tree()->device_scale_factor()); | 5687 size, host_impl_->active_tree()->device_scale_factor()); |
| 5693 } | 5688 } |
| 5694 | 5689 |
| 5695 void SetResourcelessSoftwareDraw() { | 5690 void SetResourcelessSoftwareDraw() { |
| 5696 const gfx::Transform external_transform; | |
| 5697 const gfx::Rect external_viewport; | |
| 5698 const gfx::Rect external_clip; | |
| 5699 const bool resourceless_software_draw = true; | 5691 const bool resourceless_software_draw = true; |
| 5700 host_impl_->SetExternalDrawConstraints( | 5692 host_impl_->SetResourcelessSoftwareDrawForTesting( |
| 5701 external_transform, external_viewport, external_clip, external_viewport, | 5693 resourceless_software_draw); |
| 5702 external_transform, resourceless_software_draw); | |
| 5703 } | 5694 } |
| 5704 | 5695 |
| 5705 DrawQuad::Material gutter_quad_material_; | 5696 DrawQuad::Material gutter_quad_material_; |
| 5706 gfx::Size gutter_texture_size_; | 5697 gfx::Size gutter_texture_size_; |
| 5707 gfx::Size viewport_size_; | 5698 gfx::Size viewport_size_; |
| 5708 BlendStateCheckLayer* child_; | 5699 BlendStateCheckLayer* child_; |
| 5709 bool did_activate_pending_tree_; | 5700 bool did_activate_pending_tree_; |
| 5710 }; | 5701 }; |
| 5711 | 5702 |
| 5712 TEST_F(LayerTreeHostImplViewportCoveredTest, ViewportCovered) { | 5703 TEST_F(LayerTreeHostImplViewportCoveredTest, ViewportCovered) { |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 5736 TestEmptyLayer(); | 5727 TestEmptyLayer(); |
| 5737 TestLayerInMiddleOfViewport(); | 5728 TestLayerInMiddleOfViewport(); |
| 5738 TestLayerIsLargerThanViewport(); | 5729 TestLayerIsLargerThanViewport(); |
| 5739 } | 5730 } |
| 5740 | 5731 |
| 5741 TEST_F(LayerTreeHostImplViewportCoveredTest, ActiveTreeGrowViewportInvalid) { | 5732 TEST_F(LayerTreeHostImplViewportCoveredTest, ActiveTreeGrowViewportInvalid) { |
| 5742 viewport_size_ = gfx::Size(1000, 1000); | 5733 viewport_size_ = gfx::Size(1000, 1000); |
| 5743 | 5734 |
| 5744 bool software = true; | 5735 bool software = true; |
| 5745 CreateHostImpl(DefaultSettings(), CreateFakeOutputSurface(software)); | 5736 CreateHostImpl(DefaultSettings(), CreateFakeOutputSurface(software)); |
| 5746 SetResourcelessSoftwareDraw(); | 5737 SetResourcelessSoftwareDraw(); |
|
danakj
2015/11/24 21:17:31
These tests that set resourceless software draw on
boliu
2015/11/24 23:27:38
Err, these tests are weird. They are explicitly dr
danakj
2015/12/10 22:33:54
Can these tests call OnDraw instead?
| |
| 5747 | 5738 |
| 5748 // Pending tree to force active_tree size invalid. Not used otherwise. | 5739 // Pending tree to force active_tree size invalid. Not used otherwise. |
| 5749 host_impl_->CreatePendingTree(); | 5740 host_impl_->CreatePendingTree(); |
| 5750 host_impl_->SetViewportSize(DipSizeToPixelSize(viewport_size_)); | 5741 host_impl_->SetViewportSize(DipSizeToPixelSize(viewport_size_)); |
| 5751 EXPECT_TRUE(host_impl_->active_tree()->ViewportSizeInvalid()); | 5742 EXPECT_TRUE(host_impl_->active_tree()->ViewportSizeInvalid()); |
| 5752 | 5743 |
| 5753 SetupActiveTreeLayers(); | 5744 SetupActiveTreeLayers(); |
| 5754 TestEmptyLayer(); | 5745 TestEmptyLayer(); |
| 5755 TestLayerInMiddleOfViewport(); | 5746 TestLayerInMiddleOfViewport(); |
| 5756 TestLayerIsLargerThanViewport(); | 5747 TestLayerIsLargerThanViewport(); |
| (...skipping 835 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 6592 DefaultSettings(), | 6583 DefaultSettings(), |
| 6593 FakeOutputSurface::CreateSoftware(make_scoped_ptr(software_device)))); | 6584 FakeOutputSurface::CreateSoftware(make_scoped_ptr(software_device)))); |
| 6594 host_impl_->SetViewportSize(gfx::Size(50, 50)); | 6585 host_impl_->SetViewportSize(gfx::Size(50, 50)); |
| 6595 | 6586 |
| 6596 SetupScrollAndContentsLayers(gfx::Size(100, 100)); | 6587 SetupScrollAndContentsLayers(gfx::Size(100, 100)); |
| 6597 | 6588 |
| 6598 const gfx::Transform external_transform; | 6589 const gfx::Transform external_transform; |
| 6599 const gfx::Rect external_viewport; | 6590 const gfx::Rect external_viewport; |
| 6600 const gfx::Rect external_clip; | 6591 const gfx::Rect external_clip; |
| 6601 const bool resourceless_software_draw = true; | 6592 const bool resourceless_software_draw = true; |
| 6602 host_impl_->SetExternalDrawConstraints(external_transform, | 6593 host_impl_->SetExternalDrawConstraints(external_viewport, external_transform); |
| 6603 external_viewport, | |
| 6604 external_clip, | |
| 6605 external_viewport, | |
| 6606 external_transform, | |
| 6607 resourceless_software_draw); | |
| 6608 | 6594 |
| 6609 EXPECT_EQ(0, software_device->frames_began_); | 6595 EXPECT_EQ(0, software_device->frames_began_); |
| 6610 EXPECT_EQ(0, software_device->frames_ended_); | 6596 EXPECT_EQ(0, software_device->frames_ended_); |
| 6611 | 6597 |
| 6612 DrawFrame(); | 6598 host_impl_->OnDraw(external_transform, external_viewport, external_clip, |
| 6599 resourceless_software_draw); | |
| 6613 | 6600 |
| 6614 EXPECT_EQ(1, software_device->frames_began_); | 6601 EXPECT_EQ(1, software_device->frames_began_); |
| 6615 EXPECT_EQ(1, software_device->frames_ended_); | 6602 EXPECT_EQ(1, software_device->frames_ended_); |
| 6616 | 6603 |
| 6617 // Call another API method that is likely to hit nullptr in this mode. | 6604 // Call another API method that is likely to hit nullptr in this mode. |
| 6618 scoped_refptr<base::trace_event::TracedValue> state = | 6605 scoped_refptr<base::trace_event::TracedValue> state = |
| 6619 make_scoped_refptr(new base::trace_event::TracedValue()); | 6606 make_scoped_refptr(new base::trace_event::TracedValue()); |
| 6620 host_impl_->ActivationStateAsValueInto(state.get()); | 6607 host_impl_->ActivationStateAsValueInto(state.get()); |
| 6621 } | 6608 } |
| 6622 | 6609 |
| 6623 TEST_F(LayerTreeHostImplTest, | 6610 TEST_F(LayerTreeHostImplTest, |
| 6624 ForcedDrawToSoftwareDeviceSkipsUnsupportedLayers) { | 6611 ForcedDrawToSoftwareDeviceSkipsUnsupportedLayers) { |
| 6625 set_reduce_memory_result(false); | 6612 set_reduce_memory_result(false); |
| 6626 EXPECT_TRUE(CreateHostImpl(DefaultSettings(), | 6613 EXPECT_TRUE(CreateHostImpl(DefaultSettings(), |
| 6627 FakeOutputSurface::CreateSoftware( | 6614 FakeOutputSurface::CreateSoftware( |
| 6628 make_scoped_ptr(new CountingSoftwareDevice)))); | 6615 make_scoped_ptr(new CountingSoftwareDevice)))); |
| 6629 | 6616 |
| 6630 const gfx::Transform external_transform; | 6617 const gfx::Transform external_transform; |
| 6631 const gfx::Rect external_viewport; | 6618 const gfx::Rect external_viewport; |
| 6632 const gfx::Rect external_clip; | 6619 const gfx::Rect external_clip; |
| 6633 const bool resourceless_software_draw = true; | 6620 const bool resourceless_software_draw = true; |
| 6634 host_impl_->SetExternalDrawConstraints(external_transform, | 6621 host_impl_->SetExternalDrawConstraints(external_viewport, external_transform); |
| 6635 external_viewport, | |
| 6636 external_clip, | |
| 6637 external_viewport, | |
| 6638 external_transform, | |
| 6639 resourceless_software_draw); | |
| 6640 | 6622 |
| 6641 // SolidColorLayerImpl will be drawn. | 6623 // SolidColorLayerImpl will be drawn. |
| 6642 scoped_ptr<SolidColorLayerImpl> root_layer = | 6624 scoped_ptr<SolidColorLayerImpl> root_layer = |
| 6643 SolidColorLayerImpl::Create(host_impl_->active_tree(), 1); | 6625 SolidColorLayerImpl::Create(host_impl_->active_tree(), 1); |
| 6644 | 6626 |
| 6645 // VideoLayerImpl will not be drawn. | 6627 // VideoLayerImpl will not be drawn. |
| 6646 FakeVideoFrameProvider provider; | 6628 FakeVideoFrameProvider provider; |
| 6647 scoped_ptr<VideoLayerImpl> video_layer = VideoLayerImpl::Create( | 6629 scoped_ptr<VideoLayerImpl> video_layer = VideoLayerImpl::Create( |
| 6648 host_impl_->active_tree(), 2, &provider, media::VIDEO_ROTATION_0); | 6630 host_impl_->active_tree(), 2, &provider, media::VIDEO_ROTATION_0); |
| 6649 video_layer->SetBounds(gfx::Size(10, 10)); | 6631 video_layer->SetBounds(gfx::Size(10, 10)); |
| 6650 video_layer->SetDrawsContent(true); | 6632 video_layer->SetDrawsContent(true); |
| 6651 root_layer->AddChild(video_layer.Pass()); | 6633 root_layer->AddChild(video_layer.Pass()); |
| 6652 SetupRootLayerImpl(root_layer.Pass()); | 6634 SetupRootLayerImpl(root_layer.Pass()); |
| 6653 | 6635 |
| 6654 LayerTreeHostImpl::FrameData frame; | 6636 host_impl_->OnDraw(external_transform, external_viewport, external_clip, |
| 6655 EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); | 6637 resourceless_software_draw); |
| 6656 host_impl_->DrawLayers(&frame); | |
| 6657 host_impl_->DidDrawAllLayers(frame); | |
| 6658 | 6638 |
| 6659 EXPECT_EQ(1u, frame.will_draw_layers.size()); | 6639 EXPECT_EQ(1u, last_on_draw_frame_->will_draw_layers.size()); |
| 6660 EXPECT_EQ(host_impl_->active_tree()->root_layer(), frame.will_draw_layers[0]); | 6640 EXPECT_EQ(host_impl_->active_tree()->root_layer(), |
| 6641 last_on_draw_frame_->will_draw_layers[0]); | |
| 6661 } | 6642 } |
| 6662 | 6643 |
| 6663 // Checks that we have a non-0 default allocation if we pass a context that | 6644 // Checks that we have a non-0 default allocation if we pass a context that |
| 6664 // doesn't support memory management extensions. | 6645 // doesn't support memory management extensions. |
| 6665 TEST_F(LayerTreeHostImplTest, DefaultMemoryAllocation) { | 6646 TEST_F(LayerTreeHostImplTest, DefaultMemoryAllocation) { |
| 6666 LayerTreeSettings settings; | 6647 LayerTreeSettings settings; |
| 6667 host_impl_ = LayerTreeHostImpl::Create( | 6648 host_impl_ = LayerTreeHostImpl::Create( |
| 6668 settings, this, &task_runner_provider_, &stats_instrumentation_, | 6649 settings, this, &task_runner_provider_, &stats_instrumentation_, |
| 6669 &shared_bitmap_manager_, &gpu_memory_buffer_manager_, &task_graph_runner_, | 6650 &shared_bitmap_manager_, &gpu_memory_buffer_manager_, &task_graph_runner_, |
| 6670 0); | 6651 0); |
| (...skipping 1499 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 8170 } | 8151 } |
| 8171 | 8152 |
| 8172 TEST_F(LayerTreeHostImplTest, ExternalTransformReflectedInNextDraw) { | 8153 TEST_F(LayerTreeHostImplTest, ExternalTransformReflectedInNextDraw) { |
| 8173 const gfx::Size layer_size(100, 100); | 8154 const gfx::Size layer_size(100, 100); |
| 8174 gfx::Transform external_transform; | 8155 gfx::Transform external_transform; |
| 8175 const gfx::Rect external_viewport(layer_size); | 8156 const gfx::Rect external_viewport(layer_size); |
| 8176 const gfx::Rect external_clip(layer_size); | 8157 const gfx::Rect external_clip(layer_size); |
| 8177 const bool resourceless_software_draw = false; | 8158 const bool resourceless_software_draw = false; |
| 8178 LayerImpl* layer = SetupScrollAndContentsLayers(layer_size); | 8159 LayerImpl* layer = SetupScrollAndContentsLayers(layer_size); |
| 8179 | 8160 |
| 8180 host_impl_->SetExternalDrawConstraints(external_transform, | 8161 host_impl_->SetExternalDrawConstraints(external_viewport, external_transform); |
| 8181 external_viewport, | 8162 host_impl_->OnDraw(external_transform, external_viewport, external_clip, |
| 8182 external_clip, | 8163 resourceless_software_draw); |
| 8183 external_viewport, | |
| 8184 external_transform, | |
| 8185 resourceless_software_draw); | |
| 8186 DrawFrame(); | |
| 8187 EXPECT_TRANSFORMATION_MATRIX_EQ( | 8164 EXPECT_TRANSFORMATION_MATRIX_EQ( |
| 8188 external_transform, layer->draw_properties().target_space_transform); | 8165 external_transform, layer->draw_properties().target_space_transform); |
| 8189 | 8166 |
| 8190 external_transform.Translate(20, 20); | 8167 external_transform.Translate(20, 20); |
| 8191 host_impl_->SetExternalDrawConstraints(external_transform, | 8168 host_impl_->SetExternalDrawConstraints(external_viewport, external_transform); |
| 8192 external_viewport, | 8169 host_impl_->OnDraw(external_transform, external_viewport, external_clip, |
| 8193 external_clip, | 8170 resourceless_software_draw); |
| 8194 external_viewport, | |
| 8195 external_transform, | |
| 8196 resourceless_software_draw); | |
| 8197 DrawFrame(); | |
| 8198 EXPECT_TRANSFORMATION_MATRIX_EQ( | 8171 EXPECT_TRANSFORMATION_MATRIX_EQ( |
| 8199 external_transform, layer->draw_properties().target_space_transform); | 8172 external_transform, layer->draw_properties().target_space_transform); |
| 8200 } | 8173 } |
| 8201 | 8174 |
| 8202 TEST_F(LayerTreeHostImplTest, ExternalTransformSetNeedsRedraw) { | 8175 TEST_F(LayerTreeHostImplTest, ExternalTransformSetNeedsRedraw) { |
| 8203 SetupRootLayerImpl(LayerImpl::Create(host_impl_->active_tree(), 1)); | 8176 SetupRootLayerImpl(LayerImpl::Create(host_impl_->active_tree(), 1)); |
| 8204 | 8177 |
| 8205 const gfx::Size layer_size(100, 100); | 8178 const gfx::Size viewport_size(100, 100); |
| 8206 const gfx::Transform external_transform; | 8179 host_impl_->SetViewportSize(viewport_size); |
| 8207 const gfx::Rect external_viewport(layer_size); | 8180 |
| 8208 const gfx::Rect external_clip1(layer_size); | 8181 const gfx::Transform transform_for_tile_priority; |
| 8209 const gfx::Rect external_clip2(50, 50); | 8182 const gfx::Transform draw_transform; |
| 8183 const gfx::Rect viewport_for_tile_priority1(viewport_size); | |
| 8184 const gfx::Rect viewport_for_tile_priority2(50, 50); | |
| 8185 const gfx::Rect draw_viewport(viewport_size); | |
| 8186 const gfx::Rect clip(viewport_size); | |
| 8210 bool resourceless_software_draw = false; | 8187 bool resourceless_software_draw = false; |
| 8211 | 8188 |
| 8212 resourceless_software_draw = false; | 8189 // Clear any damage. |
| 8213 host_impl_->SetExternalDrawConstraints( | 8190 host_impl_->SetExternalDrawConstraints(viewport_for_tile_priority1, |
| 8214 external_transform, external_viewport, external_clip1, external_viewport, | 8191 transform_for_tile_priority); |
| 8215 external_transform, resourceless_software_draw); | 8192 host_impl_->OnDraw(draw_transform, draw_viewport, clip, |
| 8216 { | 8193 resourceless_software_draw); |
| 8217 // Clear any damage. | 8194 last_on_draw_frame_.reset(); |
| 8218 LayerTreeHostImpl::FrameData frame; | |
| 8219 EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); | |
| 8220 host_impl_->DrawLayers(&frame); | |
| 8221 host_impl_->DidDrawAllLayers(frame); | |
| 8222 host_impl_->SwapBuffers(frame); | |
| 8223 } | |
| 8224 | 8195 |
| 8225 // Setting new constraints needs redraw. | 8196 // Setting new constraints needs redraw. |
| 8226 did_request_redraw_ = false; | 8197 did_request_redraw_ = false; |
| 8227 host_impl_->SetExternalDrawConstraints( | 8198 host_impl_->SetExternalDrawConstraints(viewport_for_tile_priority2, |
| 8228 external_transform, external_viewport, external_clip2, external_viewport, | 8199 transform_for_tile_priority); |
| 8229 external_transform, resourceless_software_draw); | |
| 8230 EXPECT_TRUE(did_request_redraw_); | 8200 EXPECT_TRUE(did_request_redraw_); |
| 8231 { | 8201 host_impl_->OnDraw(draw_transform, draw_viewport, clip, |
| 8232 LayerTreeHostImpl::FrameData frame; | 8202 resourceless_software_draw); |
| 8233 EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); | 8203 EXPECT_FALSE(last_on_draw_frame_->has_no_damage); |
| 8234 EXPECT_FALSE(frame.has_no_damage); | 8204 } |
| 8235 host_impl_->DrawLayers(&frame); | 8205 |
| 8236 host_impl_->DidDrawAllLayers(frame); | 8206 TEST_F(LayerTreeHostImplTest, OnDrawConstraintSetNeedsRedraw) { |
| 8237 host_impl_->SwapBuffers(frame); | 8207 SetupRootLayerImpl(LayerImpl::Create(host_impl_->active_tree(), 1)); |
| 8208 | |
| 8209 const gfx::Size viewport_size(100, 100); | |
| 8210 host_impl_->SetViewportSize(viewport_size); | |
| 8211 | |
| 8212 const gfx::Transform draw_transform; | |
| 8213 const gfx::Rect draw_viewport1(viewport_size); | |
| 8214 const gfx::Rect draw_viewport2(50, 50); | |
| 8215 const gfx::Rect clip(viewport_size); | |
| 8216 bool resourceless_software_draw = false; | |
| 8217 | |
| 8218 // Clear any damage. | |
| 8219 host_impl_->OnDraw(draw_transform, draw_viewport1, clip, | |
| 8220 resourceless_software_draw); | |
| 8221 last_on_draw_frame_.reset(); | |
| 8222 | |
| 8223 // Same draw params does not swap. | |
| 8224 did_request_redraw_ = false; | |
| 8225 host_impl_->OnDraw(draw_transform, draw_viewport1, clip, | |
| 8226 resourceless_software_draw); | |
| 8227 EXPECT_FALSE(did_request_redraw_); | |
| 8228 EXPECT_TRUE(last_on_draw_frame_->has_no_damage); | |
| 8229 last_on_draw_frame_.reset(); | |
| 8230 | |
| 8231 // Different draw params does swap. | |
| 8232 did_request_redraw_ = false; | |
| 8233 host_impl_->OnDraw(draw_transform, draw_viewport2, clip, | |
| 8234 resourceless_software_draw); | |
| 8235 EXPECT_TRUE(did_request_redraw_); | |
| 8236 EXPECT_FALSE(last_on_draw_frame_->has_no_damage); | |
| 8237 } | |
| 8238 | |
| 8239 class ResourcelessSoftwareLayerTreeHostImplTest : public LayerTreeHostImplTest { | |
| 8240 protected: | |
| 8241 scoped_ptr<OutputSurface> CreateOutputSurface() override { | |
| 8242 return FakeOutputSurface::Create3DSoftware(); | |
| 8238 } | 8243 } |
| 8244 }; | |
| 8239 | 8245 |
| 8240 // Resourceless software draw toggles do not need redraw. Damage is | 8246 TEST_F(ResourcelessSoftwareLayerTreeHostImplTest, |
| 8241 // set externally by SynchronousCompositorOutputSurface in this case. | 8247 ResourcelessSoftwareSetNeedsRedraw) { |
| 8248 SetupRootLayerImpl(LayerImpl::Create(host_impl_->active_tree(), 1)); | |
| 8242 | 8249 |
| 8243 // Setting resourceless_software_draw do not need redraw. | 8250 const gfx::Size viewport_size(100, 100); |
| 8244 did_request_redraw_ = false; | 8251 host_impl_->SetViewportSize(viewport_size); |
| 8252 | |
| 8253 const gfx::Transform draw_transform; | |
| 8254 const gfx::Rect draw_viewport(viewport_size); | |
| 8255 const gfx::Rect clip(viewport_size); | |
| 8256 bool resourceless_software_draw = false; | |
| 8257 | |
| 8258 // Clear any damage. | |
| 8259 host_impl_->OnDraw(draw_transform, draw_viewport, clip, | |
| 8260 resourceless_software_draw); | |
| 8261 last_on_draw_frame_.reset(); | |
| 8262 | |
| 8263 // Always swap even if same draw params. | |
| 8245 resourceless_software_draw = true; | 8264 resourceless_software_draw = true; |
| 8246 host_impl_->SetExternalDrawConstraints( | 8265 host_impl_->OnDraw(draw_transform, draw_viewport, clip, |
| 8247 external_transform, external_viewport, external_clip1, external_viewport, | 8266 resourceless_software_draw); |
| 8248 external_transform, resourceless_software_draw); | 8267 EXPECT_FALSE(last_on_draw_frame_->has_no_damage); |
| 8249 EXPECT_FALSE(did_request_redraw_); | 8268 last_on_draw_frame_.reset(); |
| 8250 // Can't call PrepareToDrawFrame with no change for resourceless software | |
| 8251 // draw. | |
| 8252 | 8269 |
| 8253 // Unsetting resourceless_software_draw do not need redraw. | 8270 // Next hardware draw has damage. |
| 8254 did_request_redraw_ = false; | |
| 8255 resourceless_software_draw = false; | 8271 resourceless_software_draw = false; |
| 8256 host_impl_->SetExternalDrawConstraints( | 8272 host_impl_->OnDraw(draw_transform, draw_viewport, clip, |
| 8257 external_transform, external_viewport, external_clip2, external_viewport, | 8273 resourceless_software_draw); |
| 8258 external_transform, resourceless_software_draw); | 8274 EXPECT_FALSE(last_on_draw_frame_->has_no_damage); |
| 8259 EXPECT_FALSE(did_request_redraw_); | |
| 8260 { | |
| 8261 LayerTreeHostImpl::FrameData frame; | |
| 8262 EXPECT_EQ(DRAW_SUCCESS, PrepareToDrawFrame(&frame)); | |
| 8263 EXPECT_TRUE(frame.has_no_damage); | |
| 8264 } | |
| 8265 } | 8275 } |
| 8266 | 8276 |
| 8267 TEST_F(LayerTreeHostImplTest, ExternalViewportAffectsVisibleRects) { | 8277 TEST_F(LayerTreeHostImplTest, ExternalViewportAffectsVisibleRects) { |
| 8268 const gfx::Size layer_size(100, 100); | 8278 const gfx::Size layer_size(100, 100); |
| 8269 SetupScrollAndContentsLayers(layer_size); | 8279 SetupScrollAndContentsLayers(layer_size); |
| 8270 LayerImpl* content_layer = | 8280 LayerImpl* content_layer = |
| 8271 host_impl_->active_tree()->OuterViewportScrollLayer()->children()[0]; | 8281 host_impl_->active_tree()->OuterViewportScrollLayer()->children()[0]; |
| 8272 RebuildPropertyTrees(); | 8282 RebuildPropertyTrees(); |
| 8273 | 8283 |
| 8274 bool update_lcd_text = false; | 8284 bool update_lcd_text = false; |
| 8275 | 8285 |
| 8276 host_impl_->SetViewportSize(gfx::Size(90, 90)); | 8286 host_impl_->SetViewportSize(gfx::Size(90, 90)); |
| 8277 host_impl_->active_tree()->UpdateDrawProperties(update_lcd_text); | 8287 host_impl_->active_tree()->UpdateDrawProperties(update_lcd_text); |
| 8278 EXPECT_EQ(gfx::Rect(90, 90), content_layer->visible_layer_rect()); | 8288 EXPECT_EQ(gfx::Rect(90, 90), content_layer->visible_layer_rect()); |
| 8279 | 8289 |
| 8280 gfx::Transform external_transform; | 8290 gfx::Transform external_transform; |
| 8281 gfx::Rect external_viewport(10, 20); | 8291 gfx::Rect external_viewport(10, 20); |
| 8282 gfx::Rect external_clip(layer_size); | 8292 gfx::Rect external_clip(layer_size); |
| 8283 bool resourceless_software_draw = false; | 8293 bool resourceless_software_draw = false; |
| 8284 host_impl_->SetExternalDrawConstraints( | 8294 host_impl_->SetExternalDrawConstraints(external_viewport, external_transform); |
| 8285 external_transform, external_viewport, external_clip, external_viewport, | 8295 host_impl_->OnDraw(external_transform, external_viewport, external_clip, |
| 8286 external_transform, resourceless_software_draw); | 8296 resourceless_software_draw); |
| 8287 | |
| 8288 // Visible rects should now be clipped by the external viewport. | |
| 8289 host_impl_->active_tree()->UpdateDrawProperties(update_lcd_text); | |
| 8290 EXPECT_EQ(gfx::Rect(10, 20), content_layer->visible_layer_rect()); | 8297 EXPECT_EQ(gfx::Rect(10, 20), content_layer->visible_layer_rect()); |
| 8291 | 8298 |
| 8292 // Clear the external viewport. | 8299 // Clear the external viewport. |
| 8293 external_viewport = gfx::Rect(); | 8300 external_viewport = gfx::Rect(); |
| 8294 host_impl_->SetExternalDrawConstraints( | 8301 host_impl_->SetExternalDrawConstraints(external_viewport, external_transform); |
| 8295 external_transform, external_viewport, external_clip, external_viewport, | |
| 8296 external_transform, resourceless_software_draw); | |
| 8297 | 8302 |
| 8298 host_impl_->active_tree()->UpdateDrawProperties(update_lcd_text); | 8303 host_impl_->OnDraw(external_transform, external_viewport, external_clip, |
| 8304 resourceless_software_draw); | |
| 8299 EXPECT_EQ(gfx::Rect(90, 90), content_layer->visible_layer_rect()); | 8305 EXPECT_EQ(gfx::Rect(90, 90), content_layer->visible_layer_rect()); |
| 8300 } | 8306 } |
| 8301 | 8307 |
| 8302 TEST_F(LayerTreeHostImplTest, ExternalTransformAffectsVisibleRects) { | 8308 TEST_F(LayerTreeHostImplTest, ExternalTransformAffectsVisibleRects) { |
| 8303 const gfx::Size layer_size(100, 100); | 8309 const gfx::Size layer_size(100, 100); |
| 8304 SetupScrollAndContentsLayers(layer_size); | 8310 SetupScrollAndContentsLayers(layer_size); |
| 8305 LayerImpl* content_layer = | 8311 LayerImpl* content_layer = |
| 8306 host_impl_->active_tree()->OuterViewportScrollLayer()->children()[0]; | 8312 host_impl_->active_tree()->OuterViewportScrollLayer()->children()[0]; |
| 8307 RebuildPropertyTrees(); | 8313 RebuildPropertyTrees(); |
| 8308 | 8314 |
| 8309 bool update_lcd_text = false; | 8315 bool update_lcd_text = false; |
| 8310 | 8316 |
| 8311 host_impl_->SetViewportSize(gfx::Size(50, 50)); | 8317 host_impl_->SetViewportSize(gfx::Size(50, 50)); |
| 8312 host_impl_->active_tree()->UpdateDrawProperties(update_lcd_text); | 8318 host_impl_->active_tree()->UpdateDrawProperties(update_lcd_text); |
| 8313 EXPECT_EQ(gfx::Rect(50, 50), content_layer->visible_layer_rect()); | 8319 EXPECT_EQ(gfx::Rect(50, 50), content_layer->visible_layer_rect()); |
| 8314 | 8320 |
| 8315 gfx::Transform external_transform; | 8321 gfx::Transform external_transform; |
| 8316 external_transform.Translate(10, 10); | 8322 external_transform.Translate(10, 10); |
| 8317 external_transform.Scale(2, 2); | 8323 external_transform.Scale(2, 2); |
| 8318 gfx::Rect external_viewport; | 8324 gfx::Rect external_viewport; |
| 8319 gfx::Rect external_clip(layer_size); | 8325 gfx::Rect external_clip(layer_size); |
| 8320 bool resourceless_software_draw = false; | 8326 bool resourceless_software_draw = false; |
| 8321 host_impl_->SetExternalDrawConstraints( | 8327 host_impl_->SetExternalDrawConstraints(external_viewport, external_transform); |
| 8322 external_transform, external_viewport, external_clip, external_viewport, | |
| 8323 external_transform, resourceless_software_draw); | |
| 8324 | 8328 |
| 8325 // Visible rects should now be shifted and scaled because of the external | 8329 // Visible rects should now be shifted and scaled because of the external |
| 8326 // transform. | 8330 // transform. |
| 8327 host_impl_->active_tree()->UpdateDrawProperties(update_lcd_text); | 8331 host_impl_->OnDraw(external_transform, external_viewport, external_clip, |
| 8332 resourceless_software_draw); | |
| 8328 EXPECT_EQ(gfx::Rect(20, 20), content_layer->visible_layer_rect()); | 8333 EXPECT_EQ(gfx::Rect(20, 20), content_layer->visible_layer_rect()); |
| 8329 | 8334 |
| 8330 // Clear the external transform. | 8335 // Clear the external transform. |
| 8331 external_transform = gfx::Transform(); | 8336 external_transform = gfx::Transform(); |
| 8332 host_impl_->SetExternalDrawConstraints( | 8337 host_impl_->SetExternalDrawConstraints(external_viewport, external_transform); |
| 8333 external_transform, external_viewport, external_clip, external_viewport, | |
| 8334 external_transform, resourceless_software_draw); | |
| 8335 | 8338 |
| 8336 host_impl_->active_tree()->UpdateDrawProperties(update_lcd_text); | 8339 host_impl_->OnDraw(external_transform, external_viewport, external_clip, |
| 8340 resourceless_software_draw); | |
| 8337 EXPECT_EQ(gfx::Rect(50, 50), content_layer->visible_layer_rect()); | 8341 EXPECT_EQ(gfx::Rect(50, 50), content_layer->visible_layer_rect()); |
| 8338 } | 8342 } |
| 8339 | 8343 |
| 8340 TEST_F(LayerTreeHostImplTest, ExternalTransformAffectsSublayerScaleFactor) { | 8344 TEST_F(LayerTreeHostImplTest, ExternalTransformAffectsSublayerScaleFactor) { |
| 8341 const gfx::Size layer_size(100, 100); | 8345 const gfx::Size layer_size(100, 100); |
| 8342 SetupScrollAndContentsLayers(layer_size); | 8346 SetupScrollAndContentsLayers(layer_size); |
| 8343 LayerImpl* content_layer = | 8347 LayerImpl* content_layer = |
| 8344 host_impl_->active_tree()->OuterViewportScrollLayer()->children()[0]; | 8348 host_impl_->active_tree()->OuterViewportScrollLayer()->children()[0]; |
| 8345 content_layer->AddChild(LayerImpl::Create(host_impl_->active_tree(), 100)); | 8349 content_layer->AddChild(LayerImpl::Create(host_impl_->active_tree(), 100)); |
| 8346 LayerImpl* test_layer = host_impl_->active_tree()->LayerById(100); | 8350 LayerImpl* test_layer = host_impl_->active_tree()->LayerById(100); |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 8360 host_impl_->active_tree()->property_trees()->transform_tree.Node( | 8364 host_impl_->active_tree()->property_trees()->transform_tree.Node( |
| 8361 test_layer->transform_tree_index()); | 8365 test_layer->transform_tree_index()); |
| 8362 EXPECT_EQ(node->data.sublayer_scale, gfx::Vector2dF(1.f, 1.f)); | 8366 EXPECT_EQ(node->data.sublayer_scale, gfx::Vector2dF(1.f, 1.f)); |
| 8363 | 8367 |
| 8364 gfx::Transform external_transform; | 8368 gfx::Transform external_transform; |
| 8365 external_transform.Translate(10, 10); | 8369 external_transform.Translate(10, 10); |
| 8366 external_transform.Scale(2, 2); | 8370 external_transform.Scale(2, 2); |
| 8367 gfx::Rect external_viewport; | 8371 gfx::Rect external_viewport; |
| 8368 gfx::Rect external_clip(layer_size); | 8372 gfx::Rect external_clip(layer_size); |
| 8369 bool resourceless_software_draw = false; | 8373 bool resourceless_software_draw = false; |
| 8370 host_impl_->SetExternalDrawConstraints( | 8374 host_impl_->SetExternalDrawConstraints(external_viewport, external_transform); |
| 8371 external_transform, external_viewport, external_clip, external_viewport, | |
| 8372 external_transform, resourceless_software_draw); | |
| 8373 | 8375 |
| 8374 // Transform node's sublayer scale should include the device transform scale. | 8376 // Transform node's sublayer scale should include the device transform scale. |
| 8375 host_impl_->active_tree()->UpdateDrawProperties(update_lcd_text); | 8377 host_impl_->OnDraw(external_transform, external_viewport, external_clip, |
| 8378 resourceless_software_draw); | |
| 8376 node = host_impl_->active_tree()->property_trees()->transform_tree.Node( | 8379 node = host_impl_->active_tree()->property_trees()->transform_tree.Node( |
| 8377 test_layer->transform_tree_index()); | 8380 test_layer->transform_tree_index()); |
| 8378 EXPECT_EQ(node->data.sublayer_scale, gfx::Vector2dF(2.f, 2.f)); | 8381 EXPECT_EQ(node->data.sublayer_scale, gfx::Vector2dF(2.f, 2.f)); |
| 8379 | 8382 |
| 8380 // Clear the external transform. | 8383 // Clear the external transform. |
| 8381 external_transform = gfx::Transform(); | 8384 external_transform = gfx::Transform(); |
| 8382 host_impl_->SetExternalDrawConstraints( | 8385 host_impl_->SetExternalDrawConstraints(external_viewport, external_transform); |
| 8383 external_transform, external_viewport, external_clip, external_viewport, | |
| 8384 external_transform, resourceless_software_draw); | |
| 8385 | 8386 |
| 8386 host_impl_->active_tree()->UpdateDrawProperties(update_lcd_text); | 8387 host_impl_->OnDraw(external_transform, external_viewport, external_clip, |
| 8388 resourceless_software_draw); | |
| 8387 node = host_impl_->active_tree()->property_trees()->transform_tree.Node( | 8389 node = host_impl_->active_tree()->property_trees()->transform_tree.Node( |
| 8388 test_layer->transform_tree_index()); | 8390 test_layer->transform_tree_index()); |
| 8389 EXPECT_EQ(node->data.sublayer_scale, gfx::Vector2dF(1.f, 1.f)); | 8391 EXPECT_EQ(node->data.sublayer_scale, gfx::Vector2dF(1.f, 1.f)); |
| 8390 } | 8392 } |
| 8391 | 8393 |
| 8392 TEST_F(LayerTreeHostImplTest, ScrollAnimated) { | 8394 TEST_F(LayerTreeHostImplTest, ScrollAnimated) { |
| 8393 SetupScrollAndContentsLayers(gfx::Size(100, 200)); | 8395 SetupScrollAndContentsLayers(gfx::Size(100, 200)); |
| 8394 | 8396 |
| 8395 // Shrink the outer viewport clip layer so that the outer viewport can scroll. | 8397 // Shrink the outer viewport clip layer so that the outer viewport can scroll. |
| 8396 host_impl_->OuterViewportScrollLayer()->parent()->SetBounds( | 8398 host_impl_->OuterViewportScrollLayer()->parent()->SetBounds( |
| (...skipping 614 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 9011 host_impl_->active_tree()->SetPageScaleOnActiveTree(2.f); | 9013 host_impl_->active_tree()->SetPageScaleOnActiveTree(2.f); |
| 9012 DrawFrame(); | 9014 DrawFrame(); |
| 9013 in_subtree_of_page_scale_layer = host_impl_->active_tree()->LayerById(100); | 9015 in_subtree_of_page_scale_layer = host_impl_->active_tree()->LayerById(100); |
| 9014 node = host_impl_->active_tree()->property_trees()->transform_tree.Node( | 9016 node = host_impl_->active_tree()->property_trees()->transform_tree.Node( |
| 9015 in_subtree_of_page_scale_layer->transform_tree_index()); | 9017 in_subtree_of_page_scale_layer->transform_tree_index()); |
| 9016 EXPECT_EQ(node->data.sublayer_scale, gfx::Vector2dF(2.f, 2.f)); | 9018 EXPECT_EQ(node->data.sublayer_scale, gfx::Vector2dF(2.f, 2.f)); |
| 9017 } | 9019 } |
| 9018 | 9020 |
| 9019 } // namespace | 9021 } // namespace |
| 9020 } // namespace cc | 9022 } // namespace cc |
| OLD | NEW |