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 "base/bind.h" | 5 #include "base/bind.h" |
6 #include "cc/output/compositor_frame.h" | 6 #include "cc/output/compositor_frame.h" |
7 #include "cc/output/delegated_frame_data.h" | 7 #include "cc/output/delegated_frame_data.h" |
8 #include "cc/resources/resource_provider.h" | 8 #include "cc/resources/resource_provider.h" |
9 #include "cc/surfaces/surface.h" | 9 #include "cc/surfaces/surface.h" |
10 #include "cc/surfaces/surface_factory.h" | 10 #include "cc/surfaces/surface_factory.h" |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
62 void SubmitCompositorFrameWithResources(ResourceId* resource_ids, | 62 void SubmitCompositorFrameWithResources(ResourceId* resource_ids, |
63 size_t num_resource_ids) { | 63 size_t num_resource_ids) { |
64 scoped_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); | 64 scoped_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); |
65 for (size_t i = 0u; i < num_resource_ids; ++i) { | 65 for (size_t i = 0u; i < num_resource_ids; ++i) { |
66 TransferableResource resource; | 66 TransferableResource resource; |
67 resource.id = resource_ids[i]; | 67 resource.id = resource_ids[i]; |
68 resource.mailbox_holder.texture_target = GL_TEXTURE_2D; | 68 resource.mailbox_holder.texture_target = GL_TEXTURE_2D; |
69 frame_data->resource_list.push_back(resource); | 69 frame_data->resource_list.push_back(resource); |
70 } | 70 } |
71 scoped_ptr<CompositorFrame> frame(new CompositorFrame); | 71 scoped_ptr<CompositorFrame> frame(new CompositorFrame); |
72 frame->delegated_frame_data = frame_data.Pass(); | 72 frame->delegated_frame_data = std::move(frame_data); |
73 factory_->SubmitCompositorFrame(surface_id_, frame.Pass(), | 73 factory_->SubmitCompositorFrame(surface_id_, std::move(frame), |
74 SurfaceFactory::DrawCallback()); | 74 SurfaceFactory::DrawCallback()); |
75 } | 75 } |
76 | 76 |
77 void UnrefResources(ResourceId* ids_to_unref, | 77 void UnrefResources(ResourceId* ids_to_unref, |
78 int* counts_to_unref, | 78 int* counts_to_unref, |
79 size_t num_ids_to_unref) { | 79 size_t num_ids_to_unref) { |
80 ReturnedResourceArray unref_array; | 80 ReturnedResourceArray unref_array; |
81 for (size_t i = 0; i < num_ids_to_unref; ++i) { | 81 for (size_t i = 0; i < num_ids_to_unref; ++i) { |
82 ReturnedResource resource; | 82 ReturnedResource resource; |
83 resource.id = ids_to_unref[i]; | 83 resource.id = ids_to_unref[i]; |
(...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
382 | 382 |
383 TEST_F(SurfaceFactoryTest, BlankNoIndexIncrement) { | 383 TEST_F(SurfaceFactoryTest, BlankNoIndexIncrement) { |
384 SurfaceId surface_id(6); | 384 SurfaceId surface_id(6); |
385 factory_->Create(surface_id); | 385 factory_->Create(surface_id); |
386 Surface* surface = manager_.GetSurfaceForId(surface_id); | 386 Surface* surface = manager_.GetSurfaceForId(surface_id); |
387 ASSERT_NE(nullptr, surface); | 387 ASSERT_NE(nullptr, surface); |
388 EXPECT_EQ(2, surface->frame_index()); | 388 EXPECT_EQ(2, surface->frame_index()); |
389 scoped_ptr<CompositorFrame> frame(new CompositorFrame); | 389 scoped_ptr<CompositorFrame> frame(new CompositorFrame); |
390 frame->delegated_frame_data.reset(new DelegatedFrameData); | 390 frame->delegated_frame_data.reset(new DelegatedFrameData); |
391 | 391 |
392 factory_->SubmitCompositorFrame(surface_id, frame.Pass(), | 392 factory_->SubmitCompositorFrame(surface_id, std::move(frame), |
393 SurfaceFactory::DrawCallback()); | 393 SurfaceFactory::DrawCallback()); |
394 EXPECT_EQ(2, surface->frame_index()); | 394 EXPECT_EQ(2, surface->frame_index()); |
395 factory_->Destroy(surface_id); | 395 factory_->Destroy(surface_id); |
396 } | 396 } |
397 | 397 |
398 void DrawCallback(uint32* execute_count, | 398 void DrawCallback(uint32* execute_count, |
399 SurfaceDrawStatus* result, | 399 SurfaceDrawStatus* result, |
400 SurfaceDrawStatus drawn) { | 400 SurfaceDrawStatus drawn) { |
401 *execute_count += 1; | 401 *execute_count += 1; |
402 *result = drawn; | 402 *result = drawn; |
403 } | 403 } |
404 | 404 |
405 // Tests doing a DestroyAll before shutting down the factory; | 405 // Tests doing a DestroyAll before shutting down the factory; |
406 TEST_F(SurfaceFactoryTest, DestroyAll) { | 406 TEST_F(SurfaceFactoryTest, DestroyAll) { |
407 SurfaceId id(7); | 407 SurfaceId id(7); |
408 factory_->Create(id); | 408 factory_->Create(id); |
409 | 409 |
410 scoped_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); | 410 scoped_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); |
411 TransferableResource resource; | 411 TransferableResource resource; |
412 resource.id = 1; | 412 resource.id = 1; |
413 resource.mailbox_holder.texture_target = GL_TEXTURE_2D; | 413 resource.mailbox_holder.texture_target = GL_TEXTURE_2D; |
414 frame_data->resource_list.push_back(resource); | 414 frame_data->resource_list.push_back(resource); |
415 scoped_ptr<CompositorFrame> frame(new CompositorFrame); | 415 scoped_ptr<CompositorFrame> frame(new CompositorFrame); |
416 frame->delegated_frame_data = frame_data.Pass(); | 416 frame->delegated_frame_data = std::move(frame_data); |
417 uint32 execute_count = 0; | 417 uint32 execute_count = 0; |
418 SurfaceDrawStatus drawn = SurfaceDrawStatus::DRAW_SKIPPED; | 418 SurfaceDrawStatus drawn = SurfaceDrawStatus::DRAW_SKIPPED; |
419 | 419 |
420 factory_->SubmitCompositorFrame( | 420 factory_->SubmitCompositorFrame( |
421 id, frame.Pass(), base::Bind(&DrawCallback, &execute_count, &drawn)); | 421 id, std::move(frame), base::Bind(&DrawCallback, &execute_count, &drawn)); |
422 | 422 |
423 surface_id_ = SurfaceId(); | 423 surface_id_ = SurfaceId(); |
424 factory_->DestroyAll(); | 424 factory_->DestroyAll(); |
425 EXPECT_EQ(1u, execute_count); | 425 EXPECT_EQ(1u, execute_count); |
426 EXPECT_EQ(SurfaceDrawStatus::DRAW_SKIPPED, drawn); | 426 EXPECT_EQ(SurfaceDrawStatus::DRAW_SKIPPED, drawn); |
427 } | 427 } |
428 | 428 |
429 TEST_F(SurfaceFactoryTest, DestroySequence) { | 429 TEST_F(SurfaceFactoryTest, DestroySequence) { |
430 SurfaceId id2(5); | 430 SurfaceId id2(5); |
431 factory_->Create(id2); | 431 factory_->Create(id2); |
432 | 432 |
433 manager_.RegisterSurfaceIdNamespace(0); | 433 manager_.RegisterSurfaceIdNamespace(0); |
434 | 434 |
435 // Check that waiting before the sequence is satisfied works. | 435 // Check that waiting before the sequence is satisfied works. |
436 manager_.GetSurfaceForId(id2) | 436 manager_.GetSurfaceForId(id2) |
437 ->AddDestructionDependency(SurfaceSequence(0, 4)); | 437 ->AddDestructionDependency(SurfaceSequence(0, 4)); |
438 factory_->Destroy(id2); | 438 factory_->Destroy(id2); |
439 | 439 |
440 scoped_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); | 440 scoped_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); |
441 scoped_ptr<CompositorFrame> frame(new CompositorFrame); | 441 scoped_ptr<CompositorFrame> frame(new CompositorFrame); |
442 frame->metadata.satisfies_sequences.push_back(6); | 442 frame->metadata.satisfies_sequences.push_back(6); |
443 frame->metadata.satisfies_sequences.push_back(4); | 443 frame->metadata.satisfies_sequences.push_back(4); |
444 frame->delegated_frame_data = frame_data.Pass(); | 444 frame->delegated_frame_data = std::move(frame_data); |
445 DCHECK(manager_.GetSurfaceForId(id2)); | 445 DCHECK(manager_.GetSurfaceForId(id2)); |
446 factory_->SubmitCompositorFrame(surface_id_, frame.Pass(), | 446 factory_->SubmitCompositorFrame(surface_id_, std::move(frame), |
447 SurfaceFactory::DrawCallback()); | 447 SurfaceFactory::DrawCallback()); |
448 DCHECK(!manager_.GetSurfaceForId(id2)); | 448 DCHECK(!manager_.GetSurfaceForId(id2)); |
449 | 449 |
450 // Check that waiting after the sequence is satisfied works. | 450 // Check that waiting after the sequence is satisfied works. |
451 factory_->Create(id2); | 451 factory_->Create(id2); |
452 DCHECK(manager_.GetSurfaceForId(id2)); | 452 DCHECK(manager_.GetSurfaceForId(id2)); |
453 manager_.GetSurfaceForId(id2) | 453 manager_.GetSurfaceForId(id2) |
454 ->AddDestructionDependency(SurfaceSequence(0, 6)); | 454 ->AddDestructionDependency(SurfaceSequence(0, 6)); |
455 factory_->Destroy(id2); | 455 factory_->Destroy(id2); |
456 DCHECK(!manager_.GetSurfaceForId(id2)); | 456 DCHECK(!manager_.GetSurfaceForId(id2)); |
(...skipping 28 matching lines...) Expand all Loading... |
485 manager_.RegisterSurfaceIdNamespace(0); | 485 manager_.RegisterSurfaceIdNamespace(0); |
486 | 486 |
487 manager_.GetSurfaceForId(id2) | 487 manager_.GetSurfaceForId(id2) |
488 ->AddDestructionDependency(SurfaceSequence(0, 4)); | 488 ->AddDestructionDependency(SurfaceSequence(0, 4)); |
489 | 489 |
490 // Give id2 a frame that references surface_id_. | 490 // Give id2 a frame that references surface_id_. |
491 { | 491 { |
492 scoped_ptr<RenderPass> render_pass(RenderPass::Create()); | 492 scoped_ptr<RenderPass> render_pass(RenderPass::Create()); |
493 render_pass->referenced_surfaces.push_back(surface_id_); | 493 render_pass->referenced_surfaces.push_back(surface_id_); |
494 scoped_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); | 494 scoped_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); |
495 frame_data->render_pass_list.push_back(render_pass.Pass()); | 495 frame_data->render_pass_list.push_back(std::move(render_pass)); |
496 scoped_ptr<CompositorFrame> frame(new CompositorFrame); | 496 scoped_ptr<CompositorFrame> frame(new CompositorFrame); |
497 frame->delegated_frame_data = frame_data.Pass(); | 497 frame->delegated_frame_data = std::move(frame_data); |
498 factory_->SubmitCompositorFrame(id2, frame.Pass(), | 498 factory_->SubmitCompositorFrame(id2, std::move(frame), |
499 SurfaceFactory::DrawCallback()); | 499 SurfaceFactory::DrawCallback()); |
500 } | 500 } |
501 factory_->Destroy(id2); | 501 factory_->Destroy(id2); |
502 | 502 |
503 // Give surface_id_ a frame that references id2. | 503 // Give surface_id_ a frame that references id2. |
504 { | 504 { |
505 scoped_ptr<RenderPass> render_pass(RenderPass::Create()); | 505 scoped_ptr<RenderPass> render_pass(RenderPass::Create()); |
506 render_pass->referenced_surfaces.push_back(id2); | 506 render_pass->referenced_surfaces.push_back(id2); |
507 scoped_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); | 507 scoped_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); |
508 frame_data->render_pass_list.push_back(render_pass.Pass()); | 508 frame_data->render_pass_list.push_back(std::move(render_pass)); |
509 scoped_ptr<CompositorFrame> frame(new CompositorFrame); | 509 scoped_ptr<CompositorFrame> frame(new CompositorFrame); |
510 frame->delegated_frame_data = frame_data.Pass(); | 510 frame->delegated_frame_data = std::move(frame_data); |
511 factory_->SubmitCompositorFrame(surface_id_, frame.Pass(), | 511 factory_->SubmitCompositorFrame(surface_id_, std::move(frame), |
512 SurfaceFactory::DrawCallback()); | 512 SurfaceFactory::DrawCallback()); |
513 } | 513 } |
514 factory_->Destroy(surface_id_); | 514 factory_->Destroy(surface_id_); |
515 EXPECT_TRUE(manager_.GetSurfaceForId(id2)); | 515 EXPECT_TRUE(manager_.GetSurfaceForId(id2)); |
516 // surface_id_ should be retained by reference from id2. | 516 // surface_id_ should be retained by reference from id2. |
517 EXPECT_TRUE(manager_.GetSurfaceForId(surface_id_)); | 517 EXPECT_TRUE(manager_.GetSurfaceForId(surface_id_)); |
518 | 518 |
519 // Satisfy last destruction dependency for id2. | 519 // Satisfy last destruction dependency for id2. |
520 std::vector<uint32_t> to_satisfy; | 520 std::vector<uint32_t> to_satisfy; |
521 to_satisfy.push_back(4); | 521 to_satisfy.push_back(4); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
555 surface_id_ = SurfaceId(); | 555 surface_id_ = SurfaceId(); |
556 factory_->DestroyAll(); | 556 factory_->DestroyAll(); |
557 | 557 |
558 EXPECT_EQ(&bfs, client_.begin_frame_source()); | 558 EXPECT_EQ(&bfs, client_.begin_frame_source()); |
559 factory_.reset(); | 559 factory_.reset(); |
560 EXPECT_EQ(nullptr, client_.begin_frame_source()); | 560 EXPECT_EQ(nullptr, client_.begin_frame_source()); |
561 } | 561 } |
562 | 562 |
563 } // namespace | 563 } // namespace |
564 } // namespace cc | 564 } // namespace cc |
OLD | NEW |