Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(968)

Side by Side Diff: cc/delegated_renderer_layer_impl_unittest.cc

Issue 11821015: cc: Use the size of the source frame along with the source frame's renderpasses (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: add displaySize() Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698