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/output/compositor_frame.h" | 5 #include "cc/output/compositor_frame.h" |
6 #include "cc/output/delegated_frame_data.h" | 6 #include "cc/output/delegated_frame_data.h" |
7 #include "cc/quads/render_pass.h" | 7 #include "cc/quads/render_pass.h" |
8 #include "cc/quads/render_pass_draw_quad.h" | 8 #include "cc/quads/render_pass_draw_quad.h" |
9 #include "cc/quads/solid_color_draw_quad.h" | 9 #include "cc/quads/solid_color_draw_quad.h" |
10 #include "cc/quads/surface_draw_quad.h" | 10 #include "cc/quads/surface_draw_quad.h" |
(...skipping 470 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
481 SharedQuadState* sqs = pass->CreateAndAppendSharedQuadState(); | 481 SharedQuadState* sqs = pass->CreateAndAppendSharedQuadState(); |
482 sqs->SetAll(content_to_target_transform, | 482 sqs->SetAll(content_to_target_transform, |
483 content_bounds, | 483 content_bounds, |
484 visible_content_rect, | 484 visible_content_rect, |
485 clip_rect, | 485 clip_rect, |
486 is_clipped, | 486 is_clipped, |
487 opacity, | 487 opacity, |
488 blend_mode, | 488 blend_mode, |
489 0); | 489 0); |
490 | 490 |
491 scoped_ptr<SolidColorDrawQuad> color_quad = SolidColorDrawQuad::Create(); | 491 SolidColorDrawQuad* color_quad = |
| 492 pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); |
492 color_quad->SetNew(pass->shared_quad_state_list.back(), | 493 color_quad->SetNew(pass->shared_quad_state_list.back(), |
493 visible_content_rect, | 494 visible_content_rect, |
494 visible_content_rect, | 495 visible_content_rect, |
495 SK_ColorGREEN, | 496 SK_ColorGREEN, |
496 force_anti_aliasing_off); | 497 force_anti_aliasing_off); |
497 pass->quad_list.push_back(color_quad.PassAs<DrawQuad>()); | |
498 } | 498 } |
499 | 499 |
500 // This tests that we update shared quad state pointers correctly within | 500 // This tests that we update shared quad state pointers correctly within |
501 // aggregated passes. The shared quad state list on the aggregated pass will | 501 // aggregated passes. The shared quad state list on the aggregated pass will |
502 // include the shared quad states from each pass in one list so the quads will | 502 // include the shared quad states from each pass in one list so the quads will |
503 // end up pointed to shared quad state objects at different offsets. This test | 503 // end up pointed to shared quad state objects at different offsets. This test |
504 // uses the blend_mode value stored on the shared quad state to track the shared | 504 // uses the blend_mode value stored on the shared quad state to track the shared |
505 // quad state, but anything saved on the shared quad state would work. | 505 // quad state, but anything saved on the shared quad state would work. |
506 // | 506 // |
507 // This test has 4 surfaces in the following structure: | 507 // This test has 4 surfaces in the following structure: |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
548 QueuePassAsFrame(grandchild_pass.Pass(), grandchild_surface_id); | 548 QueuePassAsFrame(grandchild_pass.Pass(), grandchild_surface_id); |
549 | 549 |
550 SurfaceId child_one_surface_id = allocator_.GenerateId(); | 550 SurfaceId child_one_surface_id = allocator_.GenerateId(); |
551 factory_.Create(child_one_surface_id, SurfaceSize()); | 551 factory_.Create(child_one_surface_id, SurfaceSize()); |
552 | 552 |
553 scoped_ptr<RenderPass> child_one_pass = RenderPass::Create(); | 553 scoped_ptr<RenderPass> child_one_pass = RenderPass::Create(); |
554 child_one_pass->SetNew( | 554 child_one_pass->SetNew( |
555 pass_id, output_rect, damage_rect, transform_to_root_target); | 555 pass_id, output_rect, damage_rect, transform_to_root_target); |
556 AddSolidColorQuadWithBlendMode( | 556 AddSolidColorQuadWithBlendMode( |
557 SurfaceSize(), child_one_pass.get(), blend_modes[1]); | 557 SurfaceSize(), child_one_pass.get(), blend_modes[1]); |
558 scoped_ptr<SurfaceDrawQuad> grandchild_surface_quad = | 558 SurfaceDrawQuad* grandchild_surface_quad = |
559 SurfaceDrawQuad::Create(); | 559 child_one_pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); |
560 grandchild_surface_quad->SetNew(child_one_pass->shared_quad_state_list.back(), | 560 grandchild_surface_quad->SetNew(child_one_pass->shared_quad_state_list.back(), |
561 gfx::Rect(SurfaceSize()), | 561 gfx::Rect(SurfaceSize()), |
562 gfx::Rect(SurfaceSize()), | 562 gfx::Rect(SurfaceSize()), |
563 grandchild_surface_id); | 563 grandchild_surface_id); |
564 child_one_pass->quad_list.push_back( | |
565 grandchild_surface_quad.PassAs<DrawQuad>()); | |
566 AddSolidColorQuadWithBlendMode( | 564 AddSolidColorQuadWithBlendMode( |
567 SurfaceSize(), child_one_pass.get(), blend_modes[3]); | 565 SurfaceSize(), child_one_pass.get(), blend_modes[3]); |
568 QueuePassAsFrame(child_one_pass.Pass(), child_one_surface_id); | 566 QueuePassAsFrame(child_one_pass.Pass(), child_one_surface_id); |
569 | 567 |
570 SurfaceId child_two_surface_id = allocator_.GenerateId(); | 568 SurfaceId child_two_surface_id = allocator_.GenerateId(); |
571 factory_.Create(child_two_surface_id, SurfaceSize()); | 569 factory_.Create(child_two_surface_id, SurfaceSize()); |
572 | 570 |
573 scoped_ptr<RenderPass> child_two_pass = RenderPass::Create(); | 571 scoped_ptr<RenderPass> child_two_pass = RenderPass::Create(); |
574 child_two_pass->SetNew( | 572 child_two_pass->SetNew( |
575 pass_id, output_rect, damage_rect, transform_to_root_target); | 573 pass_id, output_rect, damage_rect, transform_to_root_target); |
576 AddSolidColorQuadWithBlendMode( | 574 AddSolidColorQuadWithBlendMode( |
577 SurfaceSize(), child_two_pass.get(), blend_modes[5]); | 575 SurfaceSize(), child_two_pass.get(), blend_modes[5]); |
578 QueuePassAsFrame(child_two_pass.Pass(), child_two_surface_id); | 576 QueuePassAsFrame(child_two_pass.Pass(), child_two_surface_id); |
579 | 577 |
580 scoped_ptr<RenderPass> root_pass = RenderPass::Create(); | 578 scoped_ptr<RenderPass> root_pass = RenderPass::Create(); |
581 root_pass->SetNew( | 579 root_pass->SetNew( |
582 pass_id, output_rect, damage_rect, transform_to_root_target); | 580 pass_id, output_rect, damage_rect, transform_to_root_target); |
583 | 581 |
584 AddSolidColorQuadWithBlendMode( | 582 AddSolidColorQuadWithBlendMode( |
585 SurfaceSize(), root_pass.get(), blend_modes[0]); | 583 SurfaceSize(), root_pass.get(), blend_modes[0]); |
586 scoped_ptr<SurfaceDrawQuad> child_one_surface_quad = | 584 SurfaceDrawQuad* child_one_surface_quad = |
587 SurfaceDrawQuad::Create(); | 585 root_pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); |
588 child_one_surface_quad->SetNew(root_pass->shared_quad_state_list.back(), | 586 child_one_surface_quad->SetNew(root_pass->shared_quad_state_list.back(), |
589 gfx::Rect(SurfaceSize()), | 587 gfx::Rect(SurfaceSize()), |
590 gfx::Rect(SurfaceSize()), | 588 gfx::Rect(SurfaceSize()), |
591 child_one_surface_id); | 589 child_one_surface_id); |
592 root_pass->quad_list.push_back(child_one_surface_quad.PassAs<DrawQuad>()); | |
593 AddSolidColorQuadWithBlendMode( | 590 AddSolidColorQuadWithBlendMode( |
594 SurfaceSize(), root_pass.get(), blend_modes[4]); | 591 SurfaceSize(), root_pass.get(), blend_modes[4]); |
595 scoped_ptr<SurfaceDrawQuad> child_two_surface_quad = | 592 SurfaceDrawQuad* child_two_surface_quad = |
596 SurfaceDrawQuad::Create(); | 593 root_pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); |
597 child_two_surface_quad->SetNew(root_pass->shared_quad_state_list.back(), | 594 child_two_surface_quad->SetNew(root_pass->shared_quad_state_list.back(), |
598 gfx::Rect(SurfaceSize()), | 595 gfx::Rect(SurfaceSize()), |
599 gfx::Rect(SurfaceSize()), | 596 gfx::Rect(SurfaceSize()), |
600 child_two_surface_id); | 597 child_two_surface_id); |
601 root_pass->quad_list.push_back(child_two_surface_quad.PassAs<DrawQuad>()); | |
602 AddSolidColorQuadWithBlendMode( | 598 AddSolidColorQuadWithBlendMode( |
603 SurfaceSize(), root_pass.get(), blend_modes[6]); | 599 SurfaceSize(), root_pass.get(), blend_modes[6]); |
604 | 600 |
605 QueuePassAsFrame(root_pass.Pass(), root_surface_id_); | 601 QueuePassAsFrame(root_pass.Pass(), root_surface_id_); |
606 | 602 |
607 scoped_ptr<CompositorFrame> aggregated_frame = | 603 scoped_ptr<CompositorFrame> aggregated_frame = |
608 aggregator_.Aggregate(root_surface_id_); | 604 aggregator_.Aggregate(root_surface_id_); |
609 | 605 |
610 ASSERT_TRUE(aggregated_frame); | 606 ASSERT_TRUE(aggregated_frame); |
611 ASSERT_TRUE(aggregated_frame->delegated_frame_data); | 607 ASSERT_TRUE(aggregated_frame->delegated_frame_data); |
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
817 SurfaceFactory* factory, | 813 SurfaceFactory* factory, |
818 SurfaceId surface_id) { | 814 SurfaceId surface_id) { |
819 scoped_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); | 815 scoped_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); |
820 scoped_ptr<RenderPass> pass = RenderPass::Create(); | 816 scoped_ptr<RenderPass> pass = RenderPass::Create(); |
821 SharedQuadState* sqs = pass->CreateAndAppendSharedQuadState(); | 817 SharedQuadState* sqs = pass->CreateAndAppendSharedQuadState(); |
822 for (size_t i = 0u; i < num_resource_ids; ++i) { | 818 for (size_t i = 0u; i < num_resource_ids; ++i) { |
823 TransferableResource resource; | 819 TransferableResource resource; |
824 resource.id = resource_ids[i]; | 820 resource.id = resource_ids[i]; |
825 resource.is_software = true; | 821 resource.is_software = true; |
826 frame_data->resource_list.push_back(resource); | 822 frame_data->resource_list.push_back(resource); |
827 scoped_ptr<TextureDrawQuad> quad(TextureDrawQuad::Create()); | 823 TextureDrawQuad* quad = pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); |
828 const gfx::Rect rect; | 824 const gfx::Rect rect; |
829 const gfx::Rect opaque_rect; | 825 const gfx::Rect opaque_rect; |
830 const gfx::Rect visible_rect; | 826 const gfx::Rect visible_rect; |
831 bool needs_blending = false; | 827 bool needs_blending = false; |
832 bool premultiplied_alpha = false; | 828 bool premultiplied_alpha = false; |
833 const gfx::PointF uv_top_left; | 829 const gfx::PointF uv_top_left; |
834 const gfx::PointF uv_bottom_right; | 830 const gfx::PointF uv_bottom_right; |
835 SkColor background_color = SK_ColorGREEN; | 831 SkColor background_color = SK_ColorGREEN; |
836 const float vertex_opacity[4] = {0.f, 0.f, 1.f, 1.f}; | 832 const float vertex_opacity[4] = {0.f, 0.f, 1.f, 1.f}; |
837 bool flipped = false; | 833 bool flipped = false; |
838 quad->SetAll(sqs, | 834 quad->SetAll(sqs, |
839 rect, | 835 rect, |
840 opaque_rect, | 836 opaque_rect, |
841 visible_rect, | 837 visible_rect, |
842 needs_blending, | 838 needs_blending, |
843 resource_ids[i], | 839 resource_ids[i], |
844 premultiplied_alpha, | 840 premultiplied_alpha, |
845 uv_top_left, | 841 uv_top_left, |
846 uv_bottom_right, | 842 uv_bottom_right, |
847 background_color, | 843 background_color, |
848 vertex_opacity, | 844 vertex_opacity, |
849 flipped); | 845 flipped); |
850 | 846 |
851 quad->shared_quad_state = sqs; | 847 quad->shared_quad_state = sqs; |
852 pass->quad_list.push_back(quad.PassAs<DrawQuad>()); | |
853 } | 848 } |
854 frame_data->render_pass_list.push_back(pass.Pass()); | 849 frame_data->render_pass_list.push_back(pass.Pass()); |
855 scoped_ptr<CompositorFrame> frame(new CompositorFrame); | 850 scoped_ptr<CompositorFrame> frame(new CompositorFrame); |
856 frame->delegated_frame_data = frame_data.Pass(); | 851 frame->delegated_frame_data = frame_data.Pass(); |
857 factory->SubmitFrame(surface_id, frame.Pass()); | 852 factory->SubmitFrame(surface_id, frame.Pass()); |
858 } | 853 } |
859 | 854 |
860 TEST_F(SurfaceAggregatorWithResourcesTest, TakeResourcesOneSurface) { | 855 TEST_F(SurfaceAggregatorWithResourcesTest, TakeResourcesOneSurface) { |
861 ResourceTrackingSurfaceFactoryClient client; | 856 ResourceTrackingSurfaceFactoryClient client; |
862 SurfaceFactory factory(&manager_, &client); | 857 SurfaceFactory factory(&manager_, &client); |
(...skipping 18 matching lines...) Expand all Loading... |
881 returned_ids[i] = client.returned_resources()[i].id; | 876 returned_ids[i] = client.returned_resources()[i].id; |
882 } | 877 } |
883 EXPECT_THAT(returned_ids, | 878 EXPECT_THAT(returned_ids, |
884 testing::WhenSorted(testing::ElementsAreArray(ids))); | 879 testing::WhenSorted(testing::ElementsAreArray(ids))); |
885 factory.Destroy(surface_id); | 880 factory.Destroy(surface_id); |
886 } | 881 } |
887 | 882 |
888 } // namespace | 883 } // namespace |
889 } // namespace cc | 884 } // namespace cc |
890 | 885 |
OLD | NEW |