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