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 |