Index: cc/surfaces/surface_aggregator_unittest.cc |
diff --git a/cc/surfaces/surface_aggregator_unittest.cc b/cc/surfaces/surface_aggregator_unittest.cc |
index 521332725de51b9a33dd366540cd135a507316c3..2e47708415c8d8a21beac71bfe4596176f0ce614 100644 |
--- a/cc/surfaces/surface_aggregator_unittest.cc |
+++ b/cc/surfaces/surface_aggregator_unittest.cc |
@@ -155,6 +155,88 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, SimpleFrame) { |
AggregateAndVerify(passes, arraysize(passes), ids, arraysize(ids)); |
} |
+TEST_F(SurfaceAggregatorValidSurfaceTest, OpacityCopied) { |
+ SurfaceId embedded_surface_id = allocator_.GenerateId(); |
+ factory_.Create(embedded_surface_id, SurfaceSize()); |
+ |
+ test::Quad embedded_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN)}; |
+ test::Pass embedded_passes[] = { |
+ test::Pass(embedded_quads, arraysize(embedded_quads))}; |
+ |
+ SubmitFrame(embedded_passes, arraysize(embedded_passes), embedded_surface_id); |
+ |
+ test::Quad quads[] = {test::Quad::SurfaceQuad(embedded_surface_id, .5f)}; |
+ 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()); |
+ 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, SurfaceSize()); |
+ SurfaceId surface_id2 = allocator_.GenerateId(); |
+ factory_.Create(surface_id2, SurfaceSize()); |
+ |
+ // |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()); |
+ 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); |
+ |
+ factory_.Destroy(surface_id1); |
+ factory_.Destroy(surface_id2); |
+} |
+ |
TEST_F(SurfaceAggregatorValidSurfaceTest, MultiPassSimpleFrame) { |
test::Quad quads[][2] = {{test::Quad::SolidColorQuad(SK_ColorWHITE), |
test::Quad::SolidColorQuad(SK_ColorLTGRAY)}, |
@@ -185,7 +267,7 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, SimpleSurfaceReference) { |
SubmitFrame(embedded_passes, arraysize(embedded_passes), embedded_surface_id); |
test::Quad root_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), |
- test::Quad::SurfaceQuad(embedded_surface_id), |
+ test::Quad::SurfaceQuad(embedded_surface_id, 1.f), |
test::Quad::SolidColorQuad(SK_ColorBLACK)}; |
test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))}; |
@@ -218,7 +300,7 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, CopyRequest) { |
factory_.RequestCopyOfSurface(embedded_surface_id, copy_request.Pass()); |
test::Quad root_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), |
- test::Quad::SurfaceQuad(embedded_surface_id), |
+ test::Quad::SurfaceQuad(embedded_surface_id, 1.f), |
test::Quad::SolidColorQuad(SK_ColorBLACK)}; |
test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))}; |
@@ -277,7 +359,7 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, RootCopyRequest) { |
CopyOutputRequest* copy_request2_ptr = copy_request2.get(); |
test::Quad root_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), |
- test::Quad::SurfaceQuad(embedded_surface_id), |
+ test::Quad::SurfaceQuad(embedded_surface_id, 1.f), |
test::Quad::SolidColorQuad(SK_ColorBLACK)}; |
test::Quad root_quads2[] = {test::Quad::SolidColorQuad(SK_ColorRED)}; |
test::Pass root_passes[] = { |
@@ -368,7 +450,7 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, MultiPassSurfaceReference) { |
test::Quad root_quads[][2] = { |
{test::Quad::SolidColorQuad(5), test::Quad::SolidColorQuad(6)}, |
- {test::Quad::SurfaceQuad(embedded_surface_id), |
+ {test::Quad::SurfaceQuad(embedded_surface_id, 1.f), |
test::Quad::RenderPassQuad(pass_ids[0])}, |
{test::Quad::SolidColorQuad(7), test::Quad::RenderPassQuad(pass_ids[1])}}; |
test::Pass root_passes[] = { |
@@ -489,7 +571,7 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, MultiPassSurfaceReference) { |
// be dropped. |
TEST_F(SurfaceAggregatorValidSurfaceTest, InvalidSurfaceReference) { |
test::Quad quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN), |
- test::Quad::SurfaceQuad(InvalidSurfaceId()), |
+ test::Quad::SurfaceQuad(InvalidSurfaceId(), 1.f), |
test::Quad::SolidColorQuad(SK_ColorBLUE)}; |
test::Pass passes[] = {test::Pass(quads, arraysize(quads))}; |
@@ -510,7 +592,7 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, ValidSurfaceReferenceWithNoFrame) { |
SurfaceId surface_with_no_frame_id = allocator_.GenerateId(); |
factory_.Create(surface_with_no_frame_id, gfx::Size(5, 5)); |
test::Quad quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN), |
- test::Quad::SurfaceQuad(surface_with_no_frame_id), |
+ test::Quad::SurfaceQuad(surface_with_no_frame_id, 1.f), |
test::Quad::SolidColorQuad(SK_ColorBLUE)}; |
test::Pass passes[] = {test::Pass(quads, arraysize(quads))}; |
@@ -529,7 +611,7 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, ValidSurfaceReferenceWithNoFrame) { |
// Tests a surface quad referencing itself, generating a trivial cycle. |
// The quad creating the cycle should be dropped from the final frame. |
TEST_F(SurfaceAggregatorValidSurfaceTest, SimpleCyclicalReference) { |
- test::Quad quads[] = {test::Quad::SurfaceQuad(root_surface_id_), |
+ test::Quad quads[] = {test::Quad::SurfaceQuad(root_surface_id_, 1.f), |
test::Quad::SolidColorQuad(SK_ColorYELLOW)}; |
test::Pass passes[] = {test::Pass(quads, arraysize(quads))}; |
@@ -549,7 +631,7 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, TwoSurfaceCyclicalReference) { |
factory_.Create(child_surface_id, SurfaceSize()); |
test::Quad parent_quads[] = {test::Quad::SolidColorQuad(SK_ColorBLUE), |
- test::Quad::SurfaceQuad(child_surface_id), |
+ test::Quad::SurfaceQuad(child_surface_id, 1.f), |
test::Quad::SolidColorQuad(SK_ColorCYAN)}; |
test::Pass parent_passes[] = { |
test::Pass(parent_quads, arraysize(parent_quads))}; |
@@ -557,7 +639,7 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, TwoSurfaceCyclicalReference) { |
SubmitFrame(parent_passes, arraysize(parent_passes), root_surface_id_); |
test::Quad child_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN), |
- test::Quad::SurfaceQuad(root_surface_id_), |
+ test::Quad::SurfaceQuad(root_surface_id_, 1.f), |
test::Quad::SolidColorQuad(SK_ColorMAGENTA)}; |
test::Pass child_passes[] = {test::Pass(child_quads, arraysize(child_quads))}; |
@@ -599,7 +681,7 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, RenderPassIdMapping) { |
// Pass IDs from the parent surface may collide with ones from the child. |
RenderPassId parent_pass_id[] = {RenderPassId(2, 1), RenderPassId(1, 2)}; |
test::Quad parent_quad[][1] = { |
- {test::Quad::SurfaceQuad(child_surface_id)}, |
+ {test::Quad::SurfaceQuad(child_surface_id, 1.f)}, |
{test::Quad::RenderPassQuad(parent_pass_id[0])}}; |
test::Pass parent_passes[] = { |
test::Pass(parent_quad[0], arraysize(parent_quad[0]), parent_pass_id[0]), |
@@ -858,7 +940,7 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, AggregateMultiplePassWithTransform) { |
factory_.SubmitFrame(child_surface_id, child_frame.Pass(), base::Closure()); |
test::Quad root_quads[] = {test::Quad::SolidColorQuad(1), |
- test::Quad::SurfaceQuad(child_surface_id)}; |
+ test::Quad::SurfaceQuad(child_surface_id, 1.f)}; |
test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))}; |
RenderPassList root_pass_list; |
@@ -981,7 +1063,7 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, AggregateDamageRect) { |
factory_.SubmitFrame(child_surface_id, child_frame.Pass(), base::Closure()); |
- test::Quad root_quads[] = {test::Quad::SurfaceQuad(child_surface_id)}; |
+ test::Quad root_quads[] = {test::Quad::SurfaceQuad(child_surface_id, 1.f)}; |
test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))}; |
RenderPassList root_pass_list; |