Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(123)

Side by Side Diff: cc/surfaces/surface_aggregator_unittest.cc

Issue 2855723002: Don't submit frames with no render passes in cc tests (Closed)
Patch Set: c Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/surfaces/surface_aggregator.cc ('k') | cc/surfaces/surface_factory_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « cc/surfaces/surface_aggregator.cc ('k') | cc/surfaces/surface_factory_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698