Chromium Code Reviews| Index: cc/surfaces/surface_aggregator_unittest.cc |
| diff --git a/cc/surfaces/surface_aggregator_unittest.cc b/cc/surfaces/surface_aggregator_unittest.cc |
| index b2476d9df57081d916758de740b4559a9dff9321..4de275f08a1b8c033eb2923eb6db9bfa0666ec09 100644 |
| --- a/cc/surfaces/surface_aggregator_unittest.cc |
| +++ b/cc/surfaces/surface_aggregator_unittest.cc |
| @@ -43,13 +43,37 @@ gfx::Size SurfaceSize() { |
| class EmptySurfaceFactoryClient : public SurfaceFactoryClient { |
| public: |
| void ReturnResources(const ReturnedResourceArray& resources) override {} |
| + void SetBeginFrameSource(BeginFrameSource* begin_frame_source) override {} |
| +}; |
| + |
| +class FakeSurfaceAggregatorClient : public SurfaceAggregatorClient { |
| + public: |
| + void AddSurface(Surface* surface) override { |
| + EXPECT_FALSE(HasSurface(surface)); |
| + surfaces_.insert(surface); |
| + } |
| + |
| + void RemoveSurface(Surface* surface) override { |
| + EXPECT_TRUE(HasSurface(surface)); |
| + surfaces_.erase(surface); |
| + } |
| + |
| + bool HasSurface(Surface* surface) const { |
| + return surfaces_.count(surface) != 0; |
| + } |
| + |
| + private: |
| + std::set<Surface*> surfaces_; |
| }; |
| class SurfaceAggregatorTest : public testing::Test { |
| public: |
| explicit SurfaceAggregatorTest(bool use_damage_rect) |
| : factory_(&manager_, &empty_client_), |
| - aggregator_(&manager_, NULL, use_damage_rect) {} |
| + aggregator_(&surface_aggregator_client_, |
| + &manager_, |
| + NULL, |
| + use_damage_rect) {} |
| SurfaceAggregatorTest() : SurfaceAggregatorTest(false) {} |
| @@ -57,14 +81,20 @@ class SurfaceAggregatorTest : public testing::Test { |
| SurfaceManager manager_; |
| EmptySurfaceFactoryClient empty_client_; |
| SurfaceFactory factory_; |
| + FakeSurfaceAggregatorClient surface_aggregator_client_; |
| SurfaceAggregator aggregator_; |
| }; |
| TEST_F(SurfaceAggregatorTest, ValidSurfaceNoFrame) { |
| SurfaceId one_id(7); |
| factory_.Create(one_id); |
| + Surface* surface = manager_.GetSurfaceForId(one_id); |
| + |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(surface)); |
| scoped_ptr<CompositorFrame> frame = aggregator_.Aggregate(one_id); |
| EXPECT_FALSE(frame); |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(surface)); |
| + |
| factory_.Destroy(one_id); |
| } |
| @@ -81,6 +111,7 @@ class SurfaceAggregatorValidSurfaceTest : public SurfaceAggregatorTest { |
| SurfaceAggregatorTest::SetUp(); |
| root_surface_id_ = allocator_.GenerateId(); |
| factory_.Create(root_surface_id_); |
| + root_surface_ = manager_.GetSurfaceForId(root_surface_id_); |
| } |
| void TearDown() override { |
| @@ -151,6 +182,7 @@ class SurfaceAggregatorValidSurfaceTest : public SurfaceAggregatorTest { |
| protected: |
| SurfaceId root_surface_id_; |
| + Surface* root_surface_; |
| SurfaceIdAllocator allocator_; |
| SurfaceIdAllocator child_allocator_; |
| }; |
| @@ -165,12 +197,17 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, SimpleFrame) { |
| SubmitCompositorFrame(passes, arraysize(passes), root_surface_id_); |
| SurfaceId ids[] = {root_surface_id_}; |
| + |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(root_surface_)); |
| AggregateAndVerify(passes, arraysize(passes), ids, arraysize(ids)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_)); |
| } |
| TEST_F(SurfaceAggregatorValidSurfaceTest, OpacityCopied) { |
| SurfaceId embedded_surface_id = allocator_.GenerateId(); |
| factory_.Create(embedded_surface_id); |
| + Surface* embedded_surface = manager_.GetSurfaceForId(embedded_surface_id); |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(embedded_surface)); |
| test::Quad embedded_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN), |
| test::Quad::SolidColorQuad(SK_ColorBLUE)}; |
| @@ -185,9 +222,15 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, OpacityCopied) { |
| SubmitCompositorFrame(passes, arraysize(passes), root_surface_id_); |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(root_surface_)); |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(embedded_surface)); |
|
mithro-old
2015/10/01 03:00:24
Thanks for adding these!
I wonder if would be a g
brianderson
2015/10/07 20:54:48
Might do it as a followup patch since I can't thin
|
| + |
| scoped_ptr<CompositorFrame> aggregated_frame = |
| aggregator_.Aggregate(root_surface_id_); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(embedded_surface)); |
| + |
| ASSERT_TRUE(aggregated_frame); |
| ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
| @@ -221,7 +264,10 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, MultiPassSimpleFrame) { |
| SubmitCompositorFrame(passes, arraysize(passes), root_surface_id_); |
| SurfaceId ids[] = {root_surface_id_}; |
| + |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(root_surface_)); |
| AggregateAndVerify(passes, arraysize(passes), ids, arraysize(ids)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_)); |
| } |
| // This tests very simple embedding. root_surface has a frame containing a few |
| @@ -231,6 +277,8 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, MultiPassSimpleFrame) { |
| TEST_F(SurfaceAggregatorValidSurfaceTest, SimpleSurfaceReference) { |
| SurfaceId embedded_surface_id = allocator_.GenerateId(); |
| factory_.Create(embedded_surface_id); |
| + Surface* embedded_surface = manager_.GetSurfaceForId(embedded_surface_id); |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(embedded_surface)); |
| test::Quad embedded_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN)}; |
| test::Pass embedded_passes[] = { |
| @@ -246,6 +294,9 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, SimpleSurfaceReference) { |
| SubmitCompositorFrame(root_passes, arraysize(root_passes), root_surface_id_); |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(root_surface_)); |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(embedded_surface)); |
| + |
| test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), |
| test::Quad::SolidColorQuad(SK_ColorGREEN), |
| test::Quad::SolidColorQuad(SK_ColorBLACK)}; |
| @@ -255,12 +306,17 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, SimpleSurfaceReference) { |
| AggregateAndVerify( |
| expected_passes, arraysize(expected_passes), ids, arraysize(ids)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(embedded_surface)); |
| + |
| factory_.Destroy(embedded_surface_id); |
| } |
| TEST_F(SurfaceAggregatorValidSurfaceTest, CopyRequest) { |
| SurfaceId embedded_surface_id = allocator_.GenerateId(); |
| factory_.Create(embedded_surface_id); |
| + Surface* embedded_surface = manager_.GetSurfaceForId(embedded_surface_id); |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(embedded_surface)); |
| test::Quad embedded_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN)}; |
| test::Pass embedded_passes[] = { |
| @@ -280,9 +336,15 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, CopyRequest) { |
| SubmitCompositorFrame(root_passes, arraysize(root_passes), root_surface_id_); |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(root_surface_)); |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(embedded_surface)); |
| + |
| scoped_ptr<CompositorFrame> aggregated_frame = |
| aggregator_.Aggregate(root_surface_id_); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(embedded_surface)); |
| + |
| ASSERT_TRUE(aggregated_frame); |
| ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
| @@ -319,6 +381,8 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, CopyRequest) { |
| TEST_F(SurfaceAggregatorValidSurfaceTest, RootCopyRequest) { |
| SurfaceId embedded_surface_id = allocator_.GenerateId(); |
| factory_.Create(embedded_surface_id); |
| + Surface* embedded_surface = manager_.GetSurfaceForId(embedded_surface_id); |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(embedded_surface)); |
| test::Quad embedded_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN)}; |
| test::Pass embedded_passes[] = { |
| @@ -359,9 +423,15 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, RootCopyRequest) { |
| SurfaceFactory::DrawCallback()); |
| } |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(root_surface_)); |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(embedded_surface)); |
| + |
| scoped_ptr<CompositorFrame> aggregated_frame = |
| aggregator_.Aggregate(root_surface_id_); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(embedded_surface)); |
| + |
| ASSERT_TRUE(aggregated_frame); |
| ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
| @@ -409,6 +479,8 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, RootCopyRequest) { |
| TEST_F(SurfaceAggregatorValidSurfaceTest, MultiPassSurfaceReference) { |
| SurfaceId embedded_surface_id = child_allocator_.GenerateId(); |
| factory_.Create(embedded_surface_id); |
| + Surface* embedded_surface = manager_.GetSurfaceForId(embedded_surface_id); |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(embedded_surface)); |
| RenderPassId pass_ids[] = {RenderPassId(1, 1), RenderPassId(1, 2), |
| RenderPassId(1, 3)}; |
| @@ -437,9 +509,15 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, MultiPassSurfaceReference) { |
| SubmitCompositorFrame(root_passes, arraysize(root_passes), root_surface_id_); |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(root_surface_)); |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(embedded_surface)); |
| + |
| scoped_ptr<CompositorFrame> aggregated_frame = |
| aggregator_.Aggregate(root_surface_id_); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(embedded_surface)); |
| + |
| ASSERT_TRUE(aggregated_frame); |
| ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
| @@ -559,8 +637,11 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, InvalidSurfaceReference) { |
| test::Pass expected_passes[] = { |
| test::Pass(expected_quads, arraysize(expected_quads))}; |
| SurfaceId ids[] = {root_surface_id_, InvalidSurfaceId()}; |
| + |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(root_surface_)); |
| AggregateAndVerify( |
| expected_passes, arraysize(expected_passes), ids, arraysize(ids)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_)); |
| } |
| // Tests a reference to a valid surface with no submitted frame. This quad |
| @@ -568,6 +649,9 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, InvalidSurfaceReference) { |
| TEST_F(SurfaceAggregatorValidSurfaceTest, ValidSurfaceReferenceWithNoFrame) { |
| SurfaceId surface_with_no_frame_id = allocator_.GenerateId(); |
| factory_.Create(surface_with_no_frame_id); |
| + Surface* surface_with_no_frame = |
| + manager_.GetSurfaceForId(surface_with_no_frame_id); |
| + |
| test::Quad quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN), |
| test::Quad::SurfaceQuad(surface_with_no_frame_id, 1.f), |
| test::Quad::SolidColorQuad(SK_ColorBLUE)}; |
| @@ -580,8 +664,12 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, ValidSurfaceReferenceWithNoFrame) { |
| test::Pass expected_passes[] = { |
| test::Pass(expected_quads, arraysize(expected_quads))}; |
| SurfaceId ids[] = {root_surface_id_, surface_with_no_frame_id}; |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(root_surface_)); |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(surface_with_no_frame)); |
| AggregateAndVerify( |
| expected_passes, arraysize(expected_passes), ids, arraysize(ids)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(surface_with_no_frame)); |
| factory_.Destroy(surface_with_no_frame_id); |
| } |
| @@ -598,14 +686,18 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, SimpleCyclicalReference) { |
| test::Pass expected_passes[] = { |
| test::Pass(expected_quads, arraysize(expected_quads))}; |
| SurfaceId ids[] = {root_surface_id_}; |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(root_surface_)); |
| AggregateAndVerify( |
| expected_passes, arraysize(expected_passes), ids, arraysize(ids)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_)); |
| } |
| // Tests a more complex cycle with one intermediate surface. |
| TEST_F(SurfaceAggregatorValidSurfaceTest, TwoSurfaceCyclicalReference) { |
| SurfaceId child_surface_id = allocator_.GenerateId(); |
| factory_.Create(child_surface_id); |
| + Surface* child_surface = manager_.GetSurfaceForId(child_surface_id); |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(child_surface)); |
| test::Quad parent_quads[] = {test::Quad::SolidColorQuad(SK_ColorBLUE), |
| test::Quad::SurfaceQuad(child_surface_id, 1.f), |
| @@ -637,8 +729,12 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, TwoSurfaceCyclicalReference) { |
| test::Pass expected_passes[] = { |
| test::Pass(expected_quads, arraysize(expected_quads))}; |
| SurfaceId ids[] = {root_surface_id_, child_surface_id}; |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(root_surface_)); |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(child_surface)); |
| AggregateAndVerify( |
| expected_passes, arraysize(expected_passes), ids, arraysize(ids)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(child_surface)); |
| factory_.Destroy(child_surface_id); |
| } |
| @@ -647,6 +743,8 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, TwoSurfaceCyclicalReference) { |
| TEST_F(SurfaceAggregatorValidSurfaceTest, RenderPassIdMapping) { |
| SurfaceId child_surface_id = allocator_.GenerateId(); |
| factory_.Create(child_surface_id); |
| + Surface* child_surface = manager_.GetSurfaceForId(child_surface_id); |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(child_surface)); |
| RenderPassId child_pass_id[] = {RenderPassId(1, 1), RenderPassId(1, 2)}; |
| test::Quad child_quad[][1] = {{test::Quad::SolidColorQuad(SK_ColorGREEN)}, |
| @@ -669,9 +767,16 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, RenderPassIdMapping) { |
| SubmitCompositorFrame(parent_passes, arraysize(parent_passes), |
| root_surface_id_); |
| + |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(root_surface_)); |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(child_surface)); |
| + |
| scoped_ptr<CompositorFrame> aggregated_frame = |
| aggregator_.Aggregate(root_surface_id_); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(child_surface)); |
| + |
| ASSERT_TRUE(aggregated_frame); |
| ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
| @@ -769,6 +874,8 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, AggregateSharedQuadStateProperties) { |
| RenderPassId pass_id(1, 1); |
| SurfaceId grandchild_surface_id = allocator_.GenerateId(); |
| factory_.Create(grandchild_surface_id); |
| + Surface* grandchild_surface = manager_.GetSurfaceForId(grandchild_surface_id); |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(grandchild_surface)); |
| scoped_ptr<RenderPass> grandchild_pass = RenderPass::Create(); |
| gfx::Rect output_rect(SurfaceSize()); |
| gfx::Rect damage_rect(SurfaceSize()); |
| @@ -781,6 +888,8 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, AggregateSharedQuadStateProperties) { |
| SurfaceId child_one_surface_id = allocator_.GenerateId(); |
| factory_.Create(child_one_surface_id); |
| + Surface* child_one_surface = manager_.GetSurfaceForId(child_one_surface_id); |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(child_one_surface)); |
| scoped_ptr<RenderPass> child_one_pass = RenderPass::Create(); |
| child_one_pass->SetNew( |
| @@ -799,6 +908,8 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, AggregateSharedQuadStateProperties) { |
| SurfaceId child_two_surface_id = allocator_.GenerateId(); |
| factory_.Create(child_two_surface_id); |
| + Surface* child_two_surface = manager_.GetSurfaceForId(child_two_surface_id); |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(child_two_surface)); |
| scoped_ptr<RenderPass> child_two_pass = RenderPass::Create(); |
| child_two_pass->SetNew( |
| @@ -832,9 +943,19 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, AggregateSharedQuadStateProperties) { |
| QueuePassAsFrame(root_pass.Pass(), root_surface_id_); |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(root_surface_)); |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(grandchild_surface)); |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(child_one_surface)); |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(child_two_surface)); |
| + |
| scoped_ptr<CompositorFrame> aggregated_frame = |
| aggregator_.Aggregate(root_surface_id_); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(grandchild_surface)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(child_one_surface)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(child_two_surface)); |
| + |
| ASSERT_TRUE(aggregated_frame); |
| ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
| @@ -880,8 +1001,10 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, AggregateSharedQuadStateProperties) { |
| TEST_F(SurfaceAggregatorValidSurfaceTest, AggregateMultiplePassWithTransform) { |
| // Innermost child surface. |
| SurfaceId child_surface_id = allocator_.GenerateId(); |
| + factory_.Create(child_surface_id); |
| + Surface* child_surface = manager_.GetSurfaceForId(child_surface_id); |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(child_surface)); |
| { |
| - 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)}, |
| @@ -921,8 +1044,10 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, AggregateMultiplePassWithTransform) { |
| // Middle child surface. |
| SurfaceId middle_surface_id = allocator_.GenerateId(); |
| + factory_.Create(middle_surface_id); |
| + Surface* middle_surface = manager_.GetSurfaceForId(middle_surface_id); |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(middle_surface)); |
| { |
| - factory_.Create(middle_surface_id); |
| test::Quad middle_quads[] = { |
| test::Quad::SurfaceQuad(child_surface_id, 1.f)}; |
| test::Pass middle_passes[] = { |
| @@ -985,9 +1110,17 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, AggregateMultiplePassWithTransform) { |
| factory_.SubmitCompositorFrame(root_surface_id_, root_frame.Pass(), |
| SurfaceFactory::DrawCallback()); |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(root_surface_)); |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(child_surface)); |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(middle_surface)); |
| + |
| scoped_ptr<CompositorFrame> aggregated_frame = |
| aggregator_.Aggregate(root_surface_id_); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(child_surface)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(middle_surface)); |
| + |
| ASSERT_TRUE(aggregated_frame); |
| ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
| @@ -1091,6 +1224,7 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, AggregateDamageRect) { |
| SurfaceId child_surface_id = allocator_.GenerateId(); |
| factory_.Create(child_surface_id); |
| + Surface* child_surface = manager_.GetSurfaceForId(child_surface_id); |
| factory_.SubmitCompositorFrame(child_surface_id, child_frame.Pass(), |
| SurfaceFactory::DrawCallback()); |
| @@ -1117,6 +1251,7 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, AggregateDamageRect) { |
| SurfaceId parent_surface_id = allocator_.GenerateId(); |
| factory_.Create(parent_surface_id); |
| + Surface* parent_surface = manager_.GetSurfaceForId(parent_surface_id); |
| factory_.SubmitCompositorFrame(parent_surface_id, parent_surface_frame.Pass(), |
| SurfaceFactory::DrawCallback()); |
| @@ -1152,9 +1287,17 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, AggregateDamageRect) { |
| factory_.SubmitCompositorFrame(root_surface_id_, root_frame.Pass(), |
| SurfaceFactory::DrawCallback()); |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(root_surface_)); |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(child_surface)); |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(parent_surface)); |
| + |
| scoped_ptr<CompositorFrame> aggregated_frame = |
| aggregator_.Aggregate(root_surface_id_); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(child_surface)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(parent_surface)); |
| + |
| ASSERT_TRUE(aggregated_frame); |
| ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
| @@ -1189,9 +1332,17 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, AggregateDamageRect) { |
| factory_.SubmitCompositorFrame(child_surface_id, child_frame.Pass(), |
| SurfaceFactory::DrawCallback()); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(child_surface)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(parent_surface)); |
| + |
| scoped_ptr<CompositorFrame> aggregated_frame = |
| aggregator_.Aggregate(root_surface_id_); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(child_surface)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(parent_surface)); |
| + |
| ASSERT_TRUE(aggregated_frame); |
| ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
| @@ -1251,9 +1402,17 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, AggregateDamageRect) { |
| factory_.SubmitCompositorFrame(root_surface_id_, root_frame.Pass(), |
| SurfaceFactory::DrawCallback()); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(child_surface)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(parent_surface)); |
| + |
| scoped_ptr<CompositorFrame> aggregated_frame = |
| aggregator_.Aggregate(root_surface_id_); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(child_surface)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(parent_surface)); |
| + |
| ASSERT_TRUE(aggregated_frame); |
| ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
| @@ -1272,9 +1431,17 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, AggregateDamageRect) { |
| // No Surface changed, so no damage should be given. |
| { |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(child_surface)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(parent_surface)); |
| + |
| scoped_ptr<CompositorFrame> aggregated_frame = |
| aggregator_.Aggregate(root_surface_id_); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(child_surface)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(parent_surface)); |
| + |
| ASSERT_TRUE(aggregated_frame); |
| ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
| @@ -1291,10 +1458,18 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, AggregateDamageRect) { |
| // SetFullDamageRectForSurface should cause the entire output to be |
| // marked as damaged. |
| { |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(child_surface)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(parent_surface)); |
| + |
| aggregator_.SetFullDamageForSurface(root_surface_id_); |
| scoped_ptr<CompositorFrame> aggregated_frame = |
| aggregator_.Aggregate(root_surface_id_); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(child_surface)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(parent_surface)); |
| + |
| ASSERT_TRUE(aggregated_frame); |
| ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
| @@ -1323,6 +1498,7 @@ class SurfaceAggregatorPartialSwapTest |
| TEST_F(SurfaceAggregatorPartialSwapTest, IgnoreOutside) { |
| SurfaceId child_surface_id = allocator_.GenerateId(); |
| factory_.Create(child_surface_id); |
| + Surface* child_surface = manager_.GetSurfaceForId(child_surface_id); |
| // The child surface has two quads, one with a visible rect of 13,13 4x4 and |
| // the other other with a visible rect of 10,10 2x2 (relative to root target |
| // space). |
| @@ -1368,9 +1544,15 @@ TEST_F(SurfaceAggregatorPartialSwapTest, IgnoreOutside) { |
| SubmitPassListAsFrame(root_surface_id_, &root_pass_list); |
| } |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(root_surface_)); |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(child_surface)); |
| + |
| scoped_ptr<CompositorFrame> aggregated_frame = |
| aggregator_.Aggregate(root_surface_id_); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(child_surface)); |
| + |
| ASSERT_TRUE(aggregated_frame); |
| ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
| @@ -1403,9 +1585,15 @@ TEST_F(SurfaceAggregatorPartialSwapTest, IgnoreOutside) { |
| } |
| { |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(child_surface)); |
| + |
| scoped_ptr<CompositorFrame> aggregated_frame = |
| aggregator_.Aggregate(root_surface_id_); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(child_surface)); |
| + |
| ASSERT_TRUE(aggregated_frame); |
| ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
| @@ -1458,9 +1646,15 @@ TEST_F(SurfaceAggregatorPartialSwapTest, IgnoreOutside) { |
| } |
| { |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(child_surface)); |
| + |
| scoped_ptr<CompositorFrame> aggregated_frame = |
| aggregator_.Aggregate(root_surface_id_); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(child_surface)); |
| + |
| ASSERT_TRUE(aggregated_frame); |
| ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
| @@ -1482,9 +1676,15 @@ TEST_F(SurfaceAggregatorPartialSwapTest, IgnoreOutside) { |
| } |
| { |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(child_surface)); |
| + |
| scoped_ptr<CompositorFrame> aggregated_frame = |
| aggregator_.Aggregate(root_surface_id_); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(child_surface)); |
| + |
| ASSERT_TRUE(aggregated_frame); |
| ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
| @@ -1513,8 +1713,9 @@ class SurfaceAggregatorWithResourcesTest : public testing::Test { |
| resource_provider_ = FakeResourceProvider::Create( |
| output_surface_.get(), shared_bitmap_manager_.get()); |
| - aggregator_.reset( |
| - new SurfaceAggregator(&manager_, resource_provider_.get(), false)); |
| + aggregator_.reset(new SurfaceAggregator(&surface_aggregator_client_, |
| + &manager_, resource_provider_.get(), |
| + false)); |
| } |
| protected: |
| @@ -1524,6 +1725,7 @@ class SurfaceAggregatorWithResourcesTest : public testing::Test { |
| scoped_ptr<SharedBitmapManager> shared_bitmap_manager_; |
| scoped_ptr<ResourceProvider> resource_provider_; |
| scoped_ptr<SurfaceAggregator> aggregator_; |
| + FakeSurfaceAggregatorClient surface_aggregator_client_; |
| }; |
| class ResourceTrackingSurfaceFactoryClient : public SurfaceFactoryClient { |
| @@ -1539,6 +1741,8 @@ class ResourceTrackingSurfaceFactoryClient : public SurfaceFactoryClient { |
| return returned_resources_; |
| } |
| + void SetBeginFrameSource(BeginFrameSource* begin_frame_source) override {} |
| + |
| private: |
| ReturnedResourceArray returned_resources_; |
| @@ -1598,21 +1802,30 @@ TEST_F(SurfaceAggregatorWithResourcesTest, TakeResourcesOneSurface) { |
| SurfaceFactory factory(&manager_, &client); |
| SurfaceId surface_id(7u); |
| factory.Create(surface_id); |
| + Surface* surface = manager_.GetSurfaceForId(surface_id); |
| ResourceId ids[] = {11, 12, 13}; |
| SubmitCompositorFrameWithResources(ids, arraysize(ids), true, SurfaceId(), |
| &factory, surface_id); |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(surface)); |
| + |
| scoped_ptr<CompositorFrame> frame = aggregator_->Aggregate(surface_id); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(surface)); |
| + |
| // Nothing should be available to be returned yet. |
| EXPECT_TRUE(client.returned_resources().empty()); |
| SubmitCompositorFrameWithResources(NULL, 0u, true, SurfaceId(), &factory, |
| surface_id); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(surface)); |
| + |
| frame = aggregator_->Aggregate(surface_id); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(surface)); |
| + |
| ASSERT_EQ(3u, client.returned_resources().size()); |
| ResourceId returned_ids[3]; |
| for (size_t i = 0; i < 3; ++i) { |
| @@ -1628,6 +1841,7 @@ TEST_F(SurfaceAggregatorWithResourcesTest, TakeInvalidResources) { |
| SurfaceFactory factory(&manager_, &client); |
| SurfaceId surface_id(7u); |
| factory.Create(surface_id); |
| + Surface* surface = manager_.GetSurfaceForId(surface_id); |
| scoped_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); |
| scoped_ptr<RenderPass> pass = RenderPass::Create(); |
| @@ -1644,9 +1858,13 @@ TEST_F(SurfaceAggregatorWithResourcesTest, TakeInvalidResources) { |
| factory.SubmitCompositorFrame(surface_id, frame.Pass(), |
| SurfaceFactory::DrawCallback()); |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(surface)); |
| + |
| scoped_ptr<CompositorFrame> returned_frame = |
| aggregator_->Aggregate(surface_id); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(surface)); |
| + |
| // Nothing should be available to be returned yet. |
| EXPECT_TRUE(client.returned_resources().empty()); |
| @@ -1661,29 +1879,44 @@ TEST_F(SurfaceAggregatorWithResourcesTest, TakeInvalidResources) { |
| TEST_F(SurfaceAggregatorWithResourcesTest, TwoSurfaces) { |
| ResourceTrackingSurfaceFactoryClient client; |
| SurfaceFactory factory(&manager_, &client); |
| - SurfaceId surface_id(7u); |
| - factory.Create(surface_id); |
| - SurfaceId surface_id2(8u); |
| - factory.Create(surface_id2); |
| + SurfaceId surface1_id(7u); |
| + factory.Create(surface1_id); |
| + Surface* surface1 = manager_.GetSurfaceForId(surface1_id); |
| + |
| + SurfaceId surface2_id(8u); |
| + factory.Create(surface2_id); |
| + Surface* surface2 = manager_.GetSurfaceForId(surface2_id); |
| ResourceId ids[] = {11, 12, 13}; |
| SubmitCompositorFrameWithResources(ids, arraysize(ids), true, SurfaceId(), |
| - &factory, surface_id); |
| + &factory, surface1_id); |
| ResourceId ids2[] = {14, 15, 16}; |
| SubmitCompositorFrameWithResources(ids2, arraysize(ids2), true, SurfaceId(), |
| - &factory, surface_id2); |
| + &factory, surface2_id); |
| - scoped_ptr<CompositorFrame> frame = aggregator_->Aggregate(surface_id); |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(surface1)); |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(surface2)); |
| + |
| + scoped_ptr<CompositorFrame> frame = aggregator_->Aggregate(surface1_id); |
| + |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(surface1)); |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(surface2)); |
| SubmitCompositorFrameWithResources(NULL, 0, true, SurfaceId(), &factory, |
| - surface_id); |
| + surface1_id); |
| // Nothing should be available to be returned yet. |
| EXPECT_TRUE(client.returned_resources().empty()); |
| - frame = aggregator_->Aggregate(surface_id2); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(surface1)); |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(surface2)); |
| + |
| + frame = aggregator_->Aggregate(surface2_id); |
| - // surface_id wasn't referenced, so its resources should be returned. |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(surface1)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(surface2)); |
| + |
| + // surface1_id wasn't referenced, so its resources should be returned. |
| ASSERT_EQ(3u, client.returned_resources().size()); |
| ResourceId returned_ids[3]; |
| for (size_t i = 0; i < 3; ++i) { |
| @@ -1692,8 +1925,8 @@ TEST_F(SurfaceAggregatorWithResourcesTest, TwoSurfaces) { |
| EXPECT_THAT(returned_ids, |
| testing::WhenSorted(testing::ElementsAreArray(ids))); |
| EXPECT_EQ(3u, resource_provider_->num_resources()); |
| - factory.Destroy(surface_id); |
| - factory.Destroy(surface_id2); |
| + factory.Destroy(surface1_id); |
| + factory.Destroy(surface2_id); |
| } |
| // Ensure that aggregator completely ignores Surfaces that reference invalid |
| @@ -1703,10 +1936,13 @@ TEST_F(SurfaceAggregatorWithResourcesTest, InvalidChildSurface) { |
| SurfaceFactory factory(&manager_, &client); |
| SurfaceId root_surface_id(7u); |
| factory.Create(root_surface_id); |
| + Surface* root_surface = manager_.GetSurfaceForId(root_surface_id); |
| SurfaceId middle_surface_id(8u); |
| factory.Create(middle_surface_id); |
| + Surface* middle_surface = manager_.GetSurfaceForId(middle_surface_id); |
| SurfaceId child_surface_id(9u); |
| factory.Create(child_surface_id); |
| + Surface* child_surface = manager_.GetSurfaceForId(child_surface_id); |
| ResourceId ids[] = {14, 15, 16}; |
| SubmitCompositorFrameWithResources(ids, arraysize(ids), true, SurfaceId(), |
| @@ -1722,9 +1958,17 @@ TEST_F(SurfaceAggregatorWithResourcesTest, InvalidChildSurface) { |
| middle_surface_id, &factory, |
| root_surface_id); |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(root_surface)); |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(middle_surface)); |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(child_surface)); |
| + |
| scoped_ptr<CompositorFrame> frame; |
| frame = aggregator_->Aggregate(root_surface_id); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(middle_surface)); |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(child_surface)); |
| + |
| RenderPassList* pass_list = &frame->delegated_frame_data->render_pass_list; |
| ASSERT_EQ(1u, pass_list->size()); |
| EXPECT_EQ(1u, pass_list->back()->shared_quad_state_list.size()); |
| @@ -1734,8 +1978,16 @@ TEST_F(SurfaceAggregatorWithResourcesTest, InvalidChildSurface) { |
| child_surface_id, &factory, |
| middle_surface_id); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(middle_surface)); |
| + EXPECT_FALSE(surface_aggregator_client_.HasSurface(child_surface)); |
| + |
| frame = aggregator_->Aggregate(root_surface_id); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(middle_surface)); |
| + EXPECT_TRUE(surface_aggregator_client_.HasSurface(child_surface)); |
| + |
| pass_list = &frame->delegated_frame_data->render_pass_list; |
| ASSERT_EQ(1u, pass_list->size()); |
| EXPECT_EQ(3u, pass_list->back()->shared_quad_state_list.size()); |