| Index: cc/surfaces/surface_aggregator_unittest.cc
|
| diff --git a/cc/surfaces/surface_aggregator_unittest.cc b/cc/surfaces/surface_aggregator_unittest.cc
|
| index 7f6943c56e772a066ec06b7f300a8fabf35f0bf0..973ec9067a6c9674ea02b09c852c0794a51c8cd3 100644
|
| --- a/cc/surfaces/surface_aggregator_unittest.cc
|
| +++ b/cc/surfaces/surface_aggregator_unittest.cc
|
| @@ -161,7 +161,8 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, OpacityCopied) {
|
| SurfaceId embedded_surface_id = allocator_.GenerateId();
|
| factory_.Create(embedded_surface_id);
|
|
|
| - test::Quad embedded_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN)};
|
| + test::Quad embedded_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN),
|
| + test::Quad::SolidColorQuad(SK_ColorBLUE)};
|
| test::Pass embedded_passes[] = {
|
| test::Pass(embedded_quads, arraysize(embedded_quads))};
|
|
|
| @@ -181,62 +182,19 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, OpacityCopied) {
|
| DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get();
|
|
|
| RenderPassList& render_pass_list(frame_data->render_pass_list);
|
| - ASSERT_EQ(1u, render_pass_list.size());
|
| - SharedQuadStateList& shared_quad_state_list(
|
| - render_pass_list[0]->shared_quad_state_list);
|
| - ASSERT_EQ(1u, shared_quad_state_list.size());
|
| - EXPECT_EQ(.5f, shared_quad_state_list.ElementAt(0)->opacity);
|
| -
|
| - factory_.Destroy(embedded_surface_id);
|
| -}
|
| -
|
| -TEST_F(SurfaceAggregatorValidSurfaceTest, OpacityCombinedWithNesting) {
|
| - SurfaceId surface_id1 = allocator_.GenerateId();
|
| - factory_.Create(surface_id1);
|
| - SurfaceId surface_id2 = allocator_.GenerateId();
|
| - factory_.Create(surface_id2);
|
| -
|
| - // |surface_id1| is color quad.
|
| - {
|
| - test::Quad quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN)};
|
| - test::Pass passes[] = {test::Pass(quads, arraysize(quads))};
|
| - SubmitFrame(passes, arraysize(passes), surface_id1);
|
| - }
|
| -
|
| - // |surface_id2| has a color quad and a surface quad using |surface_id1| at .5
|
| - // opacity.
|
| - {
|
| - test::Quad quads[] = {test::Quad::SolidColorQuad(SK_ColorBLUE),
|
| - test::Quad::SurfaceQuad(surface_id1, .5f)};
|
| - test::Pass passes[] = {test::Pass(quads, arraysize(quads))};
|
| - SubmitFrame(passes, arraysize(passes), surface_id2);
|
| - }
|
| -
|
| - // Another frame with a surface referencing |surface_id2| @ .6 opacity.
|
| - {
|
| - test::Quad quads[] = {test::Quad::SurfaceQuad(surface_id2, .6f)};
|
| - test::Pass passes[] = {test::Pass(quads, arraysize(quads))};
|
| - SubmitFrame(passes, arraysize(passes), root_surface_id_);
|
| - }
|
| -
|
| - scoped_ptr<CompositorFrame> aggregated_frame =
|
| - aggregator_.Aggregate(root_surface_id_);
|
| -
|
| - ASSERT_TRUE(aggregated_frame);
|
| - ASSERT_TRUE(aggregated_frame->delegated_frame_data);
|
| -
|
| - DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get();
|
| -
|
| - RenderPassList& render_pass_list(frame_data->render_pass_list);
|
| - ASSERT_EQ(1u, render_pass_list.size());
|
| + ASSERT_EQ(2u, render_pass_list.size());
|
| SharedQuadStateList& shared_quad_state_list(
|
| render_pass_list[0]->shared_quad_state_list);
|
| ASSERT_EQ(2u, shared_quad_state_list.size());
|
| - EXPECT_EQ(.6f, shared_quad_state_list.ElementAt(0)->opacity);
|
| - EXPECT_EQ(.3f, shared_quad_state_list.ElementAt(1)->opacity);
|
| + EXPECT_EQ(1.f, shared_quad_state_list.ElementAt(0)->opacity);
|
| + EXPECT_EQ(1.f, shared_quad_state_list.ElementAt(1)->opacity);
|
| +
|
| + SharedQuadStateList& shared_quad_state_list2(
|
| + render_pass_list[1]->shared_quad_state_list);
|
| + ASSERT_EQ(1u, shared_quad_state_list2.size());
|
| + EXPECT_EQ(.5f, shared_quad_state_list2.ElementAt(0)->opacity);
|
|
|
| - factory_.Destroy(surface_id1);
|
| - factory_.Destroy(surface_id2);
|
| + factory_.Destroy(embedded_surface_id);
|
| }
|
|
|
| TEST_F(SurfaceAggregatorValidSurfaceTest, MultiPassSimpleFrame) {
|
| @@ -896,55 +854,93 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, AggregateSharedQuadStateProperties) {
|
| // The root surface has one pass with a surface quad transformed by +10 in the y
|
| // direction.
|
| //
|
| +// The middle surface has one pass with a surface quad scaled by 2 in the x
|
| +// and 3 in the y directions.
|
| +//
|
| // The child surface has two passes. The first pass has a quad with a transform
|
| // of +5 in the x direction. The second pass has a reference to the first pass'
|
| // pass id and a transform of +8 in the x direction.
|
| //
|
| -// After aggregation, the child surface's root pass quad should have both
|
| -// transforms concatenated for a total transform of +8 x, +10 y. The
|
| +// After aggregation, the child surface's root pass quad should have all
|
| +// transforms concatenated for a total transform of +23 x, +10 y. The
|
| // contributing render pass' transform in the aggregate frame should not be
|
| // affected.
|
| TEST_F(SurfaceAggregatorValidSurfaceTest, AggregateMultiplePassWithTransform) {
|
| + // Innermost child surface.
|
| SurfaceId child_surface_id = allocator_.GenerateId();
|
| - factory_.Create(child_surface_id);
|
| - RenderPassId child_pass_id[] = {RenderPassId(1, 1), RenderPassId(1, 2)};
|
| - test::Quad child_quads[][1] = {
|
| - {test::Quad::SolidColorQuad(SK_ColorGREEN)},
|
| - {test::Quad::RenderPassQuad(child_pass_id[0])}};
|
| - test::Pass child_passes[] = {
|
| - test::Pass(child_quads[0], arraysize(child_quads[0]), child_pass_id[0]),
|
| - test::Pass(child_quads[1], arraysize(child_quads[1]), child_pass_id[1])};
|
| + {
|
| + factory_.Create(child_surface_id);
|
| + RenderPassId child_pass_id[] = {RenderPassId(1, 1), RenderPassId(1, 2)};
|
| + test::Quad child_quads[][1] = {
|
| + {test::Quad::SolidColorQuad(SK_ColorGREEN)},
|
| + {test::Quad::RenderPassQuad(child_pass_id[0])},
|
| + };
|
| + test::Pass child_passes[] = {
|
| + test::Pass(child_quads[0], arraysize(child_quads[0]), child_pass_id[0]),
|
| + test::Pass(child_quads[1], arraysize(child_quads[1]),
|
| + child_pass_id[1])};
|
| +
|
| + RenderPassList child_pass_list;
|
| + AddPasses(&child_pass_list, gfx::Rect(SurfaceSize()), child_passes,
|
| + arraysize(child_passes));
|
|
|
| - RenderPassList child_pass_list;
|
| - AddPasses(&child_pass_list,
|
| - gfx::Rect(SurfaceSize()),
|
| - child_passes,
|
| - arraysize(child_passes));
|
| + RenderPass* child_nonroot_pass = child_pass_list.at(0u);
|
| + child_nonroot_pass->transform_to_root_target.Translate(8, 0);
|
| + SharedQuadState* child_nonroot_pass_sqs =
|
| + child_nonroot_pass->shared_quad_state_list.front();
|
| + child_nonroot_pass_sqs->content_to_target_transform.Translate(5, 0);
|
|
|
| - RenderPass* child_nonroot_pass = child_pass_list.at(0u);
|
| - child_nonroot_pass->transform_to_root_target.Translate(8, 0);
|
| - SharedQuadState* child_nonroot_pass_sqs =
|
| - child_nonroot_pass->shared_quad_state_list.front();
|
| - child_nonroot_pass_sqs->content_to_target_transform.Translate(5, 0);
|
| + RenderPass* child_root_pass = child_pass_list.at(1u);
|
| + SharedQuadState* child_root_pass_sqs =
|
| + child_root_pass->shared_quad_state_list.front();
|
| + child_root_pass_sqs->content_to_target_transform.Translate(8, 0);
|
| + child_root_pass_sqs->is_clipped = true;
|
| + child_root_pass_sqs->clip_rect = gfx::Rect(0, 0, 5, 5);
|
|
|
| - RenderPass* child_root_pass = child_pass_list.at(1u);
|
| - SharedQuadState* child_root_pass_sqs =
|
| - child_root_pass->shared_quad_state_list.front();
|
| - child_root_pass_sqs->content_to_target_transform.Translate(8, 0);
|
| - child_root_pass_sqs->is_clipped = true;
|
| - child_root_pass_sqs->clip_rect = gfx::Rect(0, 0, 5, 5);
|
| + scoped_ptr<DelegatedFrameData> child_frame_data(new DelegatedFrameData);
|
| + child_pass_list.swap(child_frame_data->render_pass_list);
|
|
|
| - scoped_ptr<DelegatedFrameData> child_frame_data(new DelegatedFrameData);
|
| - child_pass_list.swap(child_frame_data->render_pass_list);
|
| + scoped_ptr<CompositorFrame> child_frame(new CompositorFrame);
|
| + child_frame->delegated_frame_data = child_frame_data.Pass();
|
|
|
| - scoped_ptr<CompositorFrame> child_frame(new CompositorFrame);
|
| - child_frame->delegated_frame_data = child_frame_data.Pass();
|
| + factory_.SubmitFrame(child_surface_id, child_frame.Pass(),
|
| + SurfaceFactory::DrawCallback());
|
| + }
|
|
|
| - factory_.SubmitFrame(child_surface_id, child_frame.Pass(),
|
| - SurfaceFactory::DrawCallback());
|
| + // Middle child surface.
|
| + SurfaceId middle_surface_id = allocator_.GenerateId();
|
| + {
|
| + factory_.Create(middle_surface_id);
|
| + test::Quad middle_quads[] = {
|
| + test::Quad::SurfaceQuad(child_surface_id, 1.f)};
|
| + test::Pass middle_passes[] = {
|
| + test::Pass(middle_quads, arraysize(middle_quads)),
|
| + };
|
| +
|
| + RenderPassList middle_pass_list;
|
| + AddPasses(&middle_pass_list, gfx::Rect(SurfaceSize()), middle_passes,
|
| + arraysize(middle_passes));
|
| +
|
| + RenderPass* middle_root_pass = middle_pass_list.at(0u);
|
| + middle_root_pass->quad_list.ElementAt(0)->visible_rect =
|
| + gfx::Rect(0, 1, 100, 7);
|
| + SharedQuadState* middle_root_pass_sqs =
|
| + middle_root_pass->shared_quad_state_list.front();
|
| + middle_root_pass_sqs->content_to_target_transform.Scale(2, 3);
|
| +
|
| + scoped_ptr<DelegatedFrameData> middle_frame_data(new DelegatedFrameData);
|
| + middle_pass_list.swap(middle_frame_data->render_pass_list);
|
| +
|
| + scoped_ptr<CompositorFrame> middle_frame(new CompositorFrame);
|
| + middle_frame->delegated_frame_data = middle_frame_data.Pass();
|
| +
|
| + factory_.SubmitFrame(middle_surface_id, middle_frame.Pass(),
|
| + SurfaceFactory::DrawCallback());
|
| + }
|
|
|
| + // Root surface.
|
| test::Quad root_quads[] = {test::Quad::SolidColorQuad(1),
|
| - test::Quad::SurfaceQuad(child_surface_id, 1.f)};
|
| + test::Quad::SurfaceQuad(middle_surface_id, 1.f)};
|
| test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))};
|
|
|
| RenderPassList root_pass_list;
|
| @@ -959,6 +955,8 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, AggregateMultiplePassWithTransform) {
|
| root_pass_list.at(0)
|
| ->shared_quad_state_list.ElementAt(1)
|
| ->content_to_target_transform.Translate(0, 10);
|
| + root_pass_list.at(0)->quad_list.ElementAt(1)->visible_rect =
|
| + gfx::Rect(0, 0, 8, 100);
|
|
|
| scoped_ptr<DelegatedFrameData> root_frame_data(new DelegatedFrameData);
|
| root_pass_list.swap(root_frame_data->render_pass_list);
|
| @@ -1003,7 +1001,9 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, AggregateMultiplePassWithTransform) {
|
| // The first pass's transform to the root target should include the aggregated
|
| // transform.
|
| gfx::Transform expected_first_pass_transform_to_root_target;
|
| - expected_first_pass_transform_to_root_target.Translate(8, 10);
|
| + expected_first_pass_transform_to_root_target.Translate(0, 10);
|
| + expected_first_pass_transform_to_root_target.Scale(2, 3);
|
| + expected_first_pass_transform_to_root_target.Translate(8, 0);
|
| EXPECT_EQ(expected_first_pass_transform_to_root_target.ToString(),
|
| aggregated_pass_list[0]->transform_to_root_target.ToString());
|
|
|
| @@ -1015,9 +1015,12 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, AggregateMultiplePassWithTransform) {
|
| // still be +7 in the y direction.
|
| expected_root_pass_quad_transforms[0].Translate(0, 7);
|
| // The second quad in the root pass is aggregated from the child surface so
|
| - // its transform should be the combination of its original translation (0, 10)
|
| - // and the child surface draw quad's translation (8, 0).
|
| - expected_root_pass_quad_transforms[1].Translate(8, 10);
|
| + // its transform should be the combination of its original translation
|
| + // (0, 10), the middle surface draw quad's scale of (2, 3), and the
|
| + // child surface draw quad's translation (8, 0).
|
| + expected_root_pass_quad_transforms[1].Translate(0, 10);
|
| + expected_root_pass_quad_transforms[1].Scale(2, 3);
|
| + expected_root_pass_quad_transforms[1].Translate(8, 0);
|
|
|
| for (auto iter = aggregated_pass_list[1]->quad_list.cbegin();
|
| iter != aggregated_pass_list[1]->quad_list.cend();
|
| @@ -1031,12 +1034,14 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, AggregateMultiplePassWithTransform) {
|
| aggregated_pass_list[1]->shared_quad_state_list.ElementAt(1)->is_clipped);
|
|
|
| // The second quad in the root pass is aggregated from the child, so its
|
| - // clip rect must be transformed by the child's translation.
|
| - EXPECT_EQ(gfx::Rect(0, 10, 5, 5).ToString(),
|
| + // clip rect must be transformed by the child's translation/scale and
|
| + // clipped be the visible_rects for both children.
|
| + EXPECT_EQ(gfx::Rect(0, 13, 8, 12).ToString(),
|
| aggregated_pass_list[1]
|
| ->shared_quad_state_list.ElementAt(1)
|
| ->clip_rect.ToString());
|
|
|
| + factory_.Destroy(middle_surface_id);
|
| factory_.Destroy(child_surface_id);
|
| }
|
|
|
|
|