| 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> |
| 11 | 11 |
| 12 #include "base/macros.h" | 12 #include "base/macros.h" |
| 13 #include "base/memory/ptr_util.h" |
| 13 #include "cc/output/compositor_frame.h" | 14 #include "cc/output/compositor_frame.h" |
| 14 #include "cc/output/delegated_frame_data.h" | 15 #include "cc/output/delegated_frame_data.h" |
| 15 #include "cc/quads/render_pass.h" | 16 #include "cc/quads/render_pass.h" |
| 16 #include "cc/quads/render_pass_draw_quad.h" | 17 #include "cc/quads/render_pass_draw_quad.h" |
| 17 #include "cc/quads/solid_color_draw_quad.h" | 18 #include "cc/quads/solid_color_draw_quad.h" |
| 18 #include "cc/quads/surface_draw_quad.h" | 19 #include "cc/quads/surface_draw_quad.h" |
| 19 #include "cc/quads/texture_draw_quad.h" | 20 #include "cc/quads/texture_draw_quad.h" |
| 20 #include "cc/resources/shared_bitmap_manager.h" | 21 #include "cc/resources/shared_bitmap_manager.h" |
| 21 #include "cc/surfaces/surface.h" | 22 #include "cc/surfaces/surface.h" |
| 22 #include "cc/surfaces/surface_factory.h" | 23 #include "cc/surfaces/surface_factory.h" |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 74 SurfaceManager manager_; | 75 SurfaceManager manager_; |
| 75 EmptySurfaceFactoryClient empty_client_; | 76 EmptySurfaceFactoryClient empty_client_; |
| 76 SurfaceFactory factory_; | 77 SurfaceFactory factory_; |
| 77 SurfaceAggregator aggregator_; | 78 SurfaceAggregator aggregator_; |
| 78 }; | 79 }; |
| 79 | 80 |
| 80 TEST_F(SurfaceAggregatorTest, ValidSurfaceNoFrame) { | 81 TEST_F(SurfaceAggregatorTest, ValidSurfaceNoFrame) { |
| 81 SurfaceId one_id(7); | 82 SurfaceId one_id(7); |
| 82 factory_.Create(one_id); | 83 factory_.Create(one_id); |
| 83 | 84 |
| 84 scoped_ptr<CompositorFrame> frame = aggregator_.Aggregate(one_id); | 85 std::unique_ptr<CompositorFrame> frame = aggregator_.Aggregate(one_id); |
| 85 EXPECT_FALSE(frame); | 86 EXPECT_FALSE(frame); |
| 86 | 87 |
| 87 factory_.Destroy(one_id); | 88 factory_.Destroy(one_id); |
| 88 } | 89 } |
| 89 | 90 |
| 90 class SurfaceAggregatorValidSurfaceTest : public SurfaceAggregatorTest { | 91 class SurfaceAggregatorValidSurfaceTest : public SurfaceAggregatorTest { |
| 91 public: | 92 public: |
| 92 explicit SurfaceAggregatorValidSurfaceTest(bool use_damage_rect) | 93 explicit SurfaceAggregatorValidSurfaceTest(bool use_damage_rect) |
| 93 : SurfaceAggregatorTest(use_damage_rect), | 94 : SurfaceAggregatorTest(use_damage_rect), |
| 94 allocator_(1u), | 95 allocator_(1u), |
| (...skipping 10 matching lines...) Expand all Loading... |
| 105 | 106 |
| 106 void TearDown() override { | 107 void TearDown() override { |
| 107 factory_.Destroy(root_surface_id_); | 108 factory_.Destroy(root_surface_id_); |
| 108 SurfaceAggregatorTest::TearDown(); | 109 SurfaceAggregatorTest::TearDown(); |
| 109 } | 110 } |
| 110 | 111 |
| 111 void AggregateAndVerify(test::Pass* expected_passes, | 112 void AggregateAndVerify(test::Pass* expected_passes, |
| 112 size_t expected_pass_count, | 113 size_t expected_pass_count, |
| 113 SurfaceId* surface_ids, | 114 SurfaceId* surface_ids, |
| 114 size_t expected_surface_count) { | 115 size_t expected_surface_count) { |
| 115 scoped_ptr<CompositorFrame> aggregated_frame = | 116 std::unique_ptr<CompositorFrame> aggregated_frame = |
| 116 aggregator_.Aggregate(root_surface_id_); | 117 aggregator_.Aggregate(root_surface_id_); |
| 117 | 118 |
| 118 ASSERT_TRUE(aggregated_frame); | 119 ASSERT_TRUE(aggregated_frame); |
| 119 ASSERT_TRUE(aggregated_frame->delegated_frame_data); | 120 ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
| 120 | 121 |
| 121 DelegatedFrameData* frame_data = | 122 DelegatedFrameData* frame_data = |
| 122 aggregated_frame->delegated_frame_data.get(); | 123 aggregated_frame->delegated_frame_data.get(); |
| 123 | 124 |
| 124 TestPassesMatchExpectations( | 125 TestPassesMatchExpectations( |
| 125 expected_passes, expected_pass_count, &frame_data->render_pass_list); | 126 expected_passes, expected_pass_count, &frame_data->render_pass_list); |
| 126 | 127 |
| 127 // Ensure no duplicate pass ids output. | 128 // Ensure no duplicate pass ids output. |
| 128 std::set<RenderPassId> used_passes; | 129 std::set<RenderPassId> used_passes; |
| 129 for (const auto& pass : frame_data->render_pass_list) { | 130 for (const auto& pass : frame_data->render_pass_list) { |
| 130 EXPECT_TRUE(used_passes.insert(pass->id).second); | 131 EXPECT_TRUE(used_passes.insert(pass->id).second); |
| 131 } | 132 } |
| 132 | 133 |
| 133 EXPECT_EQ(expected_surface_count, | 134 EXPECT_EQ(expected_surface_count, |
| 134 aggregator_.previous_contained_surfaces().size()); | 135 aggregator_.previous_contained_surfaces().size()); |
| 135 for (size_t i = 0; i < expected_surface_count; i++) { | 136 for (size_t i = 0; i < expected_surface_count; i++) { |
| 136 EXPECT_TRUE( | 137 EXPECT_TRUE( |
| 137 aggregator_.previous_contained_surfaces().find(surface_ids[i]) != | 138 aggregator_.previous_contained_surfaces().find(surface_ids[i]) != |
| 138 aggregator_.previous_contained_surfaces().end()); | 139 aggregator_.previous_contained_surfaces().end()); |
| 139 } | 140 } |
| 140 } | 141 } |
| 141 | 142 |
| 142 void SubmitPassListAsFrame(SurfaceId surface_id, RenderPassList* pass_list) { | 143 void SubmitPassListAsFrame(SurfaceId surface_id, RenderPassList* pass_list) { |
| 143 scoped_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); | 144 std::unique_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); |
| 144 pass_list->swap(frame_data->render_pass_list); | 145 pass_list->swap(frame_data->render_pass_list); |
| 145 | 146 |
| 146 scoped_ptr<CompositorFrame> frame(new CompositorFrame); | 147 std::unique_ptr<CompositorFrame> frame(new CompositorFrame); |
| 147 frame->delegated_frame_data = std::move(frame_data); | 148 frame->delegated_frame_data = std::move(frame_data); |
| 148 | 149 |
| 149 factory_.SubmitCompositorFrame(surface_id, std::move(frame), | 150 factory_.SubmitCompositorFrame(surface_id, std::move(frame), |
| 150 SurfaceFactory::DrawCallback()); | 151 SurfaceFactory::DrawCallback()); |
| 151 } | 152 } |
| 152 | 153 |
| 153 void SubmitCompositorFrame(test::Pass* passes, | 154 void SubmitCompositorFrame(test::Pass* passes, |
| 154 size_t pass_count, | 155 size_t pass_count, |
| 155 SurfaceId surface_id) { | 156 SurfaceId surface_id) { |
| 156 RenderPassList pass_list; | 157 RenderPassList pass_list; |
| 157 AddPasses(&pass_list, gfx::Rect(SurfaceSize()), passes, pass_count); | 158 AddPasses(&pass_list, gfx::Rect(SurfaceSize()), passes, pass_count); |
| 158 SubmitPassListAsFrame(surface_id, &pass_list); | 159 SubmitPassListAsFrame(surface_id, &pass_list); |
| 159 } | 160 } |
| 160 | 161 |
| 161 void QueuePassAsFrame(scoped_ptr<RenderPass> pass, SurfaceId surface_id) { | 162 void QueuePassAsFrame(std::unique_ptr<RenderPass> pass, |
| 162 scoped_ptr<DelegatedFrameData> delegated_frame_data(new DelegatedFrameData); | 163 SurfaceId surface_id) { |
| 164 std::unique_ptr<DelegatedFrameData> delegated_frame_data( |
| 165 new DelegatedFrameData); |
| 163 delegated_frame_data->render_pass_list.push_back(std::move(pass)); | 166 delegated_frame_data->render_pass_list.push_back(std::move(pass)); |
| 164 | 167 |
| 165 scoped_ptr<CompositorFrame> child_frame(new CompositorFrame); | 168 std::unique_ptr<CompositorFrame> child_frame(new CompositorFrame); |
| 166 child_frame->delegated_frame_data = std::move(delegated_frame_data); | 169 child_frame->delegated_frame_data = std::move(delegated_frame_data); |
| 167 | 170 |
| 168 factory_.SubmitCompositorFrame(surface_id, std::move(child_frame), | 171 factory_.SubmitCompositorFrame(surface_id, std::move(child_frame), |
| 169 SurfaceFactory::DrawCallback()); | 172 SurfaceFactory::DrawCallback()); |
| 170 } | 173 } |
| 171 | 174 |
| 172 protected: | 175 protected: |
| 173 SurfaceId root_surface_id_; | 176 SurfaceId root_surface_id_; |
| 174 Surface* root_surface_; | 177 Surface* root_surface_; |
| 175 SurfaceIdAllocator allocator_; | 178 SurfaceIdAllocator allocator_; |
| (...skipping 28 matching lines...) Expand all Loading... |
| 204 test::Pass(embedded_quads, arraysize(embedded_quads))}; | 207 test::Pass(embedded_quads, arraysize(embedded_quads))}; |
| 205 | 208 |
| 206 SubmitCompositorFrame(embedded_passes, arraysize(embedded_passes), | 209 SubmitCompositorFrame(embedded_passes, arraysize(embedded_passes), |
| 207 embedded_surface_id); | 210 embedded_surface_id); |
| 208 | 211 |
| 209 test::Quad quads[] = {test::Quad::SurfaceQuad(embedded_surface_id, .5f)}; | 212 test::Quad quads[] = {test::Quad::SurfaceQuad(embedded_surface_id, .5f)}; |
| 210 test::Pass passes[] = {test::Pass(quads, arraysize(quads))}; | 213 test::Pass passes[] = {test::Pass(quads, arraysize(quads))}; |
| 211 | 214 |
| 212 SubmitCompositorFrame(passes, arraysize(passes), root_surface_id_); | 215 SubmitCompositorFrame(passes, arraysize(passes), root_surface_id_); |
| 213 | 216 |
| 214 scoped_ptr<CompositorFrame> aggregated_frame = | 217 std::unique_ptr<CompositorFrame> aggregated_frame = |
| 215 aggregator_.Aggregate(root_surface_id_); | 218 aggregator_.Aggregate(root_surface_id_); |
| 216 | 219 |
| 217 ASSERT_TRUE(aggregated_frame); | 220 ASSERT_TRUE(aggregated_frame); |
| 218 ASSERT_TRUE(aggregated_frame->delegated_frame_data); | 221 ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
| 219 | 222 |
| 220 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get(); | 223 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get(); |
| 221 | 224 |
| 222 RenderPassList& render_pass_list(frame_data->render_pass_list); | 225 RenderPassList& render_pass_list(frame_data->render_pass_list); |
| 223 ASSERT_EQ(2u, render_pass_list.size()); | 226 ASSERT_EQ(2u, render_pass_list.size()); |
| 224 SharedQuadStateList& shared_quad_state_list( | 227 SharedQuadStateList& shared_quad_state_list( |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 288 TEST_F(SurfaceAggregatorValidSurfaceTest, CopyRequest) { | 291 TEST_F(SurfaceAggregatorValidSurfaceTest, CopyRequest) { |
| 289 SurfaceId embedded_surface_id = allocator_.GenerateId(); | 292 SurfaceId embedded_surface_id = allocator_.GenerateId(); |
| 290 factory_.Create(embedded_surface_id); | 293 factory_.Create(embedded_surface_id); |
| 291 | 294 |
| 292 test::Quad embedded_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN)}; | 295 test::Quad embedded_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN)}; |
| 293 test::Pass embedded_passes[] = { | 296 test::Pass embedded_passes[] = { |
| 294 test::Pass(embedded_quads, arraysize(embedded_quads))}; | 297 test::Pass(embedded_quads, arraysize(embedded_quads))}; |
| 295 | 298 |
| 296 SubmitCompositorFrame(embedded_passes, arraysize(embedded_passes), | 299 SubmitCompositorFrame(embedded_passes, arraysize(embedded_passes), |
| 297 embedded_surface_id); | 300 embedded_surface_id); |
| 298 scoped_ptr<CopyOutputRequest> copy_request( | 301 std::unique_ptr<CopyOutputRequest> copy_request( |
| 299 CopyOutputRequest::CreateEmptyRequest()); | 302 CopyOutputRequest::CreateEmptyRequest()); |
| 300 CopyOutputRequest* copy_request_ptr = copy_request.get(); | 303 CopyOutputRequest* copy_request_ptr = copy_request.get(); |
| 301 factory_.RequestCopyOfSurface(embedded_surface_id, std::move(copy_request)); | 304 factory_.RequestCopyOfSurface(embedded_surface_id, std::move(copy_request)); |
| 302 | 305 |
| 303 test::Quad root_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), | 306 test::Quad root_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), |
| 304 test::Quad::SurfaceQuad(embedded_surface_id, 1.f), | 307 test::Quad::SurfaceQuad(embedded_surface_id, 1.f), |
| 305 test::Quad::SolidColorQuad(SK_ColorBLACK)}; | 308 test::Quad::SolidColorQuad(SK_ColorBLACK)}; |
| 306 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))}; | 309 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))}; |
| 307 | 310 |
| 308 SubmitCompositorFrame(root_passes, arraysize(root_passes), root_surface_id_); | 311 SubmitCompositorFrame(root_passes, arraysize(root_passes), root_surface_id_); |
| 309 | 312 |
| 310 scoped_ptr<CompositorFrame> aggregated_frame = | 313 std::unique_ptr<CompositorFrame> aggregated_frame = |
| 311 aggregator_.Aggregate(root_surface_id_); | 314 aggregator_.Aggregate(root_surface_id_); |
| 312 | 315 |
| 313 ASSERT_TRUE(aggregated_frame); | 316 ASSERT_TRUE(aggregated_frame); |
| 314 ASSERT_TRUE(aggregated_frame->delegated_frame_data); | 317 ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
| 315 | 318 |
| 316 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get(); | 319 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get(); |
| 317 | 320 |
| 318 test::Quad expected_quads[] = { | 321 test::Quad expected_quads[] = { |
| 319 test::Quad::SolidColorQuad(SK_ColorWHITE), | 322 test::Quad::SolidColorQuad(SK_ColorWHITE), |
| 320 test::Quad::RenderPassQuad(frame_data->render_pass_list[0]->id), | 323 test::Quad::RenderPassQuad(frame_data->render_pass_list[0]->id), |
| (...skipping 25 matching lines...) Expand all Loading... |
| 346 TEST_F(SurfaceAggregatorValidSurfaceTest, RootCopyRequest) { | 349 TEST_F(SurfaceAggregatorValidSurfaceTest, RootCopyRequest) { |
| 347 SurfaceId embedded_surface_id = allocator_.GenerateId(); | 350 SurfaceId embedded_surface_id = allocator_.GenerateId(); |
| 348 factory_.Create(embedded_surface_id); | 351 factory_.Create(embedded_surface_id); |
| 349 | 352 |
| 350 test::Quad embedded_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN)}; | 353 test::Quad embedded_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN)}; |
| 351 test::Pass embedded_passes[] = { | 354 test::Pass embedded_passes[] = { |
| 352 test::Pass(embedded_quads, arraysize(embedded_quads))}; | 355 test::Pass(embedded_quads, arraysize(embedded_quads))}; |
| 353 | 356 |
| 354 SubmitCompositorFrame(embedded_passes, arraysize(embedded_passes), | 357 SubmitCompositorFrame(embedded_passes, arraysize(embedded_passes), |
| 355 embedded_surface_id); | 358 embedded_surface_id); |
| 356 scoped_ptr<CopyOutputRequest> copy_request( | 359 std::unique_ptr<CopyOutputRequest> copy_request( |
| 357 CopyOutputRequest::CreateEmptyRequest()); | 360 CopyOutputRequest::CreateEmptyRequest()); |
| 358 CopyOutputRequest* copy_request_ptr = copy_request.get(); | 361 CopyOutputRequest* copy_request_ptr = copy_request.get(); |
| 359 scoped_ptr<CopyOutputRequest> copy_request2( | 362 std::unique_ptr<CopyOutputRequest> copy_request2( |
| 360 CopyOutputRequest::CreateEmptyRequest()); | 363 CopyOutputRequest::CreateEmptyRequest()); |
| 361 CopyOutputRequest* copy_request2_ptr = copy_request2.get(); | 364 CopyOutputRequest* copy_request2_ptr = copy_request2.get(); |
| 362 | 365 |
| 363 test::Quad root_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), | 366 test::Quad root_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), |
| 364 test::Quad::SurfaceQuad(embedded_surface_id, 1.f), | 367 test::Quad::SurfaceQuad(embedded_surface_id, 1.f), |
| 365 test::Quad::SolidColorQuad(SK_ColorBLACK)}; | 368 test::Quad::SolidColorQuad(SK_ColorBLACK)}; |
| 366 test::Quad root_quads2[] = {test::Quad::SolidColorQuad(SK_ColorRED)}; | 369 test::Quad root_quads2[] = {test::Quad::SolidColorQuad(SK_ColorRED)}; |
| 367 test::Pass root_passes[] = { | 370 test::Pass root_passes[] = { |
| 368 test::Pass(root_quads, arraysize(root_quads), RenderPassId(1, 1)), | 371 test::Pass(root_quads, arraysize(root_quads), RenderPassId(1, 1)), |
| 369 test::Pass(root_quads2, arraysize(root_quads2), RenderPassId(1, 2))}; | 372 test::Pass(root_quads2, arraysize(root_quads2), RenderPassId(1, 2))}; |
| 370 { | 373 { |
| 371 RenderPassList pass_list; | 374 RenderPassList pass_list; |
| 372 AddPasses(&pass_list, | 375 AddPasses(&pass_list, |
| 373 gfx::Rect(SurfaceSize()), | 376 gfx::Rect(SurfaceSize()), |
| 374 root_passes, | 377 root_passes, |
| 375 arraysize(root_passes)); | 378 arraysize(root_passes)); |
| 376 pass_list[0]->copy_requests.push_back(std::move(copy_request)); | 379 pass_list[0]->copy_requests.push_back(std::move(copy_request)); |
| 377 pass_list[1]->copy_requests.push_back(std::move(copy_request2)); | 380 pass_list[1]->copy_requests.push_back(std::move(copy_request2)); |
| 378 | 381 |
| 379 scoped_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); | 382 std::unique_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); |
| 380 pass_list.swap(frame_data->render_pass_list); | 383 pass_list.swap(frame_data->render_pass_list); |
| 381 | 384 |
| 382 scoped_ptr<CompositorFrame> frame(new CompositorFrame); | 385 std::unique_ptr<CompositorFrame> frame(new CompositorFrame); |
| 383 frame->delegated_frame_data = std::move(frame_data); | 386 frame->delegated_frame_data = std::move(frame_data); |
| 384 | 387 |
| 385 factory_.SubmitCompositorFrame(root_surface_id_, std::move(frame), | 388 factory_.SubmitCompositorFrame(root_surface_id_, std::move(frame), |
| 386 SurfaceFactory::DrawCallback()); | 389 SurfaceFactory::DrawCallback()); |
| 387 } | 390 } |
| 388 | 391 |
| 389 scoped_ptr<CompositorFrame> aggregated_frame = | 392 std::unique_ptr<CompositorFrame> aggregated_frame = |
| 390 aggregator_.Aggregate(root_surface_id_); | 393 aggregator_.Aggregate(root_surface_id_); |
| 391 | 394 |
| 392 ASSERT_TRUE(aggregated_frame); | 395 ASSERT_TRUE(aggregated_frame); |
| 393 ASSERT_TRUE(aggregated_frame->delegated_frame_data); | 396 ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
| 394 | 397 |
| 395 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get(); | 398 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get(); |
| 396 | 399 |
| 397 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), | 400 test::Quad expected_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), |
| 398 test::Quad::SolidColorQuad(SK_ColorGREEN), | 401 test::Quad::SolidColorQuad(SK_ColorGREEN), |
| 399 test::Quad::SolidColorQuad(SK_ColorBLACK)}; | 402 test::Quad::SolidColorQuad(SK_ColorBLACK)}; |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 436 SurfaceId embedded_surface_id = allocator_.GenerateId(); | 439 SurfaceId embedded_surface_id = allocator_.GenerateId(); |
| 437 SurfaceId nonexistent_surface_id = allocator_.GenerateId(); | 440 SurfaceId nonexistent_surface_id = allocator_.GenerateId(); |
| 438 factory_.Create(embedded_surface_id); | 441 factory_.Create(embedded_surface_id); |
| 439 | 442 |
| 440 test::Quad embedded_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN)}; | 443 test::Quad embedded_quads[] = {test::Quad::SolidColorQuad(SK_ColorGREEN)}; |
| 441 test::Pass embedded_passes[] = { | 444 test::Pass embedded_passes[] = { |
| 442 test::Pass(embedded_quads, arraysize(embedded_quads))}; | 445 test::Pass(embedded_quads, arraysize(embedded_quads))}; |
| 443 | 446 |
| 444 SubmitCompositorFrame(embedded_passes, arraysize(embedded_passes), | 447 SubmitCompositorFrame(embedded_passes, arraysize(embedded_passes), |
| 445 embedded_surface_id); | 448 embedded_surface_id); |
| 446 scoped_ptr<CopyOutputRequest> copy_request( | 449 std::unique_ptr<CopyOutputRequest> copy_request( |
| 447 CopyOutputRequest::CreateEmptyRequest()); | 450 CopyOutputRequest::CreateEmptyRequest()); |
| 448 CopyOutputRequest* copy_request_ptr = copy_request.get(); | 451 CopyOutputRequest* copy_request_ptr = copy_request.get(); |
| 449 factory_.RequestCopyOfSurface(embedded_surface_id, std::move(copy_request)); | 452 factory_.RequestCopyOfSurface(embedded_surface_id, std::move(copy_request)); |
| 450 | 453 |
| 451 SurfaceId parent_surface_id = allocator_.GenerateId(); | 454 SurfaceId parent_surface_id = allocator_.GenerateId(); |
| 452 factory_.Create(parent_surface_id); | 455 factory_.Create(parent_surface_id); |
| 453 | 456 |
| 454 test::Quad parent_quads[] = { | 457 test::Quad parent_quads[] = { |
| 455 test::Quad::SolidColorQuad(SK_ColorWHITE), | 458 test::Quad::SolidColorQuad(SK_ColorWHITE), |
| 456 test::Quad::SurfaceQuad(embedded_surface_id, 1.f), | 459 test::Quad::SurfaceQuad(embedded_surface_id, 1.f), |
| 457 test::Quad::SolidColorQuad(SK_ColorBLACK)}; | 460 test::Quad::SolidColorQuad(SK_ColorBLACK)}; |
| 458 test::Pass parent_passes[] = { | 461 test::Pass parent_passes[] = { |
| 459 test::Pass(parent_quads, arraysize(parent_quads))}; | 462 test::Pass(parent_quads, arraysize(parent_quads))}; |
| 460 | 463 |
| 461 { | 464 { |
| 462 scoped_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); | 465 std::unique_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); |
| 463 AddPasses(&frame_data->render_pass_list, gfx::Rect(SurfaceSize()), | 466 AddPasses(&frame_data->render_pass_list, gfx::Rect(SurfaceSize()), |
| 464 parent_passes, arraysize(parent_passes)); | 467 parent_passes, arraysize(parent_passes)); |
| 465 | 468 |
| 466 scoped_ptr<CompositorFrame> frame(new CompositorFrame); | 469 std::unique_ptr<CompositorFrame> frame(new CompositorFrame); |
| 467 frame->delegated_frame_data = std::move(frame_data); | 470 frame->delegated_frame_data = std::move(frame_data); |
| 468 frame->metadata.referenced_surfaces.push_back(embedded_surface_id); | 471 frame->metadata.referenced_surfaces.push_back(embedded_surface_id); |
| 469 | 472 |
| 470 factory_.SubmitCompositorFrame(parent_surface_id, std::move(frame), | 473 factory_.SubmitCompositorFrame(parent_surface_id, std::move(frame), |
| 471 SurfaceFactory::DrawCallback()); | 474 SurfaceFactory::DrawCallback()); |
| 472 } | 475 } |
| 473 | 476 |
| 474 test::Quad root_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), | 477 test::Quad root_quads[] = {test::Quad::SolidColorQuad(SK_ColorWHITE), |
| 475 test::Quad::SolidColorQuad(SK_ColorBLACK)}; | 478 test::Quad::SolidColorQuad(SK_ColorBLACK)}; |
| 476 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))}; | 479 test::Pass root_passes[] = {test::Pass(root_quads, arraysize(root_quads))}; |
| 477 | 480 |
| 478 { | 481 { |
| 479 scoped_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); | 482 std::unique_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); |
| 480 AddPasses(&frame_data->render_pass_list, gfx::Rect(SurfaceSize()), | 483 AddPasses(&frame_data->render_pass_list, gfx::Rect(SurfaceSize()), |
| 481 root_passes, arraysize(root_passes)); | 484 root_passes, arraysize(root_passes)); |
| 482 | 485 |
| 483 scoped_ptr<CompositorFrame> frame(new CompositorFrame); | 486 std::unique_ptr<CompositorFrame> frame(new CompositorFrame); |
| 484 frame->delegated_frame_data = std::move(frame_data); | 487 frame->delegated_frame_data = std::move(frame_data); |
| 485 frame->metadata.referenced_surfaces.push_back(parent_surface_id); | 488 frame->metadata.referenced_surfaces.push_back(parent_surface_id); |
| 486 // Reference to Surface ID of a Surface that doesn't exist should be | 489 // Reference to Surface ID of a Surface that doesn't exist should be |
| 487 // included in previous_contained_surfaces, but otherwise ignored. | 490 // included in previous_contained_surfaces, but otherwise ignored. |
| 488 frame->metadata.referenced_surfaces.push_back(nonexistent_surface_id); | 491 frame->metadata.referenced_surfaces.push_back(nonexistent_surface_id); |
| 489 | 492 |
| 490 factory_.SubmitCompositorFrame(root_surface_id_, std::move(frame), | 493 factory_.SubmitCompositorFrame(root_surface_id_, std::move(frame), |
| 491 SurfaceFactory::DrawCallback()); | 494 SurfaceFactory::DrawCallback()); |
| 492 } | 495 } |
| 493 | 496 |
| 494 scoped_ptr<CompositorFrame> aggregated_frame = | 497 std::unique_ptr<CompositorFrame> aggregated_frame = |
| 495 aggregator_.Aggregate(root_surface_id_); | 498 aggregator_.Aggregate(root_surface_id_); |
| 496 | 499 |
| 497 ASSERT_TRUE(aggregated_frame); | 500 ASSERT_TRUE(aggregated_frame); |
| 498 ASSERT_TRUE(aggregated_frame->delegated_frame_data); | 501 ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
| 499 | 502 |
| 500 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get(); | 503 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get(); |
| 501 | 504 |
| 502 // First pass should come from surface that had a copy request but was not | 505 // First pass should come from surface that had a copy request but was not |
| 503 // referenced directly. The second pass comes from the root surface. | 506 // referenced directly. The second pass comes from the root surface. |
| 504 // parent_quad should be ignored because it is neither referenced through a | 507 // parent_quad should be ignored because it is neither referenced through a |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 552 {test::Quad::SurfaceQuad(embedded_surface_id, 1.f), | 555 {test::Quad::SurfaceQuad(embedded_surface_id, 1.f), |
| 553 test::Quad::RenderPassQuad(pass_ids[0])}, | 556 test::Quad::RenderPassQuad(pass_ids[0])}, |
| 554 {test::Quad::SolidColorQuad(7), test::Quad::RenderPassQuad(pass_ids[1])}}; | 557 {test::Quad::SolidColorQuad(7), test::Quad::RenderPassQuad(pass_ids[1])}}; |
| 555 test::Pass root_passes[] = { | 558 test::Pass root_passes[] = { |
| 556 test::Pass(root_quads[0], arraysize(root_quads[0]), pass_ids[0]), | 559 test::Pass(root_quads[0], arraysize(root_quads[0]), pass_ids[0]), |
| 557 test::Pass(root_quads[1], arraysize(root_quads[1]), pass_ids[1]), | 560 test::Pass(root_quads[1], arraysize(root_quads[1]), pass_ids[1]), |
| 558 test::Pass(root_quads[2], arraysize(root_quads[2]), pass_ids[2])}; | 561 test::Pass(root_quads[2], arraysize(root_quads[2]), pass_ids[2])}; |
| 559 | 562 |
| 560 SubmitCompositorFrame(root_passes, arraysize(root_passes), root_surface_id_); | 563 SubmitCompositorFrame(root_passes, arraysize(root_passes), root_surface_id_); |
| 561 | 564 |
| 562 scoped_ptr<CompositorFrame> aggregated_frame = | 565 std::unique_ptr<CompositorFrame> aggregated_frame = |
| 563 aggregator_.Aggregate(root_surface_id_); | 566 aggregator_.Aggregate(root_surface_id_); |
| 564 | 567 |
| 565 ASSERT_TRUE(aggregated_frame); | 568 ASSERT_TRUE(aggregated_frame); |
| 566 ASSERT_TRUE(aggregated_frame->delegated_frame_data); | 569 ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
| 567 | 570 |
| 568 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get(); | 571 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get(); |
| 569 | 572 |
| 570 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; | 573 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; |
| 571 | 574 |
| 572 ASSERT_EQ(5u, aggregated_pass_list.size()); | 575 ASSERT_EQ(5u, aggregated_pass_list.size()); |
| (...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 788 test::Quad parent_quad[][1] = { | 791 test::Quad parent_quad[][1] = { |
| 789 {test::Quad::SurfaceQuad(child_surface_id, 1.f)}, | 792 {test::Quad::SurfaceQuad(child_surface_id, 1.f)}, |
| 790 {test::Quad::RenderPassQuad(parent_pass_id[0])}}; | 793 {test::Quad::RenderPassQuad(parent_pass_id[0])}}; |
| 791 test::Pass parent_passes[] = { | 794 test::Pass parent_passes[] = { |
| 792 test::Pass(parent_quad[0], arraysize(parent_quad[0]), parent_pass_id[0]), | 795 test::Pass(parent_quad[0], arraysize(parent_quad[0]), parent_pass_id[0]), |
| 793 test::Pass(parent_quad[1], arraysize(parent_quad[1]), parent_pass_id[1])}; | 796 test::Pass(parent_quad[1], arraysize(parent_quad[1]), parent_pass_id[1])}; |
| 794 | 797 |
| 795 SubmitCompositorFrame(parent_passes, arraysize(parent_passes), | 798 SubmitCompositorFrame(parent_passes, arraysize(parent_passes), |
| 796 root_surface_id_); | 799 root_surface_id_); |
| 797 | 800 |
| 798 scoped_ptr<CompositorFrame> aggregated_frame = | 801 std::unique_ptr<CompositorFrame> aggregated_frame = |
| 799 aggregator_.Aggregate(root_surface_id_); | 802 aggregator_.Aggregate(root_surface_id_); |
| 800 | 803 |
| 801 ASSERT_TRUE(aggregated_frame); | 804 ASSERT_TRUE(aggregated_frame); |
| 802 ASSERT_TRUE(aggregated_frame->delegated_frame_data); | 805 ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
| 803 | 806 |
| 804 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get(); | 807 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get(); |
| 805 | 808 |
| 806 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; | 809 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; |
| 807 | 810 |
| 808 ASSERT_EQ(3u, aggregated_pass_list.size()); | 811 ASSERT_EQ(3u, aggregated_pass_list.size()); |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 888 SkXfermode::kDst_Mode, // 2 | 891 SkXfermode::kDst_Mode, // 2 |
| 889 SkXfermode::kSrcOver_Mode, // 3 | 892 SkXfermode::kSrcOver_Mode, // 3 |
| 890 SkXfermode::kDstOver_Mode, // 4 | 893 SkXfermode::kDstOver_Mode, // 4 |
| 891 SkXfermode::kSrcIn_Mode, // 5 | 894 SkXfermode::kSrcIn_Mode, // 5 |
| 892 SkXfermode::kDstIn_Mode, // 6 | 895 SkXfermode::kDstIn_Mode, // 6 |
| 893 }; | 896 }; |
| 894 | 897 |
| 895 RenderPassId pass_id(1, 1); | 898 RenderPassId pass_id(1, 1); |
| 896 SurfaceId grandchild_surface_id = allocator_.GenerateId(); | 899 SurfaceId grandchild_surface_id = allocator_.GenerateId(); |
| 897 factory_.Create(grandchild_surface_id); | 900 factory_.Create(grandchild_surface_id); |
| 898 scoped_ptr<RenderPass> grandchild_pass = RenderPass::Create(); | 901 std::unique_ptr<RenderPass> grandchild_pass = RenderPass::Create(); |
| 899 gfx::Rect output_rect(SurfaceSize()); | 902 gfx::Rect output_rect(SurfaceSize()); |
| 900 gfx::Rect damage_rect(SurfaceSize()); | 903 gfx::Rect damage_rect(SurfaceSize()); |
| 901 gfx::Transform transform_to_root_target; | 904 gfx::Transform transform_to_root_target; |
| 902 grandchild_pass->SetNew( | 905 grandchild_pass->SetNew( |
| 903 pass_id, output_rect, damage_rect, transform_to_root_target); | 906 pass_id, output_rect, damage_rect, transform_to_root_target); |
| 904 AddSolidColorQuadWithBlendMode( | 907 AddSolidColorQuadWithBlendMode( |
| 905 SurfaceSize(), grandchild_pass.get(), blend_modes[2]); | 908 SurfaceSize(), grandchild_pass.get(), blend_modes[2]); |
| 906 QueuePassAsFrame(std::move(grandchild_pass), grandchild_surface_id); | 909 QueuePassAsFrame(std::move(grandchild_pass), grandchild_surface_id); |
| 907 | 910 |
| 908 SurfaceId child_one_surface_id = allocator_.GenerateId(); | 911 SurfaceId child_one_surface_id = allocator_.GenerateId(); |
| 909 factory_.Create(child_one_surface_id); | 912 factory_.Create(child_one_surface_id); |
| 910 | 913 |
| 911 scoped_ptr<RenderPass> child_one_pass = RenderPass::Create(); | 914 std::unique_ptr<RenderPass> child_one_pass = RenderPass::Create(); |
| 912 child_one_pass->SetNew( | 915 child_one_pass->SetNew( |
| 913 pass_id, output_rect, damage_rect, transform_to_root_target); | 916 pass_id, output_rect, damage_rect, transform_to_root_target); |
| 914 AddSolidColorQuadWithBlendMode( | 917 AddSolidColorQuadWithBlendMode( |
| 915 SurfaceSize(), child_one_pass.get(), blend_modes[1]); | 918 SurfaceSize(), child_one_pass.get(), blend_modes[1]); |
| 916 SurfaceDrawQuad* grandchild_surface_quad = | 919 SurfaceDrawQuad* grandchild_surface_quad = |
| 917 child_one_pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); | 920 child_one_pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); |
| 918 grandchild_surface_quad->SetNew(child_one_pass->shared_quad_state_list.back(), | 921 grandchild_surface_quad->SetNew(child_one_pass->shared_quad_state_list.back(), |
| 919 gfx::Rect(SurfaceSize()), | 922 gfx::Rect(SurfaceSize()), |
| 920 gfx::Rect(SurfaceSize()), | 923 gfx::Rect(SurfaceSize()), |
| 921 grandchild_surface_id); | 924 grandchild_surface_id); |
| 922 AddSolidColorQuadWithBlendMode( | 925 AddSolidColorQuadWithBlendMode( |
| 923 SurfaceSize(), child_one_pass.get(), blend_modes[3]); | 926 SurfaceSize(), child_one_pass.get(), blend_modes[3]); |
| 924 QueuePassAsFrame(std::move(child_one_pass), child_one_surface_id); | 927 QueuePassAsFrame(std::move(child_one_pass), child_one_surface_id); |
| 925 | 928 |
| 926 SurfaceId child_two_surface_id = allocator_.GenerateId(); | 929 SurfaceId child_two_surface_id = allocator_.GenerateId(); |
| 927 factory_.Create(child_two_surface_id); | 930 factory_.Create(child_two_surface_id); |
| 928 | 931 |
| 929 scoped_ptr<RenderPass> child_two_pass = RenderPass::Create(); | 932 std::unique_ptr<RenderPass> child_two_pass = RenderPass::Create(); |
| 930 child_two_pass->SetNew( | 933 child_two_pass->SetNew( |
| 931 pass_id, output_rect, damage_rect, transform_to_root_target); | 934 pass_id, output_rect, damage_rect, transform_to_root_target); |
| 932 AddSolidColorQuadWithBlendMode( | 935 AddSolidColorQuadWithBlendMode( |
| 933 SurfaceSize(), child_two_pass.get(), blend_modes[5]); | 936 SurfaceSize(), child_two_pass.get(), blend_modes[5]); |
| 934 QueuePassAsFrame(std::move(child_two_pass), child_two_surface_id); | 937 QueuePassAsFrame(std::move(child_two_pass), child_two_surface_id); |
| 935 | 938 |
| 936 scoped_ptr<RenderPass> root_pass = RenderPass::Create(); | 939 std::unique_ptr<RenderPass> root_pass = RenderPass::Create(); |
| 937 root_pass->SetNew( | 940 root_pass->SetNew( |
| 938 pass_id, output_rect, damage_rect, transform_to_root_target); | 941 pass_id, output_rect, damage_rect, transform_to_root_target); |
| 939 | 942 |
| 940 AddSolidColorQuadWithBlendMode( | 943 AddSolidColorQuadWithBlendMode( |
| 941 SurfaceSize(), root_pass.get(), blend_modes[0]); | 944 SurfaceSize(), root_pass.get(), blend_modes[0]); |
| 942 SurfaceDrawQuad* child_one_surface_quad = | 945 SurfaceDrawQuad* child_one_surface_quad = |
| 943 root_pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); | 946 root_pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); |
| 944 child_one_surface_quad->SetNew(root_pass->shared_quad_state_list.back(), | 947 child_one_surface_quad->SetNew(root_pass->shared_quad_state_list.back(), |
| 945 gfx::Rect(SurfaceSize()), | 948 gfx::Rect(SurfaceSize()), |
| 946 gfx::Rect(SurfaceSize()), | 949 gfx::Rect(SurfaceSize()), |
| 947 child_one_surface_id); | 950 child_one_surface_id); |
| 948 AddSolidColorQuadWithBlendMode( | 951 AddSolidColorQuadWithBlendMode( |
| 949 SurfaceSize(), root_pass.get(), blend_modes[4]); | 952 SurfaceSize(), root_pass.get(), blend_modes[4]); |
| 950 SurfaceDrawQuad* child_two_surface_quad = | 953 SurfaceDrawQuad* child_two_surface_quad = |
| 951 root_pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); | 954 root_pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); |
| 952 child_two_surface_quad->SetNew(root_pass->shared_quad_state_list.back(), | 955 child_two_surface_quad->SetNew(root_pass->shared_quad_state_list.back(), |
| 953 gfx::Rect(SurfaceSize()), | 956 gfx::Rect(SurfaceSize()), |
| 954 gfx::Rect(SurfaceSize()), | 957 gfx::Rect(SurfaceSize()), |
| 955 child_two_surface_id); | 958 child_two_surface_id); |
| 956 AddSolidColorQuadWithBlendMode( | 959 AddSolidColorQuadWithBlendMode( |
| 957 SurfaceSize(), root_pass.get(), blend_modes[6]); | 960 SurfaceSize(), root_pass.get(), blend_modes[6]); |
| 958 | 961 |
| 959 QueuePassAsFrame(std::move(root_pass), root_surface_id_); | 962 QueuePassAsFrame(std::move(root_pass), root_surface_id_); |
| 960 | 963 |
| 961 scoped_ptr<CompositorFrame> aggregated_frame = | 964 std::unique_ptr<CompositorFrame> aggregated_frame = |
| 962 aggregator_.Aggregate(root_surface_id_); | 965 aggregator_.Aggregate(root_surface_id_); |
| 963 | 966 |
| 964 ASSERT_TRUE(aggregated_frame); | 967 ASSERT_TRUE(aggregated_frame); |
| 965 ASSERT_TRUE(aggregated_frame->delegated_frame_data); | 968 ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
| 966 | 969 |
| 967 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get(); | 970 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get(); |
| 968 | 971 |
| 969 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; | 972 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; |
| 970 | 973 |
| 971 ASSERT_EQ(1u, aggregated_pass_list.size()); | 974 ASSERT_EQ(1u, aggregated_pass_list.size()); |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1028 child_nonroot_pass->shared_quad_state_list.front(); | 1031 child_nonroot_pass->shared_quad_state_list.front(); |
| 1029 child_nonroot_pass_sqs->quad_to_target_transform.Translate(5, 0); | 1032 child_nonroot_pass_sqs->quad_to_target_transform.Translate(5, 0); |
| 1030 | 1033 |
| 1031 RenderPass* child_root_pass = child_pass_list[1].get(); | 1034 RenderPass* child_root_pass = child_pass_list[1].get(); |
| 1032 SharedQuadState* child_root_pass_sqs = | 1035 SharedQuadState* child_root_pass_sqs = |
| 1033 child_root_pass->shared_quad_state_list.front(); | 1036 child_root_pass->shared_quad_state_list.front(); |
| 1034 child_root_pass_sqs->quad_to_target_transform.Translate(8, 0); | 1037 child_root_pass_sqs->quad_to_target_transform.Translate(8, 0); |
| 1035 child_root_pass_sqs->is_clipped = true; | 1038 child_root_pass_sqs->is_clipped = true; |
| 1036 child_root_pass_sqs->clip_rect = gfx::Rect(0, 0, 5, 5); | 1039 child_root_pass_sqs->clip_rect = gfx::Rect(0, 0, 5, 5); |
| 1037 | 1040 |
| 1038 scoped_ptr<DelegatedFrameData> child_frame_data(new DelegatedFrameData); | 1041 std::unique_ptr<DelegatedFrameData> child_frame_data( |
| 1042 new DelegatedFrameData); |
| 1039 child_pass_list.swap(child_frame_data->render_pass_list); | 1043 child_pass_list.swap(child_frame_data->render_pass_list); |
| 1040 | 1044 |
| 1041 scoped_ptr<CompositorFrame> child_frame(new CompositorFrame); | 1045 std::unique_ptr<CompositorFrame> child_frame(new CompositorFrame); |
| 1042 child_frame->delegated_frame_data = std::move(child_frame_data); | 1046 child_frame->delegated_frame_data = std::move(child_frame_data); |
| 1043 | 1047 |
| 1044 factory_.SubmitCompositorFrame(child_surface_id, std::move(child_frame), | 1048 factory_.SubmitCompositorFrame(child_surface_id, std::move(child_frame), |
| 1045 SurfaceFactory::DrawCallback()); | 1049 SurfaceFactory::DrawCallback()); |
| 1046 } | 1050 } |
| 1047 | 1051 |
| 1048 // Middle child surface. | 1052 // Middle child surface. |
| 1049 SurfaceId middle_surface_id = allocator_.GenerateId(); | 1053 SurfaceId middle_surface_id = allocator_.GenerateId(); |
| 1050 factory_.Create(middle_surface_id); | 1054 factory_.Create(middle_surface_id); |
| 1051 { | 1055 { |
| 1052 test::Quad middle_quads[] = { | 1056 test::Quad middle_quads[] = { |
| 1053 test::Quad::SurfaceQuad(child_surface_id, 1.f)}; | 1057 test::Quad::SurfaceQuad(child_surface_id, 1.f)}; |
| 1054 test::Pass middle_passes[] = { | 1058 test::Pass middle_passes[] = { |
| 1055 test::Pass(middle_quads, arraysize(middle_quads)), | 1059 test::Pass(middle_quads, arraysize(middle_quads)), |
| 1056 }; | 1060 }; |
| 1057 | 1061 |
| 1058 RenderPassList middle_pass_list; | 1062 RenderPassList middle_pass_list; |
| 1059 AddPasses(&middle_pass_list, gfx::Rect(SurfaceSize()), middle_passes, | 1063 AddPasses(&middle_pass_list, gfx::Rect(SurfaceSize()), middle_passes, |
| 1060 arraysize(middle_passes)); | 1064 arraysize(middle_passes)); |
| 1061 | 1065 |
| 1062 RenderPass* middle_root_pass = middle_pass_list[0].get(); | 1066 RenderPass* middle_root_pass = middle_pass_list[0].get(); |
| 1063 middle_root_pass->quad_list.ElementAt(0)->visible_rect = | 1067 middle_root_pass->quad_list.ElementAt(0)->visible_rect = |
| 1064 gfx::Rect(0, 1, 100, 7); | 1068 gfx::Rect(0, 1, 100, 7); |
| 1065 SharedQuadState* middle_root_pass_sqs = | 1069 SharedQuadState* middle_root_pass_sqs = |
| 1066 middle_root_pass->shared_quad_state_list.front(); | 1070 middle_root_pass->shared_quad_state_list.front(); |
| 1067 middle_root_pass_sqs->quad_to_target_transform.Scale(2, 3); | 1071 middle_root_pass_sqs->quad_to_target_transform.Scale(2, 3); |
| 1068 | 1072 |
| 1069 scoped_ptr<DelegatedFrameData> middle_frame_data(new DelegatedFrameData); | 1073 std::unique_ptr<DelegatedFrameData> middle_frame_data( |
| 1074 new DelegatedFrameData); |
| 1070 middle_pass_list.swap(middle_frame_data->render_pass_list); | 1075 middle_pass_list.swap(middle_frame_data->render_pass_list); |
| 1071 | 1076 |
| 1072 scoped_ptr<CompositorFrame> middle_frame(new CompositorFrame); | 1077 std::unique_ptr<CompositorFrame> middle_frame(new CompositorFrame); |
| 1073 middle_frame->delegated_frame_data = std::move(middle_frame_data); | 1078 middle_frame->delegated_frame_data = std::move(middle_frame_data); |
| 1074 | 1079 |
| 1075 factory_.SubmitCompositorFrame(middle_surface_id, std::move(middle_frame), | 1080 factory_.SubmitCompositorFrame(middle_surface_id, std::move(middle_frame), |
| 1076 SurfaceFactory::DrawCallback()); | 1081 SurfaceFactory::DrawCallback()); |
| 1077 } | 1082 } |
| 1078 | 1083 |
| 1079 // Root surface. | 1084 // Root surface. |
| 1080 test::Quad secondary_quads[] = { | 1085 test::Quad secondary_quads[] = { |
| 1081 test::Quad::SolidColorQuad(1), | 1086 test::Quad::SolidColorQuad(1), |
| 1082 test::Quad::SurfaceQuad(middle_surface_id, 1.f)}; | 1087 test::Quad::SurfaceQuad(middle_surface_id, 1.f)}; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1095 ->shared_quad_state_list.front() | 1100 ->shared_quad_state_list.front() |
| 1096 ->quad_to_target_transform.Translate(0, 7); | 1101 ->quad_to_target_transform.Translate(0, 7); |
| 1097 root_pass_list[0] | 1102 root_pass_list[0] |
| 1098 ->shared_quad_state_list.ElementAt(1) | 1103 ->shared_quad_state_list.ElementAt(1) |
| 1099 ->quad_to_target_transform.Translate(0, 10); | 1104 ->quad_to_target_transform.Translate(0, 10); |
| 1100 root_pass_list[0]->quad_list.ElementAt(1)->visible_rect = | 1105 root_pass_list[0]->quad_list.ElementAt(1)->visible_rect = |
| 1101 gfx::Rect(0, 0, 8, 100); | 1106 gfx::Rect(0, 0, 8, 100); |
| 1102 | 1107 |
| 1103 root_pass_list[0]->transform_to_root_target.Translate(10, 5); | 1108 root_pass_list[0]->transform_to_root_target.Translate(10, 5); |
| 1104 | 1109 |
| 1105 scoped_ptr<DelegatedFrameData> root_frame_data(new DelegatedFrameData); | 1110 std::unique_ptr<DelegatedFrameData> root_frame_data(new DelegatedFrameData); |
| 1106 root_pass_list.swap(root_frame_data->render_pass_list); | 1111 root_pass_list.swap(root_frame_data->render_pass_list); |
| 1107 | 1112 |
| 1108 scoped_ptr<CompositorFrame> root_frame(new CompositorFrame); | 1113 std::unique_ptr<CompositorFrame> root_frame(new CompositorFrame); |
| 1109 root_frame->delegated_frame_data = std::move(root_frame_data); | 1114 root_frame->delegated_frame_data = std::move(root_frame_data); |
| 1110 | 1115 |
| 1111 factory_.SubmitCompositorFrame(root_surface_id_, std::move(root_frame), | 1116 factory_.SubmitCompositorFrame(root_surface_id_, std::move(root_frame), |
| 1112 SurfaceFactory::DrawCallback()); | 1117 SurfaceFactory::DrawCallback()); |
| 1113 | 1118 |
| 1114 scoped_ptr<CompositorFrame> aggregated_frame = | 1119 std::unique_ptr<CompositorFrame> aggregated_frame = |
| 1115 aggregator_.Aggregate(root_surface_id_); | 1120 aggregator_.Aggregate(root_surface_id_); |
| 1116 | 1121 |
| 1117 ASSERT_TRUE(aggregated_frame); | 1122 ASSERT_TRUE(aggregated_frame); |
| 1118 ASSERT_TRUE(aggregated_frame->delegated_frame_data); | 1123 ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
| 1119 | 1124 |
| 1120 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get(); | 1125 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get(); |
| 1121 | 1126 |
| 1122 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; | 1127 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; |
| 1123 | 1128 |
| 1124 ASSERT_EQ(3u, aggregated_pass_list.size()); | 1129 ASSERT_EQ(3u, aggregated_pass_list.size()); |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1202 AddPasses(&child_pass_list, | 1207 AddPasses(&child_pass_list, |
| 1203 gfx::Rect(SurfaceSize()), | 1208 gfx::Rect(SurfaceSize()), |
| 1204 child_passes, | 1209 child_passes, |
| 1205 arraysize(child_passes)); | 1210 arraysize(child_passes)); |
| 1206 | 1211 |
| 1207 RenderPass* child_root_pass = child_pass_list[0].get(); | 1212 RenderPass* child_root_pass = child_pass_list[0].get(); |
| 1208 SharedQuadState* child_root_pass_sqs = | 1213 SharedQuadState* child_root_pass_sqs = |
| 1209 child_root_pass->shared_quad_state_list.front(); | 1214 child_root_pass->shared_quad_state_list.front(); |
| 1210 child_root_pass_sqs->quad_to_target_transform.Translate(8, 0); | 1215 child_root_pass_sqs->quad_to_target_transform.Translate(8, 0); |
| 1211 | 1216 |
| 1212 scoped_ptr<DelegatedFrameData> child_frame_data(new DelegatedFrameData); | 1217 std::unique_ptr<DelegatedFrameData> child_frame_data(new DelegatedFrameData); |
| 1213 child_pass_list.swap(child_frame_data->render_pass_list); | 1218 child_pass_list.swap(child_frame_data->render_pass_list); |
| 1214 | 1219 |
| 1215 scoped_ptr<CompositorFrame> child_frame(new CompositorFrame); | 1220 std::unique_ptr<CompositorFrame> child_frame(new CompositorFrame); |
| 1216 child_frame->delegated_frame_data = std::move(child_frame_data); | 1221 child_frame->delegated_frame_data = std::move(child_frame_data); |
| 1217 | 1222 |
| 1218 SurfaceId child_surface_id = allocator_.GenerateId(); | 1223 SurfaceId child_surface_id = allocator_.GenerateId(); |
| 1219 factory_.Create(child_surface_id); | 1224 factory_.Create(child_surface_id); |
| 1220 factory_.SubmitCompositorFrame(child_surface_id, std::move(child_frame), | 1225 factory_.SubmitCompositorFrame(child_surface_id, std::move(child_frame), |
| 1221 SurfaceFactory::DrawCallback()); | 1226 SurfaceFactory::DrawCallback()); |
| 1222 | 1227 |
| 1223 test::Quad parent_surface_quads[] = { | 1228 test::Quad parent_surface_quads[] = { |
| 1224 test::Quad::SurfaceQuad(child_surface_id, 1.f)}; | 1229 test::Quad::SurfaceQuad(child_surface_id, 1.f)}; |
| 1225 test::Pass parent_surface_passes[] = { | 1230 test::Pass parent_surface_passes[] = { |
| 1226 test::Pass(parent_surface_quads, arraysize(parent_surface_quads), | 1231 test::Pass(parent_surface_quads, arraysize(parent_surface_quads), |
| 1227 RenderPassId(1, 1))}; | 1232 RenderPassId(1, 1))}; |
| 1228 | 1233 |
| 1229 RenderPassList parent_surface_pass_list; | 1234 RenderPassList parent_surface_pass_list; |
| 1230 AddPasses(&parent_surface_pass_list, | 1235 AddPasses(&parent_surface_pass_list, |
| 1231 gfx::Rect(SurfaceSize()), | 1236 gfx::Rect(SurfaceSize()), |
| 1232 parent_surface_passes, | 1237 parent_surface_passes, |
| 1233 arraysize(parent_surface_passes)); | 1238 arraysize(parent_surface_passes)); |
| 1234 | 1239 |
| 1235 // Parent surface is only used to test if the transform is applied correctly | 1240 // Parent surface is only used to test if the transform is applied correctly |
| 1236 // to the child surface's damage. | 1241 // to the child surface's damage. |
| 1237 scoped_ptr<DelegatedFrameData> parent_surface_frame_data( | 1242 std::unique_ptr<DelegatedFrameData> parent_surface_frame_data( |
| 1238 new DelegatedFrameData); | 1243 new DelegatedFrameData); |
| 1239 parent_surface_pass_list.swap(parent_surface_frame_data->render_pass_list); | 1244 parent_surface_pass_list.swap(parent_surface_frame_data->render_pass_list); |
| 1240 | 1245 |
| 1241 scoped_ptr<CompositorFrame> parent_surface_frame(new CompositorFrame); | 1246 std::unique_ptr<CompositorFrame> parent_surface_frame(new CompositorFrame); |
| 1242 parent_surface_frame->delegated_frame_data = | 1247 parent_surface_frame->delegated_frame_data = |
| 1243 std::move(parent_surface_frame_data); | 1248 std::move(parent_surface_frame_data); |
| 1244 | 1249 |
| 1245 SurfaceId parent_surface_id = allocator_.GenerateId(); | 1250 SurfaceId parent_surface_id = allocator_.GenerateId(); |
| 1246 factory_.Create(parent_surface_id); | 1251 factory_.Create(parent_surface_id); |
| 1247 factory_.SubmitCompositorFrame(parent_surface_id, | 1252 factory_.SubmitCompositorFrame(parent_surface_id, |
| 1248 std::move(parent_surface_frame), | 1253 std::move(parent_surface_frame), |
| 1249 SurfaceFactory::DrawCallback()); | 1254 SurfaceFactory::DrawCallback()); |
| 1250 | 1255 |
| 1251 test::Quad root_surface_quads[] = { | 1256 test::Quad root_surface_quads[] = { |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1264 gfx::Rect(SurfaceSize()), | 1269 gfx::Rect(SurfaceSize()), |
| 1265 root_passes, | 1270 root_passes, |
| 1266 arraysize(root_passes)); | 1271 arraysize(root_passes)); |
| 1267 | 1272 |
| 1268 root_pass_list[0] | 1273 root_pass_list[0] |
| 1269 ->shared_quad_state_list.front() | 1274 ->shared_quad_state_list.front() |
| 1270 ->quad_to_target_transform.Translate(0, 10); | 1275 ->quad_to_target_transform.Translate(0, 10); |
| 1271 root_pass_list[0]->damage_rect = gfx::Rect(5, 5, 10, 10); | 1276 root_pass_list[0]->damage_rect = gfx::Rect(5, 5, 10, 10); |
| 1272 root_pass_list[1]->damage_rect = gfx::Rect(5, 5, 100, 100); | 1277 root_pass_list[1]->damage_rect = gfx::Rect(5, 5, 100, 100); |
| 1273 | 1278 |
| 1274 scoped_ptr<DelegatedFrameData> root_frame_data(new DelegatedFrameData); | 1279 std::unique_ptr<DelegatedFrameData> root_frame_data(new DelegatedFrameData); |
| 1275 root_pass_list.swap(root_frame_data->render_pass_list); | 1280 root_pass_list.swap(root_frame_data->render_pass_list); |
| 1276 | 1281 |
| 1277 scoped_ptr<CompositorFrame> root_frame(new CompositorFrame); | 1282 std::unique_ptr<CompositorFrame> root_frame(new CompositorFrame); |
| 1278 root_frame->delegated_frame_data = std::move(root_frame_data); | 1283 root_frame->delegated_frame_data = std::move(root_frame_data); |
| 1279 | 1284 |
| 1280 factory_.SubmitCompositorFrame(root_surface_id_, std::move(root_frame), | 1285 factory_.SubmitCompositorFrame(root_surface_id_, std::move(root_frame), |
| 1281 SurfaceFactory::DrawCallback()); | 1286 SurfaceFactory::DrawCallback()); |
| 1282 | 1287 |
| 1283 scoped_ptr<CompositorFrame> aggregated_frame = | 1288 std::unique_ptr<CompositorFrame> aggregated_frame = |
| 1284 aggregator_.Aggregate(root_surface_id_); | 1289 aggregator_.Aggregate(root_surface_id_); |
| 1285 | 1290 |
| 1286 ASSERT_TRUE(aggregated_frame); | 1291 ASSERT_TRUE(aggregated_frame); |
| 1287 ASSERT_TRUE(aggregated_frame->delegated_frame_data); | 1292 ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
| 1288 | 1293 |
| 1289 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get(); | 1294 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get(); |
| 1290 | 1295 |
| 1291 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; | 1296 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; |
| 1292 | 1297 |
| 1293 ASSERT_EQ(2u, aggregated_pass_list.size()); | 1298 ASSERT_EQ(2u, aggregated_pass_list.size()); |
| 1294 | 1299 |
| 1295 // Damage rect for first aggregation should contain entire root surface. | 1300 // Damage rect for first aggregation should contain entire root surface. |
| 1296 EXPECT_TRUE( | 1301 EXPECT_TRUE( |
| 1297 aggregated_pass_list[1]->damage_rect.Contains(gfx::Rect(SurfaceSize()))); | 1302 aggregated_pass_list[1]->damage_rect.Contains(gfx::Rect(SurfaceSize()))); |
| 1298 | 1303 |
| 1299 { | 1304 { |
| 1300 AddPasses(&child_pass_list, | 1305 AddPasses(&child_pass_list, |
| 1301 gfx::Rect(SurfaceSize()), | 1306 gfx::Rect(SurfaceSize()), |
| 1302 child_passes, | 1307 child_passes, |
| 1303 arraysize(child_passes)); | 1308 arraysize(child_passes)); |
| 1304 | 1309 |
| 1305 RenderPass* child_root_pass = child_pass_list[0].get(); | 1310 RenderPass* child_root_pass = child_pass_list[0].get(); |
| 1306 SharedQuadState* child_root_pass_sqs = | 1311 SharedQuadState* child_root_pass_sqs = |
| 1307 child_root_pass->shared_quad_state_list.front(); | 1312 child_root_pass->shared_quad_state_list.front(); |
| 1308 child_root_pass_sqs->quad_to_target_transform.Translate(8, 0); | 1313 child_root_pass_sqs->quad_to_target_transform.Translate(8, 0); |
| 1309 child_root_pass->damage_rect = gfx::Rect(10, 10, 10, 10); | 1314 child_root_pass->damage_rect = gfx::Rect(10, 10, 10, 10); |
| 1310 | 1315 |
| 1311 scoped_ptr<DelegatedFrameData> child_frame_data(new DelegatedFrameData); | 1316 std::unique_ptr<DelegatedFrameData> child_frame_data( |
| 1317 new DelegatedFrameData); |
| 1312 child_pass_list.swap(child_frame_data->render_pass_list); | 1318 child_pass_list.swap(child_frame_data->render_pass_list); |
| 1313 | 1319 |
| 1314 scoped_ptr<CompositorFrame> child_frame(new CompositorFrame); | 1320 std::unique_ptr<CompositorFrame> child_frame(new CompositorFrame); |
| 1315 child_frame->delegated_frame_data = std::move(child_frame_data); | 1321 child_frame->delegated_frame_data = std::move(child_frame_data); |
| 1316 | 1322 |
| 1317 factory_.SubmitCompositorFrame(child_surface_id, std::move(child_frame), | 1323 factory_.SubmitCompositorFrame(child_surface_id, std::move(child_frame), |
| 1318 SurfaceFactory::DrawCallback()); | 1324 SurfaceFactory::DrawCallback()); |
| 1319 | 1325 |
| 1320 scoped_ptr<CompositorFrame> aggregated_frame = | 1326 std::unique_ptr<CompositorFrame> aggregated_frame = |
| 1321 aggregator_.Aggregate(root_surface_id_); | 1327 aggregator_.Aggregate(root_surface_id_); |
| 1322 | 1328 |
| 1323 ASSERT_TRUE(aggregated_frame); | 1329 ASSERT_TRUE(aggregated_frame); |
| 1324 ASSERT_TRUE(aggregated_frame->delegated_frame_data); | 1330 ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
| 1325 | 1331 |
| 1326 DelegatedFrameData* frame_data = | 1332 DelegatedFrameData* frame_data = |
| 1327 aggregated_frame->delegated_frame_data.get(); | 1333 aggregated_frame->delegated_frame_data.get(); |
| 1328 | 1334 |
| 1329 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; | 1335 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; |
| 1330 | 1336 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1341 AddPasses(&root_pass_list, | 1347 AddPasses(&root_pass_list, |
| 1342 gfx::Rect(SurfaceSize()), | 1348 gfx::Rect(SurfaceSize()), |
| 1343 root_passes, | 1349 root_passes, |
| 1344 arraysize(root_passes)); | 1350 arraysize(root_passes)); |
| 1345 | 1351 |
| 1346 root_pass_list[0] | 1352 root_pass_list[0] |
| 1347 ->shared_quad_state_list.front() | 1353 ->shared_quad_state_list.front() |
| 1348 ->quad_to_target_transform.Translate(0, 10); | 1354 ->quad_to_target_transform.Translate(0, 10); |
| 1349 root_pass_list[0]->damage_rect = gfx::Rect(0, 0, 1, 1); | 1355 root_pass_list[0]->damage_rect = gfx::Rect(0, 0, 1, 1); |
| 1350 | 1356 |
| 1351 scoped_ptr<DelegatedFrameData> root_frame_data(new DelegatedFrameData); | 1357 std::unique_ptr<DelegatedFrameData> root_frame_data(new DelegatedFrameData); |
| 1352 root_pass_list.swap(root_frame_data->render_pass_list); | 1358 root_pass_list.swap(root_frame_data->render_pass_list); |
| 1353 | 1359 |
| 1354 scoped_ptr<CompositorFrame> root_frame(new CompositorFrame); | 1360 std::unique_ptr<CompositorFrame> root_frame(new CompositorFrame); |
| 1355 root_frame->delegated_frame_data = std::move(root_frame_data); | 1361 root_frame->delegated_frame_data = std::move(root_frame_data); |
| 1356 | 1362 |
| 1357 factory_.SubmitCompositorFrame(root_surface_id_, std::move(root_frame), | 1363 factory_.SubmitCompositorFrame(root_surface_id_, std::move(root_frame), |
| 1358 SurfaceFactory::DrawCallback()); | 1364 SurfaceFactory::DrawCallback()); |
| 1359 } | 1365 } |
| 1360 | 1366 |
| 1361 { | 1367 { |
| 1362 RenderPassList root_pass_list; | 1368 RenderPassList root_pass_list; |
| 1363 AddPasses(&root_pass_list, | 1369 AddPasses(&root_pass_list, |
| 1364 gfx::Rect(SurfaceSize()), | 1370 gfx::Rect(SurfaceSize()), |
| 1365 root_passes, | 1371 root_passes, |
| 1366 arraysize(root_passes)); | 1372 arraysize(root_passes)); |
| 1367 | 1373 |
| 1368 root_pass_list[0] | 1374 root_pass_list[0] |
| 1369 ->shared_quad_state_list.front() | 1375 ->shared_quad_state_list.front() |
| 1370 ->quad_to_target_transform.Translate(0, 10); | 1376 ->quad_to_target_transform.Translate(0, 10); |
| 1371 root_pass_list[0]->damage_rect = gfx::Rect(1, 1, 1, 1); | 1377 root_pass_list[0]->damage_rect = gfx::Rect(1, 1, 1, 1); |
| 1372 | 1378 |
| 1373 scoped_ptr<DelegatedFrameData> root_frame_data(new DelegatedFrameData); | 1379 std::unique_ptr<DelegatedFrameData> root_frame_data(new DelegatedFrameData); |
| 1374 root_pass_list.swap(root_frame_data->render_pass_list); | 1380 root_pass_list.swap(root_frame_data->render_pass_list); |
| 1375 | 1381 |
| 1376 scoped_ptr<CompositorFrame> root_frame(new CompositorFrame); | 1382 std::unique_ptr<CompositorFrame> root_frame(new CompositorFrame); |
| 1377 root_frame->delegated_frame_data = std::move(root_frame_data); | 1383 root_frame->delegated_frame_data = std::move(root_frame_data); |
| 1378 | 1384 |
| 1379 factory_.SubmitCompositorFrame(root_surface_id_, std::move(root_frame), | 1385 factory_.SubmitCompositorFrame(root_surface_id_, std::move(root_frame), |
| 1380 SurfaceFactory::DrawCallback()); | 1386 SurfaceFactory::DrawCallback()); |
| 1381 | 1387 |
| 1382 scoped_ptr<CompositorFrame> aggregated_frame = | 1388 std::unique_ptr<CompositorFrame> aggregated_frame = |
| 1383 aggregator_.Aggregate(root_surface_id_); | 1389 aggregator_.Aggregate(root_surface_id_); |
| 1384 | 1390 |
| 1385 ASSERT_TRUE(aggregated_frame); | 1391 ASSERT_TRUE(aggregated_frame); |
| 1386 ASSERT_TRUE(aggregated_frame->delegated_frame_data); | 1392 ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
| 1387 | 1393 |
| 1388 DelegatedFrameData* frame_data = | 1394 DelegatedFrameData* frame_data = |
| 1389 aggregated_frame->delegated_frame_data.get(); | 1395 aggregated_frame->delegated_frame_data.get(); |
| 1390 | 1396 |
| 1391 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; | 1397 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; |
| 1392 | 1398 |
| 1393 ASSERT_EQ(2u, aggregated_pass_list.size()); | 1399 ASSERT_EQ(2u, aggregated_pass_list.size()); |
| 1394 | 1400 |
| 1395 // The root surface was enqueued without being aggregated once, so it should | 1401 // The root surface was enqueued without being aggregated once, so it should |
| 1396 // be treated as completely damaged. | 1402 // be treated as completely damaged. |
| 1397 EXPECT_TRUE(aggregated_pass_list[1]->damage_rect.Contains( | 1403 EXPECT_TRUE(aggregated_pass_list[1]->damage_rect.Contains( |
| 1398 gfx::Rect(SurfaceSize()))); | 1404 gfx::Rect(SurfaceSize()))); |
| 1399 } | 1405 } |
| 1400 | 1406 |
| 1401 // No Surface changed, so no damage should be given. | 1407 // No Surface changed, so no damage should be given. |
| 1402 { | 1408 { |
| 1403 scoped_ptr<CompositorFrame> aggregated_frame = | 1409 std::unique_ptr<CompositorFrame> aggregated_frame = |
| 1404 aggregator_.Aggregate(root_surface_id_); | 1410 aggregator_.Aggregate(root_surface_id_); |
| 1405 | 1411 |
| 1406 ASSERT_TRUE(aggregated_frame); | 1412 ASSERT_TRUE(aggregated_frame); |
| 1407 ASSERT_TRUE(aggregated_frame->delegated_frame_data); | 1413 ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
| 1408 | 1414 |
| 1409 DelegatedFrameData* frame_data = | 1415 DelegatedFrameData* frame_data = |
| 1410 aggregated_frame->delegated_frame_data.get(); | 1416 aggregated_frame->delegated_frame_data.get(); |
| 1411 | 1417 |
| 1412 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; | 1418 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; |
| 1413 | 1419 |
| 1414 ASSERT_EQ(2u, aggregated_pass_list.size()); | 1420 ASSERT_EQ(2u, aggregated_pass_list.size()); |
| 1415 | 1421 |
| 1416 EXPECT_TRUE(aggregated_pass_list[1]->damage_rect.IsEmpty()); | 1422 EXPECT_TRUE(aggregated_pass_list[1]->damage_rect.IsEmpty()); |
| 1417 } | 1423 } |
| 1418 | 1424 |
| 1419 // SetFullDamageRectForSurface should cause the entire output to be | 1425 // SetFullDamageRectForSurface should cause the entire output to be |
| 1420 // marked as damaged. | 1426 // marked as damaged. |
| 1421 { | 1427 { |
| 1422 aggregator_.SetFullDamageForSurface(root_surface_id_); | 1428 aggregator_.SetFullDamageForSurface(root_surface_id_); |
| 1423 scoped_ptr<CompositorFrame> aggregated_frame = | 1429 std::unique_ptr<CompositorFrame> aggregated_frame = |
| 1424 aggregator_.Aggregate(root_surface_id_); | 1430 aggregator_.Aggregate(root_surface_id_); |
| 1425 | 1431 |
| 1426 ASSERT_TRUE(aggregated_frame); | 1432 ASSERT_TRUE(aggregated_frame); |
| 1427 ASSERT_TRUE(aggregated_frame->delegated_frame_data); | 1433 ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
| 1428 | 1434 |
| 1429 DelegatedFrameData* frame_data = | 1435 DelegatedFrameData* frame_data = |
| 1430 aggregated_frame->delegated_frame_data.get(); | 1436 aggregated_frame->delegated_frame_data.get(); |
| 1431 | 1437 |
| 1432 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; | 1438 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; |
| 1433 | 1439 |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1489 arraysize(root_passes)); | 1495 arraysize(root_passes)); |
| 1490 | 1496 |
| 1491 RenderPass* root_pass = root_pass_list[0].get(); | 1497 RenderPass* root_pass = root_pass_list[0].get(); |
| 1492 root_pass->shared_quad_state_list.front() | 1498 root_pass->shared_quad_state_list.front() |
| 1493 ->quad_to_target_transform.Translate(10, 10); | 1499 ->quad_to_target_transform.Translate(10, 10); |
| 1494 root_pass->damage_rect = gfx::Rect(0, 0, 1, 1); | 1500 root_pass->damage_rect = gfx::Rect(0, 0, 1, 1); |
| 1495 | 1501 |
| 1496 SubmitPassListAsFrame(root_surface_id_, &root_pass_list); | 1502 SubmitPassListAsFrame(root_surface_id_, &root_pass_list); |
| 1497 } | 1503 } |
| 1498 | 1504 |
| 1499 scoped_ptr<CompositorFrame> aggregated_frame = | 1505 std::unique_ptr<CompositorFrame> aggregated_frame = |
| 1500 aggregator_.Aggregate(root_surface_id_); | 1506 aggregator_.Aggregate(root_surface_id_); |
| 1501 | 1507 |
| 1502 ASSERT_TRUE(aggregated_frame); | 1508 ASSERT_TRUE(aggregated_frame); |
| 1503 ASSERT_TRUE(aggregated_frame->delegated_frame_data); | 1509 ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
| 1504 | 1510 |
| 1505 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get(); | 1511 DelegatedFrameData* frame_data = aggregated_frame->delegated_frame_data.get(); |
| 1506 | 1512 |
| 1507 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; | 1513 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; |
| 1508 | 1514 |
| 1509 ASSERT_EQ(2u, aggregated_pass_list.size()); | 1515 ASSERT_EQ(2u, aggregated_pass_list.size()); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1524 arraysize(root_passes)); | 1530 arraysize(root_passes)); |
| 1525 | 1531 |
| 1526 RenderPass* root_pass = root_pass_list[0].get(); | 1532 RenderPass* root_pass = root_pass_list[0].get(); |
| 1527 root_pass->shared_quad_state_list.front() | 1533 root_pass->shared_quad_state_list.front() |
| 1528 ->quad_to_target_transform.Translate(10, 10); | 1534 ->quad_to_target_transform.Translate(10, 10); |
| 1529 root_pass->damage_rect = gfx::Rect(10, 10, 2, 2); | 1535 root_pass->damage_rect = gfx::Rect(10, 10, 2, 2); |
| 1530 SubmitPassListAsFrame(root_surface_id_, &root_pass_list); | 1536 SubmitPassListAsFrame(root_surface_id_, &root_pass_list); |
| 1531 } | 1537 } |
| 1532 | 1538 |
| 1533 { | 1539 { |
| 1534 scoped_ptr<CompositorFrame> aggregated_frame = | 1540 std::unique_ptr<CompositorFrame> aggregated_frame = |
| 1535 aggregator_.Aggregate(root_surface_id_); | 1541 aggregator_.Aggregate(root_surface_id_); |
| 1536 | 1542 |
| 1537 ASSERT_TRUE(aggregated_frame); | 1543 ASSERT_TRUE(aggregated_frame); |
| 1538 ASSERT_TRUE(aggregated_frame->delegated_frame_data); | 1544 ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
| 1539 | 1545 |
| 1540 DelegatedFrameData* frame_data = | 1546 DelegatedFrameData* frame_data = |
| 1541 aggregated_frame->delegated_frame_data.get(); | 1547 aggregated_frame->delegated_frame_data.get(); |
| 1542 | 1548 |
| 1543 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; | 1549 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; |
| 1544 | 1550 |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1579 | 1585 |
| 1580 RenderPass* child_root_pass = child_pass_list[1].get(); | 1586 RenderPass* child_root_pass = child_pass_list[1].get(); |
| 1581 | 1587 |
| 1582 child_root_pass->copy_requests.push_back( | 1588 child_root_pass->copy_requests.push_back( |
| 1583 CopyOutputRequest::CreateEmptyRequest()); | 1589 CopyOutputRequest::CreateEmptyRequest()); |
| 1584 child_root_pass->damage_rect = gfx::Rect(); | 1590 child_root_pass->damage_rect = gfx::Rect(); |
| 1585 SubmitPassListAsFrame(child_surface_id, &child_pass_list); | 1591 SubmitPassListAsFrame(child_surface_id, &child_pass_list); |
| 1586 } | 1592 } |
| 1587 | 1593 |
| 1588 { | 1594 { |
| 1589 scoped_ptr<CompositorFrame> aggregated_frame = | 1595 std::unique_ptr<CompositorFrame> aggregated_frame = |
| 1590 aggregator_.Aggregate(root_surface_id_); | 1596 aggregator_.Aggregate(root_surface_id_); |
| 1591 | 1597 |
| 1592 ASSERT_TRUE(aggregated_frame); | 1598 ASSERT_TRUE(aggregated_frame); |
| 1593 ASSERT_TRUE(aggregated_frame->delegated_frame_data); | 1599 ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
| 1594 | 1600 |
| 1595 DelegatedFrameData* frame_data = | 1601 DelegatedFrameData* frame_data = |
| 1596 aggregated_frame->delegated_frame_data.get(); | 1602 aggregated_frame->delegated_frame_data.get(); |
| 1597 | 1603 |
| 1598 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; | 1604 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; |
| 1599 | 1605 |
| 1600 // Output frame should have no damage, but all quads included. | 1606 // Output frame should have no damage, but all quads included. |
| 1601 ASSERT_EQ(3u, aggregated_pass_list.size()); | 1607 ASSERT_EQ(3u, aggregated_pass_list.size()); |
| 1602 | 1608 |
| 1603 EXPECT_TRUE(aggregated_pass_list[1]->damage_rect.IsEmpty()); | 1609 EXPECT_TRUE(aggregated_pass_list[1]->damage_rect.IsEmpty()); |
| 1604 ASSERT_EQ(1u, aggregated_pass_list[0]->quad_list.size()); | 1610 ASSERT_EQ(1u, aggregated_pass_list[0]->quad_list.size()); |
| 1605 ASSERT_EQ(1u, aggregated_pass_list[1]->quad_list.size()); | 1611 ASSERT_EQ(1u, aggregated_pass_list[1]->quad_list.size()); |
| 1606 EXPECT_EQ(gfx::Rect(1, 1, 2, 2), | 1612 EXPECT_EQ(gfx::Rect(1, 1, 2, 2), |
| 1607 aggregated_pass_list[0]->quad_list.ElementAt(0)->visible_rect); | 1613 aggregated_pass_list[0]->quad_list.ElementAt(0)->visible_rect); |
| 1608 EXPECT_EQ(gfx::Rect(0, 0, 2, 2), | 1614 EXPECT_EQ(gfx::Rect(0, 0, 2, 2), |
| 1609 aggregated_pass_list[1]->quad_list.ElementAt(0)->visible_rect); | 1615 aggregated_pass_list[1]->quad_list.ElementAt(0)->visible_rect); |
| 1610 } | 1616 } |
| 1611 | 1617 |
| 1612 { | 1618 { |
| 1613 scoped_ptr<CompositorFrame> aggregated_frame = | 1619 std::unique_ptr<CompositorFrame> aggregated_frame = |
| 1614 aggregator_.Aggregate(root_surface_id_); | 1620 aggregator_.Aggregate(root_surface_id_); |
| 1615 | 1621 |
| 1616 ASSERT_TRUE(aggregated_frame); | 1622 ASSERT_TRUE(aggregated_frame); |
| 1617 ASSERT_TRUE(aggregated_frame->delegated_frame_data); | 1623 ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
| 1618 | 1624 |
| 1619 DelegatedFrameData* frame_data = | 1625 DelegatedFrameData* frame_data = |
| 1620 aggregated_frame->delegated_frame_data.get(); | 1626 aggregated_frame->delegated_frame_data.get(); |
| 1621 | 1627 |
| 1622 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; | 1628 const RenderPassList& aggregated_pass_list = frame_data->render_pass_list; |
| 1623 // There were no changes since last aggregation, so output should be empty | 1629 // There were no changes since last aggregation, so output should be empty |
| 1624 // and have no damage. | 1630 // and have no damage. |
| 1625 ASSERT_EQ(1u, aggregated_pass_list.size()); | 1631 ASSERT_EQ(1u, aggregated_pass_list.size()); |
| 1626 EXPECT_TRUE(aggregated_pass_list[0]->damage_rect.IsEmpty()); | 1632 EXPECT_TRUE(aggregated_pass_list[0]->damage_rect.IsEmpty()); |
| 1627 ASSERT_EQ(0u, aggregated_pass_list[0]->quad_list.size()); | 1633 ASSERT_EQ(0u, aggregated_pass_list[0]->quad_list.size()); |
| 1628 } | 1634 } |
| 1629 | 1635 |
| 1630 factory_.Destroy(child_surface_id); | 1636 factory_.Destroy(child_surface_id); |
| 1631 } | 1637 } |
| 1632 | 1638 |
| 1633 class SurfaceAggregatorWithResourcesTest : public testing::Test { | 1639 class SurfaceAggregatorWithResourcesTest : public testing::Test { |
| 1634 public: | 1640 public: |
| 1635 void SetUp() override { | 1641 void SetUp() override { |
| 1636 output_surface_ = FakeOutputSurface::CreateSoftware( | 1642 output_surface_ = FakeOutputSurface::CreateSoftware( |
| 1637 make_scoped_ptr(new SoftwareOutputDevice)); | 1643 base::WrapUnique(new SoftwareOutputDevice)); |
| 1638 output_surface_->BindToClient(&output_surface_client_); | 1644 output_surface_->BindToClient(&output_surface_client_); |
| 1639 shared_bitmap_manager_.reset(new TestSharedBitmapManager); | 1645 shared_bitmap_manager_.reset(new TestSharedBitmapManager); |
| 1640 | 1646 |
| 1641 resource_provider_ = FakeResourceProvider::Create( | 1647 resource_provider_ = FakeResourceProvider::Create( |
| 1642 output_surface_.get(), shared_bitmap_manager_.get()); | 1648 output_surface_.get(), shared_bitmap_manager_.get()); |
| 1643 | 1649 |
| 1644 aggregator_.reset( | 1650 aggregator_.reset( |
| 1645 new SurfaceAggregator(&manager_, resource_provider_.get(), false)); | 1651 new SurfaceAggregator(&manager_, resource_provider_.get(), false)); |
| 1646 } | 1652 } |
| 1647 | 1653 |
| 1648 protected: | 1654 protected: |
| 1649 SurfaceManager manager_; | 1655 SurfaceManager manager_; |
| 1650 FakeOutputSurfaceClient output_surface_client_; | 1656 FakeOutputSurfaceClient output_surface_client_; |
| 1651 scoped_ptr<OutputSurface> output_surface_; | 1657 std::unique_ptr<OutputSurface> output_surface_; |
| 1652 scoped_ptr<SharedBitmapManager> shared_bitmap_manager_; | 1658 std::unique_ptr<SharedBitmapManager> shared_bitmap_manager_; |
| 1653 scoped_ptr<ResourceProvider> resource_provider_; | 1659 std::unique_ptr<ResourceProvider> resource_provider_; |
| 1654 scoped_ptr<SurfaceAggregator> aggregator_; | 1660 std::unique_ptr<SurfaceAggregator> aggregator_; |
| 1655 }; | 1661 }; |
| 1656 | 1662 |
| 1657 class ResourceTrackingSurfaceFactoryClient : public SurfaceFactoryClient { | 1663 class ResourceTrackingSurfaceFactoryClient : public SurfaceFactoryClient { |
| 1658 public: | 1664 public: |
| 1659 ResourceTrackingSurfaceFactoryClient() {} | 1665 ResourceTrackingSurfaceFactoryClient() {} |
| 1660 ~ResourceTrackingSurfaceFactoryClient() override {} | 1666 ~ResourceTrackingSurfaceFactoryClient() override {} |
| 1661 | 1667 |
| 1662 void ReturnResources(const ReturnedResourceArray& resources) override { | 1668 void ReturnResources(const ReturnedResourceArray& resources) override { |
| 1663 returned_resources_ = resources; | 1669 returned_resources_ = resources; |
| 1664 } | 1670 } |
| 1665 | 1671 |
| 1666 ReturnedResourceArray returned_resources() const { | 1672 ReturnedResourceArray returned_resources() const { |
| 1667 return returned_resources_; | 1673 return returned_resources_; |
| 1668 } | 1674 } |
| 1669 | 1675 |
| 1670 void SetBeginFrameSource(BeginFrameSource* begin_frame_source) override {} | 1676 void SetBeginFrameSource(BeginFrameSource* begin_frame_source) override {} |
| 1671 | 1677 |
| 1672 private: | 1678 private: |
| 1673 ReturnedResourceArray returned_resources_; | 1679 ReturnedResourceArray returned_resources_; |
| 1674 | 1680 |
| 1675 DISALLOW_COPY_AND_ASSIGN(ResourceTrackingSurfaceFactoryClient); | 1681 DISALLOW_COPY_AND_ASSIGN(ResourceTrackingSurfaceFactoryClient); |
| 1676 }; | 1682 }; |
| 1677 | 1683 |
| 1678 void SubmitCompositorFrameWithResources(ResourceId* resource_ids, | 1684 void SubmitCompositorFrameWithResources(ResourceId* resource_ids, |
| 1679 size_t num_resource_ids, | 1685 size_t num_resource_ids, |
| 1680 bool valid, | 1686 bool valid, |
| 1681 SurfaceId child_id, | 1687 SurfaceId child_id, |
| 1682 SurfaceFactory* factory, | 1688 SurfaceFactory* factory, |
| 1683 SurfaceId surface_id) { | 1689 SurfaceId surface_id) { |
| 1684 scoped_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); | 1690 std::unique_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); |
| 1685 scoped_ptr<RenderPass> pass = RenderPass::Create(); | 1691 std::unique_ptr<RenderPass> pass = RenderPass::Create(); |
| 1686 pass->id = RenderPassId(1, 1); | 1692 pass->id = RenderPassId(1, 1); |
| 1687 SharedQuadState* sqs = pass->CreateAndAppendSharedQuadState(); | 1693 SharedQuadState* sqs = pass->CreateAndAppendSharedQuadState(); |
| 1688 sqs->opacity = 1.f; | 1694 sqs->opacity = 1.f; |
| 1689 if (!child_id.is_null()) { | 1695 if (!child_id.is_null()) { |
| 1690 SurfaceDrawQuad* surface_quad = | 1696 SurfaceDrawQuad* surface_quad = |
| 1691 pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); | 1697 pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); |
| 1692 surface_quad->SetNew(sqs, gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1), | 1698 surface_quad->SetNew(sqs, gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1), |
| 1693 child_id); | 1699 child_id); |
| 1694 } | 1700 } |
| 1695 | 1701 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1710 SkColor background_color = SK_ColorGREEN; | 1716 SkColor background_color = SK_ColorGREEN; |
| 1711 const float vertex_opacity[4] = {0.f, 0.f, 1.f, 1.f}; | 1717 const float vertex_opacity[4] = {0.f, 0.f, 1.f, 1.f}; |
| 1712 bool flipped = false; | 1718 bool flipped = false; |
| 1713 bool nearest_neighbor = false; | 1719 bool nearest_neighbor = false; |
| 1714 quad->SetAll(sqs, rect, opaque_rect, visible_rect, needs_blending, | 1720 quad->SetAll(sqs, rect, opaque_rect, visible_rect, needs_blending, |
| 1715 resource_ids[i], gfx::Size(), premultiplied_alpha, uv_top_left, | 1721 resource_ids[i], gfx::Size(), premultiplied_alpha, uv_top_left, |
| 1716 uv_bottom_right, background_color, vertex_opacity, flipped, | 1722 uv_bottom_right, background_color, vertex_opacity, flipped, |
| 1717 nearest_neighbor); | 1723 nearest_neighbor); |
| 1718 } | 1724 } |
| 1719 frame_data->render_pass_list.push_back(std::move(pass)); | 1725 frame_data->render_pass_list.push_back(std::move(pass)); |
| 1720 scoped_ptr<CompositorFrame> frame(new CompositorFrame); | 1726 std::unique_ptr<CompositorFrame> frame(new CompositorFrame); |
| 1721 frame->delegated_frame_data = std::move(frame_data); | 1727 frame->delegated_frame_data = std::move(frame_data); |
| 1722 factory->SubmitCompositorFrame(surface_id, std::move(frame), | 1728 factory->SubmitCompositorFrame(surface_id, std::move(frame), |
| 1723 SurfaceFactory::DrawCallback()); | 1729 SurfaceFactory::DrawCallback()); |
| 1724 } | 1730 } |
| 1725 | 1731 |
| 1726 TEST_F(SurfaceAggregatorWithResourcesTest, TakeResourcesOneSurface) { | 1732 TEST_F(SurfaceAggregatorWithResourcesTest, TakeResourcesOneSurface) { |
| 1727 ResourceTrackingSurfaceFactoryClient client; | 1733 ResourceTrackingSurfaceFactoryClient client; |
| 1728 SurfaceFactory factory(&manager_, &client); | 1734 SurfaceFactory factory(&manager_, &client); |
| 1729 SurfaceId surface_id(7u); | 1735 SurfaceId surface_id(7u); |
| 1730 factory.Create(surface_id); | 1736 factory.Create(surface_id); |
| 1731 | 1737 |
| 1732 ResourceId ids[] = {11, 12, 13}; | 1738 ResourceId ids[] = {11, 12, 13}; |
| 1733 SubmitCompositorFrameWithResources(ids, arraysize(ids), true, SurfaceId(), | 1739 SubmitCompositorFrameWithResources(ids, arraysize(ids), true, SurfaceId(), |
| 1734 &factory, surface_id); | 1740 &factory, surface_id); |
| 1735 | 1741 |
| 1736 scoped_ptr<CompositorFrame> frame = aggregator_->Aggregate(surface_id); | 1742 std::unique_ptr<CompositorFrame> frame = aggregator_->Aggregate(surface_id); |
| 1737 | 1743 |
| 1738 // Nothing should be available to be returned yet. | 1744 // Nothing should be available to be returned yet. |
| 1739 EXPECT_TRUE(client.returned_resources().empty()); | 1745 EXPECT_TRUE(client.returned_resources().empty()); |
| 1740 | 1746 |
| 1741 SubmitCompositorFrameWithResources(NULL, 0u, true, SurfaceId(), &factory, | 1747 SubmitCompositorFrameWithResources(NULL, 0u, true, SurfaceId(), &factory, |
| 1742 surface_id); | 1748 surface_id); |
| 1743 | 1749 |
| 1744 frame = aggregator_->Aggregate(surface_id); | 1750 frame = aggregator_->Aggregate(surface_id); |
| 1745 | 1751 |
| 1746 ASSERT_EQ(3u, client.returned_resources().size()); | 1752 ASSERT_EQ(3u, client.returned_resources().size()); |
| 1747 ResourceId returned_ids[3]; | 1753 ResourceId returned_ids[3]; |
| 1748 for (size_t i = 0; i < 3; ++i) { | 1754 for (size_t i = 0; i < 3; ++i) { |
| 1749 returned_ids[i] = client.returned_resources()[i].id; | 1755 returned_ids[i] = client.returned_resources()[i].id; |
| 1750 } | 1756 } |
| 1751 EXPECT_THAT(returned_ids, | 1757 EXPECT_THAT(returned_ids, |
| 1752 testing::WhenSorted(testing::ElementsAreArray(ids))); | 1758 testing::WhenSorted(testing::ElementsAreArray(ids))); |
| 1753 factory.Destroy(surface_id); | 1759 factory.Destroy(surface_id); |
| 1754 } | 1760 } |
| 1755 | 1761 |
| 1756 TEST_F(SurfaceAggregatorWithResourcesTest, TakeInvalidResources) { | 1762 TEST_F(SurfaceAggregatorWithResourcesTest, TakeInvalidResources) { |
| 1757 ResourceTrackingSurfaceFactoryClient client; | 1763 ResourceTrackingSurfaceFactoryClient client; |
| 1758 SurfaceFactory factory(&manager_, &client); | 1764 SurfaceFactory factory(&manager_, &client); |
| 1759 SurfaceId surface_id(7u); | 1765 SurfaceId surface_id(7u); |
| 1760 factory.Create(surface_id); | 1766 factory.Create(surface_id); |
| 1761 | 1767 |
| 1762 scoped_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); | 1768 std::unique_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); |
| 1763 scoped_ptr<RenderPass> pass = RenderPass::Create(); | 1769 std::unique_ptr<RenderPass> pass = RenderPass::Create(); |
| 1764 pass->id = RenderPassId(1, 1); | 1770 pass->id = RenderPassId(1, 1); |
| 1765 TransferableResource resource; | 1771 TransferableResource resource; |
| 1766 resource.id = 11; | 1772 resource.id = 11; |
| 1767 // ResourceProvider is software but resource is not, so it should be | 1773 // ResourceProvider is software but resource is not, so it should be |
| 1768 // ignored. | 1774 // ignored. |
| 1769 resource.is_software = false; | 1775 resource.is_software = false; |
| 1770 frame_data->resource_list.push_back(resource); | 1776 frame_data->resource_list.push_back(resource); |
| 1771 frame_data->render_pass_list.push_back(std::move(pass)); | 1777 frame_data->render_pass_list.push_back(std::move(pass)); |
| 1772 scoped_ptr<CompositorFrame> frame(new CompositorFrame); | 1778 std::unique_ptr<CompositorFrame> frame(new CompositorFrame); |
| 1773 frame->delegated_frame_data = std::move(frame_data); | 1779 frame->delegated_frame_data = std::move(frame_data); |
| 1774 factory.SubmitCompositorFrame(surface_id, std::move(frame), | 1780 factory.SubmitCompositorFrame(surface_id, std::move(frame), |
| 1775 SurfaceFactory::DrawCallback()); | 1781 SurfaceFactory::DrawCallback()); |
| 1776 | 1782 |
| 1777 scoped_ptr<CompositorFrame> returned_frame = | 1783 std::unique_ptr<CompositorFrame> returned_frame = |
| 1778 aggregator_->Aggregate(surface_id); | 1784 aggregator_->Aggregate(surface_id); |
| 1779 | 1785 |
| 1780 // Nothing should be available to be returned yet. | 1786 // Nothing should be available to be returned yet. |
| 1781 EXPECT_TRUE(client.returned_resources().empty()); | 1787 EXPECT_TRUE(client.returned_resources().empty()); |
| 1782 | 1788 |
| 1783 SubmitCompositorFrameWithResources(NULL, 0, true, SurfaceId(), &factory, | 1789 SubmitCompositorFrameWithResources(NULL, 0, true, SurfaceId(), &factory, |
| 1784 surface_id); | 1790 surface_id); |
| 1785 ASSERT_EQ(1u, client.returned_resources().size()); | 1791 ASSERT_EQ(1u, client.returned_resources().size()); |
| 1786 EXPECT_EQ(11u, client.returned_resources()[0].id); | 1792 EXPECT_EQ(11u, client.returned_resources()[0].id); |
| 1787 | 1793 |
| 1788 factory.Destroy(surface_id); | 1794 factory.Destroy(surface_id); |
| 1789 } | 1795 } |
| 1790 | 1796 |
| 1791 TEST_F(SurfaceAggregatorWithResourcesTest, TwoSurfaces) { | 1797 TEST_F(SurfaceAggregatorWithResourcesTest, TwoSurfaces) { |
| 1792 ResourceTrackingSurfaceFactoryClient client; | 1798 ResourceTrackingSurfaceFactoryClient client; |
| 1793 SurfaceFactory factory(&manager_, &client); | 1799 SurfaceFactory factory(&manager_, &client); |
| 1794 SurfaceId surface1_id(7u); | 1800 SurfaceId surface1_id(7u); |
| 1795 factory.Create(surface1_id); | 1801 factory.Create(surface1_id); |
| 1796 | 1802 |
| 1797 SurfaceId surface2_id(8u); | 1803 SurfaceId surface2_id(8u); |
| 1798 factory.Create(surface2_id); | 1804 factory.Create(surface2_id); |
| 1799 | 1805 |
| 1800 ResourceId ids[] = {11, 12, 13}; | 1806 ResourceId ids[] = {11, 12, 13}; |
| 1801 SubmitCompositorFrameWithResources(ids, arraysize(ids), true, SurfaceId(), | 1807 SubmitCompositorFrameWithResources(ids, arraysize(ids), true, SurfaceId(), |
| 1802 &factory, surface1_id); | 1808 &factory, surface1_id); |
| 1803 ResourceId ids2[] = {14, 15, 16}; | 1809 ResourceId ids2[] = {14, 15, 16}; |
| 1804 SubmitCompositorFrameWithResources(ids2, arraysize(ids2), true, SurfaceId(), | 1810 SubmitCompositorFrameWithResources(ids2, arraysize(ids2), true, SurfaceId(), |
| 1805 &factory, surface2_id); | 1811 &factory, surface2_id); |
| 1806 | 1812 |
| 1807 scoped_ptr<CompositorFrame> frame = aggregator_->Aggregate(surface1_id); | 1813 std::unique_ptr<CompositorFrame> frame = aggregator_->Aggregate(surface1_id); |
| 1808 | 1814 |
| 1809 SubmitCompositorFrameWithResources(NULL, 0, true, SurfaceId(), &factory, | 1815 SubmitCompositorFrameWithResources(NULL, 0, true, SurfaceId(), &factory, |
| 1810 surface1_id); | 1816 surface1_id); |
| 1811 | 1817 |
| 1812 // Nothing should be available to be returned yet. | 1818 // Nothing should be available to be returned yet. |
| 1813 EXPECT_TRUE(client.returned_resources().empty()); | 1819 EXPECT_TRUE(client.returned_resources().empty()); |
| 1814 | 1820 |
| 1815 frame = aggregator_->Aggregate(surface2_id); | 1821 frame = aggregator_->Aggregate(surface2_id); |
| 1816 | 1822 |
| 1817 // surface1_id wasn't referenced, so its resources should be returned. | 1823 // surface1_id wasn't referenced, so its resources should be returned. |
| (...skipping 28 matching lines...) Expand all Loading... |
| 1846 ResourceId ids2[] = {17, 18, 19}; | 1852 ResourceId ids2[] = {17, 18, 19}; |
| 1847 SubmitCompositorFrameWithResources(ids2, arraysize(ids2), false, | 1853 SubmitCompositorFrameWithResources(ids2, arraysize(ids2), false, |
| 1848 child_surface_id, &factory, | 1854 child_surface_id, &factory, |
| 1849 middle_surface_id); | 1855 middle_surface_id); |
| 1850 | 1856 |
| 1851 ResourceId ids3[] = {20, 21, 22}; | 1857 ResourceId ids3[] = {20, 21, 22}; |
| 1852 SubmitCompositorFrameWithResources(ids3, arraysize(ids3), true, | 1858 SubmitCompositorFrameWithResources(ids3, arraysize(ids3), true, |
| 1853 middle_surface_id, &factory, | 1859 middle_surface_id, &factory, |
| 1854 root_surface_id); | 1860 root_surface_id); |
| 1855 | 1861 |
| 1856 scoped_ptr<CompositorFrame> frame; | 1862 std::unique_ptr<CompositorFrame> frame; |
| 1857 frame = aggregator_->Aggregate(root_surface_id); | 1863 frame = aggregator_->Aggregate(root_surface_id); |
| 1858 | 1864 |
| 1859 RenderPassList* pass_list = &frame->delegated_frame_data->render_pass_list; | 1865 RenderPassList* pass_list = &frame->delegated_frame_data->render_pass_list; |
| 1860 ASSERT_EQ(1u, pass_list->size()); | 1866 ASSERT_EQ(1u, pass_list->size()); |
| 1861 EXPECT_EQ(1u, pass_list->back()->shared_quad_state_list.size()); | 1867 EXPECT_EQ(1u, pass_list->back()->shared_quad_state_list.size()); |
| 1862 EXPECT_EQ(3u, pass_list->back()->quad_list.size()); | 1868 EXPECT_EQ(3u, pass_list->back()->quad_list.size()); |
| 1863 | 1869 |
| 1864 SubmitCompositorFrameWithResources(ids2, arraysize(ids), true, | 1870 SubmitCompositorFrameWithResources(ids2, arraysize(ids), true, |
| 1865 child_surface_id, &factory, | 1871 child_surface_id, &factory, |
| 1866 middle_surface_id); | 1872 middle_surface_id); |
| 1867 | 1873 |
| 1868 frame = aggregator_->Aggregate(root_surface_id); | 1874 frame = aggregator_->Aggregate(root_surface_id); |
| 1869 | 1875 |
| 1870 pass_list = &frame->delegated_frame_data->render_pass_list; | 1876 pass_list = &frame->delegated_frame_data->render_pass_list; |
| 1871 ASSERT_EQ(1u, pass_list->size()); | 1877 ASSERT_EQ(1u, pass_list->size()); |
| 1872 EXPECT_EQ(3u, pass_list->back()->shared_quad_state_list.size()); | 1878 EXPECT_EQ(3u, pass_list->back()->shared_quad_state_list.size()); |
| 1873 EXPECT_EQ(9u, pass_list->back()->quad_list.size()); | 1879 EXPECT_EQ(9u, pass_list->back()->quad_list.size()); |
| 1874 | 1880 |
| 1875 factory.Destroy(root_surface_id); | 1881 factory.Destroy(root_surface_id); |
| 1876 factory.Destroy(child_surface_id); | 1882 factory.Destroy(child_surface_id); |
| 1877 factory.Destroy(middle_surface_id); | 1883 factory.Destroy(middle_surface_id); |
| 1878 } | 1884 } |
| 1879 | 1885 |
| 1880 } // namespace | 1886 } // namespace |
| 1881 } // namespace cc | 1887 } // namespace cc |
| 1882 | 1888 |
| OLD | NEW |