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 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
74 SurfaceManager manager_; | 74 SurfaceManager manager_; |
75 EmptySurfaceFactoryClient empty_client_; | 75 EmptySurfaceFactoryClient empty_client_; |
76 SurfaceFactory factory_; | 76 SurfaceFactory factory_; |
77 SurfaceAggregator aggregator_; | 77 SurfaceAggregator aggregator_; |
78 }; | 78 }; |
79 | 79 |
80 TEST_F(SurfaceAggregatorTest, ValidSurfaceNoFrame) { | 80 TEST_F(SurfaceAggregatorTest, ValidSurfaceNoFrame) { |
81 SurfaceId one_id(0, 7, 0); | 81 SurfaceId one_id(0, 7, 0); |
82 factory_.Create(one_id); | 82 factory_.Create(one_id); |
83 | 83 |
84 CompositorFrame frame = aggregator_.Aggregate(one_id); | 84 std::unique_ptr<CompositorFrame> frame = aggregator_.Aggregate(one_id); |
85 EXPECT_FALSE(frame.delegated_frame_data); | 85 EXPECT_FALSE(frame); |
86 | 86 |
87 factory_.Destroy(one_id); | 87 factory_.Destroy(one_id); |
88 } | 88 } |
89 | 89 |
90 class SurfaceAggregatorValidSurfaceTest : public SurfaceAggregatorTest { | 90 class SurfaceAggregatorValidSurfaceTest : public SurfaceAggregatorTest { |
91 public: | 91 public: |
92 explicit SurfaceAggregatorValidSurfaceTest(bool use_damage_rect) | 92 explicit SurfaceAggregatorValidSurfaceTest(bool use_damage_rect) |
93 : SurfaceAggregatorTest(use_damage_rect), | 93 : SurfaceAggregatorTest(use_damage_rect), |
94 allocator_(1u), | 94 allocator_(1u), |
95 child_allocator_(2u) {} | 95 child_allocator_(2u) {} |
96 SurfaceAggregatorValidSurfaceTest() | 96 SurfaceAggregatorValidSurfaceTest() |
97 : SurfaceAggregatorValidSurfaceTest(false) {} | 97 : SurfaceAggregatorValidSurfaceTest(false) {} |
98 | 98 |
99 void SetUp() override { | 99 void SetUp() override { |
100 SurfaceAggregatorTest::SetUp(); | 100 SurfaceAggregatorTest::SetUp(); |
101 root_surface_id_ = allocator_.GenerateId(); | 101 root_surface_id_ = allocator_.GenerateId(); |
102 factory_.Create(root_surface_id_); | 102 factory_.Create(root_surface_id_); |
103 root_surface_ = manager_.GetSurfaceForId(root_surface_id_); | 103 root_surface_ = manager_.GetSurfaceForId(root_surface_id_); |
104 } | 104 } |
105 | 105 |
106 void TearDown() override { | 106 void TearDown() override { |
107 factory_.Destroy(root_surface_id_); | 107 factory_.Destroy(root_surface_id_); |
108 SurfaceAggregatorTest::TearDown(); | 108 SurfaceAggregatorTest::TearDown(); |
109 } | 109 } |
110 | 110 |
111 void AggregateAndVerify(test::Pass* expected_passes, | 111 void AggregateAndVerify(test::Pass* expected_passes, |
112 size_t expected_pass_count, | 112 size_t expected_pass_count, |
113 SurfaceId* surface_ids, | 113 SurfaceId* surface_ids, |
114 size_t expected_surface_count) { | 114 size_t expected_surface_count) { |
115 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id_); | 115 std::unique_ptr<CompositorFrame> aggregated_frame = |
| 116 aggregator_.Aggregate(root_surface_id_); |
116 | 117 |
117 ASSERT_TRUE(aggregated_frame.delegated_frame_data); | 118 ASSERT_TRUE(aggregated_frame); |
| 119 ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
118 | 120 |
119 DelegatedFrameData* frame_data = | 121 DelegatedFrameData* frame_data = |
120 aggregated_frame.delegated_frame_data.get(); | 122 aggregated_frame->delegated_frame_data.get(); |
121 | 123 |
122 TestPassesMatchExpectations( | 124 TestPassesMatchExpectations( |
123 expected_passes, expected_pass_count, &frame_data->render_pass_list); | 125 expected_passes, expected_pass_count, &frame_data->render_pass_list); |
124 | 126 |
125 // Ensure no duplicate pass ids output. | 127 // Ensure no duplicate pass ids output. |
126 std::set<RenderPassId> used_passes; | 128 std::set<RenderPassId> used_passes; |
127 for (const auto& pass : frame_data->render_pass_list) { | 129 for (const auto& pass : frame_data->render_pass_list) { |
128 EXPECT_TRUE(used_passes.insert(pass->id).second); | 130 EXPECT_TRUE(used_passes.insert(pass->id).second); |
129 } | 131 } |
130 | 132 |
131 EXPECT_EQ(expected_surface_count, | 133 EXPECT_EQ(expected_surface_count, |
132 aggregator_.previous_contained_surfaces().size()); | 134 aggregator_.previous_contained_surfaces().size()); |
133 for (size_t i = 0; i < expected_surface_count; i++) { | 135 for (size_t i = 0; i < expected_surface_count; i++) { |
134 EXPECT_TRUE( | 136 EXPECT_TRUE( |
135 aggregator_.previous_contained_surfaces().find(surface_ids[i]) != | 137 aggregator_.previous_contained_surfaces().find(surface_ids[i]) != |
136 aggregator_.previous_contained_surfaces().end()); | 138 aggregator_.previous_contained_surfaces().end()); |
137 } | 139 } |
138 } | 140 } |
139 | 141 |
140 void SubmitPassListAsFrame(SurfaceId surface_id, RenderPassList* pass_list) { | 142 void SubmitPassListAsFrame(SurfaceId surface_id, RenderPassList* pass_list) { |
141 std::unique_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); | 143 std::unique_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); |
142 pass_list->swap(frame_data->render_pass_list); | 144 pass_list->swap(frame_data->render_pass_list); |
143 | 145 |
144 CompositorFrame frame; | 146 std::unique_ptr<CompositorFrame> frame(new CompositorFrame); |
145 frame.delegated_frame_data = std::move(frame_data); | 147 frame->delegated_frame_data = std::move(frame_data); |
146 | 148 |
147 factory_.SubmitCompositorFrame(surface_id, std::move(frame), | 149 factory_.SubmitCompositorFrame(surface_id, std::move(frame), |
148 SurfaceFactory::DrawCallback()); | 150 SurfaceFactory::DrawCallback()); |
149 } | 151 } |
150 | 152 |
151 void SubmitCompositorFrame(test::Pass* passes, | 153 void SubmitCompositorFrame(test::Pass* passes, |
152 size_t pass_count, | 154 size_t pass_count, |
153 SurfaceId surface_id) { | 155 SurfaceId surface_id) { |
154 RenderPassList pass_list; | 156 RenderPassList pass_list; |
155 AddPasses(&pass_list, gfx::Rect(SurfaceSize()), passes, pass_count); | 157 AddPasses(&pass_list, gfx::Rect(SurfaceSize()), passes, pass_count); |
156 SubmitPassListAsFrame(surface_id, &pass_list); | 158 SubmitPassListAsFrame(surface_id, &pass_list); |
157 } | 159 } |
158 | 160 |
159 void QueuePassAsFrame(std::unique_ptr<RenderPass> pass, | 161 void QueuePassAsFrame(std::unique_ptr<RenderPass> pass, |
160 SurfaceId surface_id) { | 162 SurfaceId surface_id) { |
161 std::unique_ptr<DelegatedFrameData> delegated_frame_data( | 163 std::unique_ptr<DelegatedFrameData> delegated_frame_data( |
162 new DelegatedFrameData); | 164 new DelegatedFrameData); |
163 delegated_frame_data->render_pass_list.push_back(std::move(pass)); | 165 delegated_frame_data->render_pass_list.push_back(std::move(pass)); |
164 | 166 |
165 CompositorFrame child_frame; | 167 std::unique_ptr<CompositorFrame> child_frame(new CompositorFrame); |
166 child_frame.delegated_frame_data = std::move(delegated_frame_data); | 168 child_frame->delegated_frame_data = std::move(delegated_frame_data); |
167 | 169 |
168 factory_.SubmitCompositorFrame(surface_id, std::move(child_frame), | 170 factory_.SubmitCompositorFrame(surface_id, std::move(child_frame), |
169 SurfaceFactory::DrawCallback()); | 171 SurfaceFactory::DrawCallback()); |
170 } | 172 } |
171 | 173 |
172 protected: | 174 protected: |
173 SurfaceId root_surface_id_; | 175 SurfaceId root_surface_id_; |
174 Surface* root_surface_; | 176 Surface* root_surface_; |
175 SurfaceIdAllocator allocator_; | 177 SurfaceIdAllocator allocator_; |
176 SurfaceIdAllocator child_allocator_; | 178 SurfaceIdAllocator child_allocator_; |
(...skipping 27 matching lines...) Expand all Loading... |
204 test::Pass(embedded_quads, arraysize(embedded_quads))}; | 206 test::Pass(embedded_quads, arraysize(embedded_quads))}; |
205 | 207 |
206 SubmitCompositorFrame(embedded_passes, arraysize(embedded_passes), | 208 SubmitCompositorFrame(embedded_passes, arraysize(embedded_passes), |
207 embedded_surface_id); | 209 embedded_surface_id); |
208 | 210 |
209 test::Quad quads[] = {test::Quad::SurfaceQuad(embedded_surface_id, .5f)}; | 211 test::Quad quads[] = {test::Quad::SurfaceQuad(embedded_surface_id, .5f)}; |
210 test::Pass passes[] = {test::Pass(quads, arraysize(quads))}; | 212 test::Pass passes[] = {test::Pass(quads, arraysize(quads))}; |
211 | 213 |
212 SubmitCompositorFrame(passes, arraysize(passes), root_surface_id_); | 214 SubmitCompositorFrame(passes, arraysize(passes), root_surface_id_); |
213 | 215 |
214 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id_); | 216 std::unique_ptr<CompositorFrame> aggregated_frame = |
| 217 aggregator_.Aggregate(root_surface_id_); |
215 | 218 |
216 ASSERT_TRUE(aggregated_frame.delegated_frame_data); | 219 ASSERT_TRUE(aggregated_frame); |
| 220 ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
217 | 221 |
218 DelegatedFrameData* frame_data = aggregated_frame.delegated_frame_data.get(); | 222 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get(); |
219 | 223 |
220 RenderPassList& render_pass_list(frame_data->render_pass_list); | 224 RenderPassList& render_pass_list(frame_data->render_pass_list); |
221 ASSERT_EQ(2u, render_pass_list.size()); | 225 ASSERT_EQ(2u, render_pass_list.size()); |
222 SharedQuadStateList& shared_quad_state_list( | 226 SharedQuadStateList& shared_quad_state_list( |
223 render_pass_list[0]->shared_quad_state_list); | 227 render_pass_list[0]->shared_quad_state_list); |
224 ASSERT_EQ(2u, shared_quad_state_list.size()); | 228 ASSERT_EQ(2u, shared_quad_state_list.size()); |
225 EXPECT_EQ(1.f, shared_quad_state_list.ElementAt(0)->opacity); | 229 EXPECT_EQ(1.f, shared_quad_state_list.ElementAt(0)->opacity); |
226 EXPECT_EQ(1.f, shared_quad_state_list.ElementAt(1)->opacity); | 230 EXPECT_EQ(1.f, shared_quad_state_list.ElementAt(1)->opacity); |
227 | 231 |
228 SharedQuadStateList& shared_quad_state_list2( | 232 SharedQuadStateList& shared_quad_state_list2( |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
298 CopyOutputRequest* copy_request_ptr = copy_request.get(); | 302 CopyOutputRequest* copy_request_ptr = copy_request.get(); |
299 factory_.RequestCopyOfSurface(embedded_surface_id, std::move(copy_request)); | 303 factory_.RequestCopyOfSurface(embedded_surface_id, std::move(copy_request)); |
300 | 304 |
301 test::Quad root_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), | 305 test::Quad root_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), |
302 test::Quad::SurfaceQuad(embedded_surface_id, 1.f), | 306 test::Quad::SurfaceQuad(embedded_surface_id, 1.f), |
303 test::Quad::SolidColorQuad(SK_ColorBLACK)}; | 307 test::Quad::SolidColorQuad(SK_ColorBLACK)}; |
304 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))}; | 308 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))}; |
305 | 309 |
306 SubmitCompositorFrame(root_passes, arraysize(root_passes), root_surface_id_); | 310 SubmitCompositorFrame(root_passes, arraysize(root_passes), root_surface_id_); |
307 | 311 |
308 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id_); | 312 std::unique_ptr<CompositorFrame> aggregated_frame = |
| 313 aggregator_.Aggregate(root_surface_id_); |
309 | 314 |
310 ASSERT_TRUE(aggregated_frame.delegated_frame_data); | 315 ASSERT_TRUE(aggregated_frame); |
| 316 ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
311 | 317 |
312 DelegatedFrameData* frame_data = aggregated_frame.delegated_frame_data.get(); | 318 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get(); |
313 | 319 |
314 test::Quad expected_quads[] = { | 320 test::Quad expected_quads[] = { |
315 test::Quad::SolidColorQuad(SK_ColorWHITE), | 321 test::Quad::SolidColorQuad(SK_ColorWHITE), |
316 test::Quad::RenderPassQuad(frame_data->render_pass_list[0]->id), | 322 test::Quad::RenderPassQuad(frame_data->render_pass_list[0]->id), |
317 test::Quad::SolidColorQuad(SK_ColorBLACK)}; | 323 test::Quad::SolidColorQuad(SK_ColorBLACK)}; |
318 test::Pass expected_passes[] = { | 324 test::Pass expected_passes[] = { |
319 test::Pass(embedded_quads, arraysize(embedded_quads)), | 325 test::Pass(embedded_quads, arraysize(embedded_quads)), |
320 test::Pass(expected_quads, arraysize(expected_quads))}; | 326 test::Pass(expected_quads, arraysize(expected_quads))}; |
321 TestPassesMatchExpectations(expected_passes, | 327 TestPassesMatchExpectations(expected_passes, |
322 arraysize(expected_passes), | 328 arraysize(expected_passes), |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
368 AddPasses(&pass_list, | 374 AddPasses(&pass_list, |
369 gfx::Rect(SurfaceSize()), | 375 gfx::Rect(SurfaceSize()), |
370 root_passes, | 376 root_passes, |
371 arraysize(root_passes)); | 377 arraysize(root_passes)); |
372 pass_list[0]->copy_requests.push_back(std::move(copy_request)); | 378 pass_list[0]->copy_requests.push_back(std::move(copy_request)); |
373 pass_list[1]->copy_requests.push_back(std::move(copy_request2)); | 379 pass_list[1]->copy_requests.push_back(std::move(copy_request2)); |
374 | 380 |
375 std::unique_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); | 381 std::unique_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); |
376 pass_list.swap(frame_data->render_pass_list); | 382 pass_list.swap(frame_data->render_pass_list); |
377 | 383 |
378 CompositorFrame frame; | 384 std::unique_ptr<CompositorFrame> frame(new CompositorFrame); |
379 frame.delegated_frame_data = std::move(frame_data); | 385 frame->delegated_frame_data = std::move(frame_data); |
380 | 386 |
381 factory_.SubmitCompositorFrame(root_surface_id_, std::move(frame), | 387 factory_.SubmitCompositorFrame(root_surface_id_, std::move(frame), |
382 SurfaceFactory::DrawCallback()); | 388 SurfaceFactory::DrawCallback()); |
383 } | 389 } |
384 | 390 |
385 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id_); | 391 std::unique_ptr<CompositorFrame> aggregated_frame = |
| 392 aggregator_.Aggregate(root_surface_id_); |
386 | 393 |
387 ASSERT_TRUE(aggregated_frame.delegated_frame_data); | 394 ASSERT_TRUE(aggregated_frame); |
| 395 ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
388 | 396 |
389 DelegatedFrameData* frame_data = aggregated_frame.delegated_frame_data.get(); | 397 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get(); |
390 | 398 |
391 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), | 399 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), |
392 test::Quad::SolidColorQuad(SK_ColorGREEN), | 400 test::Quad::SolidColorQuad(SK_ColorGREEN), |
393 test::Quad::SolidColorQuad(SK_ColorBLACK)}; | 401 test::Quad::SolidColorQuad(SK_ColorBLACK)}; |
394 test::Pass expected_passes[] = { | 402 test::Pass expected_passes[] = { |
395 test::Pass(expected_quads, arraysize(expected_quads)), | 403 test::Pass(expected_quads, arraysize(expected_quads)), |
396 test::Pass(root_quads2, arraysize(root_quads2))}; | 404 test::Pass(root_quads2, arraysize(root_quads2))}; |
397 TestPassesMatchExpectations(expected_passes, | 405 TestPassesMatchExpectations(expected_passes, |
398 arraysize(expected_passes), | 406 arraysize(expected_passes), |
399 &frame_data->render_pass_list); | 407 &frame_data->render_pass_list); |
400 ASSERT_EQ(2u, frame_data->render_pass_list.size()); | 408 ASSERT_EQ(2u, frame_data->render_pass_list.size()); |
401 ASSERT_EQ(1u, frame_data->render_pass_list[0]->copy_requests.size()); | 409 ASSERT_EQ(1u, frame_data->render_pass_list[0]->copy_requests.size()); |
402 DCHECK_EQ(copy_request_ptr, | 410 DCHECK_EQ(copy_request_ptr, |
403 frame_data->render_pass_list[0]->copy_requests[0].get()); | 411 frame_data->render_pass_list[0]->copy_requests[0].get()); |
404 ASSERT_EQ(1u, frame_data->render_pass_list[1]->copy_requests.size()); | 412 ASSERT_EQ(1u, frame_data->render_pass_list[1]->copy_requests.size()); |
405 DCHECK_EQ(copy_request2_ptr, | 413 DCHECK_EQ(copy_request2_ptr, |
406 frame_data->render_pass_list[1]->copy_requests[0].get()); | 414 frame_data->render_pass_list[1]->copy_requests[0].get()); |
407 | 415 |
408 SurfaceId surface_ids[] = {root_surface_id_, embedded_surface_id}; | 416 SurfaceId surface_ids[] = {root_surface_id_, embedded_surface_id}; |
409 EXPECT_EQ(arraysize(surface_ids), | 417 EXPECT_EQ(arraysize(surface_ids), |
410 aggregator_.previous_contained_surfaces().size()); | 418 aggregator_.previous_contained_surfaces().size()); |
411 for (size_t i = 0; i < arraysize(surface_ids); i++) { | 419 for (size_t i = 0; i < arraysize(surface_ids); i++) { |
412 EXPECT_TRUE( | 420 EXPECT_TRUE( |
413 aggregator_.previous_contained_surfaces().find(surface_ids[i]) != | 421 aggregator_.previous_contained_surfaces().find(surface_ids[i]) != |
414 aggregator_.previous_contained_surfaces().end()); | 422 aggregator_.previous_contained_surfaces().end()); |
415 } | 423 } |
416 | 424 |
417 // Ensure copy requests have been removed from root surface. | 425 // Ensure copy requests have been removed from root surface. |
418 const CompositorFrame& original_frame = | 426 const CompositorFrame* original_frame = |
419 manager_.GetSurfaceForId(root_surface_id_)->GetEligibleFrame(); | 427 manager_.GetSurfaceForId(root_surface_id_)->GetEligibleFrame(); |
420 RenderPassList& original_pass_list = | 428 RenderPassList& original_pass_list = |
421 original_frame.delegated_frame_data->render_pass_list; | 429 original_frame->delegated_frame_data->render_pass_list; |
422 ASSERT_EQ(2u, original_pass_list.size()); | 430 ASSERT_EQ(2u, original_pass_list.size()); |
423 DCHECK(original_pass_list[0]->copy_requests.empty()); | 431 DCHECK(original_pass_list[0]->copy_requests.empty()); |
424 DCHECK(original_pass_list[1]->copy_requests.empty()); | 432 DCHECK(original_pass_list[1]->copy_requests.empty()); |
425 | 433 |
426 factory_.Destroy(embedded_surface_id); | 434 factory_.Destroy(embedded_surface_id); |
427 } | 435 } |
428 | 436 |
429 TEST_F(SurfaceAggregatorValidSurfaceTest, UnreferencedSurface) { | 437 TEST_F(SurfaceAggregatorValidSurfaceTest, UnreferencedSurface) { |
430 SurfaceId embedded_surface_id = allocator_.GenerateId(); | 438 SurfaceId embedded_surface_id = allocator_.GenerateId(); |
431 SurfaceId nonexistent_surface_id = allocator_.GenerateId(); | 439 SurfaceId nonexistent_surface_id = allocator_.GenerateId(); |
(...skipping 18 matching lines...) Expand all Loading... |
450 test::Quad::SurfaceQuad(embedded_surface_id, 1.f), | 458 test::Quad::SurfaceQuad(embedded_surface_id, 1.f), |
451 test::Quad::SolidColorQuad(SK_ColorBLACK)}; | 459 test::Quad::SolidColorQuad(SK_ColorBLACK)}; |
452 test::Pass parent_passes[] = { | 460 test::Pass parent_passes[] = { |
453 test::Pass(parent_quads, arraysize(parent_quads))}; | 461 test::Pass(parent_quads, arraysize(parent_quads))}; |
454 | 462 |
455 { | 463 { |
456 std::unique_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); | 464 std::unique_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); |
457 AddPasses(&frame_data->render_pass_list, gfx::Rect(SurfaceSize()), | 465 AddPasses(&frame_data->render_pass_list, gfx::Rect(SurfaceSize()), |
458 parent_passes, arraysize(parent_passes)); | 466 parent_passes, arraysize(parent_passes)); |
459 | 467 |
460 CompositorFrame frame; | 468 std::unique_ptr<CompositorFrame> frame(new CompositorFrame); |
461 frame.delegated_frame_data = std::move(frame_data); | 469 frame->delegated_frame_data = std::move(frame_data); |
462 frame.metadata.referenced_surfaces.push_back(embedded_surface_id); | 470 frame->metadata.referenced_surfaces.push_back(embedded_surface_id); |
463 | 471 |
464 factory_.SubmitCompositorFrame(parent_surface_id, std::move(frame), | 472 factory_.SubmitCompositorFrame(parent_surface_id, std::move(frame), |
465 SurfaceFactory::DrawCallback()); | 473 SurfaceFactory::DrawCallback()); |
466 } | 474 } |
467 | 475 |
468 test::Quad root_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), | 476 test::Quad root_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), |
469 test::Quad::SolidColorQuad(SK_ColorBLACK)}; | 477 test::Quad::SolidColorQuad(SK_ColorBLACK)}; |
470 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))}; | 478 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))}; |
471 | 479 |
472 { | 480 { |
473 std::unique_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); | 481 std::unique_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); |
474 AddPasses(&frame_data->render_pass_list, gfx::Rect(SurfaceSize()), | 482 AddPasses(&frame_data->render_pass_list, gfx::Rect(SurfaceSize()), |
475 root_passes, arraysize(root_passes)); | 483 root_passes, arraysize(root_passes)); |
476 | 484 |
477 CompositorFrame frame; | 485 std::unique_ptr<CompositorFrame> frame(new CompositorFrame); |
478 frame.delegated_frame_data = std::move(frame_data); | 486 frame->delegated_frame_data = std::move(frame_data); |
479 frame.metadata.referenced_surfaces.push_back(parent_surface_id); | 487 frame->metadata.referenced_surfaces.push_back(parent_surface_id); |
480 // Reference to Surface ID of a Surface that doesn't exist should be | 488 // Reference to Surface ID of a Surface that doesn't exist should be |
481 // included in previous_contained_surfaces, but otherwise ignored. | 489 // included in previous_contained_surfaces, but otherwise ignored. |
482 frame.metadata.referenced_surfaces.push_back(nonexistent_surface_id); | 490 frame->metadata.referenced_surfaces.push_back(nonexistent_surface_id); |
483 | 491 |
484 factory_.SubmitCompositorFrame(root_surface_id_, std::move(frame), | 492 factory_.SubmitCompositorFrame(root_surface_id_, std::move(frame), |
485 SurfaceFactory::DrawCallback()); | 493 SurfaceFactory::DrawCallback()); |
486 } | 494 } |
487 | 495 |
488 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id_); | 496 std::unique_ptr<CompositorFrame> aggregated_frame = |
| 497 aggregator_.Aggregate(root_surface_id_); |
489 | 498 |
490 ASSERT_TRUE(aggregated_frame.delegated_frame_data); | 499 ASSERT_TRUE(aggregated_frame); |
| 500 ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
491 | 501 |
492 DelegatedFrameData* frame_data = aggregated_frame.delegated_frame_data.get(); | 502 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get(); |
493 | 503 |
494 // First pass should come from surface that had a copy request but was not | 504 // First pass should come from surface that had a copy request but was not |
495 // referenced directly. The second pass comes from the root surface. | 505 // referenced directly. The second pass comes from the root surface. |
496 // parent_quad should be ignored because it is neither referenced through a | 506 // parent_quad should be ignored because it is neither referenced through a |
497 // SurfaceDrawQuad nor has a copy request on it. | 507 // SurfaceDrawQuad nor has a copy request on it. |
498 test::Pass expected_passes[] = { | 508 test::Pass expected_passes[] = { |
499 test::Pass(embedded_quads, arraysize(embedded_quads)), | 509 test::Pass(embedded_quads, arraysize(embedded_quads)), |
500 test::Pass(root_quads, arraysize(root_quads))}; | 510 test::Pass(root_quads, arraysize(root_quads))}; |
501 TestPassesMatchExpectations(expected_passes, arraysize(expected_passes), | 511 TestPassesMatchExpectations(expected_passes, arraysize(expected_passes), |
502 &frame_data->render_pass_list); | 512 &frame_data->render_pass_list); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
544 {test::Quad::SurfaceQuad(embedded_surface_id, 1.f), | 554 {test::Quad::SurfaceQuad(embedded_surface_id, 1.f), |
545 test::Quad::RenderPassQuad(pass_ids[0])}, | 555 test::Quad::RenderPassQuad(pass_ids[0])}, |
546 {test::Quad::SolidColorQuad(7), test::Quad::RenderPassQuad(pass_ids[1])}}; | 556 {test::Quad::SolidColorQuad(7), test::Quad::RenderPassQuad(pass_ids[1])}}; |
547 test::Pass root_passes[] = { | 557 test::Pass root_passes[] = { |
548 test::Pass(root_quads[0], arraysize(root_quads[0]), pass_ids[0]), | 558 test::Pass(root_quads[0], arraysize(root_quads[0]), pass_ids[0]), |
549 test::Pass(root_quads[1], arraysize(root_quads[1]), pass_ids[1]), | 559 test::Pass(root_quads[1], arraysize(root_quads[1]), pass_ids[1]), |
550 test::Pass(root_quads[2], arraysize(root_quads[2]), pass_ids[2])}; | 560 test::Pass(root_quads[2], arraysize(root_quads[2]), pass_ids[2])}; |
551 | 561 |
552 SubmitCompositorFrame(root_passes, arraysize(root_passes), root_surface_id_); | 562 SubmitCompositorFrame(root_passes, arraysize(root_passes), root_surface_id_); |
553 | 563 |
554 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id_); | 564 std::unique_ptr<CompositorFrame> aggregated_frame = |
| 565 aggregator_.Aggregate(root_surface_id_); |
555 | 566 |
556 ASSERT_TRUE(aggregated_frame.delegated_frame_data); | 567 ASSERT_TRUE(aggregated_frame); |
| 568 ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
557 | 569 |
558 DelegatedFrameData* frame_data = aggregated_frame.delegated_frame_data.get(); | 570 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get(); |
559 | 571 |
560 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; | 572 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; |
561 | 573 |
562 ASSERT_EQ(5u, aggregated_pass_list.size()); | 574 ASSERT_EQ(5u, aggregated_pass_list.size()); |
563 RenderPassId actual_pass_ids[] = { | 575 RenderPassId actual_pass_ids[] = { |
564 aggregated_pass_list[0]->id, aggregated_pass_list[1]->id, | 576 aggregated_pass_list[0]->id, aggregated_pass_list[1]->id, |
565 aggregated_pass_list[2]->id, aggregated_pass_list[3]->id, | 577 aggregated_pass_list[2]->id, aggregated_pass_list[3]->id, |
566 aggregated_pass_list[4]->id}; | 578 aggregated_pass_list[4]->id}; |
567 for (size_t i = 0; i < 5; ++i) { | 579 for (size_t i = 0; i < 5; ++i) { |
568 for (size_t j = 0; j < i; ++j) { | 580 for (size_t j = 0; j < i; ++j) { |
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
778 test::Quad parent_quad[][1] = { | 790 test::Quad parent_quad[][1] = { |
779 {test::Quad::SurfaceQuad(child_surface_id, 1.f)}, | 791 {test::Quad::SurfaceQuad(child_surface_id, 1.f)}, |
780 {test::Quad::RenderPassQuad(parent_pass_id[0])}}; | 792 {test::Quad::RenderPassQuad(parent_pass_id[0])}}; |
781 test::Pass parent_passes[] = { | 793 test::Pass parent_passes[] = { |
782 test::Pass(parent_quad[0], arraysize(parent_quad[0]), parent_pass_id[0]), | 794 test::Pass(parent_quad[0], arraysize(parent_quad[0]), parent_pass_id[0]), |
783 test::Pass(parent_quad[1], arraysize(parent_quad[1]), parent_pass_id[1])}; | 795 test::Pass(parent_quad[1], arraysize(parent_quad[1]), parent_pass_id[1])}; |
784 | 796 |
785 SubmitCompositorFrame(parent_passes, arraysize(parent_passes), | 797 SubmitCompositorFrame(parent_passes, arraysize(parent_passes), |
786 root_surface_id_); | 798 root_surface_id_); |
787 | 799 |
788 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id_); | 800 std::unique_ptr<CompositorFrame> aggregated_frame = |
| 801 aggregator_.Aggregate(root_surface_id_); |
789 | 802 |
790 ASSERT_TRUE(aggregated_frame.delegated_frame_data); | 803 ASSERT_TRUE(aggregated_frame); |
| 804 ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
791 | 805 |
792 DelegatedFrameData* frame_data = aggregated_frame.delegated_frame_data.get(); | 806 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get(); |
793 | 807 |
794 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; | 808 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; |
795 | 809 |
796 ASSERT_EQ(3u, aggregated_pass_list.size()); | 810 ASSERT_EQ(3u, aggregated_pass_list.size()); |
797 RenderPassId actual_pass_ids[] = {aggregated_pass_list[0]->id, | 811 RenderPassId actual_pass_ids[] = {aggregated_pass_list[0]->id, |
798 aggregated_pass_list[1]->id, | 812 aggregated_pass_list[1]->id, |
799 aggregated_pass_list[2]->id}; | 813 aggregated_pass_list[2]->id}; |
800 // Make sure the aggregated frame's pass IDs are all unique. | 814 // Make sure the aggregated frame's pass IDs are all unique. |
801 for (size_t i = 0; i < 3; ++i) { | 815 for (size_t i = 0; i < 3; ++i) { |
802 for (size_t j = 0; j < i; ++j) { | 816 for (size_t j = 0; j < i; ++j) { |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
939 root_pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); | 953 root_pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); |
940 child_two_surface_quad->SetNew(root_pass->shared_quad_state_list.back(), | 954 child_two_surface_quad->SetNew(root_pass->shared_quad_state_list.back(), |
941 gfx::Rect(SurfaceSize()), | 955 gfx::Rect(SurfaceSize()), |
942 gfx::Rect(SurfaceSize()), | 956 gfx::Rect(SurfaceSize()), |
943 child_two_surface_id); | 957 child_two_surface_id); |
944 AddSolidColorQuadWithBlendMode( | 958 AddSolidColorQuadWithBlendMode( |
945 SurfaceSize(), root_pass.get(), blend_modes[6]); | 959 SurfaceSize(), root_pass.get(), blend_modes[6]); |
946 | 960 |
947 QueuePassAsFrame(std::move(root_pass), root_surface_id_); | 961 QueuePassAsFrame(std::move(root_pass), root_surface_id_); |
948 | 962 |
949 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id_); | 963 std::unique_ptr<CompositorFrame> aggregated_frame = |
| 964 aggregator_.Aggregate(root_surface_id_); |
950 | 965 |
951 ASSERT_TRUE(aggregated_frame.delegated_frame_data); | 966 ASSERT_TRUE(aggregated_frame); |
| 967 ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
952 | 968 |
953 DelegatedFrameData* frame_data = aggregated_frame.delegated_frame_data.get(); | 969 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get(); |
954 | 970 |
955 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; | 971 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; |
956 | 972 |
957 ASSERT_EQ(1u, aggregated_pass_list.size()); | 973 ASSERT_EQ(1u, aggregated_pass_list.size()); |
958 | 974 |
959 const QuadList& aggregated_quad_list = aggregated_pass_list[0]->quad_list; | 975 const QuadList& aggregated_quad_list = aggregated_pass_list[0]->quad_list; |
960 | 976 |
961 ASSERT_EQ(7u, aggregated_quad_list.size()); | 977 ASSERT_EQ(7u, aggregated_quad_list.size()); |
962 | 978 |
963 for (auto iter = aggregated_quad_list.cbegin(); | 979 for (auto iter = aggregated_quad_list.cbegin(); |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1018 SharedQuadState* child_root_pass_sqs = | 1034 SharedQuadState* child_root_pass_sqs = |
1019 child_root_pass->shared_quad_state_list.front(); | 1035 child_root_pass->shared_quad_state_list.front(); |
1020 child_root_pass_sqs->quad_to_target_transform.Translate(8, 0); | 1036 child_root_pass_sqs->quad_to_target_transform.Translate(8, 0); |
1021 child_root_pass_sqs->is_clipped = true; | 1037 child_root_pass_sqs->is_clipped = true; |
1022 child_root_pass_sqs->clip_rect = gfx::Rect(0, 0, 5, 5); | 1038 child_root_pass_sqs->clip_rect = gfx::Rect(0, 0, 5, 5); |
1023 | 1039 |
1024 std::unique_ptr<DelegatedFrameData> child_frame_data( | 1040 std::unique_ptr<DelegatedFrameData> child_frame_data( |
1025 new DelegatedFrameData); | 1041 new DelegatedFrameData); |
1026 child_pass_list.swap(child_frame_data->render_pass_list); | 1042 child_pass_list.swap(child_frame_data->render_pass_list); |
1027 | 1043 |
1028 CompositorFrame child_frame; | 1044 std::unique_ptr<CompositorFrame> child_frame(new CompositorFrame); |
1029 child_frame.delegated_frame_data = std::move(child_frame_data); | 1045 child_frame->delegated_frame_data = std::move(child_frame_data); |
1030 | 1046 |
1031 factory_.SubmitCompositorFrame(child_surface_id, std::move(child_frame), | 1047 factory_.SubmitCompositorFrame(child_surface_id, std::move(child_frame), |
1032 SurfaceFactory::DrawCallback()); | 1048 SurfaceFactory::DrawCallback()); |
1033 } | 1049 } |
1034 | 1050 |
1035 // Middle child surface. | 1051 // Middle child surface. |
1036 SurfaceId middle_surface_id = allocator_.GenerateId(); | 1052 SurfaceId middle_surface_id = allocator_.GenerateId(); |
1037 factory_.Create(middle_surface_id); | 1053 factory_.Create(middle_surface_id); |
1038 { | 1054 { |
1039 test::Quad middle_quads[] = { | 1055 test::Quad middle_quads[] = { |
(...skipping 10 matching lines...) Expand all Loading... |
1050 middle_root_pass->quad_list.ElementAt(0)->visible_rect = | 1066 middle_root_pass->quad_list.ElementAt(0)->visible_rect = |
1051 gfx::Rect(0, 1, 100, 7); | 1067 gfx::Rect(0, 1, 100, 7); |
1052 SharedQuadState* middle_root_pass_sqs = | 1068 SharedQuadState* middle_root_pass_sqs = |
1053 middle_root_pass->shared_quad_state_list.front(); | 1069 middle_root_pass->shared_quad_state_list.front(); |
1054 middle_root_pass_sqs->quad_to_target_transform.Scale(2, 3); | 1070 middle_root_pass_sqs->quad_to_target_transform.Scale(2, 3); |
1055 | 1071 |
1056 std::unique_ptr<DelegatedFrameData> middle_frame_data( | 1072 std::unique_ptr<DelegatedFrameData> middle_frame_data( |
1057 new DelegatedFrameData); | 1073 new DelegatedFrameData); |
1058 middle_pass_list.swap(middle_frame_data->render_pass_list); | 1074 middle_pass_list.swap(middle_frame_data->render_pass_list); |
1059 | 1075 |
1060 CompositorFrame middle_frame; | 1076 std::unique_ptr<CompositorFrame> middle_frame(new CompositorFrame); |
1061 middle_frame.delegated_frame_data = std::move(middle_frame_data); | 1077 middle_frame->delegated_frame_data = std::move(middle_frame_data); |
1062 | 1078 |
1063 factory_.SubmitCompositorFrame(middle_surface_id, std::move(middle_frame), | 1079 factory_.SubmitCompositorFrame(middle_surface_id, std::move(middle_frame), |
1064 SurfaceFactory::DrawCallback()); | 1080 SurfaceFactory::DrawCallback()); |
1065 } | 1081 } |
1066 | 1082 |
1067 // Root surface. | 1083 // Root surface. |
1068 test::Quad secondary_quads[] = { | 1084 test::Quad secondary_quads[] = { |
1069 test::Quad::SolidColorQuad(1), | 1085 test::Quad::SolidColorQuad(1), |
1070 test::Quad::SurfaceQuad(middle_surface_id, 1.f)}; | 1086 test::Quad::SurfaceQuad(middle_surface_id, 1.f)}; |
1071 test::Quad root_quads[] = {test::Quad::SolidColorQuad(1)}; | 1087 test::Quad root_quads[] = {test::Quad::SolidColorQuad(1)}; |
(...skipping 14 matching lines...) Expand all Loading... |
1086 ->shared_quad_state_list.ElementAt(1) | 1102 ->shared_quad_state_list.ElementAt(1) |
1087 ->quad_to_target_transform.Translate(0, 10); | 1103 ->quad_to_target_transform.Translate(0, 10); |
1088 root_pass_list[0]->quad_list.ElementAt(1)->visible_rect = | 1104 root_pass_list[0]->quad_list.ElementAt(1)->visible_rect = |
1089 gfx::Rect(0, 0, 8, 100); | 1105 gfx::Rect(0, 0, 8, 100); |
1090 | 1106 |
1091 root_pass_list[0]->transform_to_root_target.Translate(10, 5); | 1107 root_pass_list[0]->transform_to_root_target.Translate(10, 5); |
1092 | 1108 |
1093 std::unique_ptr<DelegatedFrameData> root_frame_data(new DelegatedFrameData); | 1109 std::unique_ptr<DelegatedFrameData> root_frame_data(new DelegatedFrameData); |
1094 root_pass_list.swap(root_frame_data->render_pass_list); | 1110 root_pass_list.swap(root_frame_data->render_pass_list); |
1095 | 1111 |
1096 CompositorFrame root_frame; | 1112 std::unique_ptr<CompositorFrame> root_frame(new CompositorFrame); |
1097 root_frame.delegated_frame_data = std::move(root_frame_data); | 1113 root_frame->delegated_frame_data = std::move(root_frame_data); |
1098 | 1114 |
1099 factory_.SubmitCompositorFrame(root_surface_id_, std::move(root_frame), | 1115 factory_.SubmitCompositorFrame(root_surface_id_, std::move(root_frame), |
1100 SurfaceFactory::DrawCallback()); | 1116 SurfaceFactory::DrawCallback()); |
1101 | 1117 |
1102 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id_); | 1118 std::unique_ptr<CompositorFrame> aggregated_frame = |
| 1119 aggregator_.Aggregate(root_surface_id_); |
1103 | 1120 |
1104 ASSERT_TRUE(aggregated_frame.delegated_frame_data); | 1121 ASSERT_TRUE(aggregated_frame); |
| 1122 ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
1105 | 1123 |
1106 DelegatedFrameData* frame_data = aggregated_frame.delegated_frame_data.get(); | 1124 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get(); |
1107 | 1125 |
1108 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; | 1126 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; |
1109 | 1127 |
1110 ASSERT_EQ(3u, aggregated_pass_list.size()); | 1128 ASSERT_EQ(3u, aggregated_pass_list.size()); |
1111 | 1129 |
1112 ASSERT_EQ(1u, aggregated_pass_list[0]->shared_quad_state_list.size()); | 1130 ASSERT_EQ(1u, aggregated_pass_list[0]->shared_quad_state_list.size()); |
1113 | 1131 |
1114 // The first pass should have one shared quad state for the one solid color | 1132 // The first pass should have one shared quad state for the one solid color |
1115 // quad. | 1133 // quad. |
1116 EXPECT_EQ(1u, aggregated_pass_list[0]->shared_quad_state_list.size()); | 1134 EXPECT_EQ(1u, aggregated_pass_list[0]->shared_quad_state_list.size()); |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1191 arraysize(child_passes)); | 1209 arraysize(child_passes)); |
1192 | 1210 |
1193 RenderPass* child_root_pass = child_pass_list[0].get(); | 1211 RenderPass* child_root_pass = child_pass_list[0].get(); |
1194 SharedQuadState* child_root_pass_sqs = | 1212 SharedQuadState* child_root_pass_sqs = |
1195 child_root_pass->shared_quad_state_list.front(); | 1213 child_root_pass->shared_quad_state_list.front(); |
1196 child_root_pass_sqs->quad_to_target_transform.Translate(8, 0); | 1214 child_root_pass_sqs->quad_to_target_transform.Translate(8, 0); |
1197 | 1215 |
1198 std::unique_ptr<DelegatedFrameData> child_frame_data(new DelegatedFrameData); | 1216 std::unique_ptr<DelegatedFrameData> child_frame_data(new DelegatedFrameData); |
1199 child_pass_list.swap(child_frame_data->render_pass_list); | 1217 child_pass_list.swap(child_frame_data->render_pass_list); |
1200 | 1218 |
1201 CompositorFrame child_frame; | 1219 std::unique_ptr<CompositorFrame> child_frame(new CompositorFrame); |
1202 child_frame.delegated_frame_data = std::move(child_frame_data); | 1220 child_frame->delegated_frame_data = std::move(child_frame_data); |
1203 | 1221 |
1204 SurfaceId child_surface_id = allocator_.GenerateId(); | 1222 SurfaceId child_surface_id = allocator_.GenerateId(); |
1205 factory_.Create(child_surface_id); | 1223 factory_.Create(child_surface_id); |
1206 factory_.SubmitCompositorFrame(child_surface_id, std::move(child_frame), | 1224 factory_.SubmitCompositorFrame(child_surface_id, std::move(child_frame), |
1207 SurfaceFactory::DrawCallback()); | 1225 SurfaceFactory::DrawCallback()); |
1208 | 1226 |
1209 test::Quad parent_surface_quads[] = { | 1227 test::Quad parent_surface_quads[] = { |
1210 test::Quad::SurfaceQuad(child_surface_id, 1.f)}; | 1228 test::Quad::SurfaceQuad(child_surface_id, 1.f)}; |
1211 test::Pass parent_surface_passes[] = { | 1229 test::Pass parent_surface_passes[] = { |
1212 test::Pass(parent_surface_quads, arraysize(parent_surface_quads), | 1230 test::Pass(parent_surface_quads, arraysize(parent_surface_quads), |
1213 RenderPassId(1, 1))}; | 1231 RenderPassId(1, 1))}; |
1214 | 1232 |
1215 RenderPassList parent_surface_pass_list; | 1233 RenderPassList parent_surface_pass_list; |
1216 AddPasses(&parent_surface_pass_list, | 1234 AddPasses(&parent_surface_pass_list, |
1217 gfx::Rect(SurfaceSize()), | 1235 gfx::Rect(SurfaceSize()), |
1218 parent_surface_passes, | 1236 parent_surface_passes, |
1219 arraysize(parent_surface_passes)); | 1237 arraysize(parent_surface_passes)); |
1220 | 1238 |
1221 // Parent surface is only used to test if the transform is applied correctly | 1239 // Parent surface is only used to test if the transform is applied correctly |
1222 // to the child surface's damage. | 1240 // to the child surface's damage. |
1223 std::unique_ptr<DelegatedFrameData> parent_surface_frame_data( | 1241 std::unique_ptr<DelegatedFrameData> parent_surface_frame_data( |
1224 new DelegatedFrameData); | 1242 new DelegatedFrameData); |
1225 parent_surface_pass_list.swap(parent_surface_frame_data->render_pass_list); | 1243 parent_surface_pass_list.swap(parent_surface_frame_data->render_pass_list); |
1226 | 1244 |
1227 CompositorFrame parent_surface_frame; | 1245 std::unique_ptr<CompositorFrame> parent_surface_frame(new CompositorFrame); |
1228 parent_surface_frame.delegated_frame_data = | 1246 parent_surface_frame->delegated_frame_data = |
1229 std::move(parent_surface_frame_data); | 1247 std::move(parent_surface_frame_data); |
1230 | 1248 |
1231 SurfaceId parent_surface_id = allocator_.GenerateId(); | 1249 SurfaceId parent_surface_id = allocator_.GenerateId(); |
1232 factory_.Create(parent_surface_id); | 1250 factory_.Create(parent_surface_id); |
1233 factory_.SubmitCompositorFrame(parent_surface_id, | 1251 factory_.SubmitCompositorFrame(parent_surface_id, |
1234 std::move(parent_surface_frame), | 1252 std::move(parent_surface_frame), |
1235 SurfaceFactory::DrawCallback()); | 1253 SurfaceFactory::DrawCallback()); |
1236 | 1254 |
1237 test::Quad root_surface_quads[] = { | 1255 test::Quad root_surface_quads[] = { |
1238 test::Quad::SurfaceQuad(parent_surface_id, 1.f)}; | 1256 test::Quad::SurfaceQuad(parent_surface_id, 1.f)}; |
(...skipping 14 matching lines...) Expand all Loading... |
1253 | 1271 |
1254 root_pass_list[0] | 1272 root_pass_list[0] |
1255 ->shared_quad_state_list.front() | 1273 ->shared_quad_state_list.front() |
1256 ->quad_to_target_transform.Translate(0, 10); | 1274 ->quad_to_target_transform.Translate(0, 10); |
1257 root_pass_list[0]->damage_rect = gfx::Rect(5, 5, 10, 10); | 1275 root_pass_list[0]->damage_rect = gfx::Rect(5, 5, 10, 10); |
1258 root_pass_list[1]->damage_rect = gfx::Rect(5, 5, 100, 100); | 1276 root_pass_list[1]->damage_rect = gfx::Rect(5, 5, 100, 100); |
1259 | 1277 |
1260 std::unique_ptr<DelegatedFrameData> root_frame_data(new DelegatedFrameData); | 1278 std::unique_ptr<DelegatedFrameData> root_frame_data(new DelegatedFrameData); |
1261 root_pass_list.swap(root_frame_data->render_pass_list); | 1279 root_pass_list.swap(root_frame_data->render_pass_list); |
1262 | 1280 |
1263 CompositorFrame root_frame; | 1281 std::unique_ptr<CompositorFrame> root_frame(new CompositorFrame); |
1264 root_frame.delegated_frame_data = std::move(root_frame_data); | 1282 root_frame->delegated_frame_data = std::move(root_frame_data); |
1265 | 1283 |
1266 factory_.SubmitCompositorFrame(root_surface_id_, std::move(root_frame), | 1284 factory_.SubmitCompositorFrame(root_surface_id_, std::move(root_frame), |
1267 SurfaceFactory::DrawCallback()); | 1285 SurfaceFactory::DrawCallback()); |
1268 | 1286 |
1269 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id_); | 1287 std::unique_ptr<CompositorFrame> aggregated_frame = |
| 1288 aggregator_.Aggregate(root_surface_id_); |
1270 | 1289 |
1271 ASSERT_TRUE(aggregated_frame.delegated_frame_data); | 1290 ASSERT_TRUE(aggregated_frame); |
| 1291 ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
1272 | 1292 |
1273 DelegatedFrameData* frame_data = aggregated_frame.delegated_frame_data.get(); | 1293 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get(); |
1274 | 1294 |
1275 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; | 1295 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; |
1276 | 1296 |
1277 ASSERT_EQ(2u, aggregated_pass_list.size()); | 1297 ASSERT_EQ(2u, aggregated_pass_list.size()); |
1278 | 1298 |
1279 // Damage rect for first aggregation should contain entire root surface. | 1299 // Damage rect for first aggregation should contain entire root surface. |
1280 EXPECT_TRUE( | 1300 EXPECT_TRUE( |
1281 aggregated_pass_list[1]->damage_rect.Contains(gfx::Rect(SurfaceSize()))); | 1301 aggregated_pass_list[1]->damage_rect.Contains(gfx::Rect(SurfaceSize()))); |
1282 | 1302 |
1283 { | 1303 { |
1284 AddPasses(&child_pass_list, | 1304 AddPasses(&child_pass_list, |
1285 gfx::Rect(SurfaceSize()), | 1305 gfx::Rect(SurfaceSize()), |
1286 child_passes, | 1306 child_passes, |
1287 arraysize(child_passes)); | 1307 arraysize(child_passes)); |
1288 | 1308 |
1289 RenderPass* child_root_pass = child_pass_list[0].get(); | 1309 RenderPass* child_root_pass = child_pass_list[0].get(); |
1290 SharedQuadState* child_root_pass_sqs = | 1310 SharedQuadState* child_root_pass_sqs = |
1291 child_root_pass->shared_quad_state_list.front(); | 1311 child_root_pass->shared_quad_state_list.front(); |
1292 child_root_pass_sqs->quad_to_target_transform.Translate(8, 0); | 1312 child_root_pass_sqs->quad_to_target_transform.Translate(8, 0); |
1293 child_root_pass->damage_rect = gfx::Rect(10, 10, 10, 10); | 1313 child_root_pass->damage_rect = gfx::Rect(10, 10, 10, 10); |
1294 | 1314 |
1295 std::unique_ptr<DelegatedFrameData> child_frame_data( | 1315 std::unique_ptr<DelegatedFrameData> child_frame_data( |
1296 new DelegatedFrameData); | 1316 new DelegatedFrameData); |
1297 child_pass_list.swap(child_frame_data->render_pass_list); | 1317 child_pass_list.swap(child_frame_data->render_pass_list); |
1298 | 1318 |
1299 CompositorFrame child_frame; | 1319 std::unique_ptr<CompositorFrame> child_frame(new CompositorFrame); |
1300 child_frame.delegated_frame_data = std::move(child_frame_data); | 1320 child_frame->delegated_frame_data = std::move(child_frame_data); |
1301 | 1321 |
1302 factory_.SubmitCompositorFrame(child_surface_id, std::move(child_frame), | 1322 factory_.SubmitCompositorFrame(child_surface_id, std::move(child_frame), |
1303 SurfaceFactory::DrawCallback()); | 1323 SurfaceFactory::DrawCallback()); |
1304 | 1324 |
1305 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id_); | 1325 std::unique_ptr<CompositorFrame> aggregated_frame = |
| 1326 aggregator_.Aggregate(root_surface_id_); |
1306 | 1327 |
1307 ASSERT_TRUE(aggregated_frame.delegated_frame_data); | 1328 ASSERT_TRUE(aggregated_frame); |
| 1329 ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
1308 | 1330 |
1309 DelegatedFrameData* frame_data = | 1331 DelegatedFrameData* frame_data = |
1310 aggregated_frame.delegated_frame_data.get(); | 1332 aggregated_frame->delegated_frame_data.get(); |
1311 | 1333 |
1312 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; | 1334 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; |
1313 | 1335 |
1314 ASSERT_EQ(2u, aggregated_pass_list.size()); | 1336 ASSERT_EQ(2u, aggregated_pass_list.size()); |
1315 | 1337 |
1316 // Outer surface didn't change, so transformed inner damage rect should be | 1338 // Outer surface didn't change, so transformed inner damage rect should be |
1317 // used. | 1339 // used. |
1318 EXPECT_EQ(gfx::Rect(10, 20, 10, 10).ToString(), | 1340 EXPECT_EQ(gfx::Rect(10, 20, 10, 10).ToString(), |
1319 aggregated_pass_list[1]->damage_rect.ToString()); | 1341 aggregated_pass_list[1]->damage_rect.ToString()); |
1320 } | 1342 } |
1321 | 1343 |
1322 { | 1344 { |
1323 RenderPassList root_pass_list; | 1345 RenderPassList root_pass_list; |
1324 AddPasses(&root_pass_list, | 1346 AddPasses(&root_pass_list, |
1325 gfx::Rect(SurfaceSize()), | 1347 gfx::Rect(SurfaceSize()), |
1326 root_passes, | 1348 root_passes, |
1327 arraysize(root_passes)); | 1349 arraysize(root_passes)); |
1328 | 1350 |
1329 root_pass_list[0] | 1351 root_pass_list[0] |
1330 ->shared_quad_state_list.front() | 1352 ->shared_quad_state_list.front() |
1331 ->quad_to_target_transform.Translate(0, 10); | 1353 ->quad_to_target_transform.Translate(0, 10); |
1332 root_pass_list[0]->damage_rect = gfx::Rect(0, 0, 1, 1); | 1354 root_pass_list[0]->damage_rect = gfx::Rect(0, 0, 1, 1); |
1333 | 1355 |
1334 std::unique_ptr<DelegatedFrameData> root_frame_data(new DelegatedFrameData); | 1356 std::unique_ptr<DelegatedFrameData> root_frame_data(new DelegatedFrameData); |
1335 root_pass_list.swap(root_frame_data->render_pass_list); | 1357 root_pass_list.swap(root_frame_data->render_pass_list); |
1336 | 1358 |
1337 CompositorFrame root_frame; | 1359 std::unique_ptr<CompositorFrame> root_frame(new CompositorFrame); |
1338 root_frame.delegated_frame_data = std::move(root_frame_data); | 1360 root_frame->delegated_frame_data = std::move(root_frame_data); |
1339 | 1361 |
1340 factory_.SubmitCompositorFrame(root_surface_id_, std::move(root_frame), | 1362 factory_.SubmitCompositorFrame(root_surface_id_, std::move(root_frame), |
1341 SurfaceFactory::DrawCallback()); | 1363 SurfaceFactory::DrawCallback()); |
1342 } | 1364 } |
1343 | 1365 |
1344 { | 1366 { |
1345 RenderPassList root_pass_list; | 1367 RenderPassList root_pass_list; |
1346 AddPasses(&root_pass_list, | 1368 AddPasses(&root_pass_list, |
1347 gfx::Rect(SurfaceSize()), | 1369 gfx::Rect(SurfaceSize()), |
1348 root_passes, | 1370 root_passes, |
1349 arraysize(root_passes)); | 1371 arraysize(root_passes)); |
1350 | 1372 |
1351 root_pass_list[0] | 1373 root_pass_list[0] |
1352 ->shared_quad_state_list.front() | 1374 ->shared_quad_state_list.front() |
1353 ->quad_to_target_transform.Translate(0, 10); | 1375 ->quad_to_target_transform.Translate(0, 10); |
1354 root_pass_list[0]->damage_rect = gfx::Rect(1, 1, 1, 1); | 1376 root_pass_list[0]->damage_rect = gfx::Rect(1, 1, 1, 1); |
1355 | 1377 |
1356 std::unique_ptr<DelegatedFrameData> root_frame_data(new DelegatedFrameData); | 1378 std::unique_ptr<DelegatedFrameData> root_frame_data(new DelegatedFrameData); |
1357 root_pass_list.swap(root_frame_data->render_pass_list); | 1379 root_pass_list.swap(root_frame_data->render_pass_list); |
1358 | 1380 |
1359 CompositorFrame root_frame; | 1381 std::unique_ptr<CompositorFrame> root_frame(new CompositorFrame); |
1360 root_frame.delegated_frame_data = std::move(root_frame_data); | 1382 root_frame->delegated_frame_data = std::move(root_frame_data); |
1361 | 1383 |
1362 factory_.SubmitCompositorFrame(root_surface_id_, std::move(root_frame), | 1384 factory_.SubmitCompositorFrame(root_surface_id_, std::move(root_frame), |
1363 SurfaceFactory::DrawCallback()); | 1385 SurfaceFactory::DrawCallback()); |
1364 | 1386 |
1365 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id_); | 1387 std::unique_ptr<CompositorFrame> aggregated_frame = |
| 1388 aggregator_.Aggregate(root_surface_id_); |
1366 | 1389 |
1367 ASSERT_TRUE(aggregated_frame.delegated_frame_data); | 1390 ASSERT_TRUE(aggregated_frame); |
| 1391 ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
1368 | 1392 |
1369 DelegatedFrameData* frame_data = | 1393 DelegatedFrameData* frame_data = |
1370 aggregated_frame.delegated_frame_data.get(); | 1394 aggregated_frame->delegated_frame_data.get(); |
1371 | 1395 |
1372 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; | 1396 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; |
1373 | 1397 |
1374 ASSERT_EQ(2u, aggregated_pass_list.size()); | 1398 ASSERT_EQ(2u, aggregated_pass_list.size()); |
1375 | 1399 |
1376 // The root surface was enqueued without being aggregated once, so it should | 1400 // The root surface was enqueued without being aggregated once, so it should |
1377 // be treated as completely damaged. | 1401 // be treated as completely damaged. |
1378 EXPECT_TRUE(aggregated_pass_list[1]->damage_rect.Contains( | 1402 EXPECT_TRUE(aggregated_pass_list[1]->damage_rect.Contains( |
1379 gfx::Rect(SurfaceSize()))); | 1403 gfx::Rect(SurfaceSize()))); |
1380 } | 1404 } |
1381 | 1405 |
1382 // No Surface changed, so no damage should be given. | 1406 // No Surface changed, so no damage should be given. |
1383 { | 1407 { |
1384 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id_); | 1408 std::unique_ptr<CompositorFrame> aggregated_frame = |
| 1409 aggregator_.Aggregate(root_surface_id_); |
1385 | 1410 |
1386 ASSERT_TRUE(aggregated_frame.delegated_frame_data); | 1411 ASSERT_TRUE(aggregated_frame); |
| 1412 ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
1387 | 1413 |
1388 DelegatedFrameData* frame_data = | 1414 DelegatedFrameData* frame_data = |
1389 aggregated_frame.delegated_frame_data.get(); | 1415 aggregated_frame->delegated_frame_data.get(); |
1390 | 1416 |
1391 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; | 1417 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; |
1392 | 1418 |
1393 ASSERT_EQ(2u, aggregated_pass_list.size()); | 1419 ASSERT_EQ(2u, aggregated_pass_list.size()); |
1394 | 1420 |
1395 EXPECT_TRUE(aggregated_pass_list[1]->damage_rect.IsEmpty()); | 1421 EXPECT_TRUE(aggregated_pass_list[1]->damage_rect.IsEmpty()); |
1396 } | 1422 } |
1397 | 1423 |
1398 // SetFullDamageRectForSurface should cause the entire output to be | 1424 // SetFullDamageRectForSurface should cause the entire output to be |
1399 // marked as damaged. | 1425 // marked as damaged. |
1400 { | 1426 { |
1401 aggregator_.SetFullDamageForSurface(root_surface_id_); | 1427 aggregator_.SetFullDamageForSurface(root_surface_id_); |
1402 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id_); | 1428 std::unique_ptr<CompositorFrame> aggregated_frame = |
| 1429 aggregator_.Aggregate(root_surface_id_); |
1403 | 1430 |
1404 ASSERT_TRUE(aggregated_frame.delegated_frame_data); | 1431 ASSERT_TRUE(aggregated_frame); |
| 1432 ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
1405 | 1433 |
1406 DelegatedFrameData* frame_data = | 1434 DelegatedFrameData* frame_data = |
1407 aggregated_frame.delegated_frame_data.get(); | 1435 aggregated_frame->delegated_frame_data.get(); |
1408 | 1436 |
1409 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; | 1437 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; |
1410 | 1438 |
1411 ASSERT_EQ(2u, aggregated_pass_list.size()); | 1439 ASSERT_EQ(2u, aggregated_pass_list.size()); |
1412 | 1440 |
1413 EXPECT_TRUE(aggregated_pass_list[1]->damage_rect.Contains( | 1441 EXPECT_TRUE(aggregated_pass_list[1]->damage_rect.Contains( |
1414 gfx::Rect(SurfaceSize()))); | 1442 gfx::Rect(SurfaceSize()))); |
1415 } | 1443 } |
1416 | 1444 |
1417 factory_.Destroy(child_surface_id); | 1445 factory_.Destroy(child_surface_id); |
(...skipping 10 matching lines...) Expand all Loading... |
1428 | 1456 |
1429 RenderPassList root_pass_list; | 1457 RenderPassList root_pass_list; |
1430 AddPasses(&root_pass_list, gfx::Rect(SurfaceSize()), root_passes, | 1458 AddPasses(&root_pass_list, gfx::Rect(SurfaceSize()), root_passes, |
1431 arraysize(root_passes)); | 1459 arraysize(root_passes)); |
1432 | 1460 |
1433 root_pass_list[0]->damage_rect = gfx::Rect(5, 5, 100, 100); | 1461 root_pass_list[0]->damage_rect = gfx::Rect(5, 5, 100, 100); |
1434 | 1462 |
1435 std::unique_ptr<DelegatedFrameData> root_frame_data(new DelegatedFrameData); | 1463 std::unique_ptr<DelegatedFrameData> root_frame_data(new DelegatedFrameData); |
1436 root_pass_list.swap(root_frame_data->render_pass_list); | 1464 root_pass_list.swap(root_frame_data->render_pass_list); |
1437 | 1465 |
1438 CompositorFrame root_frame; | 1466 std::unique_ptr<CompositorFrame> root_frame(new CompositorFrame); |
1439 root_frame.delegated_frame_data = std::move(root_frame_data); | 1467 root_frame->delegated_frame_data = std::move(root_frame_data); |
1440 | 1468 |
1441 factory_.SubmitCompositorFrame(root_surface_id_, std::move(root_frame), | 1469 factory_.SubmitCompositorFrame(root_surface_id_, std::move(root_frame), |
1442 SurfaceFactory::DrawCallback()); | 1470 SurfaceFactory::DrawCallback()); |
1443 | 1471 |
1444 { | 1472 { |
1445 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id_); | 1473 std::unique_ptr<CompositorFrame> aggregated_frame = |
| 1474 aggregator_.Aggregate(root_surface_id_); |
1446 | 1475 |
1447 ASSERT_TRUE(aggregated_frame.delegated_frame_data); | 1476 ASSERT_TRUE(aggregated_frame); |
| 1477 ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
1448 | 1478 |
1449 DelegatedFrameData* frame_data = | 1479 DelegatedFrameData* frame_data = |
1450 aggregated_frame.delegated_frame_data.get(); | 1480 aggregated_frame->delegated_frame_data.get(); |
1451 | 1481 |
1452 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; | 1482 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; |
1453 | 1483 |
1454 ASSERT_EQ(1u, aggregated_pass_list.size()); | 1484 ASSERT_EQ(1u, aggregated_pass_list.size()); |
1455 | 1485 |
1456 // Damage rect for first aggregation should contain entire root surface. | 1486 // Damage rect for first aggregation should contain entire root surface. |
1457 EXPECT_TRUE(aggregated_pass_list[0]->damage_rect.Contains( | 1487 EXPECT_TRUE(aggregated_pass_list[0]->damage_rect.Contains( |
1458 gfx::Rect(SurfaceSize()))); | 1488 gfx::Rect(SurfaceSize()))); |
1459 } | 1489 } |
1460 | 1490 |
1461 SurfaceId second_root_surface_id = allocator_.GenerateId(); | 1491 SurfaceId second_root_surface_id = allocator_.GenerateId(); |
1462 { | 1492 { |
1463 test::Quad root_render_pass_quads[] = {test::Quad::SolidColorQuad(1)}; | 1493 test::Quad root_render_pass_quads[] = {test::Quad::SolidColorQuad(1)}; |
1464 | 1494 |
1465 test::Pass root_passes[] = {test::Pass(root_render_pass_quads, | 1495 test::Pass root_passes[] = {test::Pass(root_render_pass_quads, |
1466 arraysize(root_render_pass_quads), | 1496 arraysize(root_render_pass_quads), |
1467 RenderPassId(2, 1))}; | 1497 RenderPassId(2, 1))}; |
1468 | 1498 |
1469 RenderPassList root_pass_list; | 1499 RenderPassList root_pass_list; |
1470 AddPasses(&root_pass_list, gfx::Rect(SurfaceSize()), root_passes, | 1500 AddPasses(&root_pass_list, gfx::Rect(SurfaceSize()), root_passes, |
1471 arraysize(root_passes)); | 1501 arraysize(root_passes)); |
1472 | 1502 |
1473 root_pass_list[0]->damage_rect = gfx::Rect(1, 2, 3, 4); | 1503 root_pass_list[0]->damage_rect = gfx::Rect(1, 2, 3, 4); |
1474 | 1504 |
1475 std::unique_ptr<DelegatedFrameData> root_frame_data(new DelegatedFrameData); | 1505 std::unique_ptr<DelegatedFrameData> root_frame_data(new DelegatedFrameData); |
1476 root_pass_list.swap(root_frame_data->render_pass_list); | 1506 root_pass_list.swap(root_frame_data->render_pass_list); |
1477 | 1507 |
1478 CompositorFrame root_frame; | 1508 std::unique_ptr<CompositorFrame> root_frame(new CompositorFrame); |
1479 root_frame.delegated_frame_data = std::move(root_frame_data); | 1509 root_frame->delegated_frame_data = std::move(root_frame_data); |
1480 | 1510 |
1481 factory_.Create(second_root_surface_id); | 1511 factory_.Create(second_root_surface_id); |
1482 factory_.SubmitCompositorFrame(second_root_surface_id, | 1512 factory_.SubmitCompositorFrame(second_root_surface_id, |
1483 std::move(root_frame), | 1513 std::move(root_frame), |
1484 SurfaceFactory::DrawCallback()); | 1514 SurfaceFactory::DrawCallback()); |
1485 factory_.SetPreviousFrameSurface(second_root_surface_id, root_surface_id_); | 1515 factory_.SetPreviousFrameSurface(second_root_surface_id, root_surface_id_); |
1486 } | 1516 } |
1487 { | 1517 { |
1488 CompositorFrame aggregated_frame = | 1518 std::unique_ptr<CompositorFrame> aggregated_frame = |
1489 aggregator_.Aggregate(second_root_surface_id); | 1519 aggregator_.Aggregate(second_root_surface_id); |
1490 | 1520 |
1491 ASSERT_TRUE(aggregated_frame.delegated_frame_data); | 1521 ASSERT_TRUE(aggregated_frame); |
| 1522 ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
1492 | 1523 |
1493 DelegatedFrameData* frame_data = | 1524 DelegatedFrameData* frame_data = |
1494 aggregated_frame.delegated_frame_data.get(); | 1525 aggregated_frame->delegated_frame_data.get(); |
1495 | 1526 |
1496 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; | 1527 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; |
1497 | 1528 |
1498 ASSERT_EQ(1u, aggregated_pass_list.size()); | 1529 ASSERT_EQ(1u, aggregated_pass_list.size()); |
1499 | 1530 |
1500 // Frame from SetPreviousFrameSurface was aggregated last, so damage rect | 1531 // Frame from SetPreviousFrameSurface was aggregated last, so damage rect |
1501 // from new surface should be used. | 1532 // from new surface should be used. |
1502 EXPECT_EQ(gfx::Rect(1, 2, 3, 4), aggregated_pass_list[0]->damage_rect); | 1533 EXPECT_EQ(gfx::Rect(1, 2, 3, 4), aggregated_pass_list[0]->damage_rect); |
1503 } | 1534 } |
1504 { | 1535 { |
1505 CompositorFrame aggregated_frame = | 1536 std::unique_ptr<CompositorFrame> aggregated_frame = |
1506 aggregator_.Aggregate(second_root_surface_id); | 1537 aggregator_.Aggregate(second_root_surface_id); |
1507 | 1538 |
1508 ASSERT_TRUE(aggregated_frame.delegated_frame_data); | 1539 ASSERT_TRUE(aggregated_frame); |
| 1540 ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
1509 | 1541 |
1510 DelegatedFrameData* frame_data = | 1542 DelegatedFrameData* frame_data = |
1511 aggregated_frame.delegated_frame_data.get(); | 1543 aggregated_frame->delegated_frame_data.get(); |
1512 | 1544 |
1513 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; | 1545 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; |
1514 | 1546 |
1515 ASSERT_EQ(1u, aggregated_pass_list.size()); | 1547 ASSERT_EQ(1u, aggregated_pass_list.size()); |
1516 | 1548 |
1517 // No new frame, so no new damage. | 1549 // No new frame, so no new damage. |
1518 EXPECT_TRUE(aggregated_pass_list[0]->damage_rect.IsEmpty()); | 1550 EXPECT_TRUE(aggregated_pass_list[0]->damage_rect.IsEmpty()); |
1519 } | 1551 } |
1520 factory_.Destroy(second_root_surface_id); | 1552 factory_.Destroy(second_root_surface_id); |
1521 } | 1553 } |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1580 arraysize(root_passes)); | 1612 arraysize(root_passes)); |
1581 | 1613 |
1582 RenderPass* root_pass = root_pass_list[0].get(); | 1614 RenderPass* root_pass = root_pass_list[0].get(); |
1583 root_pass->shared_quad_state_list.front() | 1615 root_pass->shared_quad_state_list.front() |
1584 ->quad_to_target_transform.Translate(10, 10); | 1616 ->quad_to_target_transform.Translate(10, 10); |
1585 root_pass->damage_rect = gfx::Rect(0, 0, 1, 1); | 1617 root_pass->damage_rect = gfx::Rect(0, 0, 1, 1); |
1586 | 1618 |
1587 SubmitPassListAsFrame(root_surface_id_, &root_pass_list); | 1619 SubmitPassListAsFrame(root_surface_id_, &root_pass_list); |
1588 } | 1620 } |
1589 | 1621 |
1590 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id_); | 1622 std::unique_ptr<CompositorFrame> aggregated_frame = |
| 1623 aggregator_.Aggregate(root_surface_id_); |
1591 | 1624 |
1592 ASSERT_TRUE(aggregated_frame.delegated_frame_data); | 1625 ASSERT_TRUE(aggregated_frame); |
| 1626 ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
1593 | 1627 |
1594 DelegatedFrameData* frame_data = aggregated_frame.delegated_frame_data.get(); | 1628 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get(); |
1595 | 1629 |
1596 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; | 1630 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; |
1597 | 1631 |
1598 ASSERT_EQ(3u, aggregated_pass_list.size()); | 1632 ASSERT_EQ(3u, aggregated_pass_list.size()); |
1599 | 1633 |
1600 // Damage rect for first aggregation should contain entire root surface. | 1634 // Damage rect for first aggregation should contain entire root surface. |
1601 EXPECT_EQ(gfx::Rect(SurfaceSize()), aggregated_pass_list[2]->damage_rect); | 1635 EXPECT_EQ(gfx::Rect(SurfaceSize()), aggregated_pass_list[2]->damage_rect); |
1602 EXPECT_EQ(1u, aggregated_pass_list[0]->quad_list.size()); | 1636 EXPECT_EQ(1u, aggregated_pass_list[0]->quad_list.size()); |
1603 EXPECT_EQ(1u, aggregated_pass_list[1]->quad_list.size()); | 1637 EXPECT_EQ(1u, aggregated_pass_list[1]->quad_list.size()); |
1604 EXPECT_EQ(1u, aggregated_pass_list[2]->quad_list.size()); | 1638 EXPECT_EQ(1u, aggregated_pass_list[2]->quad_list.size()); |
1605 | 1639 |
1606 // Create a root surface with a smaller damage rect. | 1640 // Create a root surface with a smaller damage rect. |
1607 { | 1641 { |
1608 test::Quad root_quads[] = {test::Quad::SurfaceQuad(child_surface_id, 1.f)}; | 1642 test::Quad root_quads[] = {test::Quad::SurfaceQuad(child_surface_id, 1.f)}; |
1609 | 1643 |
1610 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))}; | 1644 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))}; |
1611 | 1645 |
1612 RenderPassList root_pass_list; | 1646 RenderPassList root_pass_list; |
1613 AddPasses(&root_pass_list, gfx::Rect(SurfaceSize()), root_passes, | 1647 AddPasses(&root_pass_list, gfx::Rect(SurfaceSize()), root_passes, |
1614 arraysize(root_passes)); | 1648 arraysize(root_passes)); |
1615 | 1649 |
1616 RenderPass* root_pass = root_pass_list[0].get(); | 1650 RenderPass* root_pass = root_pass_list[0].get(); |
1617 root_pass->shared_quad_state_list.front() | 1651 root_pass->shared_quad_state_list.front() |
1618 ->quad_to_target_transform.Translate(10, 10); | 1652 ->quad_to_target_transform.Translate(10, 10); |
1619 root_pass->damage_rect = gfx::Rect(10, 10, 2, 2); | 1653 root_pass->damage_rect = gfx::Rect(10, 10, 2, 2); |
1620 SubmitPassListAsFrame(root_surface_id_, &root_pass_list); | 1654 SubmitPassListAsFrame(root_surface_id_, &root_pass_list); |
1621 } | 1655 } |
1622 | 1656 |
1623 { | 1657 { |
1624 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id_); | 1658 std::unique_ptr<CompositorFrame> aggregated_frame = |
| 1659 aggregator_.Aggregate(root_surface_id_); |
1625 | 1660 |
1626 ASSERT_TRUE(aggregated_frame.delegated_frame_data); | 1661 ASSERT_TRUE(aggregated_frame); |
| 1662 ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
1627 | 1663 |
1628 DelegatedFrameData* frame_data = | 1664 DelegatedFrameData* frame_data = |
1629 aggregated_frame.delegated_frame_data.get(); | 1665 aggregated_frame->delegated_frame_data.get(); |
1630 | 1666 |
1631 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; | 1667 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; |
1632 | 1668 |
1633 ASSERT_EQ(3u, aggregated_pass_list.size()); | 1669 ASSERT_EQ(3u, aggregated_pass_list.size()); |
1634 | 1670 |
1635 // Only first quad from surface is inside damage rect and should be | 1671 // Only first quad from surface is inside damage rect and should be |
1636 // included. | 1672 // included. |
1637 EXPECT_EQ(gfx::Rect(10, 10, 2, 2), aggregated_pass_list[2]->damage_rect); | 1673 EXPECT_EQ(gfx::Rect(10, 10, 2, 2), aggregated_pass_list[2]->damage_rect); |
1638 EXPECT_EQ(0u, aggregated_pass_list[0]->quad_list.size()); | 1674 EXPECT_EQ(0u, aggregated_pass_list[0]->quad_list.size()); |
1639 EXPECT_EQ(1u, aggregated_pass_list[1]->quad_list.size()); | 1675 EXPECT_EQ(1u, aggregated_pass_list[1]->quad_list.size()); |
(...skipping 28 matching lines...) Expand all Loading... |
1668 | 1704 |
1669 RenderPass* child_root_pass = child_pass_list[1].get(); | 1705 RenderPass* child_root_pass = child_pass_list[1].get(); |
1670 | 1706 |
1671 child_root_pass->copy_requests.push_back( | 1707 child_root_pass->copy_requests.push_back( |
1672 CopyOutputRequest::CreateEmptyRequest()); | 1708 CopyOutputRequest::CreateEmptyRequest()); |
1673 child_root_pass->damage_rect = gfx::Rect(); | 1709 child_root_pass->damage_rect = gfx::Rect(); |
1674 SubmitPassListAsFrame(child_surface_id, &child_pass_list); | 1710 SubmitPassListAsFrame(child_surface_id, &child_pass_list); |
1675 } | 1711 } |
1676 | 1712 |
1677 { | 1713 { |
1678 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id_); | 1714 std::unique_ptr<CompositorFrame> aggregated_frame = |
| 1715 aggregator_.Aggregate(root_surface_id_); |
1679 | 1716 |
1680 ASSERT_TRUE(aggregated_frame.delegated_frame_data); | 1717 ASSERT_TRUE(aggregated_frame); |
| 1718 ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
1681 | 1719 |
1682 DelegatedFrameData* frame_data = | 1720 DelegatedFrameData* frame_data = |
1683 aggregated_frame.delegated_frame_data.get(); | 1721 aggregated_frame->delegated_frame_data.get(); |
1684 | 1722 |
1685 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; | 1723 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; |
1686 | 1724 |
1687 // Output frame should have no damage, but all quads included. | 1725 // Output frame should have no damage, but all quads included. |
1688 ASSERT_EQ(3u, aggregated_pass_list.size()); | 1726 ASSERT_EQ(3u, aggregated_pass_list.size()); |
1689 | 1727 |
1690 EXPECT_EQ(gfx::Rect(SurfaceSize()), aggregated_pass_list[0]->damage_rect); | 1728 EXPECT_EQ(gfx::Rect(SurfaceSize()), aggregated_pass_list[0]->damage_rect); |
1691 EXPECT_EQ(gfx::Rect(SurfaceSize()), aggregated_pass_list[1]->damage_rect); | 1729 EXPECT_EQ(gfx::Rect(SurfaceSize()), aggregated_pass_list[1]->damage_rect); |
1692 EXPECT_TRUE(aggregated_pass_list[2]->damage_rect.IsEmpty()); | 1730 EXPECT_TRUE(aggregated_pass_list[2]->damage_rect.IsEmpty()); |
1693 ASSERT_EQ(1u, aggregated_pass_list[0]->quad_list.size()); | 1731 ASSERT_EQ(1u, aggregated_pass_list[0]->quad_list.size()); |
1694 ASSERT_EQ(1u, aggregated_pass_list[1]->quad_list.size()); | 1732 ASSERT_EQ(1u, aggregated_pass_list[1]->quad_list.size()); |
1695 EXPECT_EQ(gfx::Rect(1, 1, 2, 2), | 1733 EXPECT_EQ(gfx::Rect(1, 1, 2, 2), |
1696 aggregated_pass_list[0]->quad_list.ElementAt(0)->visible_rect); | 1734 aggregated_pass_list[0]->quad_list.ElementAt(0)->visible_rect); |
1697 EXPECT_EQ(gfx::Rect(0, 0, 2, 2), | 1735 EXPECT_EQ(gfx::Rect(0, 0, 2, 2), |
1698 aggregated_pass_list[1]->quad_list.ElementAt(0)->visible_rect); | 1736 aggregated_pass_list[1]->quad_list.ElementAt(0)->visible_rect); |
1699 ASSERT_EQ(1u, aggregated_pass_list[2]->quad_list.size()); | 1737 ASSERT_EQ(1u, aggregated_pass_list[2]->quad_list.size()); |
1700 } | 1738 } |
1701 | 1739 |
1702 { | 1740 { |
1703 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id_); | 1741 std::unique_ptr<CompositorFrame> aggregated_frame = |
| 1742 aggregator_.Aggregate(root_surface_id_); |
1704 | 1743 |
1705 ASSERT_TRUE(aggregated_frame.delegated_frame_data); | 1744 ASSERT_TRUE(aggregated_frame); |
| 1745 ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
1706 | 1746 |
1707 DelegatedFrameData* frame_data = | 1747 DelegatedFrameData* frame_data = |
1708 aggregated_frame.delegated_frame_data.get(); | 1748 aggregated_frame->delegated_frame_data.get(); |
1709 | 1749 |
1710 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; | 1750 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; |
1711 // There were no changes since last aggregation, so output should be empty | 1751 // There were no changes since last aggregation, so output should be empty |
1712 // and have no damage. | 1752 // and have no damage. |
1713 ASSERT_EQ(1u, aggregated_pass_list.size()); | 1753 ASSERT_EQ(1u, aggregated_pass_list.size()); |
1714 EXPECT_TRUE(aggregated_pass_list[0]->damage_rect.IsEmpty()); | 1754 EXPECT_TRUE(aggregated_pass_list[0]->damage_rect.IsEmpty()); |
1715 ASSERT_EQ(0u, aggregated_pass_list[0]->quad_list.size()); | 1755 ASSERT_EQ(0u, aggregated_pass_list[0]->quad_list.size()); |
1716 } | 1756 } |
1717 | 1757 |
1718 // Root surface has smaller damage rect, but filter on render pass means all | 1758 // Root surface has smaller damage rect, but filter on render pass means all |
(...skipping 15 matching lines...) Expand all Loading... |
1734 10, 10); | 1774 10, 10); |
1735 RenderPass* root_pass = root_pass_list[1].get(); | 1775 RenderPass* root_pass = root_pass_list[1].get(); |
1736 RenderPassDrawQuad* quad = | 1776 RenderPassDrawQuad* quad = |
1737 static_cast<RenderPassDrawQuad*>(root_pass->quad_list.front()); | 1777 static_cast<RenderPassDrawQuad*>(root_pass->quad_list.front()); |
1738 quad->filters.Append(FilterOperation::CreateBlurFilter(2)); | 1778 quad->filters.Append(FilterOperation::CreateBlurFilter(2)); |
1739 root_pass->damage_rect = gfx::Rect(10, 10, 2, 2); | 1779 root_pass->damage_rect = gfx::Rect(10, 10, 2, 2); |
1740 SubmitPassListAsFrame(root_surface_id_, &root_pass_list); | 1780 SubmitPassListAsFrame(root_surface_id_, &root_pass_list); |
1741 } | 1781 } |
1742 | 1782 |
1743 { | 1783 { |
1744 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id_); | 1784 std::unique_ptr<CompositorFrame> aggregated_frame = |
| 1785 aggregator_.Aggregate(root_surface_id_); |
1745 | 1786 |
1746 ASSERT_TRUE(aggregated_frame.delegated_frame_data); | 1787 ASSERT_TRUE(aggregated_frame); |
| 1788 ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
1747 | 1789 |
1748 DelegatedFrameData* frame_data = | 1790 DelegatedFrameData* frame_data = |
1749 aggregated_frame.delegated_frame_data.get(); | 1791 aggregated_frame->delegated_frame_data.get(); |
1750 | 1792 |
1751 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; | 1793 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; |
1752 | 1794 |
1753 ASSERT_EQ(3u, aggregated_pass_list.size()); | 1795 ASSERT_EQ(3u, aggregated_pass_list.size()); |
1754 | 1796 |
1755 EXPECT_EQ(gfx::Rect(SurfaceSize()), aggregated_pass_list[0]->damage_rect); | 1797 EXPECT_EQ(gfx::Rect(SurfaceSize()), aggregated_pass_list[0]->damage_rect); |
1756 EXPECT_EQ(gfx::Rect(SurfaceSize()), aggregated_pass_list[1]->damage_rect); | 1798 EXPECT_EQ(gfx::Rect(SurfaceSize()), aggregated_pass_list[1]->damage_rect); |
1757 EXPECT_EQ(gfx::Rect(10, 10, 2, 2), aggregated_pass_list[2]->damage_rect); | 1799 EXPECT_EQ(gfx::Rect(10, 10, 2, 2), aggregated_pass_list[2]->damage_rect); |
1758 EXPECT_EQ(1u, aggregated_pass_list[0]->quad_list.size()); | 1800 EXPECT_EQ(1u, aggregated_pass_list[0]->quad_list.size()); |
1759 EXPECT_EQ(1u, aggregated_pass_list[1]->quad_list.size()); | 1801 EXPECT_EQ(1u, aggregated_pass_list[1]->quad_list.size()); |
(...skipping 24 matching lines...) Expand all Loading... |
1784 root_pass->shared_quad_state_list.ElementAt(1) | 1826 root_pass->shared_quad_state_list.ElementAt(1) |
1785 ->quad_to_target_transform.Translate(10, 10); | 1827 ->quad_to_target_transform.Translate(10, 10); |
1786 RenderPassDrawQuad* quad = | 1828 RenderPassDrawQuad* quad = |
1787 static_cast<RenderPassDrawQuad*>(root_pass->quad_list.front()); | 1829 static_cast<RenderPassDrawQuad*>(root_pass->quad_list.front()); |
1788 quad->background_filters.Append(FilterOperation::CreateBlurFilter(2)); | 1830 quad->background_filters.Append(FilterOperation::CreateBlurFilter(2)); |
1789 root_pass->damage_rect = gfx::Rect(10, 10, 2, 2); | 1831 root_pass->damage_rect = gfx::Rect(10, 10, 2, 2); |
1790 SubmitPassListAsFrame(root_surface_id_, &root_pass_list); | 1832 SubmitPassListAsFrame(root_surface_id_, &root_pass_list); |
1791 } | 1833 } |
1792 | 1834 |
1793 { | 1835 { |
1794 CompositorFrame aggregated_frame = aggregator_.Aggregate(root_surface_id_); | 1836 std::unique_ptr<CompositorFrame> aggregated_frame = |
| 1837 aggregator_.Aggregate(root_surface_id_); |
1795 | 1838 |
1796 ASSERT_TRUE(aggregated_frame.delegated_frame_data); | 1839 ASSERT_TRUE(aggregated_frame); |
| 1840 ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
1797 | 1841 |
1798 DelegatedFrameData* frame_data = | 1842 DelegatedFrameData* frame_data = |
1799 aggregated_frame.delegated_frame_data.get(); | 1843 aggregated_frame->delegated_frame_data.get(); |
1800 | 1844 |
1801 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; | 1845 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; |
1802 | 1846 |
1803 ASSERT_EQ(3u, aggregated_pass_list.size()); | 1847 ASSERT_EQ(3u, aggregated_pass_list.size()); |
1804 | 1848 |
1805 // Pass 0 is solid color quad from root, but outside damage rect. | 1849 // Pass 0 is solid color quad from root, but outside damage rect. |
1806 EXPECT_EQ(gfx::Rect(10, 10, 2, 2), aggregated_pass_list[0]->damage_rect); | 1850 EXPECT_EQ(gfx::Rect(10, 10, 2, 2), aggregated_pass_list[0]->damage_rect); |
1807 EXPECT_EQ(0u, aggregated_pass_list[0]->quad_list.size()); | 1851 EXPECT_EQ(0u, aggregated_pass_list[0]->quad_list.size()); |
1808 EXPECT_EQ(gfx::Rect(SurfaceSize()), aggregated_pass_list[1]->damage_rect); | 1852 EXPECT_EQ(gfx::Rect(SurfaceSize()), aggregated_pass_list[1]->damage_rect); |
1809 EXPECT_EQ(1u, aggregated_pass_list[1]->quad_list.size()); | 1853 EXPECT_EQ(1u, aggregated_pass_list[1]->quad_list.size()); |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1900 const float vertex_opacity[4] = {0.f, 0.f, 1.f, 1.f}; | 1944 const float vertex_opacity[4] = {0.f, 0.f, 1.f, 1.f}; |
1901 bool flipped = false; | 1945 bool flipped = false; |
1902 bool nearest_neighbor = false; | 1946 bool nearest_neighbor = false; |
1903 bool secure_output_only = true; | 1947 bool secure_output_only = true; |
1904 quad->SetAll(sqs, rect, opaque_rect, visible_rect, needs_blending, | 1948 quad->SetAll(sqs, rect, opaque_rect, visible_rect, needs_blending, |
1905 resource_ids[i], gfx::Size(), premultiplied_alpha, uv_top_left, | 1949 resource_ids[i], gfx::Size(), premultiplied_alpha, uv_top_left, |
1906 uv_bottom_right, background_color, vertex_opacity, flipped, | 1950 uv_bottom_right, background_color, vertex_opacity, flipped, |
1907 nearest_neighbor, secure_output_only); | 1951 nearest_neighbor, secure_output_only); |
1908 } | 1952 } |
1909 frame_data->render_pass_list.push_back(std::move(pass)); | 1953 frame_data->render_pass_list.push_back(std::move(pass)); |
1910 CompositorFrame frame; | 1954 std::unique_ptr<CompositorFrame> frame(new CompositorFrame); |
1911 frame.delegated_frame_data = std::move(frame_data); | 1955 frame->delegated_frame_data = std::move(frame_data); |
1912 factory->SubmitCompositorFrame(surface_id, std::move(frame), | 1956 factory->SubmitCompositorFrame(surface_id, std::move(frame), |
1913 SurfaceFactory::DrawCallback()); | 1957 SurfaceFactory::DrawCallback()); |
1914 } | 1958 } |
1915 | 1959 |
1916 TEST_F(SurfaceAggregatorWithResourcesTest, TakeResourcesOneSurface) { | 1960 TEST_F(SurfaceAggregatorWithResourcesTest, TakeResourcesOneSurface) { |
1917 ResourceTrackingSurfaceFactoryClient client; | 1961 ResourceTrackingSurfaceFactoryClient client; |
1918 SurfaceFactory factory(&manager_, &client); | 1962 SurfaceFactory factory(&manager_, &client); |
1919 SurfaceId surface_id(0, 7u, 0); | 1963 SurfaceId surface_id(0, 7u, 0); |
1920 factory.Create(surface_id); | 1964 factory.Create(surface_id); |
1921 | 1965 |
1922 ResourceId ids[] = {11, 12, 13}; | 1966 ResourceId ids[] = {11, 12, 13}; |
1923 SubmitCompositorFrameWithResources(ids, arraysize(ids), true, SurfaceId(), | 1967 SubmitCompositorFrameWithResources(ids, arraysize(ids), true, SurfaceId(), |
1924 &factory, surface_id); | 1968 &factory, surface_id); |
1925 | 1969 |
1926 CompositorFrame frame = aggregator_->Aggregate(surface_id); | 1970 std::unique_ptr<CompositorFrame> frame = aggregator_->Aggregate(surface_id); |
1927 | 1971 |
1928 // Nothing should be available to be returned yet. | 1972 // Nothing should be available to be returned yet. |
1929 EXPECT_TRUE(client.returned_resources().empty()); | 1973 EXPECT_TRUE(client.returned_resources().empty()); |
1930 | 1974 |
1931 SubmitCompositorFrameWithResources(NULL, 0u, true, SurfaceId(), &factory, | 1975 SubmitCompositorFrameWithResources(NULL, 0u, true, SurfaceId(), &factory, |
1932 surface_id); | 1976 surface_id); |
1933 | 1977 |
1934 frame = aggregator_->Aggregate(surface_id); | 1978 frame = aggregator_->Aggregate(surface_id); |
1935 | 1979 |
1936 ASSERT_EQ(3u, client.returned_resources().size()); | 1980 ASSERT_EQ(3u, client.returned_resources().size()); |
(...skipping 15 matching lines...) Expand all Loading... |
1952 std::unique_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); | 1996 std::unique_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); |
1953 std::unique_ptr<RenderPass> pass = RenderPass::Create(); | 1997 std::unique_ptr<RenderPass> pass = RenderPass::Create(); |
1954 pass->id = RenderPassId(1, 1); | 1998 pass->id = RenderPassId(1, 1); |
1955 TransferableResource resource; | 1999 TransferableResource resource; |
1956 resource.id = 11; | 2000 resource.id = 11; |
1957 // ResourceProvider is software but resource is not, so it should be | 2001 // ResourceProvider is software but resource is not, so it should be |
1958 // ignored. | 2002 // ignored. |
1959 resource.is_software = false; | 2003 resource.is_software = false; |
1960 frame_data->resource_list.push_back(resource); | 2004 frame_data->resource_list.push_back(resource); |
1961 frame_data->render_pass_list.push_back(std::move(pass)); | 2005 frame_data->render_pass_list.push_back(std::move(pass)); |
1962 CompositorFrame frame; | 2006 std::unique_ptr<CompositorFrame> frame(new CompositorFrame); |
1963 frame.delegated_frame_data = std::move(frame_data); | 2007 frame->delegated_frame_data = std::move(frame_data); |
1964 factory.SubmitCompositorFrame(surface_id, std::move(frame), | 2008 factory.SubmitCompositorFrame(surface_id, std::move(frame), |
1965 SurfaceFactory::DrawCallback()); | 2009 SurfaceFactory::DrawCallback()); |
1966 | 2010 |
1967 CompositorFrame returned_frame = aggregator_->Aggregate(surface_id); | 2011 std::unique_ptr<CompositorFrame> returned_frame = |
| 2012 aggregator_->Aggregate(surface_id); |
1968 | 2013 |
1969 // Nothing should be available to be returned yet. | 2014 // Nothing should be available to be returned yet. |
1970 EXPECT_TRUE(client.returned_resources().empty()); | 2015 EXPECT_TRUE(client.returned_resources().empty()); |
1971 | 2016 |
1972 SubmitCompositorFrameWithResources(NULL, 0, true, SurfaceId(), &factory, | 2017 SubmitCompositorFrameWithResources(NULL, 0, true, SurfaceId(), &factory, |
1973 surface_id); | 2018 surface_id); |
1974 ASSERT_EQ(1u, client.returned_resources().size()); | 2019 ASSERT_EQ(1u, client.returned_resources().size()); |
1975 EXPECT_EQ(11u, client.returned_resources()[0].id); | 2020 EXPECT_EQ(11u, client.returned_resources()[0].id); |
1976 | 2021 |
1977 factory.Destroy(surface_id); | 2022 factory.Destroy(surface_id); |
1978 } | 2023 } |
1979 | 2024 |
1980 TEST_F(SurfaceAggregatorWithResourcesTest, TwoSurfaces) { | 2025 TEST_F(SurfaceAggregatorWithResourcesTest, TwoSurfaces) { |
1981 ResourceTrackingSurfaceFactoryClient client; | 2026 ResourceTrackingSurfaceFactoryClient client; |
1982 SurfaceFactory factory(&manager_, &client); | 2027 SurfaceFactory factory(&manager_, &client); |
1983 SurfaceId surface1_id(0, 7u, 0); | 2028 SurfaceId surface1_id(0, 7u, 0); |
1984 factory.Create(surface1_id); | 2029 factory.Create(surface1_id); |
1985 | 2030 |
1986 SurfaceId surface2_id(0, 8u, 0); | 2031 SurfaceId surface2_id(0, 8u, 0); |
1987 factory.Create(surface2_id); | 2032 factory.Create(surface2_id); |
1988 | 2033 |
1989 ResourceId ids[] = {11, 12, 13}; | 2034 ResourceId ids[] = {11, 12, 13}; |
1990 SubmitCompositorFrameWithResources(ids, arraysize(ids), true, SurfaceId(), | 2035 SubmitCompositorFrameWithResources(ids, arraysize(ids), true, SurfaceId(), |
1991 &factory, surface1_id); | 2036 &factory, surface1_id); |
1992 ResourceId ids2[] = {14, 15, 16}; | 2037 ResourceId ids2[] = {14, 15, 16}; |
1993 SubmitCompositorFrameWithResources(ids2, arraysize(ids2), true, SurfaceId(), | 2038 SubmitCompositorFrameWithResources(ids2, arraysize(ids2), true, SurfaceId(), |
1994 &factory, surface2_id); | 2039 &factory, surface2_id); |
1995 | 2040 |
1996 CompositorFrame frame = aggregator_->Aggregate(surface1_id); | 2041 std::unique_ptr<CompositorFrame> frame = aggregator_->Aggregate(surface1_id); |
1997 | 2042 |
1998 SubmitCompositorFrameWithResources(NULL, 0, true, SurfaceId(), &factory, | 2043 SubmitCompositorFrameWithResources(NULL, 0, true, SurfaceId(), &factory, |
1999 surface1_id); | 2044 surface1_id); |
2000 | 2045 |
2001 // Nothing should be available to be returned yet. | 2046 // Nothing should be available to be returned yet. |
2002 EXPECT_TRUE(client.returned_resources().empty()); | 2047 EXPECT_TRUE(client.returned_resources().empty()); |
2003 | 2048 |
2004 frame = aggregator_->Aggregate(surface2_id); | 2049 frame = aggregator_->Aggregate(surface2_id); |
2005 | 2050 |
2006 // surface1_id wasn't referenced, so its resources should be returned. | 2051 // surface1_id wasn't referenced, so its resources should be returned. |
(...skipping 28 matching lines...) Expand all Loading... |
2035 ResourceId ids2[] = {17, 18, 19}; | 2080 ResourceId ids2[] = {17, 18, 19}; |
2036 SubmitCompositorFrameWithResources(ids2, arraysize(ids2), false, | 2081 SubmitCompositorFrameWithResources(ids2, arraysize(ids2), false, |
2037 child_surface_id, &factory, | 2082 child_surface_id, &factory, |
2038 middle_surface_id); | 2083 middle_surface_id); |
2039 | 2084 |
2040 ResourceId ids3[] = {20, 21, 22}; | 2085 ResourceId ids3[] = {20, 21, 22}; |
2041 SubmitCompositorFrameWithResources(ids3, arraysize(ids3), true, | 2086 SubmitCompositorFrameWithResources(ids3, arraysize(ids3), true, |
2042 middle_surface_id, &factory, | 2087 middle_surface_id, &factory, |
2043 root_surface_id); | 2088 root_surface_id); |
2044 | 2089 |
2045 CompositorFrame frame; | 2090 std::unique_ptr<CompositorFrame> frame; |
2046 frame = aggregator_->Aggregate(root_surface_id); | 2091 frame = aggregator_->Aggregate(root_surface_id); |
2047 | 2092 |
2048 RenderPassList* pass_list = &frame.delegated_frame_data->render_pass_list; | 2093 RenderPassList* pass_list = &frame->delegated_frame_data->render_pass_list; |
2049 ASSERT_EQ(1u, pass_list->size()); | 2094 ASSERT_EQ(1u, pass_list->size()); |
2050 EXPECT_EQ(1u, pass_list->back()->shared_quad_state_list.size()); | 2095 EXPECT_EQ(1u, pass_list->back()->shared_quad_state_list.size()); |
2051 EXPECT_EQ(3u, pass_list->back()->quad_list.size()); | 2096 EXPECT_EQ(3u, pass_list->back()->quad_list.size()); |
2052 | 2097 |
2053 SubmitCompositorFrameWithResources(ids2, arraysize(ids), true, | 2098 SubmitCompositorFrameWithResources(ids2, arraysize(ids), true, |
2054 child_surface_id, &factory, | 2099 child_surface_id, &factory, |
2055 middle_surface_id); | 2100 middle_surface_id); |
2056 | 2101 |
2057 frame = aggregator_->Aggregate(root_surface_id); | 2102 frame = aggregator_->Aggregate(root_surface_id); |
2058 | 2103 |
2059 pass_list = &frame.delegated_frame_data->render_pass_list; | 2104 pass_list = &frame->delegated_frame_data->render_pass_list; |
2060 ASSERT_EQ(1u, pass_list->size()); | 2105 ASSERT_EQ(1u, pass_list->size()); |
2061 EXPECT_EQ(3u, pass_list->back()->shared_quad_state_list.size()); | 2106 EXPECT_EQ(3u, pass_list->back()->shared_quad_state_list.size()); |
2062 EXPECT_EQ(9u, pass_list->back()->quad_list.size()); | 2107 EXPECT_EQ(9u, pass_list->back()->quad_list.size()); |
2063 | 2108 |
2064 factory.Destroy(root_surface_id); | 2109 factory.Destroy(root_surface_id); |
2065 factory.Destroy(child_surface_id); | 2110 factory.Destroy(child_surface_id); |
2066 factory.Destroy(middle_surface_id); | 2111 factory.Destroy(middle_surface_id); |
2067 } | 2112 } |
2068 | 2113 |
2069 TEST_F(SurfaceAggregatorWithResourcesTest, SecureOutputTexture) { | 2114 TEST_F(SurfaceAggregatorWithResourcesTest, SecureOutputTexture) { |
2070 ResourceTrackingSurfaceFactoryClient client; | 2115 ResourceTrackingSurfaceFactoryClient client; |
2071 SurfaceFactory factory(&manager_, &client); | 2116 SurfaceFactory factory(&manager_, &client); |
2072 SurfaceId surface1_id(0, 7u, 0); | 2117 SurfaceId surface1_id(0, 7u, 0); |
2073 factory.Create(surface1_id); | 2118 factory.Create(surface1_id); |
2074 | 2119 |
2075 SurfaceId surface2_id(0, 8u, 0); | 2120 SurfaceId surface2_id(0, 8u, 0); |
2076 factory.Create(surface2_id); | 2121 factory.Create(surface2_id); |
2077 | 2122 |
2078 ResourceId ids[] = {11, 12, 13}; | 2123 ResourceId ids[] = {11, 12, 13}; |
2079 SubmitCompositorFrameWithResources(ids, arraysize(ids), true, SurfaceId(), | 2124 SubmitCompositorFrameWithResources(ids, arraysize(ids), true, SurfaceId(), |
2080 &factory, surface1_id); | 2125 &factory, surface1_id); |
2081 | 2126 |
2082 CompositorFrame frame = aggregator_->Aggregate(surface1_id); | 2127 std::unique_ptr<CompositorFrame> frame = aggregator_->Aggregate(surface1_id); |
2083 | 2128 |
2084 RenderPass* render_pass = | 2129 RenderPass* render_pass = |
2085 frame.delegated_frame_data->render_pass_list.back().get(); | 2130 frame->delegated_frame_data->render_pass_list.back().get(); |
2086 | 2131 |
2087 EXPECT_EQ(DrawQuad::TEXTURE_CONTENT, render_pass->quad_list.back()->material); | 2132 EXPECT_EQ(DrawQuad::TEXTURE_CONTENT, render_pass->quad_list.back()->material); |
2088 | 2133 |
2089 { | 2134 { |
2090 std::unique_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); | 2135 std::unique_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); |
2091 std::unique_ptr<RenderPass> pass = RenderPass::Create(); | 2136 std::unique_ptr<RenderPass> pass = RenderPass::Create(); |
2092 pass->id = RenderPassId(1, 1); | 2137 pass->id = RenderPassId(1, 1); |
2093 SharedQuadState* sqs = pass->CreateAndAppendSharedQuadState(); | 2138 SharedQuadState* sqs = pass->CreateAndAppendSharedQuadState(); |
2094 sqs->opacity = 1.f; | 2139 sqs->opacity = 1.f; |
2095 SurfaceDrawQuad* surface_quad = | 2140 SurfaceDrawQuad* surface_quad = |
2096 pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); | 2141 pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); |
2097 surface_quad->SetNew(sqs, gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1), | 2142 surface_quad->SetNew(sqs, gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1), |
2098 surface1_id); | 2143 surface1_id); |
2099 pass->copy_requests.push_back(CopyOutputRequest::CreateEmptyRequest()); | 2144 pass->copy_requests.push_back(CopyOutputRequest::CreateEmptyRequest()); |
2100 | 2145 |
2101 frame_data->render_pass_list.push_back(std::move(pass)); | 2146 frame_data->render_pass_list.push_back(std::move(pass)); |
2102 CompositorFrame frame; | 2147 std::unique_ptr<CompositorFrame> frame(new CompositorFrame); |
2103 frame.delegated_frame_data = std::move(frame_data); | 2148 frame->delegated_frame_data = std::move(frame_data); |
2104 factory.SubmitCompositorFrame(surface2_id, std::move(frame), | 2149 factory.SubmitCompositorFrame(surface2_id, std::move(frame), |
2105 SurfaceFactory::DrawCallback()); | 2150 SurfaceFactory::DrawCallback()); |
2106 } | 2151 } |
2107 | 2152 |
2108 frame = aggregator_->Aggregate(surface2_id); | 2153 frame = aggregator_->Aggregate(surface2_id); |
2109 EXPECT_EQ(1u, frame.delegated_frame_data->render_pass_list.size()); | 2154 EXPECT_EQ(1u, frame->delegated_frame_data->render_pass_list.size()); |
2110 render_pass = frame.delegated_frame_data->render_pass_list.front().get(); | 2155 render_pass = frame->delegated_frame_data->render_pass_list.front().get(); |
2111 | 2156 |
2112 // Parent has copy request, so texture should not be drawn. | 2157 // Parent has copy request, so texture should not be drawn. |
2113 EXPECT_EQ(DrawQuad::SOLID_COLOR, render_pass->quad_list.back()->material); | 2158 EXPECT_EQ(DrawQuad::SOLID_COLOR, render_pass->quad_list.back()->material); |
2114 | 2159 |
2115 frame = aggregator_->Aggregate(surface2_id); | 2160 frame = aggregator_->Aggregate(surface2_id); |
2116 EXPECT_EQ(1u, frame.delegated_frame_data->render_pass_list.size()); | 2161 EXPECT_EQ(1u, frame->delegated_frame_data->render_pass_list.size()); |
2117 render_pass = frame.delegated_frame_data->render_pass_list.front().get(); | 2162 render_pass = frame->delegated_frame_data->render_pass_list.front().get(); |
2118 | 2163 |
2119 // Copy request has been executed earlier, so texture should be drawn. | 2164 // Copy request has been executed earlier, so texture should be drawn. |
2120 EXPECT_EQ(DrawQuad::TEXTURE_CONTENT, | 2165 EXPECT_EQ(DrawQuad::TEXTURE_CONTENT, |
2121 render_pass->quad_list.front()->material); | 2166 render_pass->quad_list.front()->material); |
2122 | 2167 |
2123 aggregator_->set_output_is_secure(false); | 2168 aggregator_->set_output_is_secure(false); |
2124 | 2169 |
2125 frame = aggregator_->Aggregate(surface2_id); | 2170 frame = aggregator_->Aggregate(surface2_id); |
2126 render_pass = frame.delegated_frame_data->render_pass_list.back().get(); | 2171 render_pass = frame->delegated_frame_data->render_pass_list.back().get(); |
2127 | 2172 |
2128 // Output is insecure, so texture should be drawn. | 2173 // Output is insecure, so texture should be drawn. |
2129 EXPECT_EQ(DrawQuad::SOLID_COLOR, render_pass->quad_list.back()->material); | 2174 EXPECT_EQ(DrawQuad::SOLID_COLOR, render_pass->quad_list.back()->material); |
2130 | 2175 |
2131 factory.Destroy(surface1_id); | 2176 factory.Destroy(surface1_id); |
2132 factory.Destroy(surface2_id); | 2177 factory.Destroy(surface2_id); |
2133 } | 2178 } |
2134 | 2179 |
2135 } // namespace | 2180 } // namespace |
2136 } // namespace cc | 2181 } // namespace cc |
2137 | 2182 |
OLD | NEW |