Index: cc/surfaces/surface_aggregator_unittest.cc |
diff --git a/cc/surfaces/surface_aggregator_unittest.cc b/cc/surfaces/surface_aggregator_unittest.cc |
index cd857ba7df8dceda631f1cbe0f78b9ee2ec9d5a9..50b21dbbea7e9ea9ba6250f737d8c3f6d4134f1a 100644 |
--- a/cc/surfaces/surface_aggregator_unittest.cc |
+++ b/cc/surfaces/surface_aggregator_unittest.cc |
@@ -61,9 +61,7 @@ class SurfaceAggregatorTest : public testing::Test { |
TEST_F(SurfaceAggregatorTest, ValidSurfaceNoFrame) { |
SurfaceId one_id(7); |
factory_.Create(one_id, SurfaceSize()); |
- std::set<SurfaceId> surface_set; |
- scoped_ptr<CompositorFrame> frame = |
- aggregator_.Aggregate(one_id, &surface_set); |
+ scoped_ptr<CompositorFrame> frame = aggregator_.Aggregate(one_id); |
EXPECT_FALSE(frame); |
factory_.Destroy(one_id); |
} |
@@ -87,9 +85,8 @@ class SurfaceAggregatorValidSurfaceTest : public SurfaceAggregatorTest { |
size_t expected_pass_count, |
SurfaceId* surface_ids, |
size_t expected_surface_count) { |
- std::set<SurfaceId> surface_set; |
scoped_ptr<CompositorFrame> aggregated_frame = |
- aggregator_.Aggregate(root_surface_id_, &surface_set); |
+ aggregator_.Aggregate(root_surface_id_); |
ASSERT_TRUE(aggregated_frame); |
ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
@@ -100,9 +97,12 @@ class SurfaceAggregatorValidSurfaceTest : public SurfaceAggregatorTest { |
TestPassesMatchExpectations( |
expected_passes, expected_pass_count, &frame_data->render_pass_list); |
- EXPECT_EQ(expected_surface_count, surface_set.size()); |
+ EXPECT_EQ(expected_surface_count, |
+ aggregator_.previous_contained_surfaces().size()); |
for (size_t i = 0; i < expected_surface_count; i++) { |
- EXPECT_TRUE(surface_set.find(surface_ids[i]) != surface_set.end()); |
+ EXPECT_TRUE( |
+ aggregator_.previous_contained_surfaces().find(surface_ids[i]) != |
+ aggregator_.previous_contained_surfaces().end()); |
} |
} |
@@ -227,9 +227,8 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, MultiPassSurfaceReference) { |
SubmitFrame(root_passes, arraysize(root_passes), root_surface_id_); |
- std::set<SurfaceId> surface_set; |
scoped_ptr<CompositorFrame> aggregated_frame = |
- aggregator_.Aggregate(root_surface_id_, &surface_set); |
+ aggregator_.Aggregate(root_surface_id_); |
ASSERT_TRUE(aggregated_frame); |
ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
@@ -451,9 +450,8 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, RenderPassIdMapping) { |
test::Pass(parent_quad[1], arraysize(parent_quad[1]), parent_pass_id[1])}; |
SubmitFrame(parent_passes, arraysize(parent_passes), root_surface_id_); |
- std::set<SurfaceId> surface_set; |
scoped_ptr<CompositorFrame> aggregated_frame = |
- aggregator_.Aggregate(root_surface_id_, &surface_set); |
+ aggregator_.Aggregate(root_surface_id_); |
ASSERT_TRUE(aggregated_frame); |
ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
@@ -623,9 +621,8 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, AggregateSharedQuadStateProperties) { |
QueuePassAsFrame(root_pass.Pass(), root_surface_id_); |
- std::set<SurfaceId> surface_set; |
scoped_ptr<CompositorFrame> aggregated_frame = |
- aggregator_.Aggregate(root_surface_id_, &surface_set); |
+ aggregator_.Aggregate(root_surface_id_); |
ASSERT_TRUE(aggregated_frame); |
ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
@@ -727,9 +724,8 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, AggregateMultiplePassWithTransform) { |
factory_.SubmitFrame(root_surface_id_, root_frame.Pass(), base::Closure()); |
- std::set<SurfaceId> surface_set; |
scoped_ptr<CompositorFrame> aggregated_frame = |
- aggregator_.Aggregate(root_surface_id_, &surface_set); |
+ aggregator_.Aggregate(root_surface_id_); |
ASSERT_TRUE(aggregated_frame); |
ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
@@ -797,6 +793,174 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, AggregateMultiplePassWithTransform) { |
factory_.Destroy(child_surface_id); |
} |
+// Tests that damage rects are aggregated correctly when surfaces change. |
+TEST_F(SurfaceAggregatorValidSurfaceTest, AggregateDamageRect) { |
+ SurfaceId child_surface_id = allocator_.GenerateId(); |
+ factory_.Create(child_surface_id, SurfaceSize()); |
+ RenderPassId child_pass_id = RenderPassId(1, 1); |
+ test::Quad child_quads[] = {test::Quad::RenderPassQuad(child_pass_id)}; |
+ test::Pass child_passes[] = { |
+ test::Pass(child_quads, arraysize(child_quads), child_pass_id)}; |
+ |
+ RenderPassList child_pass_list; |
+ AddPasses(&child_pass_list, |
+ gfx::Rect(SurfaceSize()), |
+ child_passes, |
+ arraysize(child_passes)); |
+ |
+ RenderPass* child_root_pass = child_pass_list.at(0u); |
+ SharedQuadState* child_root_pass_sqs = |
+ child_root_pass->shared_quad_state_list[0]; |
+ child_root_pass_sqs->content_to_target_transform.Translate(8, 0); |
+ |
+ 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(); |
+ |
+ factory_.SubmitFrame(child_surface_id, child_frame.Pass(), base::Closure()); |
+ |
+ test::Quad root_quads[] = {test::Quad::SurfaceQuad(child_surface_id)}; |
+ test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))}; |
+ |
+ RenderPassList root_pass_list; |
+ AddPasses(&root_pass_list, |
+ gfx::Rect(SurfaceSize()), |
+ root_passes, |
+ arraysize(root_passes)); |
+ |
+ root_pass_list.at(0) |
+ ->shared_quad_state_list[0] |
+ ->content_to_target_transform.Translate(0, 10); |
+ root_pass_list.at(0)->damage_rect = gfx::Rect(5, 5, 10, 10); |
+ |
+ scoped_ptr<DelegatedFrameData> root_frame_data(new DelegatedFrameData); |
+ root_pass_list.swap(root_frame_data->render_pass_list); |
+ |
+ scoped_ptr<CompositorFrame> root_frame(new CompositorFrame); |
+ root_frame->delegated_frame_data = root_frame_data.Pass(); |
+ |
+ factory_.SubmitFrame(root_surface_id_, root_frame.Pass(), base::Closure()); |
+ |
+ 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(); |
+ |
+ const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; |
+ |
+ ASSERT_EQ(1u, aggregated_pass_list.size()); |
+ |
+ // Damage rect for first aggregation should contain entire root surface. |
+ EXPECT_TRUE( |
+ aggregated_pass_list[0]->damage_rect.Contains(gfx::Rect(SurfaceSize()))); |
+ |
+ { |
+ AddPasses(&child_pass_list, |
+ gfx::Rect(SurfaceSize()), |
+ child_passes, |
+ arraysize(child_passes)); |
+ |
+ RenderPass* child_root_pass = child_pass_list.at(0u); |
+ SharedQuadState* child_root_pass_sqs = |
+ child_root_pass->shared_quad_state_list[0]; |
+ child_root_pass_sqs->content_to_target_transform.Translate(8, 0); |
+ child_root_pass->damage_rect = gfx::Rect(10, 10, 10, 10); |
+ |
+ 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(); |
+ |
+ factory_.SubmitFrame(child_surface_id, child_frame.Pass(), base::Closure()); |
+ |
+ 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(); |
+ |
+ const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; |
+ |
+ ASSERT_EQ(1u, aggregated_pass_list.size()); |
+ |
+ // Outer surface didn't change, so transformed inner damage rect should be |
+ // used. |
+ EXPECT_EQ(gfx::Rect(10, 20, 10, 10).ToString(), |
+ aggregated_pass_list[0]->damage_rect.ToString()); |
+ } |
+ |
+ { |
+ RenderPassList root_pass_list; |
+ AddPasses(&root_pass_list, |
+ gfx::Rect(SurfaceSize()), |
+ root_passes, |
+ arraysize(root_passes)); |
+ |
+ root_pass_list.at(0) |
+ ->shared_quad_state_list[0] |
+ ->content_to_target_transform.Translate(0, 10); |
+ root_pass_list.at(0)->damage_rect = gfx::Rect(0, 0, 1, 1); |
+ |
+ scoped_ptr<DelegatedFrameData> root_frame_data(new DelegatedFrameData); |
+ root_pass_list.swap(root_frame_data->render_pass_list); |
+ |
+ scoped_ptr<CompositorFrame> root_frame(new CompositorFrame); |
+ root_frame->delegated_frame_data = root_frame_data.Pass(); |
+ |
+ factory_.SubmitFrame(root_surface_id_, root_frame.Pass(), base::Closure()); |
+ } |
+ |
+ { |
+ RenderPassList root_pass_list; |
+ AddPasses(&root_pass_list, |
+ gfx::Rect(SurfaceSize()), |
+ root_passes, |
+ arraysize(root_passes)); |
+ |
+ root_pass_list.at(0) |
+ ->shared_quad_state_list[0] |
+ ->content_to_target_transform.Translate(0, 10); |
+ root_pass_list.at(0)->damage_rect = gfx::Rect(1, 1, 1, 1); |
+ |
+ scoped_ptr<DelegatedFrameData> root_frame_data(new DelegatedFrameData); |
+ root_pass_list.swap(root_frame_data->render_pass_list); |
+ |
+ scoped_ptr<CompositorFrame> root_frame(new CompositorFrame); |
+ root_frame->delegated_frame_data = root_frame_data.Pass(); |
+ |
+ factory_.SubmitFrame(root_surface_id_, root_frame.Pass(), base::Closure()); |
+ |
+ 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(); |
+ |
+ const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; |
+ |
+ ASSERT_EQ(1u, aggregated_pass_list.size()); |
+ |
+ // The root surface was enqueued without being aggregated once, so it should |
+ // be treated as completely damaged. |
+ EXPECT_TRUE(aggregated_pass_list[0]->damage_rect.Contains( |
+ gfx::Rect(SurfaceSize()))); |
+ } |
+ |
+ factory_.Destroy(child_surface_id); |
+} |
+ |
class SurfaceAggregatorWithResourcesTest : public testing::Test { |
public: |
virtual void SetUp() { |
@@ -899,17 +1063,14 @@ TEST_F(SurfaceAggregatorWithResourcesTest, TakeResourcesOneSurface) { |
ResourceProvider::ResourceId ids[] = {11, 12, 13}; |
SubmitFrameWithResources(ids, arraysize(ids), &factory, surface_id); |
- std::set<SurfaceId> surface_set; |
- scoped_ptr<CompositorFrame> frame = |
- aggregator_->Aggregate(surface_id, &surface_set); |
+ scoped_ptr<CompositorFrame> frame = aggregator_->Aggregate(surface_id); |
// Nothing should be available to be returned yet. |
EXPECT_TRUE(client.returned_resources().empty()); |
SubmitFrameWithResources(NULL, 0u, &factory, surface_id); |
- surface_set.clear(); |
- frame = aggregator_->Aggregate(surface_id, &surface_set); |
+ frame = aggregator_->Aggregate(surface_id); |
ASSERT_EQ(3u, client.returned_resources().size()); |
ResourceProvider::ResourceId returned_ids[3]; |