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/base/scoped_ptr_vector.h" | 5 #include "cc/base/scoped_ptr_vector.h" |
6 #include "cc/output/gl_renderer.h" | 6 #include "cc/output/gl_renderer.h" |
7 #include "cc/output/output_surface.h" | 7 #include "cc/output/output_surface.h" |
8 #include "cc/output/output_surface_client.h" | 8 #include "cc/output/output_surface_client.h" |
9 #include "cc/output/overlay_candidate_validator.h" | 9 #include "cc/output/overlay_candidate_validator.h" |
10 #include "cc/output/overlay_processor.h" | 10 #include "cc/output/overlay_processor.h" |
(...skipping 519 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
530 : GLRenderer(client, | 530 : GLRenderer(client, |
531 settings, | 531 settings, |
532 output_surface, | 532 output_surface, |
533 resource_provider, | 533 resource_provider, |
534 NULL, | 534 NULL, |
535 0), | 535 0), |
536 expect_overlays_(false) {} | 536 expect_overlays_(false) {} |
537 | 537 |
538 MOCK_METHOD2(DoDrawQuad, void(DrawingFrame* frame, const DrawQuad* quad)); | 538 MOCK_METHOD2(DoDrawQuad, void(DrawingFrame* frame, const DrawQuad* quad)); |
539 | 539 |
| 540 using GLRenderer::BeginDrawingFrame; |
| 541 |
540 virtual void FinishDrawingFrame(DrawingFrame* frame) override { | 542 virtual void FinishDrawingFrame(DrawingFrame* frame) override { |
541 GLRenderer::FinishDrawingFrame(frame); | 543 GLRenderer::FinishDrawingFrame(frame); |
542 | 544 |
543 if (!expect_overlays_) { | 545 if (!expect_overlays_) { |
544 EXPECT_EQ(0U, frame->overlay_list.size()); | 546 EXPECT_EQ(0U, frame->overlay_list.size()); |
545 return; | 547 return; |
546 } | 548 } |
547 | 549 |
548 ASSERT_EQ(2U, frame->overlay_list.size()); | 550 ASSERT_EQ(2U, frame->overlay_list.size()); |
549 EXPECT_NE(0U, frame->overlay_list.back().resource_id); | 551 EXPECT_NE(0U, frame->overlay_list.back().resource_id); |
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
717 TEST_F(GLRendererWithOverlaysTest, ResourcesExportedAndReturned) { | 719 TEST_F(GLRendererWithOverlaysTest, ResourcesExportedAndReturned) { |
718 bool use_validator = true; | 720 bool use_validator = true; |
719 Init(use_validator); | 721 Init(use_validator); |
720 renderer_->set_expect_overlays(true); | 722 renderer_->set_expect_overlays(true); |
721 | 723 |
722 ResourceProvider::ResourceId resource1 = | 724 ResourceProvider::ResourceId resource1 = |
723 CreateResource(resource_provider_.get()); | 725 CreateResource(resource_provider_.get()); |
724 ResourceProvider::ResourceId resource2 = | 726 ResourceProvider::ResourceId resource2 = |
725 CreateResource(resource_provider_.get()); | 727 CreateResource(resource_provider_.get()); |
726 | 728 |
| 729 scoped_ptr<RenderPass> pass = CreateRenderPass(); |
| 730 RenderPassList pass_list; |
| 731 pass_list.push_back(pass.Pass()); |
| 732 |
727 DirectRenderer::DrawingFrame frame1; | 733 DirectRenderer::DrawingFrame frame1; |
| 734 frame1.render_passes_in_draw_order = &pass_list; |
728 frame1.overlay_list.resize(2); | 735 frame1.overlay_list.resize(2); |
729 OverlayCandidate& overlay1 = frame1.overlay_list.back(); | 736 OverlayCandidate& overlay1 = frame1.overlay_list.back(); |
730 overlay1.resource_id = resource1; | 737 overlay1.resource_id = resource1; |
731 overlay1.plane_z_order = 1; | 738 overlay1.plane_z_order = 1; |
732 | 739 |
733 DirectRenderer::DrawingFrame frame2; | 740 DirectRenderer::DrawingFrame frame2; |
| 741 frame2.render_passes_in_draw_order = &pass_list; |
734 frame2.overlay_list.resize(2); | 742 frame2.overlay_list.resize(2); |
735 OverlayCandidate& overlay2 = frame2.overlay_list.back(); | 743 OverlayCandidate& overlay2 = frame2.overlay_list.back(); |
736 overlay2.resource_id = resource2; | 744 overlay2.resource_id = resource2; |
737 overlay2.plane_z_order = 1; | 745 overlay2.plane_z_order = 1; |
738 | 746 |
739 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(1); | 747 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(1); |
| 748 renderer_->BeginDrawingFrame(&frame1); |
740 renderer_->FinishDrawingFrame(&frame1); | 749 renderer_->FinishDrawingFrame(&frame1); |
741 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 750 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
742 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource2)); | 751 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource2)); |
743 SwapBuffers(); | 752 SwapBuffers(); |
744 Mock::VerifyAndClearExpectations(&scheduler_); | 753 Mock::VerifyAndClearExpectations(&scheduler_); |
745 | 754 |
746 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(1); | 755 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(1); |
| 756 renderer_->BeginDrawingFrame(&frame2); |
747 renderer_->FinishDrawingFrame(&frame2); | 757 renderer_->FinishDrawingFrame(&frame2); |
748 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 758 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
749 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource2)); | 759 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource2)); |
750 SwapBuffers(); | 760 SwapBuffers(); |
751 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); | 761 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); |
752 Mock::VerifyAndClearExpectations(&scheduler_); | 762 Mock::VerifyAndClearExpectations(&scheduler_); |
753 | 763 |
754 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(1); | 764 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(1); |
| 765 renderer_->BeginDrawingFrame(&frame1); |
755 renderer_->FinishDrawingFrame(&frame1); | 766 renderer_->FinishDrawingFrame(&frame1); |
756 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 767 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
757 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource2)); | 768 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource2)); |
758 SwapBuffers(); | 769 SwapBuffers(); |
759 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource2)); | 770 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource2)); |
760 Mock::VerifyAndClearExpectations(&scheduler_); | 771 Mock::VerifyAndClearExpectations(&scheduler_); |
761 | 772 |
762 // No overlays, release the resource. | 773 // No overlays, release the resource. |
763 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(0); | 774 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(0); |
764 DirectRenderer::DrawingFrame frame3; | 775 DirectRenderer::DrawingFrame frame3; |
| 776 frame3.render_passes_in_draw_order = &pass_list; |
765 renderer_->set_expect_overlays(false); | 777 renderer_->set_expect_overlays(false); |
| 778 renderer_->BeginDrawingFrame(&frame3); |
766 renderer_->FinishDrawingFrame(&frame3); | 779 renderer_->FinishDrawingFrame(&frame3); |
767 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 780 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
768 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource2)); | 781 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource2)); |
769 SwapBuffers(); | 782 SwapBuffers(); |
770 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); | 783 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); |
771 Mock::VerifyAndClearExpectations(&scheduler_); | 784 Mock::VerifyAndClearExpectations(&scheduler_); |
772 | 785 |
773 // Use the same buffer twice. | 786 // Use the same buffer twice. |
774 renderer_->set_expect_overlays(true); | 787 renderer_->set_expect_overlays(true); |
775 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(1); | 788 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(1); |
| 789 renderer_->BeginDrawingFrame(&frame1); |
776 renderer_->FinishDrawingFrame(&frame1); | 790 renderer_->FinishDrawingFrame(&frame1); |
777 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 791 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
778 SwapBuffers(); | 792 SwapBuffers(); |
779 Mock::VerifyAndClearExpectations(&scheduler_); | 793 Mock::VerifyAndClearExpectations(&scheduler_); |
780 | 794 |
781 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(1); | 795 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(1); |
| 796 renderer_->BeginDrawingFrame(&frame1); |
782 renderer_->FinishDrawingFrame(&frame1); | 797 renderer_->FinishDrawingFrame(&frame1); |
783 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 798 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
784 SwapBuffers(); | 799 SwapBuffers(); |
785 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 800 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
786 Mock::VerifyAndClearExpectations(&scheduler_); | 801 Mock::VerifyAndClearExpectations(&scheduler_); |
787 | 802 |
788 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(0); | 803 EXPECT_CALL(scheduler_, Schedule(_, _, _, _, _)).Times(0); |
789 renderer_->set_expect_overlays(false); | 804 renderer_->set_expect_overlays(false); |
| 805 renderer_->BeginDrawingFrame(&frame3); |
790 renderer_->FinishDrawingFrame(&frame3); | 806 renderer_->FinishDrawingFrame(&frame3); |
791 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); | 807 EXPECT_TRUE(resource_provider_->InUseByConsumer(resource1)); |
792 SwapBuffers(); | 808 SwapBuffers(); |
793 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); | 809 EXPECT_FALSE(resource_provider_->InUseByConsumer(resource1)); |
794 Mock::VerifyAndClearExpectations(&scheduler_); | 810 Mock::VerifyAndClearExpectations(&scheduler_); |
795 } | 811 } |
796 | 812 |
797 } // namespace | 813 } // namespace |
798 } // namespace cc | 814 } // namespace cc |
OLD | NEW |