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