| 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/layer_tree_impl.h" | 9 #include "cc/layer_tree_impl.h" |
| 10 #include "cc/quad_sink.h" | 10 #include "cc/quad_sink.h" |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 81 gfx::Transform transform; | 81 gfx::Transform transform; |
| 82 transform.Translate(1, 1); | 82 transform.Translate(1, 1); |
| 83 delegatedRendererLayer->setTransform(transform); | 83 delegatedRendererLayer->setTransform(transform); |
| 84 | 84 |
| 85 ScopedPtrVector<RenderPass> delegatedRenderPasses; | 85 ScopedPtrVector<RenderPass> delegatedRenderPasses; |
| 86 TestRenderPass* pass1 = addRenderPass(delegatedRenderPasses, RenderPass:
:Id(9, 6), gfx::Rect(6, 6, 6, 6), gfx::Transform()); | 86 TestRenderPass* pass1 = addRenderPass(delegatedRenderPasses, RenderPass:
:Id(9, 6), gfx::Rect(6, 6, 6, 6), gfx::Transform()); |
| 87 addQuad(pass1, gfx::Rect(0, 0, 6, 6), 33u); | 87 addQuad(pass1, gfx::Rect(0, 0, 6, 6), 33u); |
| 88 TestRenderPass* pass2 = addRenderPass(delegatedRenderPasses, RenderPass:
:Id(9, 7), gfx::Rect(7, 7, 7, 7), gfx::Transform()); | 88 TestRenderPass* pass2 = addRenderPass(delegatedRenderPasses, RenderPass:
:Id(9, 7), gfx::Rect(7, 7, 7, 7), gfx::Transform()); |
| 89 addQuad(pass2, gfx::Rect(0, 0, 7, 7), 22u); | 89 addQuad(pass2, gfx::Rect(0, 0, 7, 7), 22u); |
| 90 addRenderPassQuad(pass2, pass1); | 90 addRenderPassQuad(pass2, pass1); |
| 91 TestRenderPass* pass3 = addRenderPass(delegatedRenderPasses, RenderPass:
:Id(9, 8), gfx::Rect(8, 8, 8, 8), gfx::Transform()); | 91 TestRenderPass* pass3 = addRenderPass(delegatedRenderPasses, RenderPass:
:Id(9, 8), gfx::Rect(0, 0, 8, 8), gfx::Transform()); |
| 92 addRenderPassQuad(pass3, pass2); | 92 addRenderPassQuad(pass3, pass2); |
| 93 delegatedRendererLayer->setRenderPasses(delegatedRenderPasses); | 93 delegatedRendererLayer->setRenderPasses(delegatedRenderPasses); |
| 94 | 94 |
| 95 // The RenderPasses should be taken by the layer. | 95 // The RenderPasses should be taken by the layer. |
| 96 EXPECT_EQ(0u, delegatedRenderPasses.size()); | 96 EXPECT_EQ(0u, delegatedRenderPasses.size()); |
| 97 | 97 |
| 98 m_rootLayerPtr = rootLayer.get(); | 98 m_rootLayerPtr = rootLayer.get(); |
| 99 m_layerBeforePtr = layerBefore.get(); | 99 m_layerBeforePtr = layerBefore.get(); |
| 100 m_layerAfterPtr = layerAfter.get(); | 100 m_layerAfterPtr = layerAfter.get(); |
| 101 m_delegatedRendererLayerPtr = delegatedRendererLayer.get(); | 101 m_delegatedRendererLayerPtr = delegatedRendererLayer.get(); |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 203 TEST_F(DelegatedRendererLayerImplTestSimple, QuadsFromRootRenderPassAreModifiedF
orTheTarget) | 203 TEST_F(DelegatedRendererLayerImplTestSimple, QuadsFromRootRenderPassAreModifiedF
orTheTarget) |
| 204 { | 204 { |
| 205 LayerTreeHostImpl::FrameData frame; | 205 LayerTreeHostImpl::FrameData frame; |
| 206 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); | 206 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); |
| 207 | 207 |
| 208 // Each non-DelegatedRendererLayer added one RenderPass. The DelegatedRender
erLayer added two contributing passes. | 208 // Each non-DelegatedRendererLayer added one RenderPass. The DelegatedRender
erLayer added two contributing passes. |
| 209 ASSERT_EQ(5u, frame.renderPasses.size()); | 209 ASSERT_EQ(5u, frame.renderPasses.size()); |
| 210 | 210 |
| 211 // The DelegatedRendererLayer is at position 3,3 compared to its target, and
has a translation transform of 1,1. | 211 // The DelegatedRendererLayer is at position 3,3 compared to its target, and
has a translation transform of 1,1. |
| 212 // So its root RenderPass' quads should all be transformed by that combined
amount. | 212 // So its root RenderPass' quads should all be transformed by that combined
amount. |
| 213 // The DelegatedRendererLayer has a size of 10x10, but the root delegated Re
nderPass has a size of 8x8, so |
| 214 // any quads should be scaled by 10/8. |
| 213 gfx::Transform transform; | 215 gfx::Transform transform; |
| 214 transform.Translate(4, 4); | 216 transform.Translate(4.0, 4.0); |
| 217 transform.Scale(10.0 / 8.0, 10.0 / 8.0); |
| 215 EXPECT_TRANSFORMATION_MATRIX_EQ(transform, frame.renderPasses[3]->quad_list[
0]->quadTransform()); | 218 EXPECT_TRANSFORMATION_MATRIX_EQ(transform, frame.renderPasses[3]->quad_list[
0]->quadTransform()); |
| 216 | 219 |
| 217 // Quads from non-root RenderPasses should not be shifted though. | 220 // Quads from non-root RenderPasses should not be shifted though. |
| 218 ASSERT_EQ(2u, frame.renderPasses[2]->quad_list.size()); | 221 ASSERT_EQ(2u, frame.renderPasses[2]->quad_list.size()); |
| 219 EXPECT_TRANSFORMATION_MATRIX_EQ(gfx::Transform(), frame.renderPasses[2]->qua
d_list[0]->quadTransform()); | 222 EXPECT_TRANSFORMATION_MATRIX_EQ(gfx::Transform(), frame.renderPasses[2]->qua
d_list[0]->quadTransform()); |
| 220 EXPECT_TRANSFORMATION_MATRIX_EQ(gfx::Transform(), frame.renderPasses[2]->qua
d_list[1]->quadTransform()); | 223 EXPECT_TRANSFORMATION_MATRIX_EQ(gfx::Transform(), frame.renderPasses[2]->qua
d_list[1]->quadTransform()); |
| 221 ASSERT_EQ(1u, frame.renderPasses[1]->quad_list.size()); | 224 ASSERT_EQ(1u, frame.renderPasses[1]->quad_list.size()); |
| 222 EXPECT_TRANSFORMATION_MATRIX_EQ(gfx::Transform(), frame.renderPasses[1]->qua
d_list[0]->quadTransform()); | 225 EXPECT_TRANSFORMATION_MATRIX_EQ(gfx::Transform(), frame.renderPasses[1]->qua
d_list[0]->quadTransform()); |
| 223 | 226 |
| 224 m_hostImpl->drawLayers(frame); | 227 m_hostImpl->drawLayers(frame); |
| (...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 498 | 501 |
| 499 const SharedQuadState* rootSharedState = rootQuadList[0]->shared_quad_state; | 502 const SharedQuadState* rootSharedState = rootQuadList[0]->shared_quad_state; |
| 500 EXPECT_EQ(rootSharedState, rootQuadList[1]->shared_quad_state); | 503 EXPECT_EQ(rootSharedState, rootQuadList[1]->shared_quad_state); |
| 501 EXPECT_EQ(rootSharedState, rootQuadList[2]->shared_quad_state); | 504 EXPECT_EQ(rootSharedState, rootQuadList[2]->shared_quad_state); |
| 502 EXPECT_EQ(rootSharedState, rootQuadList[3]->shared_quad_state); | 505 EXPECT_EQ(rootSharedState, rootQuadList[3]->shared_quad_state); |
| 503 EXPECT_EQ(rootSharedState, rootQuadList[4]->shared_quad_state); | 506 EXPECT_EQ(rootSharedState, rootQuadList[4]->shared_quad_state); |
| 504 | 507 |
| 505 EXPECT_NE(rootQuadList[0]->shared_quad_state, contribQuadList[0]->shared_qua
d_state); | 508 EXPECT_NE(rootQuadList[0]->shared_quad_state, contribQuadList[0]->shared_qua
d_state); |
| 506 | 509 |
| 507 // The state should be transformed only once. | 510 // The state should be transformed only once. |
| 511 |
| 508 // The x/y values are: position (20) + transform (8 * 2) = 36 | 512 // The x/y values are: position (20) + transform (8 * 2) = 36 |
| 509 // 36 - (width / 2) = 36 - 30 / 2 = 21 | 513 // 36 - (width / 2) = 36 - 30 / 2 = 21 |
| 510 EXPECT_RECT_EQ(gfx::Rect(21, 21, 100, 100), rootSharedState->clipped_rect_in
_target); | 514 // The size is 100 scaled to fit inside the layer's bounds at 30x30 from a f
rame at 50x50. |
| 511 EXPECT_RECT_EQ(gfx::Rect(21, 21, 100, 100), rootSharedState->clip_rect); | 515 // 100 * 30 / 50 = 60. |
| 516 EXPECT_RECT_EQ(gfx::Rect(21, 21, 60, 60), rootSharedState->clipped_rect_in_t
arget); |
| 517 EXPECT_RECT_EQ(gfx::Rect(21, 21, 60, 60), rootSharedState->clip_rect); |
| 512 gfx::Transform expected; | 518 gfx::Transform expected; |
| 519 // This is the transform from the layer's space to its target. |
| 513 // The position (20) - the width / scale (30 / 2) = 20 - 15 = 5 | 520 // The position (20) - the width / scale (30 / 2) = 20 - 15 = 5 |
| 514 expected.Translate(5.0, 5.0); | 521 expected.Translate(5.0, 5.0); |
| 515 expected.Scale(2.0, 2.0); | 522 expected.Scale(2.0, 2.0); |
| 516 expected.Translate(8.0, 8.0); | 523 expected.Translate(8.0, 8.0); |
| 524 // The frame has size 50x50 but the layer's bounds are 30x30. |
| 525 expected.Scale(30.0 / 50.0, 30.0 / 50.0); |
| 526 // This is the transform within the source frame. |
| 517 expected.Scale(1.5, 1.5); | 527 expected.Scale(1.5, 1.5); |
| 518 expected.Translate(7.0, 7.0); | 528 expected.Translate(7.0, 7.0); |
| 519 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, rootSharedState->content_to_target
_transform); | 529 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, rootSharedState->content_to_target
_transform); |
| 520 | 530 |
| 521 // The contributing render pass should not be transformed from its input. | 531 // The contributing render pass should not be transformed from its input. |
| 522 EXPECT_RECT_EQ(gfx::Rect(20, 20, 7, 7), contribSharedState->clipped_rect_in_
target); | 532 EXPECT_RECT_EQ(gfx::Rect(20, 20, 7, 7), contribSharedState->clipped_rect_in_
target); |
| 523 EXPECT_RECT_EQ(gfx::Rect(20, 20, 7, 7), contribSharedState->clip_rect); | 533 EXPECT_RECT_EQ(gfx::Rect(20, 20, 7, 7), contribSharedState->clip_rect); |
| 524 expected.MakeIdentity(); | 534 expected.MakeIdentity(); |
| 525 expected.Scale(0.8, 0.8); | 535 expected.Scale(0.8, 0.8); |
| 526 expected.Translate(9.0, 9.0); | 536 expected.Translate(9.0, 9.0); |
| 527 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, contribSharedState->content_to_tar
get_transform); | 537 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, contribSharedState->content_to_tar
get_transform); |
| 528 | 538 |
| 529 m_hostImpl->drawLayers(frame); | 539 m_hostImpl->drawLayers(frame); |
| 530 m_hostImpl->didDrawAllLayers(frame); | 540 m_hostImpl->didDrawAllLayers(frame); |
| 531 } | 541 } |
| 532 | 542 |
| 543 TEST_F(DelegatedRendererLayerImplTestSharedData, DisplaySize) |
| 544 { |
| 545 // Cause the layer to scale its output to be larger than its bounds. |
| 546 m_delegatedRendererLayerPtr->setDisplaySize(gfx::Size(40, 40)); |
| 547 EXPECT_LT(m_delegatedRendererLayerPtr->bounds().width(), 40); |
| 548 EXPECT_LT(m_delegatedRendererLayerPtr->bounds().height(), 40); |
| 549 |
| 550 LayerTreeHostImpl::FrameData frame; |
| 551 EXPECT_TRUE(m_hostImpl->prepareToDraw(frame)); |
| 552 |
| 553 ASSERT_EQ(2u, frame.renderPasses.size()); |
| 554 |
| 555 const QuadList& rootQuadList = frame.renderPasses[1]->quad_list; |
| 556 ASSERT_EQ(5u, rootQuadList.size()); |
| 557 |
| 558 const SharedQuadState* rootSharedState = rootQuadList[0]->shared_quad_state; |
| 559 |
| 560 // The results are similar to the SharedData test, but are scaled up by disp
laySize/bounds, which is 40/30. |
| 561 EXPECT_RECT_EQ(gfx::Rect(21, 21, 80, 80), rootSharedState->clipped_rect_in_t
arget); |
| 562 EXPECT_RECT_EQ(gfx::Rect(21, 21, 80, 80), rootSharedState->clip_rect); |
| 563 gfx::Transform expected; |
| 564 // This is the transform from the layer's space to its target. |
| 565 // The position (20) - the width / scale (30 / 2) = 20 - 15 = 5 |
| 566 expected.Translate(5.0, 5.0); |
| 567 expected.Scale(2.0, 2.0); |
| 568 expected.Translate(8.0, 8.0); |
| 569 // The frame has size 50x50 but the layer's bounds are 30x30. |
| 570 expected.Scale(30.0 / 50.0, 30.0 / 50.0); |
| 571 // The display size is 40x40 but the bounds are 30x30. |
| 572 expected.Scale(40.0 / 30.0, 40.0 / 30.0); |
| 573 // This is the transform within the source frame. |
| 574 expected.Scale(1.5, 1.5); |
| 575 expected.Translate(7.0, 7.0); |
| 576 EXPECT_TRANSFORMATION_MATRIX_EQ(expected, rootSharedState->content_to_target
_transform); |
| 577 |
| 578 m_hostImpl->drawLayers(frame); |
| 579 m_hostImpl->didDrawAllLayers(frame); |
| 580 } |
| 581 |
| 533 } // namespace | 582 } // namespace |
| 534 } // namespace cc | 583 } // namespace cc |
| OLD | NEW |