summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordanakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-01-19 04:57:34 +0000
committerdanakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-01-19 04:57:34 +0000
commitcb9b22f495de76e94eb4a0dd0d0094e020617c03 (patch)
tree3f74f78521e368b58ea1b7e3db266f56effbc8b9
parent1a64f69c716b9946f9a6fafe03fdfb6a5268d257 (diff)
downloadchromium_src-cb9b22f495de76e94eb4a0dd0d0094e020617c03.zip
chromium_src-cb9b22f495de76e94eb4a0dd0d0094e020617c03.tar.gz
chromium_src-cb9b22f495de76e94eb4a0dd0d0094e020617c03.tar.bz2
cc: Test non-root passes are not transformed.
The delegating renderer layer should not transform non-root render pass data, as it lives in its own world. BUG=171069 TBR=piman Review URL: https://chromiumcodereview.appspot.com/11926030 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@177845 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--cc/delegated_renderer_layer_impl_unittest.cc84
1 files changed, 71 insertions, 13 deletions
diff --git a/cc/delegated_renderer_layer_impl_unittest.cc b/cc/delegated_renderer_layer_impl_unittest.cc
index b9c9b92..56d8136 100644
--- a/cc/delegated_renderer_layer_impl_unittest.cc
+++ b/cc/delegated_renderer_layer_impl_unittest.cc
@@ -390,6 +390,29 @@ public:
delegatedRendererLayer->setTransform(transform);
ScopedPtrVector<RenderPass> delegatedRenderPasses;
+
+ gfx::Rect childPassRect(20, 20, 7, 7);
+ gfx::Transform childPassTransform;
+ childPassTransform.Scale(0.8, 0.8);
+ childPassTransform.Translate(9.0, 9.0);
+
+ {
+ TestRenderPass* pass = addRenderPass(delegatedRenderPasses, RenderPass::Id(10, 7), childPassRect, gfx::Transform());
+ MockQuadCuller quadSink(pass->quad_list, pass->shared_quad_state_list);
+ AppendQuadsData data(pass->id);
+ SharedQuadState* sharedState = quadSink.useSharedQuadState(SharedQuadState::Create());
+ sharedState->SetAll(childPassTransform, childPassRect, childPassRect, childPassRect, false, 1);
+ scoped_ptr<SolidColorDrawQuad> colorQuad;
+
+ colorQuad = SolidColorDrawQuad::Create();
+ colorQuad->SetNew(sharedState, gfx::Rect(20, 20, 3, 7), 1u);
+ quadSink.append(colorQuad.PassAs<DrawQuad>(), data);
+
+ colorQuad = SolidColorDrawQuad::Create();
+ colorQuad->SetNew(sharedState, gfx::Rect(23, 20, 4, 7), 1u);
+ quadSink.append(colorQuad.PassAs<DrawQuad>(), data);
+ }
+
gfx::Rect passRect(0, 0, 50, 50);
gfx::Transform passTransform;
passTransform.Scale(1.5, 1.5);
@@ -402,6 +425,20 @@ public:
sharedState->SetAll(passTransform, passRect, passRect, passRect, false, 1);
scoped_ptr<SolidColorDrawQuad> colorQuad;
+ scoped_ptr<RenderPassDrawQuad> renderPassQuad = RenderPassDrawQuad::Create();
+ renderPassQuad->SetNew(
+ sharedState,
+ gfx::Rect(5, 5, 7, 7),
+ RenderPass::Id(10, 7),
+ false, // is_replica
+ 0, // mask_resource_id
+ childPassRect, // contents_changed_since_last_frame
+ gfx::RectF(), // mask_uv_rect
+ WebKit::WebFilterOperations(), // filters
+ skia::RefPtr<SkImageFilter>(), // filter
+ WebKit::WebFilterOperations()); // background_filters
+ quadSink.append(renderPassQuad.PassAs<DrawQuad>(), data);
+
colorQuad = SolidColorDrawQuad::Create();
colorQuad->SetNew(sharedState, gfx::Rect(0, 0, 10, 10), 1u);
quadSink.append(colorQuad.PassAs<DrawQuad>(), data);
@@ -441,24 +478,37 @@ TEST_F(DelegatedRendererLayerImplTestSharedData, SharedData)
LayerTreeHostImpl::FrameData frame;
EXPECT_TRUE(m_hostImpl->prepareToDraw(frame));
- ASSERT_EQ(1u, frame.renderPasses.size());
- EXPECT_EQ(1, frame.renderPasses[0]->id.layer_id);
- EXPECT_EQ(0, frame.renderPasses[0]->id.index);
+ ASSERT_EQ(2u, frame.renderPasses.size());
+ // The contributing render pass in the DelegatedRendererLayer.
+ EXPECT_EQ(2, frame.renderPasses[0]->id.layer_id);
+ EXPECT_EQ(1, frame.renderPasses[0]->id.index);
+ // The root render pass.
+ EXPECT_EQ(1, frame.renderPasses[1]->id.layer_id);
+ EXPECT_EQ(0, frame.renderPasses[1]->id.index);
+
+ const QuadList& contribQuadList = frame.renderPasses[0]->quad_list;
+ ASSERT_EQ(2u, contribQuadList.size());
+
+ const QuadList& rootQuadList = frame.renderPasses[1]->quad_list;
+ ASSERT_EQ(5u, rootQuadList.size());
+
+ // All quads in a render pass should share the same state.
+ const SharedQuadState* contribSharedState = contribQuadList[0]->shared_quad_state;
+ EXPECT_EQ(contribSharedState, contribQuadList[1]->shared_quad_state);
- const QuadList& quadList = frame.renderPasses[0]->quad_list;
- ASSERT_EQ(4u, quadList.size());
+ const SharedQuadState* rootSharedState = rootQuadList[0]->shared_quad_state;
+ EXPECT_EQ(rootSharedState, rootQuadList[1]->shared_quad_state);
+ EXPECT_EQ(rootSharedState, rootQuadList[2]->shared_quad_state);
+ EXPECT_EQ(rootSharedState, rootQuadList[3]->shared_quad_state);
+ EXPECT_EQ(rootSharedState, rootQuadList[4]->shared_quad_state);
- // All quads should share the same state.
- const SharedQuadState* sharedState = quadList[0]->shared_quad_state;
- EXPECT_EQ(sharedState, quadList[1]->shared_quad_state);
- EXPECT_EQ(sharedState, quadList[2]->shared_quad_state);
- EXPECT_EQ(sharedState, quadList[3]->shared_quad_state);
+ EXPECT_NE(rootQuadList[0]->shared_quad_state, contribQuadList[0]->shared_quad_state);
// The state should be transformed only once.
// The x/y values are: position (20) + transform (8 * 2) = 36
// 36 - (width / 2) = 36 - 30 / 2 = 21
- EXPECT_RECT_EQ(gfx::Rect(21, 21, 100, 100), sharedState->clipped_rect_in_target);
- EXPECT_RECT_EQ(gfx::Rect(21, 21, 100, 100), sharedState->clip_rect);
+ EXPECT_RECT_EQ(gfx::Rect(21, 21, 100, 100), rootSharedState->clipped_rect_in_target);
+ EXPECT_RECT_EQ(gfx::Rect(21, 21, 100, 100), rootSharedState->clip_rect);
gfx::Transform expected;
// The position (20) - the width / scale (30 / 2) = 20 - 15 = 5
expected.Translate(5.0, 5.0);
@@ -466,7 +516,15 @@ TEST_F(DelegatedRendererLayerImplTestSharedData, SharedData)
expected.Translate(8.0, 8.0);
expected.Scale(1.5, 1.5);
expected.Translate(7.0, 7.0);
- EXPECT_TRANSFORMATION_MATRIX_EQ(expected, sharedState->content_to_target_transform);
+ EXPECT_TRANSFORMATION_MATRIX_EQ(expected, rootSharedState->content_to_target_transform);
+
+ // The contributing render pass should not be transformed from its input.
+ EXPECT_RECT_EQ(gfx::Rect(20, 20, 7, 7), contribSharedState->clipped_rect_in_target);
+ EXPECT_RECT_EQ(gfx::Rect(20, 20, 7, 7), contribSharedState->clip_rect);
+ expected.MakeIdentity();
+ expected.Scale(0.8, 0.8);
+ expected.Translate(9.0, 9.0);
+ EXPECT_TRANSFORMATION_MATRIX_EQ(expected, contribSharedState->content_to_target_transform);
m_hostImpl->drawLayers(frame);
m_hostImpl->didDrawAllLayers(frame);