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 |