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

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

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