| 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/delegated_renderer_layer_impl.h" | 5 #include "cc/delegated_renderer_layer_impl.h" |
| 6 | 6 |
| 7 #include "cc/append_quads_data.h" | 7 #include "cc/append_quads_data.h" |
| 8 #include "cc/layer_tree_host_impl.h" | 8 #include "cc/layer_tree_host_impl.h" |
| 9 #include "cc/quad_sink.h" | 9 #include "cc/quad_sink.h" |
| 10 #include "cc/render_pass_draw_quad.h" | 10 #include "cc/render_pass_draw_quad.h" |
| (...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 165 LayerImpl* m_rootLayerPtr; | 165 LayerImpl* m_rootLayerPtr; |
| 166 LayerImpl* m_layerBeforePtr; | 166 LayerImpl* m_layerBeforePtr; |
| 167 LayerImpl* m_layerAfterPtr; | 167 LayerImpl* m_layerAfterPtr; |
| 168 DelegatedRendererLayerImpl* m_delegatedRendererLayerPtr; | 168 DelegatedRendererLayerImpl* m_delegatedRendererLayerPtr; |
| 169 }; | 169 }; |
| 170 | 170 |
| 171 TEST_F(DelegatedRendererLayerImplTestSimple, AddsContributingRenderPasses) | 171 TEST_F(DelegatedRendererLayerImplTestSimple, AddsContributingRenderPasses) |
| 172 { | 172 { |
| 173 LayerTreeHostImpl::FrameData frame; | 173 LayerTreeHostImpl::FrameData frame; |
| 174 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); | 174 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); |
| 175 m_hostImpl->drawLayers(frame); | |
| 176 m_hostImpl->didDrawAllLayers(frame); | |
| 177 | 175 |
| 178 // Each non-DelegatedRendererLayer added one RenderPass. The DelegatedRender
erLayer added two contributing passes. | 176 // Each non-DelegatedRendererLayer added one RenderPass. The DelegatedRender
erLayer added two contributing passes. |
| 179 ASSERT_EQ(5u, frame.renderPasses.size()); | 177 ASSERT_EQ(5u, frame.renderPasses.size()); |
| 180 | 178 |
| 181 // The DelegatedRendererLayer should have added its contributing RenderPasse
s to the frame. | 179 // The DelegatedRendererLayer should have added its contributing RenderPasse
s to the frame. |
| 182 EXPECT_EQ(4, frame.renderPasses[1]->id.layer_id); | 180 EXPECT_EQ(4, frame.renderPasses[1]->id.layer_id); |
| 183 EXPECT_EQ(1, frame.renderPasses[1]->id.index); | 181 EXPECT_EQ(1, frame.renderPasses[1]->id.index); |
| 184 EXPECT_EQ(4, frame.renderPasses[2]->id.layer_id); | 182 EXPECT_EQ(4, frame.renderPasses[2]->id.layer_id); |
| 185 EXPECT_EQ(2, frame.renderPasses[2]->id.index); | 183 EXPECT_EQ(2, frame.renderPasses[2]->id.index); |
| 186 // And all other RenderPasses should be non-delegated. | 184 // And all other RenderPasses should be non-delegated. |
| 187 EXPECT_NE(4, frame.renderPasses[0]->id.layer_id); | 185 EXPECT_NE(4, frame.renderPasses[0]->id.layer_id); |
| 188 EXPECT_EQ(0, frame.renderPasses[0]->id.index); | 186 EXPECT_EQ(0, frame.renderPasses[0]->id.index); |
| 189 EXPECT_NE(4, frame.renderPasses[3]->id.layer_id); | 187 EXPECT_NE(4, frame.renderPasses[3]->id.layer_id); |
| 190 EXPECT_EQ(0, frame.renderPasses[3]->id.index); | 188 EXPECT_EQ(0, frame.renderPasses[3]->id.index); |
| 191 EXPECT_NE(4, frame.renderPasses[4]->id.layer_id); | 189 EXPECT_NE(4, frame.renderPasses[4]->id.layer_id); |
| 192 EXPECT_EQ(0, frame.renderPasses[4]->id.index); | 190 EXPECT_EQ(0, frame.renderPasses[4]->id.index); |
| 193 | 191 |
| 194 // The DelegatedRendererLayer should have added its RenderPasses to the fram
e in order. | 192 // The DelegatedRendererLayer should have added its RenderPasses to the fram
e in order. |
| 195 EXPECT_RECT_EQ(gfx::Rect(6, 6, 6, 6), frame.renderPasses[1]->output_rect); | 193 EXPECT_RECT_EQ(gfx::Rect(6, 6, 6, 6), frame.renderPasses[1]->output_rect); |
| 196 EXPECT_RECT_EQ(gfx::Rect(7, 7, 7, 7), frame.renderPasses[2]->output_rect); | 194 EXPECT_RECT_EQ(gfx::Rect(7, 7, 7, 7), frame.renderPasses[2]->output_rect); |
| 195 |
| 196 m_hostImpl->drawLayers(frame); |
| 197 m_hostImpl->didDrawAllLayers(frame); |
| 197 } | 198 } |
| 198 | 199 |
| 199 TEST_F(DelegatedRendererLayerImplTestSimple, AddsQuadsToContributingRenderPasses
) | 200 TEST_F(DelegatedRendererLayerImplTestSimple, AddsQuadsToContributingRenderPasses
) |
| 200 { | 201 { |
| 201 LayerTreeHostImpl::FrameData frame; | 202 LayerTreeHostImpl::FrameData frame; |
| 202 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); | 203 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); |
| 203 m_hostImpl->drawLayers(frame); | |
| 204 m_hostImpl->didDrawAllLayers(frame); | |
| 205 | 204 |
| 206 // Each non-DelegatedRendererLayer added one RenderPass. The DelegatedRender
erLayer added two contributing passes. | 205 // Each non-DelegatedRendererLayer added one RenderPass. The DelegatedRender
erLayer added two contributing passes. |
| 207 ASSERT_EQ(5u, frame.renderPasses.size()); | 206 ASSERT_EQ(5u, frame.renderPasses.size()); |
| 208 | 207 |
| 209 // The DelegatedRendererLayer should have added its contributing RenderPasse
s to the frame. | 208 // The DelegatedRendererLayer should have added its contributing RenderPasse
s to the frame. |
| 210 EXPECT_EQ(4, frame.renderPasses[1]->id.layer_id); | 209 EXPECT_EQ(4, frame.renderPasses[1]->id.layer_id); |
| 211 EXPECT_EQ(1, frame.renderPasses[1]->id.index); | 210 EXPECT_EQ(1, frame.renderPasses[1]->id.index); |
| 212 EXPECT_EQ(4, frame.renderPasses[2]->id.layer_id); | 211 EXPECT_EQ(4, frame.renderPasses[2]->id.layer_id); |
| 213 EXPECT_EQ(2, frame.renderPasses[2]->id.index); | 212 EXPECT_EQ(2, frame.renderPasses[2]->id.index); |
| 214 | 213 |
| 215 // The DelegatedRendererLayer should have added copies of its quads to contr
ibuting RenderPasses. | 214 // The DelegatedRendererLayer should have added copies of its quads to contr
ibuting RenderPasses. |
| 216 ASSERT_EQ(1u, frame.renderPasses[1]->quad_list.size()); | 215 ASSERT_EQ(1u, frame.renderPasses[1]->quad_list.size()); |
| 217 EXPECT_RECT_EQ(gfx::Rect(0, 0, 6, 6), frame.renderPasses[1]->quad_list[0]->r
ect); | 216 EXPECT_RECT_EQ(gfx::Rect(0, 0, 6, 6), frame.renderPasses[1]->quad_list[0]->r
ect); |
| 218 | 217 |
| 219 // Verify it added the right quads. | 218 // Verify it added the right quads. |
| 220 ASSERT_EQ(2u, frame.renderPasses[2]->quad_list.size()); | 219 ASSERT_EQ(2u, frame.renderPasses[2]->quad_list.size()); |
| 221 EXPECT_RECT_EQ(gfx::Rect(0, 0, 7, 7), frame.renderPasses[2]->quad_list[0]->r
ect); | 220 EXPECT_RECT_EQ(gfx::Rect(0, 0, 7, 7), frame.renderPasses[2]->quad_list[0]->r
ect); |
| 222 EXPECT_RECT_EQ(gfx::Rect(6, 6, 6, 6), frame.renderPasses[2]->quad_list[1]->r
ect); | 221 EXPECT_RECT_EQ(gfx::Rect(6, 6, 6, 6), frame.renderPasses[2]->quad_list[1]->r
ect); |
| 223 ASSERT_EQ(1u, frame.renderPasses[1]->quad_list.size()); | 222 ASSERT_EQ(1u, frame.renderPasses[1]->quad_list.size()); |
| 224 EXPECT_RECT_EQ(gfx::Rect(0, 0, 6, 6), frame.renderPasses[1]->quad_list[0]->r
ect); | 223 EXPECT_RECT_EQ(gfx::Rect(0, 0, 6, 6), frame.renderPasses[1]->quad_list[0]->r
ect); |
| 224 |
| 225 m_hostImpl->drawLayers(frame); |
| 226 m_hostImpl->didDrawAllLayers(frame); |
| 225 } | 227 } |
| 226 | 228 |
| 227 TEST_F(DelegatedRendererLayerImplTestSimple, AddsQuadsToTargetRenderPass) | 229 TEST_F(DelegatedRendererLayerImplTestSimple, AddsQuadsToTargetRenderPass) |
| 228 { | 230 { |
| 229 LayerTreeHostImpl::FrameData frame; | 231 LayerTreeHostImpl::FrameData frame; |
| 230 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); | 232 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); |
| 231 m_hostImpl->drawLayers(frame); | |
| 232 m_hostImpl->didDrawAllLayers(frame); | |
| 233 | 233 |
| 234 // Each non-DelegatedRendererLayer added one RenderPass. The DelegatedRender
erLayer added two contributing passes. | 234 // Each non-DelegatedRendererLayer added one RenderPass. The DelegatedRender
erLayer added two contributing passes. |
| 235 ASSERT_EQ(5u, frame.renderPasses.size()); | 235 ASSERT_EQ(5u, frame.renderPasses.size()); |
| 236 | 236 |
| 237 // The layer's target is the RenderPass from m_layerAfter. | 237 // The layer's target is the RenderPass from m_layerAfter. |
| 238 EXPECT_EQ(RenderPass::Id(3, 0), frame.renderPasses[3]->id); | 238 EXPECT_EQ(RenderPass::Id(3, 0), frame.renderPasses[3]->id); |
| 239 | 239 |
| 240 // The DelegatedRendererLayer should have added copies of quads in its root
RenderPass to its target RenderPass. | 240 // The DelegatedRendererLayer should have added copies of quads in its root
RenderPass to its target RenderPass. |
| 241 // The m_layerAfter also adds one quad. | 241 // The m_layerAfter also adds one quad. |
| 242 ASSERT_EQ(2u, frame.renderPasses[3]->quad_list.size()); | 242 ASSERT_EQ(2u, frame.renderPasses[3]->quad_list.size()); |
| 243 | 243 |
| 244 // Verify it added the right quads. | 244 // Verify it added the right quads. |
| 245 EXPECT_RECT_EQ(gfx::Rect(7, 7, 7, 7), frame.renderPasses[3]->quad_list[0]->r
ect); | 245 EXPECT_RECT_EQ(gfx::Rect(7, 7, 7, 7), frame.renderPasses[3]->quad_list[0]->r
ect); |
| 246 | 246 |
| 247 // Its target layer should have a quad as well. | 247 // Its target layer should have a quad as well. |
| 248 EXPECT_RECT_EQ(gfx::Rect(0, 0, 15, 15), frame.renderPasses[3]->quad_list[1]-
>rect); | 248 EXPECT_RECT_EQ(gfx::Rect(0, 0, 15, 15), frame.renderPasses[3]->quad_list[1]-
>rect); |
| 249 |
| 250 m_hostImpl->drawLayers(frame); |
| 251 m_hostImpl->didDrawAllLayers(frame); |
| 249 } | 252 } |
| 250 | 253 |
| 251 TEST_F(DelegatedRendererLayerImplTestSimple, QuadsFromRootRenderPassAreModifiedF
orTheTarget) | 254 TEST_F(DelegatedRendererLayerImplTestSimple, QuadsFromRootRenderPassAreModifiedF
orTheTarget) |
| 252 { | 255 { |
| 253 LayerTreeHostImpl::FrameData frame; | 256 LayerTreeHostImpl::FrameData frame; |
| 254 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); | 257 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); |
| 255 m_hostImpl->drawLayers(frame); | |
| 256 m_hostImpl->didDrawAllLayers(frame); | |
| 257 | 258 |
| 258 // Each non-DelegatedRendererLayer added one RenderPass. The DelegatedRender
erLayer added two contributing passes. | 259 // Each non-DelegatedRendererLayer added one RenderPass. The DelegatedRender
erLayer added two contributing passes. |
| 259 ASSERT_EQ(5u, frame.renderPasses.size()); | 260 ASSERT_EQ(5u, frame.renderPasses.size()); |
| 260 | 261 |
| 261 // The DelegatedRendererLayer is at position 3,3 compared to its target, and
has a translation transform of 1,1. | 262 // The DelegatedRendererLayer is at position 3,3 compared to its target, and
has a translation transform of 1,1. |
| 262 // So its root RenderPass' quads should all be transformed by that combined
amount. | 263 // So its root RenderPass' quads should all be transformed by that combined
amount. |
| 263 gfx::Transform transform; | 264 gfx::Transform transform; |
| 264 transform.Translate(4, 4); | 265 transform.Translate(4, 4); |
| 265 EXPECT_TRANSFORMATION_MATRIX_EQ(transform, frame.renderPasses[3]->quad_list[
0]->quadTransform()); | 266 EXPECT_TRANSFORMATION_MATRIX_EQ(transform, frame.renderPasses[3]->quad_list[
0]->quadTransform()); |
| 266 | 267 |
| 267 // Quads from non-root RenderPasses should not be shifted though. | 268 // Quads from non-root RenderPasses should not be shifted though. |
| 268 ASSERT_EQ(2u, frame.renderPasses[2]->quad_list.size()); | 269 ASSERT_EQ(2u, frame.renderPasses[2]->quad_list.size()); |
| 269 EXPECT_TRANSFORMATION_MATRIX_EQ(gfx::Transform(), frame.renderPasses[2]->qua
d_list[0]->quadTransform()); | 270 EXPECT_TRANSFORMATION_MATRIX_EQ(gfx::Transform(), frame.renderPasses[2]->qua
d_list[0]->quadTransform()); |
| 270 EXPECT_TRANSFORMATION_MATRIX_EQ(gfx::Transform(), frame.renderPasses[2]->qua
d_list[1]->quadTransform()); | 271 EXPECT_TRANSFORMATION_MATRIX_EQ(gfx::Transform(), frame.renderPasses[2]->qua
d_list[1]->quadTransform()); |
| 271 ASSERT_EQ(1u, frame.renderPasses[1]->quad_list.size()); | 272 ASSERT_EQ(1u, frame.renderPasses[1]->quad_list.size()); |
| 272 EXPECT_TRANSFORMATION_MATRIX_EQ(gfx::Transform(), frame.renderPasses[1]->qua
d_list[0]->quadTransform()); | 273 EXPECT_TRANSFORMATION_MATRIX_EQ(gfx::Transform(), frame.renderPasses[1]->qua
d_list[0]->quadTransform()); |
| 274 |
| 275 m_hostImpl->drawLayers(frame); |
| 276 m_hostImpl->didDrawAllLayers(frame); |
| 273 } | 277 } |
| 274 | 278 |
| 275 TEST_F(DelegatedRendererLayerImplTestSimple, DoesNotOwnARenderSurface) | 279 TEST_F(DelegatedRendererLayerImplTestSimple, DoesNotOwnARenderSurface) |
| 276 { | 280 { |
| 277 LayerTreeHostImpl::FrameData frame; | 281 LayerTreeHostImpl::FrameData frame; |
| 278 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); | 282 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); |
| 279 m_hostImpl->drawLayers(frame); | |
| 280 m_hostImpl->didDrawAllLayers(frame); | |
| 281 | 283 |
| 282 // If the DelegatedRendererLayer is axis aligned and has opacity 1, then | 284 // If the DelegatedRendererLayer is axis aligned and has opacity 1, then |
| 283 // it has no need to be a renderSurface for the quads it carries. | 285 // it has no need to be a renderSurface for the quads it carries. |
| 284 EXPECT_FALSE(m_delegatedRendererLayerPtr->renderSurface()); | 286 EXPECT_FALSE(m_delegatedRendererLayerPtr->renderSurface()); |
| 287 |
| 288 m_hostImpl->drawLayers(frame); |
| 289 m_hostImpl->didDrawAllLayers(frame); |
| 285 } | 290 } |
| 286 | 291 |
| 287 TEST_F(DelegatedRendererLayerImplTestSimple, DoesOwnARenderSurface) | 292 TEST_F(DelegatedRendererLayerImplTestSimple, DoesOwnARenderSurface) |
| 288 { | 293 { |
| 289 m_delegatedRendererLayerPtr->setOpacity(0.5f); | 294 m_delegatedRendererLayerPtr->setOpacity(0.5f); |
| 290 | 295 |
| 291 LayerTreeHostImpl::FrameData frame; | 296 LayerTreeHostImpl::FrameData frame; |
| 292 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); | 297 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); |
| 293 m_hostImpl->drawLayers(frame); | |
| 294 m_hostImpl->didDrawAllLayers(frame); | |
| 295 | 298 |
| 296 // This test case has quads from multiple layers in the delegated renderer, | 299 // This test case has quads from multiple layers in the delegated renderer, |
| 297 // so if the DelegatedRendererLayer has opacity < 1, it should end up with | 300 // so if the DelegatedRendererLayer has opacity < 1, it should end up with |
| 298 // a render surface. | 301 // a render surface. |
| 299 EXPECT_TRUE(m_delegatedRendererLayerPtr->renderSurface()); | 302 EXPECT_TRUE(m_delegatedRendererLayerPtr->renderSurface()); |
| 300 | 303 |
| 304 m_hostImpl->drawLayers(frame); |
| 305 m_hostImpl->didDrawAllLayers(frame); |
| 301 } | 306 } |
| 302 | 307 |
| 303 class DelegatedRendererLayerImplTestOwnSurface : public DelegatedRendererLayerIm
plTestSimple { | 308 class DelegatedRendererLayerImplTestOwnSurface : public DelegatedRendererLayerIm
plTestSimple { |
| 304 public: | 309 public: |
| 305 DelegatedRendererLayerImplTestOwnSurface() | 310 DelegatedRendererLayerImplTestOwnSurface() |
| 306 : DelegatedRendererLayerImplTestSimple() | 311 : DelegatedRendererLayerImplTestSimple() |
| 307 { | 312 { |
| 308 m_delegatedRendererLayerPtr->setForceRenderSurface(true); | 313 m_delegatedRendererLayerPtr->setForceRenderSurface(true); |
| 309 } | 314 } |
| 310 }; | 315 }; |
| 311 | 316 |
| 312 TEST_F(DelegatedRendererLayerImplTestOwnSurface, AddsRenderPasses) | 317 TEST_F(DelegatedRendererLayerImplTestOwnSurface, AddsRenderPasses) |
| 313 { | 318 { |
| 314 LayerTreeHostImpl::FrameData frame; | 319 LayerTreeHostImpl::FrameData frame; |
| 315 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); | 320 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); |
| 316 m_hostImpl->drawLayers(frame); | |
| 317 m_hostImpl->didDrawAllLayers(frame); | |
| 318 | 321 |
| 319 // Each non-DelegatedRendererLayer added one RenderPass. The DelegatedRender
erLayer added two contributing passes and its owned surface added one pass. | 322 // Each non-DelegatedRendererLayer added one RenderPass. The DelegatedRender
erLayer added two contributing passes and its owned surface added one pass. |
| 320 ASSERT_EQ(6u, frame.renderPasses.size()); | 323 ASSERT_EQ(6u, frame.renderPasses.size()); |
| 321 | 324 |
| 322 // The DelegatedRendererLayer should have added its contributing RenderPasse
s to the frame. | 325 // The DelegatedRendererLayer should have added its contributing RenderPasse
s to the frame. |
| 323 EXPECT_EQ(4, frame.renderPasses[1]->id.layer_id); | 326 EXPECT_EQ(4, frame.renderPasses[1]->id.layer_id); |
| 324 EXPECT_EQ(1, frame.renderPasses[1]->id.index); | 327 EXPECT_EQ(1, frame.renderPasses[1]->id.index); |
| 325 EXPECT_EQ(4, frame.renderPasses[2]->id.layer_id); | 328 EXPECT_EQ(4, frame.renderPasses[2]->id.layer_id); |
| 326 EXPECT_EQ(2, frame.renderPasses[2]->id.index); | 329 EXPECT_EQ(2, frame.renderPasses[2]->id.index); |
| 327 // The DelegatedRendererLayer should have added a RenderPass for its surface
to the frame. | 330 // The DelegatedRendererLayer should have added a RenderPass for its surface
to the frame. |
| 328 EXPECT_EQ(4, frame.renderPasses[1]->id.layer_id); | 331 EXPECT_EQ(4, frame.renderPasses[1]->id.layer_id); |
| 329 EXPECT_EQ(0, frame.renderPasses[3]->id.index); | 332 EXPECT_EQ(0, frame.renderPasses[3]->id.index); |
| 330 // And all other RenderPasses should be non-delegated. | 333 // And all other RenderPasses should be non-delegated. |
| 331 EXPECT_NE(4, frame.renderPasses[0]->id.layer_id); | 334 EXPECT_NE(4, frame.renderPasses[0]->id.layer_id); |
| 332 EXPECT_EQ(0, frame.renderPasses[0]->id.index); | 335 EXPECT_EQ(0, frame.renderPasses[0]->id.index); |
| 333 EXPECT_NE(4, frame.renderPasses[4]->id.layer_id); | 336 EXPECT_NE(4, frame.renderPasses[4]->id.layer_id); |
| 334 EXPECT_EQ(0, frame.renderPasses[4]->id.index); | 337 EXPECT_EQ(0, frame.renderPasses[4]->id.index); |
| 335 EXPECT_NE(4, frame.renderPasses[5]->id.layer_id); | 338 EXPECT_NE(4, frame.renderPasses[5]->id.layer_id); |
| 336 EXPECT_EQ(0, frame.renderPasses[5]->id.index); | 339 EXPECT_EQ(0, frame.renderPasses[5]->id.index); |
| 337 | 340 |
| 338 // The DelegatedRendererLayer should have added its RenderPasses to the fram
e in order. | 341 // The DelegatedRendererLayer should have added its RenderPasses to the fram
e in order. |
| 339 EXPECT_RECT_EQ(gfx::Rect(6, 6, 6, 6), frame.renderPasses[1]->output_rect); | 342 EXPECT_RECT_EQ(gfx::Rect(6, 6, 6, 6), frame.renderPasses[1]->output_rect); |
| 340 EXPECT_RECT_EQ(gfx::Rect(7, 7, 7, 7), frame.renderPasses[2]->output_rect); | 343 EXPECT_RECT_EQ(gfx::Rect(7, 7, 7, 7), frame.renderPasses[2]->output_rect); |
| 344 |
| 345 m_hostImpl->drawLayers(frame); |
| 346 m_hostImpl->didDrawAllLayers(frame); |
| 341 } | 347 } |
| 342 | 348 |
| 343 TEST_F(DelegatedRendererLayerImplTestOwnSurface, AddsQuadsToContributingRenderPa
sses) | 349 TEST_F(DelegatedRendererLayerImplTestOwnSurface, AddsQuadsToContributingRenderPa
sses) |
| 344 { | 350 { |
| 345 LayerTreeHostImpl::FrameData frame; | 351 LayerTreeHostImpl::FrameData frame; |
| 346 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); | 352 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); |
| 347 m_hostImpl->drawLayers(frame); | |
| 348 m_hostImpl->didDrawAllLayers(frame); | |
| 349 | 353 |
| 350 // Each non-DelegatedRendererLayer added one RenderPass. The DelegatedRender
erLayer added two contributing passes and its owned surface added one pass. | 354 // Each non-DelegatedRendererLayer added one RenderPass. The DelegatedRender
erLayer added two contributing passes and its owned surface added one pass. |
| 351 ASSERT_EQ(6u, frame.renderPasses.size()); | 355 ASSERT_EQ(6u, frame.renderPasses.size()); |
| 352 | 356 |
| 353 // The DelegatedRendererLayer should have added its contributing RenderPasse
s to the frame. | 357 // The DelegatedRendererLayer should have added its contributing RenderPasse
s to the frame. |
| 354 EXPECT_EQ(4, frame.renderPasses[1]->id.layer_id); | 358 EXPECT_EQ(4, frame.renderPasses[1]->id.layer_id); |
| 355 EXPECT_EQ(1, frame.renderPasses[1]->id.index); | 359 EXPECT_EQ(1, frame.renderPasses[1]->id.index); |
| 356 EXPECT_EQ(4, frame.renderPasses[2]->id.layer_id); | 360 EXPECT_EQ(4, frame.renderPasses[2]->id.layer_id); |
| 357 EXPECT_EQ(2, frame.renderPasses[2]->id.index); | 361 EXPECT_EQ(2, frame.renderPasses[2]->id.index); |
| 358 | 362 |
| 359 // The DelegatedRendererLayer should have added copies of its quads to contr
ibuting RenderPasses. | 363 // The DelegatedRendererLayer should have added copies of its quads to contr
ibuting RenderPasses. |
| 360 ASSERT_EQ(1u, frame.renderPasses[1]->quad_list.size()); | 364 ASSERT_EQ(1u, frame.renderPasses[1]->quad_list.size()); |
| 361 EXPECT_RECT_EQ(gfx::Rect(0, 0, 6, 6), frame.renderPasses[1]->quad_list[0]->r
ect); | 365 EXPECT_RECT_EQ(gfx::Rect(0, 0, 6, 6), frame.renderPasses[1]->quad_list[0]->r
ect); |
| 362 | 366 |
| 363 // Verify it added the right quads. | 367 // Verify it added the right quads. |
| 364 ASSERT_EQ(2u, frame.renderPasses[2]->quad_list.size()); | 368 ASSERT_EQ(2u, frame.renderPasses[2]->quad_list.size()); |
| 365 EXPECT_RECT_EQ(gfx::Rect(0, 0, 7, 7), frame.renderPasses[2]->quad_list[0]->r
ect); | 369 EXPECT_RECT_EQ(gfx::Rect(0, 0, 7, 7), frame.renderPasses[2]->quad_list[0]->r
ect); |
| 366 EXPECT_RECT_EQ(gfx::Rect(6, 6, 6, 6), frame.renderPasses[2]->quad_list[1]->r
ect); | 370 EXPECT_RECT_EQ(gfx::Rect(6, 6, 6, 6), frame.renderPasses[2]->quad_list[1]->r
ect); |
| 367 ASSERT_EQ(1u, frame.renderPasses[1]->quad_list.size()); | 371 ASSERT_EQ(1u, frame.renderPasses[1]->quad_list.size()); |
| 368 EXPECT_RECT_EQ(gfx::Rect(0, 0, 6, 6), frame.renderPasses[1]->quad_list[0]->r
ect); | 372 EXPECT_RECT_EQ(gfx::Rect(0, 0, 6, 6), frame.renderPasses[1]->quad_list[0]->r
ect); |
| 373 |
| 374 m_hostImpl->drawLayers(frame); |
| 375 m_hostImpl->didDrawAllLayers(frame); |
| 369 } | 376 } |
| 370 | 377 |
| 371 TEST_F(DelegatedRendererLayerImplTestOwnSurface, AddsQuadsToTargetRenderPass) | 378 TEST_F(DelegatedRendererLayerImplTestOwnSurface, AddsQuadsToTargetRenderPass) |
| 372 { | 379 { |
| 373 LayerTreeHostImpl::FrameData frame; | 380 LayerTreeHostImpl::FrameData frame; |
| 374 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); | 381 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); |
| 375 m_hostImpl->drawLayers(frame); | |
| 376 m_hostImpl->didDrawAllLayers(frame); | |
| 377 | 382 |
| 378 // Each non-DelegatedRendererLayer added one RenderPass. The DelegatedRender
erLayer added two contributing passes and its owned surface added one pass. | 383 // Each non-DelegatedRendererLayer added one RenderPass. The DelegatedRender
erLayer added two contributing passes and its owned surface added one pass. |
| 379 ASSERT_EQ(6u, frame.renderPasses.size()); | 384 ASSERT_EQ(6u, frame.renderPasses.size()); |
| 380 | 385 |
| 381 // The layer's target is the RenderPass owned by itself. | 386 // The layer's target is the RenderPass owned by itself. |
| 382 EXPECT_EQ(RenderPass::Id(4, 0), frame.renderPasses[3]->id); | 387 EXPECT_EQ(RenderPass::Id(4, 0), frame.renderPasses[3]->id); |
| 383 | 388 |
| 384 // The DelegatedRendererLayer should have added copies of quads in its root
RenderPass to its target RenderPass. | 389 // The DelegatedRendererLayer should have added copies of quads in its root
RenderPass to its target RenderPass. |
| 385 // The m_layerAfter also adds one quad. | 390 // The m_layerAfter also adds one quad. |
| 386 ASSERT_EQ(1u, frame.renderPasses[3]->quad_list.size()); | 391 ASSERT_EQ(1u, frame.renderPasses[3]->quad_list.size()); |
| 387 | 392 |
| 388 // Verify it added the right quads. | 393 // Verify it added the right quads. |
| 389 EXPECT_RECT_EQ(gfx::Rect(7, 7, 7, 7), frame.renderPasses[3]->quad_list[0]->r
ect); | 394 EXPECT_RECT_EQ(gfx::Rect(7, 7, 7, 7), frame.renderPasses[3]->quad_list[0]->r
ect); |
| 395 |
| 396 m_hostImpl->drawLayers(frame); |
| 397 m_hostImpl->didDrawAllLayers(frame); |
| 390 } | 398 } |
| 391 | 399 |
| 392 TEST_F(DelegatedRendererLayerImplTestOwnSurface, QuadsFromRootRenderPassAreNotMo
difiedForTheTarget) | 400 TEST_F(DelegatedRendererLayerImplTestOwnSurface, QuadsFromRootRenderPassAreNotMo
difiedForTheTarget) |
| 393 { | 401 { |
| 394 LayerTreeHostImpl::FrameData frame; | 402 LayerTreeHostImpl::FrameData frame; |
| 395 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); | 403 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); |
| 396 m_hostImpl->drawLayers(frame); | |
| 397 m_hostImpl->didDrawAllLayers(frame); | |
| 398 | 404 |
| 399 // Each non-DelegatedRendererLayer added one RenderPass. The DelegatedRender
erLayer added two contributing passes and its owned surface added one pass. | 405 // Each non-DelegatedRendererLayer added one RenderPass. The DelegatedRender
erLayer added two contributing passes and its owned surface added one pass. |
| 400 ASSERT_EQ(6u, frame.renderPasses.size()); | 406 ASSERT_EQ(6u, frame.renderPasses.size()); |
| 401 | 407 |
| 402 // Because the DelegatedRendererLayer owns a RenderSurfaceImpl, its root Ren
derPass' quads do not need to be | 408 // Because the DelegatedRendererLayer owns a RenderSurfaceImpl, its root Ren
derPass' quads do not need to be |
| 403 // modified at all. | 409 // modified at all. |
| 404 EXPECT_TRANSFORMATION_MATRIX_EQ(gfx::Transform(), frame.renderPasses[3]->qua
d_list[0]->quadTransform()); | 410 EXPECT_TRANSFORMATION_MATRIX_EQ(gfx::Transform(), frame.renderPasses[3]->qua
d_list[0]->quadTransform()); |
| 405 | 411 |
| 406 // Quads from non-root RenderPasses should not be shifted though. | 412 // Quads from non-root RenderPasses should not be shifted though. |
| 407 ASSERT_EQ(2u, frame.renderPasses[2]->quad_list.size()); | 413 ASSERT_EQ(2u, frame.renderPasses[2]->quad_list.size()); |
| 408 EXPECT_TRANSFORMATION_MATRIX_EQ(gfx::Transform(), frame.renderPasses[2]->qua
d_list[0]->quadTransform()); | 414 EXPECT_TRANSFORMATION_MATRIX_EQ(gfx::Transform(), frame.renderPasses[2]->qua
d_list[0]->quadTransform()); |
| 409 EXPECT_TRANSFORMATION_MATRIX_EQ(gfx::Transform(), frame.renderPasses[2]->qua
d_list[1]->quadTransform()); | 415 EXPECT_TRANSFORMATION_MATRIX_EQ(gfx::Transform(), frame.renderPasses[2]->qua
d_list[1]->quadTransform()); |
| 410 ASSERT_EQ(1u, frame.renderPasses[1]->quad_list.size()); | 416 ASSERT_EQ(1u, frame.renderPasses[1]->quad_list.size()); |
| 411 EXPECT_TRANSFORMATION_MATRIX_EQ(gfx::Transform(), frame.renderPasses[1]->qua
d_list[0]->quadTransform()); | 417 EXPECT_TRANSFORMATION_MATRIX_EQ(gfx::Transform(), frame.renderPasses[1]->qua
d_list[0]->quadTransform()); |
| 418 |
| 419 m_hostImpl->drawLayers(frame); |
| 420 m_hostImpl->didDrawAllLayers(frame); |
| 412 } | 421 } |
| 413 | 422 |
| 414 class DelegatedRendererLayerImplTestSharedData : public DelegatedRendererLayerIm
plTest { | 423 class DelegatedRendererLayerImplTestSharedData : public DelegatedRendererLayerIm
plTest { |
| 415 public: | 424 public: |
| 416 DelegatedRendererLayerImplTestSharedData() | 425 DelegatedRendererLayerImplTestSharedData() |
| 417 : DelegatedRendererLayerImplTest() | 426 : DelegatedRendererLayerImplTest() |
| 418 { | 427 { |
| 419 scoped_ptr<LayerImpl> rootLayer = LayerImpl::create(1); | 428 scoped_ptr<LayerImpl> rootLayer = LayerImpl::create(1); |
| 420 scoped_ptr<DelegatedRendererLayerImpl> delegatedRendererLayer = Delegate
dRendererLayerImpl::create(2); | 429 scoped_ptr<DelegatedRendererLayerImpl> delegatedRendererLayer = Delegate
dRendererLayerImpl::create(2); |
| 421 | 430 |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 470 | 479 |
| 471 protected: | 480 protected: |
| 472 LayerImpl* m_rootLayerPtr; | 481 LayerImpl* m_rootLayerPtr; |
| 473 DelegatedRendererLayerImpl* m_delegatedRendererLayerPtr; | 482 DelegatedRendererLayerImpl* m_delegatedRendererLayerPtr; |
| 474 }; | 483 }; |
| 475 | 484 |
| 476 TEST_F(DelegatedRendererLayerImplTestSharedData, SharedData) | 485 TEST_F(DelegatedRendererLayerImplTestSharedData, SharedData) |
| 477 { | 486 { |
| 478 LayerTreeHostImpl::FrameData frame; | 487 LayerTreeHostImpl::FrameData frame; |
| 479 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); | 488 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); |
| 480 m_hostImpl->drawLayers(frame); | |
| 481 m_hostImpl->didDrawAllLayers(frame); | |
| 482 | 489 |
| 483 ASSERT_EQ(1u, frame.renderPasses.size()); | 490 ASSERT_EQ(1u, frame.renderPasses.size()); |
| 484 EXPECT_EQ(1, frame.renderPasses[0]->id.layer_id); | 491 EXPECT_EQ(1, frame.renderPasses[0]->id.layer_id); |
| 485 EXPECT_EQ(0, frame.renderPasses[0]->id.index); | 492 EXPECT_EQ(0, frame.renderPasses[0]->id.index); |
| 486 | 493 |
| 487 const QuadList& quadList = frame.renderPasses[0]->quad_list; | 494 const QuadList& quadList = frame.renderPasses[0]->quad_list; |
| 488 ASSERT_EQ(4u, quadList.size()); | 495 ASSERT_EQ(4u, quadList.size()); |
| 489 | 496 |
| 490 // All quads should share the same state. | 497 // All quads should share the same state. |
| 491 const SharedQuadState* sharedState = quadList[0]->shared_quad_state; | 498 const SharedQuadState* sharedState = quadList[0]->shared_quad_state; |
| 492 EXPECT_EQ(sharedState, quadList[1]->shared_quad_state); | 499 EXPECT_EQ(sharedState, quadList[1]->shared_quad_state); |
| 493 EXPECT_EQ(sharedState, quadList[2]->shared_quad_state); | 500 EXPECT_EQ(sharedState, quadList[2]->shared_quad_state); |
| 494 EXPECT_EQ(sharedState, quadList[3]->shared_quad_state); | 501 EXPECT_EQ(sharedState, quadList[3]->shared_quad_state); |
| 495 | 502 |
| 496 // The state should be transformed only once. | 503 // The state should be transformed only once. |
| 497 EXPECT_RECT_EQ(gfx::Rect(30, 30, 50, 50), sharedState->clipped_rect_in_targe
t); | 504 EXPECT_RECT_EQ(gfx::Rect(30, 30, 50, 50), sharedState->clipped_rect_in_targe
t); |
| 498 gfx::Transform expected; | 505 gfx::Transform expected; |
| 499 expected.Translate(30, 30); | 506 expected.Translate(30, 30); |
| 500 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, sharedState->content_to_target_tra
nsform); | 507 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, sharedState->content_to_target_tra
nsform); |
| 508 |
| 509 m_hostImpl->drawLayers(frame); |
| 510 m_hostImpl->didDrawAllLayers(frame); |
| 501 } | 511 } |
| 502 | 512 |
| 503 } // namespace | 513 } // namespace |
| 504 } // namespace cc | 514 } // namespace cc |
| OLD | NEW |