OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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/layers/delegated_renderer_layer_impl.h" | 5 #include "cc/layers/delegated_renderer_layer_impl.h" |
6 | 6 |
7 #include "cc/base/scoped_ptr_vector.h" | 7 #include "cc/base/scoped_ptr_vector.h" |
8 #include "cc/layers/solid_color_layer_impl.h" | 8 #include "cc/layers/solid_color_layer_impl.h" |
9 #include "cc/quads/render_pass_draw_quad.h" | 9 #include "cc/quads/render_pass_draw_quad.h" |
10 #include "cc/quads/solid_color_draw_quad.h" | 10 #include "cc/quads/solid_color_draw_quad.h" |
(...skipping 22 matching lines...) Expand all Loading... |
33 class DelegatedRendererLayerImplTest : public testing::Test { | 33 class DelegatedRendererLayerImplTest : public testing::Test { |
34 public: | 34 public: |
35 DelegatedRendererLayerImplTest() | 35 DelegatedRendererLayerImplTest() |
36 : proxy_(), | 36 : proxy_(), |
37 always_impl_thread_and_main_thread_blocked_(&proxy_) { | 37 always_impl_thread_and_main_thread_blocked_(&proxy_) { |
38 LayerTreeSettings settings; | 38 LayerTreeSettings settings; |
39 settings.minimum_occlusion_tracking_size = gfx::Size(); | 39 settings.minimum_occlusion_tracking_size = gfx::Size(); |
40 | 40 |
41 host_impl_.reset( | 41 host_impl_.reset( |
42 new FakeLayerTreeHostImpl(settings, &proxy_, &shared_bitmap_manager_)); | 42 new FakeLayerTreeHostImpl(settings, &proxy_, &shared_bitmap_manager_)); |
43 host_impl_->InitializeRenderer( | 43 host_impl_->InitializeRenderer(FakeOutputSurface::Create3d()); |
44 FakeOutputSurface::Create3d().PassAs<OutputSurface>()); | |
45 host_impl_->SetViewportSize(gfx::Size(10, 10)); | 44 host_impl_->SetViewportSize(gfx::Size(10, 10)); |
46 } | 45 } |
47 | 46 |
48 protected: | 47 protected: |
49 FakeProxy proxy_; | 48 FakeProxy proxy_; |
50 DebugScopedSetImplThreadAndMainThreadBlocked | 49 DebugScopedSetImplThreadAndMainThreadBlocked |
51 always_impl_thread_and_main_thread_blocked_; | 50 always_impl_thread_and_main_thread_blocked_; |
52 TestSharedBitmapManager shared_bitmap_manager_; | 51 TestSharedBitmapManager shared_bitmap_manager_; |
53 scoped_ptr<LayerTreeHostImpl> host_impl_; | 52 scoped_ptr<LayerTreeHostImpl> host_impl_; |
54 }; | 53 }; |
55 | 54 |
56 class DelegatedRendererLayerImplTestSimple | 55 class DelegatedRendererLayerImplTestSimple |
57 : public DelegatedRendererLayerImplTest { | 56 : public DelegatedRendererLayerImplTest { |
58 public: | 57 public: |
59 DelegatedRendererLayerImplTestSimple() | 58 DelegatedRendererLayerImplTestSimple() |
60 : DelegatedRendererLayerImplTest() { | 59 : DelegatedRendererLayerImplTest() { |
61 scoped_ptr<LayerImpl> root_layer = SolidColorLayerImpl::Create( | 60 scoped_ptr<LayerImpl> root_layer = |
62 host_impl_->active_tree(), 1).PassAs<LayerImpl>(); | 61 SolidColorLayerImpl::Create(host_impl_->active_tree(), 1); |
63 scoped_ptr<LayerImpl> layer_before = SolidColorLayerImpl::Create( | 62 scoped_ptr<LayerImpl> layer_before = |
64 host_impl_->active_tree(), 2).PassAs<LayerImpl>(); | 63 SolidColorLayerImpl::Create(host_impl_->active_tree(), 2); |
65 scoped_ptr<LayerImpl> layer_after = SolidColorLayerImpl::Create( | 64 scoped_ptr<LayerImpl> layer_after = |
66 host_impl_->active_tree(), 3).PassAs<LayerImpl>(); | 65 SolidColorLayerImpl::Create(host_impl_->active_tree(), 3); |
67 scoped_ptr<FakeDelegatedRendererLayerImpl> delegated_renderer_layer = | 66 scoped_ptr<FakeDelegatedRendererLayerImpl> delegated_renderer_layer = |
68 FakeDelegatedRendererLayerImpl::Create(host_impl_->active_tree(), 4); | 67 FakeDelegatedRendererLayerImpl::Create(host_impl_->active_tree(), 4); |
69 | 68 |
70 host_impl_->SetViewportSize(gfx::Size(100, 100)); | 69 host_impl_->SetViewportSize(gfx::Size(100, 100)); |
71 root_layer->SetBounds(gfx::Size(100, 100)); | 70 root_layer->SetBounds(gfx::Size(100, 100)); |
72 | 71 |
73 layer_before->SetPosition(gfx::Point(20, 20)); | 72 layer_before->SetPosition(gfx::Point(20, 20)); |
74 layer_before->SetBounds(gfx::Size(14, 14)); | 73 layer_before->SetBounds(gfx::Size(14, 14)); |
75 layer_before->SetContentBounds(gfx::Size(14, 14)); | 74 layer_before->SetContentBounds(gfx::Size(14, 14)); |
76 layer_before->SetDrawsContent(true); | 75 layer_before->SetDrawsContent(true); |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
113 // The RenderPasses should be taken by the layer. | 112 // The RenderPasses should be taken by the layer. |
114 EXPECT_EQ(0u, delegated_render_passes.size()); | 113 EXPECT_EQ(0u, delegated_render_passes.size()); |
115 | 114 |
116 root_layer_ = root_layer.get(); | 115 root_layer_ = root_layer.get(); |
117 layer_before_ = layer_before.get(); | 116 layer_before_ = layer_before.get(); |
118 layer_after_ = layer_after.get(); | 117 layer_after_ = layer_after.get(); |
119 delegated_renderer_layer_ = delegated_renderer_layer.get(); | 118 delegated_renderer_layer_ = delegated_renderer_layer.get(); |
120 | 119 |
121 // Force the delegated RenderPasses to come before the RenderPass from | 120 // Force the delegated RenderPasses to come before the RenderPass from |
122 // layer_after. | 121 // layer_after. |
123 layer_after->AddChild(delegated_renderer_layer.PassAs<LayerImpl>()); | 122 layer_after->AddChild(delegated_renderer_layer.Pass()); |
124 root_layer->AddChild(layer_after.Pass()); | 123 root_layer->AddChild(layer_after.Pass()); |
125 | 124 |
126 // Get the RenderPass generated by layer_before to come before the delegated | 125 // Get the RenderPass generated by layer_before to come before the delegated |
127 // RenderPasses. | 126 // RenderPasses. |
128 root_layer->AddChild(layer_before.Pass()); | 127 root_layer->AddChild(layer_before.Pass()); |
129 host_impl_->active_tree()->SetRootLayer(root_layer.Pass()); | 128 host_impl_->active_tree()->SetRootLayer(root_layer.Pass()); |
130 } | 129 } |
131 | 130 |
132 protected: | 131 protected: |
133 LayerImpl* root_layer_; | 132 LayerImpl* root_layer_; |
(...skipping 492 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
626 | 625 |
627 delegated_renderer_layer->SetFrameDataForRenderPasses( | 626 delegated_renderer_layer->SetFrameDataForRenderPasses( |
628 delegated_device_scale_factor_, &delegated_render_passes); | 627 delegated_device_scale_factor_, &delegated_render_passes); |
629 | 628 |
630 // The RenderPasses should be taken by the layer. | 629 // The RenderPasses should be taken by the layer. |
631 EXPECT_EQ(0u, delegated_render_passes.size()); | 630 EXPECT_EQ(0u, delegated_render_passes.size()); |
632 | 631 |
633 root_layer_ = root_layer.get(); | 632 root_layer_ = root_layer.get(); |
634 delegated_renderer_layer_ = delegated_renderer_layer.get(); | 633 delegated_renderer_layer_ = delegated_renderer_layer.get(); |
635 | 634 |
636 root_layer->AddChild(delegated_renderer_layer.PassAs<LayerImpl>()); | 635 root_layer->AddChild(delegated_renderer_layer.Pass()); |
637 host_impl_->active_tree()->SetRootLayer(root_layer.Pass()); | 636 host_impl_->active_tree()->SetRootLayer(root_layer.Pass()); |
638 } | 637 } |
639 | 638 |
640 void VerifyRenderPasses( | 639 void VerifyRenderPasses( |
641 const LayerTreeHostImpl::FrameData& frame, | 640 const LayerTreeHostImpl::FrameData& frame, |
642 size_t num_render_passes, | 641 size_t num_render_passes, |
643 const SharedQuadState** root_delegated_shared_quad_state, | 642 const SharedQuadState** root_delegated_shared_quad_state, |
644 const SharedQuadState** contrib_delegated_shared_quad_state) { | 643 const SharedQuadState** contrib_delegated_shared_quad_state) { |
645 ASSERT_EQ(num_render_passes, frame.render_passes.size()); | 644 ASSERT_EQ(num_render_passes, frame.render_passes.size()); |
646 // The contributing render pass in the DelegatedRendererLayer. | 645 // The contributing render pass in the DelegatedRendererLayer. |
(...skipping 422 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1069 gfx::Rect clip_rect(21, 27, 23, 21); | 1068 gfx::Rect clip_rect(21, 27, 23, 21); |
1070 | 1069 |
1071 clip_layer->SetPosition(clip_rect.origin()); | 1070 clip_layer->SetPosition(clip_rect.origin()); |
1072 clip_layer->SetBounds(clip_rect.size()); | 1071 clip_layer->SetBounds(clip_rect.size()); |
1073 clip_layer->SetContentBounds(clip_rect.size()); | 1072 clip_layer->SetContentBounds(clip_rect.size()); |
1074 clip_layer->SetMasksToBounds(true); | 1073 clip_layer->SetMasksToBounds(true); |
1075 | 1074 |
1076 origin_layer->SetPosition( | 1075 origin_layer->SetPosition( |
1077 gfx::PointAtOffsetFromOrigin(-clip_rect.OffsetFromOrigin())); | 1076 gfx::PointAtOffsetFromOrigin(-clip_rect.OffsetFromOrigin())); |
1078 | 1077 |
1079 origin_layer->AddChild(delegated_renderer_layer.PassAs<LayerImpl>()); | 1078 origin_layer->AddChild(delegated_renderer_layer.Pass()); |
1080 clip_layer->AddChild(origin_layer.Pass()); | 1079 clip_layer->AddChild(origin_layer.Pass()); |
1081 root_layer->AddChild(clip_layer.Pass()); | 1080 root_layer->AddChild(clip_layer.Pass()); |
1082 } else { | 1081 } else { |
1083 root_layer->AddChild(delegated_renderer_layer.PassAs<LayerImpl>()); | 1082 root_layer->AddChild(delegated_renderer_layer.Pass()); |
1084 } | 1083 } |
1085 | 1084 |
1086 host_impl_->active_tree()->SetRootLayer(root_layer.Pass()); | 1085 host_impl_->active_tree()->SetRootLayer(root_layer.Pass()); |
1087 } | 1086 } |
1088 | 1087 |
1089 protected: | 1088 protected: |
1090 LayerImpl* root_layer_; | 1089 LayerImpl* root_layer_; |
1091 DelegatedRendererLayerImpl* delegated_renderer_layer_; | 1090 DelegatedRendererLayerImpl* delegated_renderer_layer_; |
1092 bool root_delegated_render_pass_is_clipped_; | 1091 bool root_delegated_render_pass_is_clipped_; |
1093 bool clip_delegated_renderer_layer_; | 1092 bool clip_delegated_renderer_layer_; |
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1323 EXPECT_EQ(gfx::Rect(5, 5, 40, 40).ToString(), | 1322 EXPECT_EQ(gfx::Rect(5, 5, 40, 40).ToString(), |
1324 root_delegated_shared_quad_state->clip_rect.ToString()); | 1323 root_delegated_shared_quad_state->clip_rect.ToString()); |
1325 // Quads came with a clip rect. | 1324 // Quads came with a clip rect. |
1326 EXPECT_TRUE(root_delegated_shared_quad_state->is_clipped); | 1325 EXPECT_TRUE(root_delegated_shared_quad_state->is_clipped); |
1327 | 1326 |
1328 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); | 1327 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
1329 host_impl_->DidDrawAllLayers(frame); | 1328 host_impl_->DidDrawAllLayers(frame); |
1330 } | 1329 } |
1331 | 1330 |
1332 TEST_F(DelegatedRendererLayerImplTest, InvalidRenderPassDrawQuad) { | 1331 TEST_F(DelegatedRendererLayerImplTest, InvalidRenderPassDrawQuad) { |
1333 scoped_ptr<LayerImpl> root_layer = LayerImpl::Create( | 1332 scoped_ptr<LayerImpl> root_layer = |
1334 host_impl_->active_tree(), 1).PassAs<LayerImpl>(); | 1333 LayerImpl::Create(host_impl_->active_tree(), 1); |
1335 scoped_ptr<FakeDelegatedRendererLayerImpl> delegated_renderer_layer = | 1334 scoped_ptr<FakeDelegatedRendererLayerImpl> delegated_renderer_layer = |
1336 FakeDelegatedRendererLayerImpl::Create(host_impl_->active_tree(), 4); | 1335 FakeDelegatedRendererLayerImpl::Create(host_impl_->active_tree(), 4); |
1337 | 1336 |
1338 host_impl_->SetViewportSize(gfx::Size(100, 100)); | 1337 host_impl_->SetViewportSize(gfx::Size(100, 100)); |
1339 | 1338 |
1340 delegated_renderer_layer->SetPosition(gfx::Point(3, 3)); | 1339 delegated_renderer_layer->SetPosition(gfx::Point(3, 3)); |
1341 delegated_renderer_layer->SetBounds(gfx::Size(10, 10)); | 1340 delegated_renderer_layer->SetBounds(gfx::Size(10, 10)); |
1342 delegated_renderer_layer->SetContentBounds(gfx::Size(10, 10)); | 1341 delegated_renderer_layer->SetContentBounds(gfx::Size(10, 10)); |
1343 delegated_renderer_layer->SetDrawsContent(true); | 1342 delegated_renderer_layer->SetDrawsContent(true); |
1344 | 1343 |
(...skipping 13 matching lines...) Expand all Loading... |
1358 | 1357 |
1359 // But a render pass quad refers to it. | 1358 // But a render pass quad refers to it. |
1360 AddRenderPassQuad(pass1, missing_pass.get()); | 1359 AddRenderPassQuad(pass1, missing_pass.get()); |
1361 | 1360 |
1362 delegated_renderer_layer->SetFrameDataForRenderPasses( | 1361 delegated_renderer_layer->SetFrameDataForRenderPasses( |
1363 1.f, &delegated_render_passes); | 1362 1.f, &delegated_render_passes); |
1364 | 1363 |
1365 // The RenderPasses should be taken by the layer. | 1364 // The RenderPasses should be taken by the layer. |
1366 EXPECT_EQ(0u, delegated_render_passes.size()); | 1365 EXPECT_EQ(0u, delegated_render_passes.size()); |
1367 | 1366 |
1368 root_layer->AddChild(delegated_renderer_layer.PassAs<LayerImpl>()); | 1367 root_layer->AddChild(delegated_renderer_layer.Pass()); |
1369 host_impl_->active_tree()->SetRootLayer(root_layer.Pass()); | 1368 host_impl_->active_tree()->SetRootLayer(root_layer.Pass()); |
1370 | 1369 |
1371 LayerTreeHostImpl::FrameData frame; | 1370 LayerTreeHostImpl::FrameData frame; |
1372 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 1371 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
1373 | 1372 |
1374 // The DelegatedRendererLayerImpl should drop the bad RenderPassDrawQuad. | 1373 // The DelegatedRendererLayerImpl should drop the bad RenderPassDrawQuad. |
1375 ASSERT_EQ(1u, frame.render_passes.size()); | 1374 ASSERT_EQ(1u, frame.render_passes.size()); |
1376 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); | 1375 ASSERT_EQ(1u, frame.render_passes[0]->quad_list.size()); |
1377 EXPECT_EQ(DrawQuad::SOLID_COLOR, | 1376 EXPECT_EQ(DrawQuad::SOLID_COLOR, |
1378 frame.render_passes[0]->quad_list.front()->material); | 1377 frame.render_passes[0]->quad_list.front()->material); |
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1566 scoped_ptr<DelegatedRendererLayerImpl> other_layer = | 1565 scoped_ptr<DelegatedRendererLayerImpl> other_layer = |
1567 DelegatedRendererLayerImpl::Create(host_impl_->active_tree(), 6); | 1566 DelegatedRendererLayerImpl::Create(host_impl_->active_tree(), 6); |
1568 | 1567 |
1569 delegated_renderer_layer_impl->PushPropertiesTo(other_layer.get()); | 1568 delegated_renderer_layer_impl->PushPropertiesTo(other_layer.get()); |
1570 | 1569 |
1571 EXPECT_EQ(0.5f, other_layer->inverse_device_scale_factor()); | 1570 EXPECT_EQ(0.5f, other_layer->inverse_device_scale_factor()); |
1572 } | 1571 } |
1573 | 1572 |
1574 } // namespace | 1573 } // namespace |
1575 } // namespace cc | 1574 } // namespace cc |
OLD | NEW |