OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "cc/surfaces/surface_aggregator.h" | 5 #include "cc/surfaces/surface_aggregator.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <utility> | 10 #include <utility> |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
77 testing::Test::TearDown(); | 77 testing::Test::TearDown(); |
78 } | 78 } |
79 | 79 |
80 protected: | 80 protected: |
81 SurfaceManager manager_; | 81 SurfaceManager manager_; |
82 FakeCompositorFrameSinkSupportClient fake_client_; | 82 FakeCompositorFrameSinkSupportClient fake_client_; |
83 std::unique_ptr<CompositorFrameSinkSupport> support_; | 83 std::unique_ptr<CompositorFrameSinkSupport> support_; |
84 SurfaceAggregator aggregator_; | 84 SurfaceAggregator aggregator_; |
85 }; | 85 }; |
86 | 86 |
87 TEST_F(SurfaceAggregatorTest, ValidSurfaceNoFrame) { | |
88 LocalSurfaceId local_surface_id(7, base::UnguessableToken::Create()); | |
89 SurfaceId one_id(kArbitraryRootFrameSinkId, local_surface_id); | |
90 support_->SubmitCompositorFrame(local_surface_id, | |
91 test::MakeCompositorFrame()); | |
92 | |
93 CompositorFrame frame = aggregator_.Aggregate(one_id); | |
94 EXPECT_TRUE(frame.render_pass_list.empty()); | |
95 } | |
96 | |
97 class SurfaceAggregatorValidSurfaceTest : public SurfaceAggregatorTest { | 87 class SurfaceAggregatorValidSurfaceTest : public SurfaceAggregatorTest { |
98 public: | 88 public: |
99 explicit SurfaceAggregatorValidSurfaceTest(bool use_damage_rect) | 89 explicit SurfaceAggregatorValidSurfaceTest(bool use_damage_rect) |
100 : SurfaceAggregatorTest(use_damage_rect), | 90 : SurfaceAggregatorTest(use_damage_rect), |
101 child_support_( | 91 child_support_( |
102 CompositorFrameSinkSupport::Create(nullptr, | 92 CompositorFrameSinkSupport::Create(nullptr, |
103 &manager_, | 93 &manager_, |
104 kArbitraryReservedFrameSinkId, | 94 kArbitraryReservedFrameSinkId, |
105 kChildIsRoot, | 95 kChildIsRoot, |
106 kHandlesFrameSinkIdInvalidation, | 96 kHandlesFrameSinkIdInvalidation, |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
141 for (size_t i = 0; i < expected_surface_count; i++) { | 131 for (size_t i = 0; i < expected_surface_count; i++) { |
142 EXPECT_TRUE( | 132 EXPECT_TRUE( |
143 aggregator_.previous_contained_surfaces().find(surface_ids[i]) != | 133 aggregator_.previous_contained_surfaces().find(surface_ids[i]) != |
144 aggregator_.previous_contained_surfaces().end()); | 134 aggregator_.previous_contained_surfaces().end()); |
145 } | 135 } |
146 } | 136 } |
147 | 137 |
148 void SubmitPassListAsFrame(CompositorFrameSinkSupport* support, | 138 void SubmitPassListAsFrame(CompositorFrameSinkSupport* support, |
149 const LocalSurfaceId& local_surface_id, | 139 const LocalSurfaceId& local_surface_id, |
150 RenderPassList* pass_list) { | 140 RenderPassList* pass_list) { |
151 CompositorFrame frame = test::MakeCompositorFrame(); | 141 CompositorFrame frame = test::MakeEmptyCompositorFrame(); |
152 pass_list->swap(frame.render_pass_list); | 142 pass_list->swap(frame.render_pass_list); |
153 | 143 |
154 support->SubmitCompositorFrame(local_surface_id, std::move(frame)); | 144 support->SubmitCompositorFrame(local_surface_id, std::move(frame)); |
155 } | 145 } |
156 | 146 |
157 void SubmitCompositorFrame(CompositorFrameSinkSupport* support, | 147 void SubmitCompositorFrame(CompositorFrameSinkSupport* support, |
158 test::Pass* passes, | 148 test::Pass* passes, |
159 size_t pass_count, | 149 size_t pass_count, |
160 const LocalSurfaceId& local_surface_id) { | 150 const LocalSurfaceId& local_surface_id) { |
161 RenderPassList pass_list; | 151 RenderPassList pass_list; |
162 AddPasses(&pass_list, gfx::Rect(SurfaceSize()), passes, pass_count); | 152 AddPasses(&pass_list, gfx::Rect(SurfaceSize()), passes, pass_count); |
163 SubmitPassListAsFrame(support, local_surface_id, &pass_list); | 153 SubmitPassListAsFrame(support, local_surface_id, &pass_list); |
164 } | 154 } |
165 | 155 |
166 void QueuePassAsFrame(std::unique_ptr<RenderPass> pass, | 156 void QueuePassAsFrame(std::unique_ptr<RenderPass> pass, |
167 const LocalSurfaceId& local_surface_id, | 157 const LocalSurfaceId& local_surface_id, |
168 CompositorFrameSinkSupport* support) { | 158 CompositorFrameSinkSupport* support) { |
169 CompositorFrame child_frame = test::MakeCompositorFrame(); | 159 CompositorFrame child_frame = test::MakeEmptyCompositorFrame(); |
170 child_frame.render_pass_list.push_back(std::move(pass)); | 160 child_frame.render_pass_list.push_back(std::move(pass)); |
171 | 161 |
172 support->SubmitCompositorFrame(local_surface_id, std::move(child_frame)); | 162 support->SubmitCompositorFrame(local_surface_id, std::move(child_frame)); |
173 } | 163 } |
174 | 164 |
175 protected: | 165 protected: |
176 LocalSurfaceId root_local_surface_id_; | 166 LocalSurfaceId root_local_surface_id_; |
177 Surface* root_surface_; | 167 Surface* root_surface_; |
178 LocalSurfaceIdAllocator allocator_; | 168 LocalSurfaceIdAllocator allocator_; |
179 std::unique_ptr<CompositorFrameSinkSupport> child_support_; | 169 std::unique_ptr<CompositorFrameSinkSupport> child_support_; |
(...skipping 397 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
577 | 567 |
578 test::Quad root_quads[] = { | 568 test::Quad root_quads[] = { |
579 test::Quad::SolidColorQuad(SK_ColorWHITE), | 569 test::Quad::SolidColorQuad(SK_ColorWHITE), |
580 test::Quad::SurfaceQuad(embedded_surface_id, InvalidSurfaceId(), 1.f), | 570 test::Quad::SurfaceQuad(embedded_surface_id, InvalidSurfaceId(), 1.f), |
581 test::Quad::SolidColorQuad(SK_ColorBLACK)}; | 571 test::Quad::SolidColorQuad(SK_ColorBLACK)}; |
582 test::Quad root_quads2[] = {test::Quad::SolidColorQuad(SK_ColorRED)}; | 572 test::Quad root_quads2[] = {test::Quad::SolidColorQuad(SK_ColorRED)}; |
583 test::Pass root_passes[] = { | 573 test::Pass root_passes[] = { |
584 test::Pass(root_quads, arraysize(root_quads), 1), | 574 test::Pass(root_quads, arraysize(root_quads), 1), |
585 test::Pass(root_quads2, arraysize(root_quads2), 2)}; | 575 test::Pass(root_quads2, arraysize(root_quads2), 2)}; |
586 { | 576 { |
587 CompositorFrame frame = test::MakeCompositorFrame(); | 577 CompositorFrame frame = test::MakeEmptyCompositorFrame(); |
588 AddPasses(&frame.render_pass_list, gfx::Rect(SurfaceSize()), root_passes, | 578 AddPasses(&frame.render_pass_list, gfx::Rect(SurfaceSize()), root_passes, |
589 arraysize(root_passes)); | 579 arraysize(root_passes)); |
590 frame.render_pass_list[0]->copy_requests.push_back(std::move(copy_request)); | 580 frame.render_pass_list[0]->copy_requests.push_back(std::move(copy_request)); |
591 frame.render_pass_list[1]->copy_requests.push_back( | 581 frame.render_pass_list[1]->copy_requests.push_back( |
592 std::move(copy_request2)); | 582 std::move(copy_request2)); |
593 | 583 |
594 support_->SubmitCompositorFrame(root_local_surface_id_, std::move(frame)); | 584 support_->SubmitCompositorFrame(root_local_surface_id_, std::move(frame)); |
595 } | 585 } |
596 | 586 |
597 SurfaceId root_surface_id(support_->frame_sink_id(), root_local_surface_id_); | 587 SurfaceId root_surface_id(support_->frame_sink_id(), root_local_surface_id_); |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
664 parent_local_surface_id); | 654 parent_local_surface_id); |
665 | 655 |
666 test::Quad parent_quads[] = { | 656 test::Quad parent_quads[] = { |
667 test::Quad::SolidColorQuad(SK_ColorGRAY), | 657 test::Quad::SolidColorQuad(SK_ColorGRAY), |
668 test::Quad::SurfaceQuad(embedded_surface_id, InvalidSurfaceId(), 1.f), | 658 test::Quad::SurfaceQuad(embedded_surface_id, InvalidSurfaceId(), 1.f), |
669 test::Quad::SolidColorQuad(SK_ColorLTGRAY)}; | 659 test::Quad::SolidColorQuad(SK_ColorLTGRAY)}; |
670 test::Pass parent_passes[] = { | 660 test::Pass parent_passes[] = { |
671 test::Pass(parent_quads, arraysize(parent_quads))}; | 661 test::Pass(parent_quads, arraysize(parent_quads))}; |
672 | 662 |
673 { | 663 { |
674 CompositorFrame frame = test::MakeCompositorFrame(); | 664 CompositorFrame frame = test::MakeEmptyCompositorFrame(); |
675 | 665 |
676 AddPasses(&frame.render_pass_list, gfx::Rect(SurfaceSize()), parent_passes, | 666 AddPasses(&frame.render_pass_list, gfx::Rect(SurfaceSize()), parent_passes, |
677 arraysize(parent_passes)); | 667 arraysize(parent_passes)); |
678 | 668 |
679 frame.metadata.referenced_surfaces.push_back(embedded_surface_id); | 669 frame.metadata.referenced_surfaces.push_back(embedded_surface_id); |
680 | 670 |
681 parent_support->SubmitCompositorFrame(parent_local_surface_id, | 671 parent_support->SubmitCompositorFrame(parent_local_surface_id, |
682 std::move(frame)); | 672 std::move(frame)); |
683 } | 673 } |
684 | 674 |
685 test::Quad root_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), | 675 test::Quad root_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), |
686 test::Quad::SolidColorQuad(SK_ColorBLACK)}; | 676 test::Quad::SolidColorQuad(SK_ColorBLACK)}; |
687 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))}; | 677 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))}; |
688 | 678 |
689 { | 679 { |
690 CompositorFrame frame = test::MakeCompositorFrame(); | 680 CompositorFrame frame = test::MakeEmptyCompositorFrame(); |
691 AddPasses(&frame.render_pass_list, gfx::Rect(SurfaceSize()), root_passes, | 681 AddPasses(&frame.render_pass_list, gfx::Rect(SurfaceSize()), root_passes, |
692 arraysize(root_passes)); | 682 arraysize(root_passes)); |
693 | 683 |
694 frame.metadata.referenced_surfaces.push_back(parent_surface_id); | 684 frame.metadata.referenced_surfaces.push_back(parent_surface_id); |
695 // Reference to Surface ID of a Surface that doesn't exist should be | 685 // Reference to Surface ID of a Surface that doesn't exist should be |
696 // included in previous_contained_surfaces, but otherwise ignored. | 686 // included in previous_contained_surfaces, but otherwise ignored. |
697 frame.metadata.referenced_surfaces.push_back(nonexistent_surface_id); | 687 frame.metadata.referenced_surfaces.push_back(nonexistent_surface_id); |
698 | 688 |
699 support_->SubmitCompositorFrame(root_local_surface_id_, std::move(frame)); | 689 support_->SubmitCompositorFrame(root_local_surface_id_, std::move(frame)); |
700 } | 690 } |
(...skipping 546 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1247 int child_pass_id[] = {1, 2}; | 1237 int child_pass_id[] = {1, 2}; |
1248 test::Quad child_quads[][1] = { | 1238 test::Quad child_quads[][1] = { |
1249 {test::Quad::SolidColorQuad(SK_ColorGREEN)}, | 1239 {test::Quad::SolidColorQuad(SK_ColorGREEN)}, |
1250 {test::Quad::RenderPassQuad(child_pass_id[0])}, | 1240 {test::Quad::RenderPassQuad(child_pass_id[0])}, |
1251 }; | 1241 }; |
1252 test::Pass child_passes[] = { | 1242 test::Pass child_passes[] = { |
1253 test::Pass(child_quads[0], arraysize(child_quads[0]), child_pass_id[0]), | 1243 test::Pass(child_quads[0], arraysize(child_quads[0]), child_pass_id[0]), |
1254 test::Pass(child_quads[1], arraysize(child_quads[1]), | 1244 test::Pass(child_quads[1], arraysize(child_quads[1]), |
1255 child_pass_id[1])}; | 1245 child_pass_id[1])}; |
1256 | 1246 |
1257 CompositorFrame child_frame = test::MakeCompositorFrame(); | 1247 CompositorFrame child_frame = test::MakeEmptyCompositorFrame(); |
1258 AddPasses(&child_frame.render_pass_list, gfx::Rect(SurfaceSize()), | 1248 AddPasses(&child_frame.render_pass_list, gfx::Rect(SurfaceSize()), |
1259 child_passes, arraysize(child_passes)); | 1249 child_passes, arraysize(child_passes)); |
1260 | 1250 |
1261 RenderPass* child_nonroot_pass = child_frame.render_pass_list[0].get(); | 1251 RenderPass* child_nonroot_pass = child_frame.render_pass_list[0].get(); |
1262 child_nonroot_pass->transform_to_root_target.Translate(8, 0); | 1252 child_nonroot_pass->transform_to_root_target.Translate(8, 0); |
1263 SharedQuadState* child_nonroot_pass_sqs = | 1253 SharedQuadState* child_nonroot_pass_sqs = |
1264 child_nonroot_pass->shared_quad_state_list.front(); | 1254 child_nonroot_pass->shared_quad_state_list.front(); |
1265 child_nonroot_pass_sqs->quad_to_target_transform.Translate(5, 0); | 1255 child_nonroot_pass_sqs->quad_to_target_transform.Translate(5, 0); |
1266 | 1256 |
1267 RenderPass* child_root_pass = child_frame.render_pass_list[1].get(); | 1257 RenderPass* child_root_pass = child_frame.render_pass_list[1].get(); |
(...skipping 11 matching lines...) Expand all Loading... |
1279 LocalSurfaceId middle_local_surface_id = allocator_.GenerateId(); | 1269 LocalSurfaceId middle_local_surface_id = allocator_.GenerateId(); |
1280 SurfaceId middle_surface_id(middle_support->frame_sink_id(), | 1270 SurfaceId middle_surface_id(middle_support->frame_sink_id(), |
1281 middle_local_surface_id); | 1271 middle_local_surface_id); |
1282 { | 1272 { |
1283 test::Quad middle_quads[] = { | 1273 test::Quad middle_quads[] = { |
1284 test::Quad::SurfaceQuad(child_surface_id, InvalidSurfaceId(), 1.f)}; | 1274 test::Quad::SurfaceQuad(child_surface_id, InvalidSurfaceId(), 1.f)}; |
1285 test::Pass middle_passes[] = { | 1275 test::Pass middle_passes[] = { |
1286 test::Pass(middle_quads, arraysize(middle_quads)), | 1276 test::Pass(middle_quads, arraysize(middle_quads)), |
1287 }; | 1277 }; |
1288 | 1278 |
1289 CompositorFrame middle_frame = test::MakeCompositorFrame(); | 1279 CompositorFrame middle_frame = test::MakeEmptyCompositorFrame(); |
1290 AddPasses(&middle_frame.render_pass_list, gfx::Rect(SurfaceSize()), | 1280 AddPasses(&middle_frame.render_pass_list, gfx::Rect(SurfaceSize()), |
1291 middle_passes, arraysize(middle_passes)); | 1281 middle_passes, arraysize(middle_passes)); |
1292 | 1282 |
1293 RenderPass* middle_root_pass = middle_frame.render_pass_list[0].get(); | 1283 RenderPass* middle_root_pass = middle_frame.render_pass_list[0].get(); |
1294 middle_root_pass->quad_list.ElementAt(0)->visible_rect = | 1284 middle_root_pass->quad_list.ElementAt(0)->visible_rect = |
1295 gfx::Rect(0, 1, 100, 7); | 1285 gfx::Rect(0, 1, 100, 7); |
1296 SharedQuadState* middle_root_pass_sqs = | 1286 SharedQuadState* middle_root_pass_sqs = |
1297 middle_root_pass->shared_quad_state_list.front(); | 1287 middle_root_pass->shared_quad_state_list.front(); |
1298 middle_root_pass_sqs->quad_to_target_transform.Scale(2, 3); | 1288 middle_root_pass_sqs->quad_to_target_transform.Scale(2, 3); |
1299 | 1289 |
1300 middle_support->SubmitCompositorFrame(middle_local_surface_id, | 1290 middle_support->SubmitCompositorFrame(middle_local_surface_id, |
1301 std::move(middle_frame)); | 1291 std::move(middle_frame)); |
1302 } | 1292 } |
1303 | 1293 |
1304 // Root surface. | 1294 // Root surface. |
1305 test::Quad secondary_quads[] = { | 1295 test::Quad secondary_quads[] = { |
1306 test::Quad::SolidColorQuad(1), | 1296 test::Quad::SolidColorQuad(1), |
1307 test::Quad::SurfaceQuad(middle_surface_id, InvalidSurfaceId(), 1.f)}; | 1297 test::Quad::SurfaceQuad(middle_surface_id, InvalidSurfaceId(), 1.f)}; |
1308 test::Quad root_quads[] = {test::Quad::SolidColorQuad(1)}; | 1298 test::Quad root_quads[] = {test::Quad::SolidColorQuad(1)}; |
1309 test::Pass root_passes[] = { | 1299 test::Pass root_passes[] = { |
1310 test::Pass(secondary_quads, arraysize(secondary_quads)), | 1300 test::Pass(secondary_quads, arraysize(secondary_quads)), |
1311 test::Pass(root_quads, arraysize(root_quads))}; | 1301 test::Pass(root_quads, arraysize(root_quads))}; |
1312 | 1302 |
1313 CompositorFrame root_frame = test::MakeCompositorFrame(); | 1303 CompositorFrame root_frame = test::MakeEmptyCompositorFrame(); |
1314 AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()), root_passes, | 1304 AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()), root_passes, |
1315 arraysize(root_passes)); | 1305 arraysize(root_passes)); |
1316 | 1306 |
1317 root_frame.render_pass_list[0] | 1307 root_frame.render_pass_list[0] |
1318 ->shared_quad_state_list.front() | 1308 ->shared_quad_state_list.front() |
1319 ->quad_to_target_transform.Translate(0, 7); | 1309 ->quad_to_target_transform.Translate(0, 7); |
1320 root_frame.render_pass_list[0] | 1310 root_frame.render_pass_list[0] |
1321 ->shared_quad_state_list.ElementAt(1) | 1311 ->shared_quad_state_list.ElementAt(1) |
1322 ->quad_to_target_transform.Translate(0, 10); | 1312 ->quad_to_target_transform.Translate(0, 10); |
1323 root_frame.render_pass_list[0]->quad_list.ElementAt(1)->visible_rect = | 1313 root_frame.render_pass_list[0]->quad_list.ElementAt(1)->visible_rect = |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1407 // Tests that damage rects are aggregated correctly when surfaces change. | 1397 // Tests that damage rects are aggregated correctly when surfaces change. |
1408 TEST_F(SurfaceAggregatorValidSurfaceTest, AggregateDamageRect) { | 1398 TEST_F(SurfaceAggregatorValidSurfaceTest, AggregateDamageRect) { |
1409 std::unique_ptr<CompositorFrameSinkSupport> parent_support = | 1399 std::unique_ptr<CompositorFrameSinkSupport> parent_support = |
1410 CompositorFrameSinkSupport::Create( | 1400 CompositorFrameSinkSupport::Create( |
1411 nullptr, &manager_, kArbitraryMiddleFrameSinkId, kChildIsRoot, | 1401 nullptr, &manager_, kArbitraryMiddleFrameSinkId, kChildIsRoot, |
1412 kHandlesFrameSinkIdInvalidation, kNeedsSyncPoints); | 1402 kHandlesFrameSinkIdInvalidation, kNeedsSyncPoints); |
1413 test::Quad child_quads[] = {test::Quad::RenderPassQuad(1)}; | 1403 test::Quad child_quads[] = {test::Quad::RenderPassQuad(1)}; |
1414 test::Pass child_passes[] = { | 1404 test::Pass child_passes[] = { |
1415 test::Pass(child_quads, arraysize(child_quads), 1)}; | 1405 test::Pass(child_quads, arraysize(child_quads), 1)}; |
1416 | 1406 |
1417 CompositorFrame child_frame = test::MakeCompositorFrame(); | 1407 CompositorFrame child_frame = test::MakeEmptyCompositorFrame(); |
1418 AddPasses(&child_frame.render_pass_list, gfx::Rect(SurfaceSize()), | 1408 AddPasses(&child_frame.render_pass_list, gfx::Rect(SurfaceSize()), |
1419 child_passes, arraysize(child_passes)); | 1409 child_passes, arraysize(child_passes)); |
1420 | 1410 |
1421 RenderPass* child_root_pass = child_frame.render_pass_list[0].get(); | 1411 RenderPass* child_root_pass = child_frame.render_pass_list[0].get(); |
1422 SharedQuadState* child_root_pass_sqs = | 1412 SharedQuadState* child_root_pass_sqs = |
1423 child_root_pass->shared_quad_state_list.front(); | 1413 child_root_pass->shared_quad_state_list.front(); |
1424 child_root_pass_sqs->quad_to_target_transform.Translate(8, 0); | 1414 child_root_pass_sqs->quad_to_target_transform.Translate(8, 0); |
1425 | 1415 |
1426 LocalSurfaceId child_local_surface_id = allocator_.GenerateId(); | 1416 LocalSurfaceId child_local_surface_id = allocator_.GenerateId(); |
1427 SurfaceId child_surface_id(child_support_->frame_sink_id(), | 1417 SurfaceId child_surface_id(child_support_->frame_sink_id(), |
1428 child_local_surface_id); | 1418 child_local_surface_id); |
1429 child_support_->SubmitCompositorFrame(child_local_surface_id, | 1419 child_support_->SubmitCompositorFrame(child_local_surface_id, |
1430 std::move(child_frame)); | 1420 std::move(child_frame)); |
1431 | 1421 |
1432 test::Quad parent_surface_quads[] = { | 1422 test::Quad parent_surface_quads[] = { |
1433 test::Quad::SurfaceQuad(child_surface_id, InvalidSurfaceId(), 1.f)}; | 1423 test::Quad::SurfaceQuad(child_surface_id, InvalidSurfaceId(), 1.f)}; |
1434 test::Pass parent_surface_passes[] = { | 1424 test::Pass parent_surface_passes[] = { |
1435 test::Pass(parent_surface_quads, arraysize(parent_surface_quads), 1)}; | 1425 test::Pass(parent_surface_quads, arraysize(parent_surface_quads), 1)}; |
1436 | 1426 |
1437 // Parent surface is only used to test if the transform is applied correctly | 1427 // Parent surface is only used to test if the transform is applied correctly |
1438 // to the child surface's damage. | 1428 // to the child surface's damage. |
1439 CompositorFrame parent_surface_frame = test::MakeCompositorFrame(); | 1429 CompositorFrame parent_surface_frame = test::MakeEmptyCompositorFrame(); |
1440 AddPasses(&parent_surface_frame.render_pass_list, gfx::Rect(SurfaceSize()), | 1430 AddPasses(&parent_surface_frame.render_pass_list, gfx::Rect(SurfaceSize()), |
1441 parent_surface_passes, arraysize(parent_surface_passes)); | 1431 parent_surface_passes, arraysize(parent_surface_passes)); |
1442 | 1432 |
1443 LocalSurfaceId parent_local_surface_id = allocator_.GenerateId(); | 1433 LocalSurfaceId parent_local_surface_id = allocator_.GenerateId(); |
1444 SurfaceId parent_surface_id(parent_support->frame_sink_id(), | 1434 SurfaceId parent_surface_id(parent_support->frame_sink_id(), |
1445 parent_local_surface_id); | 1435 parent_local_surface_id); |
1446 parent_support->SubmitCompositorFrame(parent_local_surface_id, | 1436 parent_support->SubmitCompositorFrame(parent_local_surface_id, |
1447 std::move(parent_surface_frame)); | 1437 std::move(parent_surface_frame)); |
1448 | 1438 |
1449 test::Quad root_surface_quads[] = { | 1439 test::Quad root_surface_quads[] = { |
1450 test::Quad::SurfaceQuad(parent_surface_id, InvalidSurfaceId(), 1.f)}; | 1440 test::Quad::SurfaceQuad(parent_surface_id, InvalidSurfaceId(), 1.f)}; |
1451 test::Quad root_render_pass_quads[] = {test::Quad::RenderPassQuad(1)}; | 1441 test::Quad root_render_pass_quads[] = {test::Quad::RenderPassQuad(1)}; |
1452 | 1442 |
1453 test::Pass root_passes[] = { | 1443 test::Pass root_passes[] = { |
1454 test::Pass(root_surface_quads, arraysize(root_surface_quads), 1), | 1444 test::Pass(root_surface_quads, arraysize(root_surface_quads), 1), |
1455 test::Pass(root_render_pass_quads, arraysize(root_render_pass_quads), 2)}; | 1445 test::Pass(root_render_pass_quads, arraysize(root_render_pass_quads), 2)}; |
1456 | 1446 |
1457 CompositorFrame root_frame = test::MakeCompositorFrame(); | 1447 CompositorFrame root_frame = test::MakeEmptyCompositorFrame(); |
1458 AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()), root_passes, | 1448 AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()), root_passes, |
1459 arraysize(root_passes)); | 1449 arraysize(root_passes)); |
1460 | 1450 |
1461 root_frame.render_pass_list[0] | 1451 root_frame.render_pass_list[0] |
1462 ->shared_quad_state_list.front() | 1452 ->shared_quad_state_list.front() |
1463 ->quad_to_target_transform.Translate(0, 10); | 1453 ->quad_to_target_transform.Translate(0, 10); |
1464 root_frame.render_pass_list[0]->damage_rect = gfx::Rect(5, 5, 10, 10); | 1454 root_frame.render_pass_list[0]->damage_rect = gfx::Rect(5, 5, 10, 10); |
1465 root_frame.render_pass_list[1]->damage_rect = gfx::Rect(5, 5, 100, 100); | 1455 root_frame.render_pass_list[1]->damage_rect = gfx::Rect(5, 5, 100, 100); |
1466 | 1456 |
1467 support_->SubmitCompositorFrame(root_local_surface_id_, | 1457 support_->SubmitCompositorFrame(root_local_surface_id_, |
1468 std::move(root_frame)); | 1458 std::move(root_frame)); |
1469 | 1459 |
1470 SurfaceId root_surface_id(support_->frame_sink_id(), root_local_surface_id_); | 1460 SurfaceId root_surface_id(support_->frame_sink_id(), root_local_surface_id_); |
1471 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); | 1461 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); |
1472 | 1462 |
1473 const RenderPassList& aggregated_pass_list = | 1463 const RenderPassList& aggregated_pass_list = |
1474 aggregated_frame.render_pass_list; | 1464 aggregated_frame.render_pass_list; |
1475 | 1465 |
1476 ASSERT_EQ(2u, aggregated_pass_list.size()); | 1466 ASSERT_EQ(2u, aggregated_pass_list.size()); |
1477 | 1467 |
1478 // Damage rect for first aggregation should contain entire root surface. | 1468 // Damage rect for first aggregation should contain entire root surface. |
1479 EXPECT_TRUE( | 1469 EXPECT_TRUE( |
1480 aggregated_pass_list[1]->damage_rect.Contains(gfx::Rect(SurfaceSize()))); | 1470 aggregated_pass_list[1]->damage_rect.Contains(gfx::Rect(SurfaceSize()))); |
1481 | 1471 |
1482 { | 1472 { |
1483 CompositorFrame child_frame = test::MakeCompositorFrame(); | 1473 CompositorFrame child_frame = test::MakeEmptyCompositorFrame(); |
1484 AddPasses(&child_frame.render_pass_list, gfx::Rect(SurfaceSize()), | 1474 AddPasses(&child_frame.render_pass_list, gfx::Rect(SurfaceSize()), |
1485 child_passes, arraysize(child_passes)); | 1475 child_passes, arraysize(child_passes)); |
1486 | 1476 |
1487 RenderPass* child_root_pass = child_frame.render_pass_list[0].get(); | 1477 RenderPass* child_root_pass = child_frame.render_pass_list[0].get(); |
1488 SharedQuadState* child_root_pass_sqs = | 1478 SharedQuadState* child_root_pass_sqs = |
1489 child_root_pass->shared_quad_state_list.front(); | 1479 child_root_pass->shared_quad_state_list.front(); |
1490 child_root_pass_sqs->quad_to_target_transform.Translate(8, 0); | 1480 child_root_pass_sqs->quad_to_target_transform.Translate(8, 0); |
1491 child_root_pass->damage_rect = gfx::Rect(10, 10, 10, 10); | 1481 child_root_pass->damage_rect = gfx::Rect(10, 10, 10, 10); |
1492 | 1482 |
1493 child_support_->SubmitCompositorFrame(child_local_surface_id, | 1483 child_support_->SubmitCompositorFrame(child_local_surface_id, |
1494 std::move(child_frame)); | 1484 std::move(child_frame)); |
1495 | 1485 |
1496 SurfaceId root_surface_id(support_->frame_sink_id(), | 1486 SurfaceId root_surface_id(support_->frame_sink_id(), |
1497 root_local_surface_id_); | 1487 root_local_surface_id_); |
1498 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); | 1488 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id); |
1499 | 1489 |
1500 const RenderPassList& aggregated_pass_list = | 1490 const RenderPassList& aggregated_pass_list = |
1501 aggregated_frame.render_pass_list; | 1491 aggregated_frame.render_pass_list; |
1502 | 1492 |
1503 ASSERT_EQ(2u, aggregated_pass_list.size()); | 1493 ASSERT_EQ(2u, aggregated_pass_list.size()); |
1504 | 1494 |
1505 // Outer surface didn't change, so transformed inner damage rect should be | 1495 // Outer surface didn't change, so transformed inner damage rect should be |
1506 // used. | 1496 // used. |
1507 EXPECT_EQ(gfx::Rect(10, 20, 10, 10).ToString(), | 1497 EXPECT_EQ(gfx::Rect(10, 20, 10, 10).ToString(), |
1508 aggregated_pass_list[1]->damage_rect.ToString()); | 1498 aggregated_pass_list[1]->damage_rect.ToString()); |
1509 } | 1499 } |
1510 | 1500 |
1511 { | 1501 { |
1512 CompositorFrame root_frame = test::MakeCompositorFrame(); | 1502 CompositorFrame root_frame = test::MakeEmptyCompositorFrame(); |
1513 AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()), | 1503 AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()), |
1514 root_passes, arraysize(root_passes)); | 1504 root_passes, arraysize(root_passes)); |
1515 | 1505 |
1516 root_frame.render_pass_list[0] | 1506 root_frame.render_pass_list[0] |
1517 ->shared_quad_state_list.front() | 1507 ->shared_quad_state_list.front() |
1518 ->quad_to_target_transform.Translate(0, 10); | 1508 ->quad_to_target_transform.Translate(0, 10); |
1519 root_frame.render_pass_list[0]->damage_rect = gfx::Rect(0, 0, 1, 1); | 1509 root_frame.render_pass_list[0]->damage_rect = gfx::Rect(0, 0, 1, 1); |
1520 | 1510 |
1521 support_->SubmitCompositorFrame(root_local_surface_id_, | 1511 support_->SubmitCompositorFrame(root_local_surface_id_, |
1522 std::move(root_frame)); | 1512 std::move(root_frame)); |
1523 } | 1513 } |
1524 | 1514 |
1525 { | 1515 { |
1526 CompositorFrame root_frame = test::MakeCompositorFrame(); | 1516 CompositorFrame root_frame = test::MakeEmptyCompositorFrame(); |
1527 AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()), | 1517 AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()), |
1528 root_passes, arraysize(root_passes)); | 1518 root_passes, arraysize(root_passes)); |
1529 | 1519 |
1530 root_frame.render_pass_list[0] | 1520 root_frame.render_pass_list[0] |
1531 ->shared_quad_state_list.front() | 1521 ->shared_quad_state_list.front() |
1532 ->quad_to_target_transform.Translate(0, 10); | 1522 ->quad_to_target_transform.Translate(0, 10); |
1533 root_frame.render_pass_list[0]->damage_rect = gfx::Rect(1, 1, 1, 1); | 1523 root_frame.render_pass_list[0]->damage_rect = gfx::Rect(1, 1, 1, 1); |
1534 | 1524 |
1535 support_->SubmitCompositorFrame(root_local_surface_id_, | 1525 support_->SubmitCompositorFrame(root_local_surface_id_, |
1536 std::move(root_frame)); | 1526 std::move(root_frame)); |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1582 parent_support->EvictFrame(); | 1572 parent_support->EvictFrame(); |
1583 } | 1573 } |
1584 | 1574 |
1585 // Check that damage is correctly calculated for surfaces. | 1575 // Check that damage is correctly calculated for surfaces. |
1586 TEST_F(SurfaceAggregatorValidSurfaceTest, SwitchSurfaceDamage) { | 1576 TEST_F(SurfaceAggregatorValidSurfaceTest, SwitchSurfaceDamage) { |
1587 test::Quad root_render_pass_quads[] = {test::Quad::SolidColorQuad(1)}; | 1577 test::Quad root_render_pass_quads[] = {test::Quad::SolidColorQuad(1)}; |
1588 | 1578 |
1589 test::Pass root_passes[] = { | 1579 test::Pass root_passes[] = { |
1590 test::Pass(root_render_pass_quads, arraysize(root_render_pass_quads), 2)}; | 1580 test::Pass(root_render_pass_quads, arraysize(root_render_pass_quads), 2)}; |
1591 | 1581 |
1592 CompositorFrame root_frame = test::MakeCompositorFrame(); | 1582 CompositorFrame root_frame = test::MakeEmptyCompositorFrame(); |
1593 AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()), root_passes, | 1583 AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()), root_passes, |
1594 arraysize(root_passes)); | 1584 arraysize(root_passes)); |
1595 | 1585 |
1596 root_frame.render_pass_list[0]->damage_rect = gfx::Rect(5, 5, 100, 100); | 1586 root_frame.render_pass_list[0]->damage_rect = gfx::Rect(5, 5, 100, 100); |
1597 | 1587 |
1598 support_->SubmitCompositorFrame(root_local_surface_id_, | 1588 support_->SubmitCompositorFrame(root_local_surface_id_, |
1599 std::move(root_frame)); | 1589 std::move(root_frame)); |
1600 | 1590 |
1601 { | 1591 { |
1602 SurfaceId root_surface_id(support_->frame_sink_id(), | 1592 SurfaceId root_surface_id(support_->frame_sink_id(), |
(...skipping 12 matching lines...) Expand all Loading... |
1615 | 1605 |
1616 LocalSurfaceId second_root_local_surface_id = allocator_.GenerateId(); | 1606 LocalSurfaceId second_root_local_surface_id = allocator_.GenerateId(); |
1617 SurfaceId second_root_surface_id(support_->frame_sink_id(), | 1607 SurfaceId second_root_surface_id(support_->frame_sink_id(), |
1618 second_root_local_surface_id); | 1608 second_root_local_surface_id); |
1619 { | 1609 { |
1620 test::Quad root_render_pass_quads[] = {test::Quad::SolidColorQuad(1)}; | 1610 test::Quad root_render_pass_quads[] = {test::Quad::SolidColorQuad(1)}; |
1621 | 1611 |
1622 test::Pass root_passes[] = {test::Pass( | 1612 test::Pass root_passes[] = {test::Pass( |
1623 root_render_pass_quads, arraysize(root_render_pass_quads), 2)}; | 1613 root_render_pass_quads, arraysize(root_render_pass_quads), 2)}; |
1624 | 1614 |
1625 CompositorFrame root_frame = test::MakeCompositorFrame(); | 1615 CompositorFrame root_frame = test::MakeEmptyCompositorFrame(); |
1626 AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()), | 1616 AddPasses(&root_frame.render_pass_list, gfx::Rect(SurfaceSize()), |
1627 root_passes, arraysize(root_passes)); | 1617 root_passes, arraysize(root_passes)); |
1628 | 1618 |
1629 root_frame.render_pass_list[0]->damage_rect = gfx::Rect(1, 2, 3, 4); | 1619 root_frame.render_pass_list[0]->damage_rect = gfx::Rect(1, 2, 3, 4); |
1630 | 1620 |
1631 support_->SubmitCompositorFrame(second_root_local_surface_id, | 1621 support_->SubmitCompositorFrame(second_root_local_surface_id, |
1632 std::move(root_frame)); | 1622 std::move(root_frame)); |
1633 } | 1623 } |
1634 { | 1624 { |
1635 CompositorFrame aggregated_frame = | 1625 CompositorFrame aggregated_frame = |
(...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1960 std::unique_ptr<ResourceProvider> resource_provider_; | 1950 std::unique_ptr<ResourceProvider> resource_provider_; |
1961 std::unique_ptr<SurfaceAggregator> aggregator_; | 1951 std::unique_ptr<SurfaceAggregator> aggregator_; |
1962 }; | 1952 }; |
1963 | 1953 |
1964 void SubmitCompositorFrameWithResources(ResourceId* resource_ids, | 1954 void SubmitCompositorFrameWithResources(ResourceId* resource_ids, |
1965 size_t num_resource_ids, | 1955 size_t num_resource_ids, |
1966 bool valid, | 1956 bool valid, |
1967 SurfaceId child_id, | 1957 SurfaceId child_id, |
1968 CompositorFrameSinkSupport* support, | 1958 CompositorFrameSinkSupport* support, |
1969 SurfaceId surface_id) { | 1959 SurfaceId surface_id) { |
1970 CompositorFrame frame = test::MakeCompositorFrame(); | 1960 CompositorFrame frame = test::MakeEmptyCompositorFrame(); |
1971 std::unique_ptr<RenderPass> pass = RenderPass::Create(); | 1961 std::unique_ptr<RenderPass> pass = RenderPass::Create(); |
1972 pass->id = 1; | 1962 pass->id = 1; |
1973 SharedQuadState* sqs = pass->CreateAndAppendSharedQuadState(); | 1963 SharedQuadState* sqs = pass->CreateAndAppendSharedQuadState(); |
1974 sqs->opacity = 1.f; | 1964 sqs->opacity = 1.f; |
1975 if (child_id.is_valid()) { | 1965 if (child_id.is_valid()) { |
1976 SurfaceDrawQuad* surface_quad = | 1966 SurfaceDrawQuad* surface_quad = |
1977 pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); | 1967 pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); |
1978 surface_quad->SetNew(sqs, gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1), | 1968 surface_quad->SetNew(sqs, gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1), |
1979 child_id, SurfaceDrawQuadType::PRIMARY, nullptr); | 1969 child_id, SurfaceDrawQuadType::PRIMARY, nullptr); |
1980 } | 1970 } |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2044 | 2034 |
2045 TEST_F(SurfaceAggregatorWithResourcesTest, TakeInvalidResources) { | 2035 TEST_F(SurfaceAggregatorWithResourcesTest, TakeInvalidResources) { |
2046 FakeCompositorFrameSinkSupportClient client; | 2036 FakeCompositorFrameSinkSupportClient client; |
2047 std::unique_ptr<CompositorFrameSinkSupport> support = | 2037 std::unique_ptr<CompositorFrameSinkSupport> support = |
2048 CompositorFrameSinkSupport::Create( | 2038 CompositorFrameSinkSupport::Create( |
2049 &client, &manager_, kArbitraryRootFrameSinkId, kRootIsRoot, | 2039 &client, &manager_, kArbitraryRootFrameSinkId, kRootIsRoot, |
2050 kHandlesFrameSinkIdInvalidation, kNeedsSyncPoints); | 2040 kHandlesFrameSinkIdInvalidation, kNeedsSyncPoints); |
2051 LocalSurfaceId local_surface_id(7u, base::UnguessableToken::Create()); | 2041 LocalSurfaceId local_surface_id(7u, base::UnguessableToken::Create()); |
2052 SurfaceId surface_id(support->frame_sink_id(), local_surface_id); | 2042 SurfaceId surface_id(support->frame_sink_id(), local_surface_id); |
2053 | 2043 |
2054 CompositorFrame frame = test::MakeCompositorFrame(); | 2044 CompositorFrame frame = test::MakeEmptyCompositorFrame(); |
2055 std::unique_ptr<RenderPass> pass = RenderPass::Create(); | 2045 std::unique_ptr<RenderPass> pass = RenderPass::Create(); |
2056 pass->id = 1; | 2046 pass->id = 1; |
2057 TransferableResource resource; | 2047 TransferableResource resource; |
2058 resource.id = 11; | 2048 resource.id = 11; |
2059 // ResourceProvider is software but resource is not, so it should be | 2049 // ResourceProvider is software but resource is not, so it should be |
2060 // ignored. | 2050 // ignored. |
2061 resource.is_software = false; | 2051 resource.is_software = false; |
2062 frame.resource_list.push_back(resource); | 2052 frame.resource_list.push_back(resource); |
2063 frame.render_pass_list.push_back(std::move(pass)); | 2053 frame.render_pass_list.push_back(std::move(pass)); |
2064 support->SubmitCompositorFrame(local_surface_id, std::move(frame)); | 2054 support->SubmitCompositorFrame(local_surface_id, std::move(frame)); |
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2215 pass->id = 1; | 2205 pass->id = 1; |
2216 SharedQuadState* sqs = pass->CreateAndAppendSharedQuadState(); | 2206 SharedQuadState* sqs = pass->CreateAndAppendSharedQuadState(); |
2217 sqs->opacity = 1.f; | 2207 sqs->opacity = 1.f; |
2218 SurfaceDrawQuad* surface_quad = | 2208 SurfaceDrawQuad* surface_quad = |
2219 pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); | 2209 pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); |
2220 | 2210 |
2221 surface_quad->SetNew(sqs, gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1), | 2211 surface_quad->SetNew(sqs, gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1), |
2222 surface1_id, SurfaceDrawQuadType::PRIMARY, nullptr); | 2212 surface1_id, SurfaceDrawQuadType::PRIMARY, nullptr); |
2223 pass->copy_requests.push_back(CopyOutputRequest::CreateEmptyRequest()); | 2213 pass->copy_requests.push_back(CopyOutputRequest::CreateEmptyRequest()); |
2224 | 2214 |
2225 CompositorFrame frame = test::MakeCompositorFrame(); | 2215 CompositorFrame frame = test::MakeEmptyCompositorFrame(); |
2226 frame.render_pass_list.push_back(std::move(pass)); | 2216 frame.render_pass_list.push_back(std::move(pass)); |
2227 | 2217 |
2228 support2->SubmitCompositorFrame(local_frame2_id, std::move(frame)); | 2218 support2->SubmitCompositorFrame(local_frame2_id, std::move(frame)); |
2229 } | 2219 } |
2230 | 2220 |
2231 frame = aggregator_->Aggregate(surface2_id); | 2221 frame = aggregator_->Aggregate(surface2_id); |
2232 EXPECT_EQ(1u, frame.render_pass_list.size()); | 2222 EXPECT_EQ(1u, frame.render_pass_list.size()); |
2233 render_pass = frame.render_pass_list.front().get(); | 2223 render_pass = frame.render_pass_list.front().get(); |
2234 | 2224 |
2235 // Parent has copy request, so texture should not be drawn. | 2225 // Parent has copy request, so texture should not be drawn. |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2289 aggregated_frame = aggregator_.Aggregate(surface_id); | 2279 aggregated_frame = aggregator_.Aggregate(surface_id); |
2290 EXPECT_EQ(3u, aggregated_frame.render_pass_list.size()); | 2280 EXPECT_EQ(3u, aggregated_frame.render_pass_list.size()); |
2291 EXPECT_EQ(color_space1, aggregated_frame.render_pass_list[0]->color_space); | 2281 EXPECT_EQ(color_space1, aggregated_frame.render_pass_list[0]->color_space); |
2292 EXPECT_EQ(color_space1, aggregated_frame.render_pass_list[1]->color_space); | 2282 EXPECT_EQ(color_space1, aggregated_frame.render_pass_list[1]->color_space); |
2293 EXPECT_EQ(color_space3, aggregated_frame.render_pass_list[2]->color_space); | 2283 EXPECT_EQ(color_space3, aggregated_frame.render_pass_list[2]->color_space); |
2294 } | 2284 } |
2295 | 2285 |
2296 } // namespace | 2286 } // namespace |
2297 } // namespace cc | 2287 } // namespace cc |
2298 | 2288 |
OLD | NEW |