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

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

Issue 2103333002: Revert of Make cc::CompositorFrames movable [Part 2 of 2] (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/surfaces/surface_aggregator.h" 5 #include "cc/surfaces/surface_aggregator.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <utility> 10 #include <utility>
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « cc/surfaces/surface_aggregator_perftest.cc ('k') | cc/surfaces/surface_display_output_surface.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698