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 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
125 host_impl_->active_tree()->SetRootLayer(root_layer.Pass()); | 125 host_impl_->active_tree()->SetRootLayer(root_layer.Pass()); |
126 } | 126 } |
127 | 127 |
128 protected: | 128 protected: |
129 LayerImpl* root_layer_; | 129 LayerImpl* root_layer_; |
130 LayerImpl* layer_before_; | 130 LayerImpl* layer_before_; |
131 LayerImpl* layer_after_; | 131 LayerImpl* layer_after_; |
132 DelegatedRendererLayerImpl* delegated_renderer_layer_; | 132 DelegatedRendererLayerImpl* delegated_renderer_layer_; |
133 }; | 133 }; |
134 | 134 |
| 135 TEST_F(DelegatedRendererLayerImplTest, |
| 136 ChangeContributingRenderPassForNewFrame) { |
| 137 FakeDelegatedRendererLayerImpl* fake_delegated_renderer_layer_impl; |
| 138 { |
| 139 scoped_ptr<LayerImpl> root_layer = |
| 140 SolidColorLayerImpl::Create(host_impl_->active_tree(), 1); |
| 141 scoped_ptr<FakeDelegatedRendererLayerImpl> delegated_renderer_layer = |
| 142 FakeDelegatedRendererLayerImpl::Create(host_impl_->active_tree(), 2); |
| 143 |
| 144 host_impl_->SetViewportSize(gfx::Size(100, 100)); |
| 145 root_layer->SetBounds(gfx::Size(100, 100)); |
| 146 root_layer->SetHasRenderSurface(true); |
| 147 |
| 148 delegated_renderer_layer->SetPosition(gfx::Point(3, 3)); |
| 149 delegated_renderer_layer->SetBounds(gfx::Size(10, 10)); |
| 150 delegated_renderer_layer->SetContentBounds(gfx::Size(10, 10)); |
| 151 delegated_renderer_layer->SetDrawsContent(true); |
| 152 delegated_renderer_layer->SetHasRenderSurface(true); |
| 153 gfx::Transform transform; |
| 154 transform.Translate(1.0, 1.0); |
| 155 delegated_renderer_layer->SetTransform(transform); |
| 156 |
| 157 RenderPassList delegated_render_passes; |
| 158 TestRenderPass* pass1 = |
| 159 AddRenderPass(&delegated_render_passes, RenderPassId(9, 6), |
| 160 gfx::Rect(6, 6, 6, 6), gfx::Transform(1, 0, 0, 1, 5, 6)); |
| 161 AddQuad(pass1, gfx::Rect(0, 0, 6, 6), 33u); |
| 162 TestRenderPass* pass2 = |
| 163 AddRenderPass(&delegated_render_passes, RenderPassId(9, 7), |
| 164 gfx::Rect(7, 7, 7, 7), gfx::Transform(1, 0, 0, 1, 7, 8)); |
| 165 AddQuad(pass2, gfx::Rect(0, 0, 7, 7), 22u); |
| 166 AddRenderPassQuad(pass2, pass1); |
| 167 TestRenderPass* pass3 = |
| 168 AddRenderPass(&delegated_render_passes, RenderPassId(9, 8), |
| 169 gfx::Rect(0, 0, 8, 8), gfx::Transform(1, 0, 0, 1, 9, 10)); |
| 170 AddRenderPassQuad(pass3, pass2); |
| 171 delegated_renderer_layer->SetFrameDataForRenderPasses( |
| 172 1.f, delegated_render_passes); |
| 173 |
| 174 fake_delegated_renderer_layer_impl = delegated_renderer_layer.get(); |
| 175 |
| 176 root_layer->AddChild(delegated_renderer_layer.Pass()); |
| 177 |
| 178 host_impl_->active_tree()->SetRootLayer(root_layer.Pass()); |
| 179 |
| 180 LayerTreeHostImpl::FrameData frame; |
| 181 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 182 |
| 183 // Root layer has one render pass, and delegated renderer layer has two |
| 184 // contributing render passes and its own render pass. |
| 185 ASSERT_EQ(4u, frame.render_passes.size()); |
| 186 |
| 187 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
| 188 host_impl_->DidDrawAllLayers(frame); |
| 189 } |
| 190 { |
| 191 // New frame makes delegated renderer layer loses its contributing render |
| 192 // passes. |
| 193 RenderPassList delegated_render_passes; |
| 194 AddRenderPass(&delegated_render_passes, RenderPassId(9, 8), |
| 195 gfx::Rect(0, 0, 8, 8), gfx::Transform(1, 0, 0, 1, 9, 10)); |
| 196 fake_delegated_renderer_layer_impl->SetFrameDataForRenderPasses( |
| 197 1.f, delegated_render_passes); |
| 198 |
| 199 // Force damage to redraw a new frame. |
| 200 host_impl_->SetViewportDamage(gfx::Rect(10, 10)); |
| 201 |
| 202 LayerTreeHostImpl::FrameData frame; |
| 203 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 204 |
| 205 // Each non-DelegatedRendererLayer added one RenderPass. The |
| 206 // DelegatedRendererLayer added two contributing passes. |
| 207 ASSERT_EQ(1u, frame.render_passes.size()); |
| 208 |
| 209 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
| 210 host_impl_->DidDrawAllLayers(frame); |
| 211 } |
| 212 } |
| 213 |
| 214 TEST_F(DelegatedRendererLayerImplTest, |
| 215 ChangeContributingRenderPassNonFullTreeSync) { |
| 216 FakeDelegatedRendererLayerImpl* fake_delegated_renderer_layer_impl; |
| 217 { |
| 218 host_impl_->CreatePendingTree(); |
| 219 scoped_ptr<LayerImpl> root_layer = |
| 220 SolidColorLayerImpl::Create(host_impl_->pending_tree(), 1); |
| 221 scoped_ptr<FakeDelegatedRendererLayerImpl> delegated_renderer_layer = |
| 222 FakeDelegatedRendererLayerImpl::Create(host_impl_->pending_tree(), 2); |
| 223 |
| 224 host_impl_->SetViewportSize(gfx::Size(100, 100)); |
| 225 root_layer->SetBounds(gfx::Size(100, 100)); |
| 226 root_layer->SetHasRenderSurface(true); |
| 227 |
| 228 delegated_renderer_layer->SetPosition(gfx::Point(3, 3)); |
| 229 delegated_renderer_layer->SetBounds(gfx::Size(10, 10)); |
| 230 delegated_renderer_layer->SetContentBounds(gfx::Size(10, 10)); |
| 231 delegated_renderer_layer->SetDrawsContent(true); |
| 232 delegated_renderer_layer->SetHasRenderSurface(true); |
| 233 gfx::Transform transform; |
| 234 transform.Translate(1.0, 1.0); |
| 235 delegated_renderer_layer->SetTransform(transform); |
| 236 |
| 237 RenderPassList delegated_render_passes; |
| 238 TestRenderPass* pass1 = |
| 239 AddRenderPass(&delegated_render_passes, RenderPassId(9, 6), |
| 240 gfx::Rect(6, 6, 6, 6), gfx::Transform(1, 0, 0, 1, 5, 6)); |
| 241 AddQuad(pass1, gfx::Rect(0, 0, 6, 6), 33u); |
| 242 TestRenderPass* pass2 = |
| 243 AddRenderPass(&delegated_render_passes, RenderPassId(9, 7), |
| 244 gfx::Rect(7, 7, 7, 7), gfx::Transform(1, 0, 0, 1, 7, 8)); |
| 245 AddQuad(pass2, gfx::Rect(0, 0, 7, 7), 22u); |
| 246 AddRenderPassQuad(pass2, pass1); |
| 247 TestRenderPass* pass3 = |
| 248 AddRenderPass(&delegated_render_passes, RenderPassId(9, 8), |
| 249 gfx::Rect(0, 0, 8, 8), gfx::Transform(1, 0, 0, 1, 9, 10)); |
| 250 AddRenderPassQuad(pass3, pass2); |
| 251 delegated_renderer_layer->SetFrameDataForRenderPasses( |
| 252 1.f, delegated_render_passes); |
| 253 |
| 254 fake_delegated_renderer_layer_impl = delegated_renderer_layer.get(); |
| 255 |
| 256 root_layer->AddChild(delegated_renderer_layer.Pass()); |
| 257 |
| 258 host_impl_->pending_tree()->SetRootLayer(root_layer.Pass()); |
| 259 host_impl_->ActivateSyncTree(); |
| 260 |
| 261 LayerTreeHostImpl::FrameData frame; |
| 262 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 263 |
| 264 // Root layer has one render pass, and delegated renderer layer has two |
| 265 // contributing render passes and its own render pass. |
| 266 ASSERT_EQ(4u, frame.render_passes.size()); |
| 267 |
| 268 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
| 269 host_impl_->DidDrawAllLayers(frame); |
| 270 } |
| 271 { |
| 272 // Remove contributing render passes from the delegated renderer layer. |
| 273 host_impl_->CreatePendingTree(); |
| 274 host_impl_->pending_tree()->set_needs_full_tree_sync(false); |
| 275 RenderPassList delegated_render_passes; |
| 276 AddRenderPass(&delegated_render_passes, RenderPassId(9, 8), |
| 277 gfx::Rect(0, 0, 8, 8), gfx::Transform(1, 0, 0, 1, 9, 10)); |
| 278 |
| 279 fake_delegated_renderer_layer_impl->SetFrameDataForRenderPasses( |
| 280 1.f, delegated_render_passes); |
| 281 |
| 282 // Force damage to redraw a new frame. |
| 283 |
| 284 host_impl_->ActivateSyncTree(); |
| 285 host_impl_->SetViewportDamage(gfx::Rect(100, 100)); |
| 286 LayerTreeHostImpl::FrameData frame; |
| 287 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
| 288 |
| 289 // Root layer has one render pass, and delegated renderer layer no longer |
| 290 // has contributing render passes. |
| 291 ASSERT_EQ(1u, frame.render_passes.size()); |
| 292 |
| 293 host_impl_->DrawLayers(&frame, gfx::FrameTime::Now()); |
| 294 host_impl_->DidDrawAllLayers(frame); |
| 295 } |
| 296 } |
| 297 |
135 TEST_F(DelegatedRendererLayerImplTestSimple, AddsContributingRenderPasses) { | 298 TEST_F(DelegatedRendererLayerImplTestSimple, AddsContributingRenderPasses) { |
136 LayerTreeHostImpl::FrameData frame; | 299 LayerTreeHostImpl::FrameData frame; |
137 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); | 300 EXPECT_EQ(DRAW_SUCCESS, host_impl_->PrepareToDraw(&frame)); |
138 | 301 |
139 // Each non-DelegatedRendererLayer added one RenderPass. The | 302 // Each non-DelegatedRendererLayer added one RenderPass. The |
140 // DelegatedRendererLayer added two contributing passes. | 303 // DelegatedRendererLayer added two contributing passes. |
141 ASSERT_EQ(5u, frame.render_passes.size()); | 304 ASSERT_EQ(5u, frame.render_passes.size()); |
142 | 305 |
143 // The DelegatedRendererLayer should have added its contributing RenderPasses | 306 // The DelegatedRendererLayer should have added its contributing RenderPasses |
144 // to the frame. | 307 // to the frame. |
(...skipping 1369 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1514 scoped_ptr<DelegatedRendererLayerImpl> other_layer = | 1677 scoped_ptr<DelegatedRendererLayerImpl> other_layer = |
1515 DelegatedRendererLayerImpl::Create(host_impl_->active_tree(), 6); | 1678 DelegatedRendererLayerImpl::Create(host_impl_->active_tree(), 6); |
1516 | 1679 |
1517 delegated_renderer_layer_impl->PushPropertiesTo(other_layer.get()); | 1680 delegated_renderer_layer_impl->PushPropertiesTo(other_layer.get()); |
1518 | 1681 |
1519 EXPECT_EQ(0.5f, other_layer->inverse_device_scale_factor()); | 1682 EXPECT_EQ(0.5f, other_layer->inverse_device_scale_factor()); |
1520 } | 1683 } |
1521 | 1684 |
1522 } // namespace | 1685 } // namespace |
1523 } // namespace cc | 1686 } // namespace cc |
OLD | NEW |