| 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/layers/append_quads_data.h" | 5 #include "cc/layers/append_quads_data.h" |
| 6 #include "cc/layers/layer_impl.h" | 6 #include "cc/layers/layer_impl.h" |
| 7 #include "cc/layers/render_pass_sink.h" | 7 #include "cc/layers/render_pass_sink.h" |
| 8 #include "cc/layers/render_surface_impl.h" | 8 #include "cc/layers/render_surface_impl.h" |
| 9 #include "cc/quads/shared_quad_state.h" | 9 #include "cc/quads/shared_quad_state.h" |
| 10 #include "cc/test/fake_impl_task_runner_provider.h" | 10 #include "cc/test/fake_impl_task_runner_provider.h" |
| (...skipping 24 matching lines...) Expand all Loading... |
| 35 TEST(RenderSurfaceTest, VerifySurfaceChangesAreTrackedProperly) { | 35 TEST(RenderSurfaceTest, VerifySurfaceChangesAreTrackedProperly) { |
| 36 // | 36 // |
| 37 // This test checks that SurfacePropertyChanged() has the correct behavior. | 37 // This test checks that SurfacePropertyChanged() has the correct behavior. |
| 38 // | 38 // |
| 39 | 39 |
| 40 FakeImplTaskRunnerProvider task_runner_provider; | 40 FakeImplTaskRunnerProvider task_runner_provider; |
| 41 TestSharedBitmapManager shared_bitmap_manager; | 41 TestSharedBitmapManager shared_bitmap_manager; |
| 42 TestTaskGraphRunner task_graph_runner; | 42 TestTaskGraphRunner task_graph_runner; |
| 43 FakeLayerTreeHostImpl host_impl(&task_runner_provider, &shared_bitmap_manager, | 43 FakeLayerTreeHostImpl host_impl(&task_runner_provider, &shared_bitmap_manager, |
| 44 &task_graph_runner); | 44 &task_graph_runner); |
| 45 scoped_ptr<LayerImpl> owning_layer = | 45 std::unique_ptr<LayerImpl> owning_layer = |
| 46 LayerImpl::Create(host_impl.active_tree(), 1); | 46 LayerImpl::Create(host_impl.active_tree(), 1); |
| 47 owning_layer->SetHasRenderSurface(true); | 47 owning_layer->SetHasRenderSurface(true); |
| 48 ASSERT_TRUE(owning_layer->render_surface()); | 48 ASSERT_TRUE(owning_layer->render_surface()); |
| 49 RenderSurfaceImpl* render_surface = owning_layer->render_surface(); | 49 RenderSurfaceImpl* render_surface = owning_layer->render_surface(); |
| 50 gfx::Rect test_rect(3, 4, 5, 6); | 50 gfx::Rect test_rect(3, 4, 5, 6); |
| 51 host_impl.active_tree()->ResetAllChangeTracking( | 51 host_impl.active_tree()->ResetAllChangeTracking( |
| 52 PropertyTrees::ResetFlags::ALL_TREES); | 52 PropertyTrees::ResetFlags::ALL_TREES); |
| 53 | 53 |
| 54 // Currently, the content_rect, clip_rect, and | 54 // Currently, the content_rect, clip_rect, and |
| 55 // owning_layer->layerPropertyChanged() are the only sources of change. | 55 // owning_layer->layerPropertyChanged() are the only sources of change. |
| 56 EXECUTE_AND_VERIFY_SURFACE_CHANGED(render_surface->SetClipRect(test_rect)); | 56 EXECUTE_AND_VERIFY_SURFACE_CHANGED(render_surface->SetClipRect(test_rect)); |
| 57 EXECUTE_AND_VERIFY_SURFACE_CHANGED(render_surface->SetContentRect(test_rect)); | 57 EXECUTE_AND_VERIFY_SURFACE_CHANGED(render_surface->SetContentRect(test_rect)); |
| 58 | 58 |
| 59 owning_layer->SetOpacity(0.5f); | 59 owning_layer->SetOpacity(0.5f); |
| 60 EXPECT_TRUE(render_surface->SurfacePropertyChanged()); | 60 EXPECT_TRUE(render_surface->SurfacePropertyChanged()); |
| 61 host_impl.active_tree()->ResetAllChangeTracking( | 61 host_impl.active_tree()->ResetAllChangeTracking( |
| 62 PropertyTrees::ResetFlags::ALL_TREES); | 62 PropertyTrees::ResetFlags::ALL_TREES); |
| 63 | 63 |
| 64 // Setting the surface properties to the same values again should not be | 64 // Setting the surface properties to the same values again should not be |
| 65 // considered "change". | 65 // considered "change". |
| 66 EXECUTE_AND_VERIFY_SURFACE_DID_NOT_CHANGE( | 66 EXECUTE_AND_VERIFY_SURFACE_DID_NOT_CHANGE( |
| 67 render_surface->SetClipRect(test_rect)); | 67 render_surface->SetClipRect(test_rect)); |
| 68 EXECUTE_AND_VERIFY_SURFACE_DID_NOT_CHANGE( | 68 EXECUTE_AND_VERIFY_SURFACE_DID_NOT_CHANGE( |
| 69 render_surface->SetContentRect(test_rect)); | 69 render_surface->SetContentRect(test_rect)); |
| 70 | 70 |
| 71 scoped_ptr<LayerImpl> dummy_mask = | 71 std::unique_ptr<LayerImpl> dummy_mask = |
| 72 LayerImpl::Create(host_impl.active_tree(), 2); | 72 LayerImpl::Create(host_impl.active_tree(), 2); |
| 73 gfx::Transform dummy_matrix; | 73 gfx::Transform dummy_matrix; |
| 74 dummy_matrix.Translate(1.0, 2.0); | 74 dummy_matrix.Translate(1.0, 2.0); |
| 75 | 75 |
| 76 // The rest of the surface properties are either internal and should not cause | 76 // The rest of the surface properties are either internal and should not cause |
| 77 // change, or they are already accounted for by the | 77 // change, or they are already accounted for by the |
| 78 // owninglayer->layerPropertyChanged(). | 78 // owninglayer->layerPropertyChanged(). |
| 79 EXECUTE_AND_VERIFY_SURFACE_DID_NOT_CHANGE( | 79 EXECUTE_AND_VERIFY_SURFACE_DID_NOT_CHANGE( |
| 80 render_surface->SetDrawOpacity(0.5f)); | 80 render_surface->SetDrawOpacity(0.5f)); |
| 81 EXECUTE_AND_VERIFY_SURFACE_DID_NOT_CHANGE( | 81 EXECUTE_AND_VERIFY_SURFACE_DID_NOT_CHANGE( |
| 82 render_surface->SetDrawTransform(dummy_matrix)); | 82 render_surface->SetDrawTransform(dummy_matrix)); |
| 83 EXECUTE_AND_VERIFY_SURFACE_DID_NOT_CHANGE( | 83 EXECUTE_AND_VERIFY_SURFACE_DID_NOT_CHANGE( |
| 84 render_surface->SetReplicaDrawTransform(dummy_matrix)); | 84 render_surface->SetReplicaDrawTransform(dummy_matrix)); |
| 85 EXECUTE_AND_VERIFY_SURFACE_DID_NOT_CHANGE(render_surface->ClearLayerLists()); | 85 EXECUTE_AND_VERIFY_SURFACE_DID_NOT_CHANGE(render_surface->ClearLayerLists()); |
| 86 } | 86 } |
| 87 | 87 |
| 88 TEST(RenderSurfaceTest, SanityCheckSurfaceCreatesCorrectSharedQuadState) { | 88 TEST(RenderSurfaceTest, SanityCheckSurfaceCreatesCorrectSharedQuadState) { |
| 89 FakeImplTaskRunnerProvider task_runner_provider; | 89 FakeImplTaskRunnerProvider task_runner_provider; |
| 90 TestSharedBitmapManager shared_bitmap_manager; | 90 TestSharedBitmapManager shared_bitmap_manager; |
| 91 TestTaskGraphRunner task_graph_runner; | 91 TestTaskGraphRunner task_graph_runner; |
| 92 FakeLayerTreeHostImpl host_impl(&task_runner_provider, &shared_bitmap_manager, | 92 FakeLayerTreeHostImpl host_impl(&task_runner_provider, &shared_bitmap_manager, |
| 93 &task_graph_runner); | 93 &task_graph_runner); |
| 94 scoped_ptr<LayerImpl> root_layer = | 94 std::unique_ptr<LayerImpl> root_layer = |
| 95 LayerImpl::Create(host_impl.active_tree(), 1); | 95 LayerImpl::Create(host_impl.active_tree(), 1); |
| 96 | 96 |
| 97 scoped_ptr<LayerImpl> owning_layer = | 97 std::unique_ptr<LayerImpl> owning_layer = |
| 98 LayerImpl::Create(host_impl.active_tree(), 2); | 98 LayerImpl::Create(host_impl.active_tree(), 2); |
| 99 owning_layer->SetHasRenderSurface(true); | 99 owning_layer->SetHasRenderSurface(true); |
| 100 ASSERT_TRUE(owning_layer->render_surface()); | 100 ASSERT_TRUE(owning_layer->render_surface()); |
| 101 owning_layer->draw_properties().render_target = owning_layer.get(); | 101 owning_layer->draw_properties().render_target = owning_layer.get(); |
| 102 | 102 |
| 103 SkXfermode::Mode blend_mode = SkXfermode::kSoftLight_Mode; | 103 SkXfermode::Mode blend_mode = SkXfermode::kSoftLight_Mode; |
| 104 owning_layer->SetBlendMode(blend_mode); | 104 owning_layer->SetBlendMode(blend_mode); |
| 105 RenderSurfaceImpl* render_surface = owning_layer->render_surface(); | 105 RenderSurfaceImpl* render_surface = owning_layer->render_surface(); |
| 106 | 106 |
| 107 root_layer->AddChild(std::move(owning_layer)); | 107 root_layer->AddChild(std::move(owning_layer)); |
| 108 | 108 |
| 109 gfx::Rect content_rect(0, 0, 50, 50); | 109 gfx::Rect content_rect(0, 0, 50, 50); |
| 110 gfx::Rect clip_rect(5, 5, 40, 40); | 110 gfx::Rect clip_rect(5, 5, 40, 40); |
| 111 gfx::Transform origin; | 111 gfx::Transform origin; |
| 112 origin.Translate(30, 40); | 112 origin.Translate(30, 40); |
| 113 | 113 |
| 114 render_surface->SetContentRect(content_rect); | 114 render_surface->SetContentRect(content_rect); |
| 115 render_surface->SetClipRect(clip_rect); | 115 render_surface->SetClipRect(clip_rect); |
| 116 render_surface->SetDrawOpacity(1.f); | 116 render_surface->SetDrawOpacity(1.f); |
| 117 | 117 |
| 118 scoped_ptr<RenderPass> render_pass = RenderPass::Create(); | 118 std::unique_ptr<RenderPass> render_pass = RenderPass::Create(); |
| 119 AppendQuadsData append_quads_data; | 119 AppendQuadsData append_quads_data; |
| 120 | 120 |
| 121 render_surface->AppendQuads(render_pass.get(), origin, Occlusion(), | 121 render_surface->AppendQuads(render_pass.get(), origin, Occlusion(), |
| 122 SK_ColorBLACK, 1.f, nullptr, &append_quads_data, | 122 SK_ColorBLACK, 1.f, nullptr, &append_quads_data, |
| 123 RenderPassId(2, 0)); | 123 RenderPassId(2, 0)); |
| 124 | 124 |
| 125 ASSERT_EQ(1u, render_pass->shared_quad_state_list.size()); | 125 ASSERT_EQ(1u, render_pass->shared_quad_state_list.size()); |
| 126 SharedQuadState* shared_quad_state = | 126 SharedQuadState* shared_quad_state = |
| 127 render_pass->shared_quad_state_list.front(); | 127 render_pass->shared_quad_state_list.front(); |
| 128 | 128 |
| 129 EXPECT_EQ( | 129 EXPECT_EQ( |
| 130 30.0, | 130 30.0, |
| 131 shared_quad_state->quad_to_target_transform.matrix().getDouble(0, 3)); | 131 shared_quad_state->quad_to_target_transform.matrix().getDouble(0, 3)); |
| 132 EXPECT_EQ( | 132 EXPECT_EQ( |
| 133 40.0, | 133 40.0, |
| 134 shared_quad_state->quad_to_target_transform.matrix().getDouble(1, 3)); | 134 shared_quad_state->quad_to_target_transform.matrix().getDouble(1, 3)); |
| 135 EXPECT_EQ(content_rect, | 135 EXPECT_EQ(content_rect, |
| 136 gfx::Rect(shared_quad_state->visible_quad_layer_rect)); | 136 gfx::Rect(shared_quad_state->visible_quad_layer_rect)); |
| 137 EXPECT_EQ(1.f, shared_quad_state->opacity); | 137 EXPECT_EQ(1.f, shared_quad_state->opacity); |
| 138 EXPECT_EQ(blend_mode, shared_quad_state->blend_mode); | 138 EXPECT_EQ(blend_mode, shared_quad_state->blend_mode); |
| 139 } | 139 } |
| 140 | 140 |
| 141 class TestRenderPassSink : public RenderPassSink { | 141 class TestRenderPassSink : public RenderPassSink { |
| 142 public: | 142 public: |
| 143 void AppendRenderPass(scoped_ptr<RenderPass> render_pass) override { | 143 void AppendRenderPass(std::unique_ptr<RenderPass> render_pass) override { |
| 144 render_passes_.push_back(std::move(render_pass)); | 144 render_passes_.push_back(std::move(render_pass)); |
| 145 } | 145 } |
| 146 | 146 |
| 147 const RenderPassList& RenderPasses() const { | 147 const RenderPassList& RenderPasses() const { |
| 148 return render_passes_; | 148 return render_passes_; |
| 149 } | 149 } |
| 150 | 150 |
| 151 private: | 151 private: |
| 152 RenderPassList render_passes_; | 152 RenderPassList render_passes_; |
| 153 }; | 153 }; |
| 154 | 154 |
| 155 TEST(RenderSurfaceTest, SanityCheckSurfaceCreatesCorrectRenderPass) { | 155 TEST(RenderSurfaceTest, SanityCheckSurfaceCreatesCorrectRenderPass) { |
| 156 FakeImplTaskRunnerProvider task_runner_provider; | 156 FakeImplTaskRunnerProvider task_runner_provider; |
| 157 TestSharedBitmapManager shared_bitmap_manager; | 157 TestSharedBitmapManager shared_bitmap_manager; |
| 158 TestTaskGraphRunner task_graph_runner; | 158 TestTaskGraphRunner task_graph_runner; |
| 159 FakeLayerTreeHostImpl host_impl(&task_runner_provider, &shared_bitmap_manager, | 159 FakeLayerTreeHostImpl host_impl(&task_runner_provider, &shared_bitmap_manager, |
| 160 &task_graph_runner); | 160 &task_graph_runner); |
| 161 scoped_ptr<LayerImpl> root_layer = | 161 std::unique_ptr<LayerImpl> root_layer = |
| 162 LayerImpl::Create(host_impl.active_tree(), 1); | 162 LayerImpl::Create(host_impl.active_tree(), 1); |
| 163 | 163 |
| 164 scoped_ptr<LayerImpl> owning_layer = | 164 std::unique_ptr<LayerImpl> owning_layer = |
| 165 LayerImpl::Create(host_impl.active_tree(), 2); | 165 LayerImpl::Create(host_impl.active_tree(), 2); |
| 166 owning_layer->SetHasRenderSurface(true); | 166 owning_layer->SetHasRenderSurface(true); |
| 167 ASSERT_TRUE(owning_layer->render_surface()); | 167 ASSERT_TRUE(owning_layer->render_surface()); |
| 168 owning_layer->draw_properties().render_target = owning_layer.get(); | 168 owning_layer->draw_properties().render_target = owning_layer.get(); |
| 169 RenderSurfaceImpl* render_surface = owning_layer->render_surface(); | 169 RenderSurfaceImpl* render_surface = owning_layer->render_surface(); |
| 170 | 170 |
| 171 root_layer->AddChild(std::move(owning_layer)); | 171 root_layer->AddChild(std::move(owning_layer)); |
| 172 | 172 |
| 173 gfx::Rect content_rect(0, 0, 50, 50); | 173 gfx::Rect content_rect(0, 0, 50, 50); |
| 174 gfx::Transform origin; | 174 gfx::Transform origin; |
| 175 origin.Translate(30.0, 40.0); | 175 origin.Translate(30.0, 40.0); |
| 176 | 176 |
| 177 render_surface->SetScreenSpaceTransform(origin); | 177 render_surface->SetScreenSpaceTransform(origin); |
| 178 render_surface->SetContentRect(content_rect); | 178 render_surface->SetContentRect(content_rect); |
| 179 | 179 |
| 180 TestRenderPassSink pass_sink; | 180 TestRenderPassSink pass_sink; |
| 181 | 181 |
| 182 render_surface->AppendRenderPasses(&pass_sink); | 182 render_surface->AppendRenderPasses(&pass_sink); |
| 183 | 183 |
| 184 ASSERT_EQ(1u, pass_sink.RenderPasses().size()); | 184 ASSERT_EQ(1u, pass_sink.RenderPasses().size()); |
| 185 RenderPass* pass = pass_sink.RenderPasses()[0].get(); | 185 RenderPass* pass = pass_sink.RenderPasses()[0].get(); |
| 186 | 186 |
| 187 EXPECT_EQ(RenderPassId(2, 0), pass->id); | 187 EXPECT_EQ(RenderPassId(2, 0), pass->id); |
| 188 EXPECT_EQ(content_rect, pass->output_rect); | 188 EXPECT_EQ(content_rect, pass->output_rect); |
| 189 EXPECT_EQ(origin, pass->transform_to_root_target); | 189 EXPECT_EQ(origin, pass->transform_to_root_target); |
| 190 } | 190 } |
| 191 | 191 |
| 192 } // namespace | 192 } // namespace |
| 193 } // namespace cc | 193 } // namespace cc |
| OLD | NEW |