| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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/gl_renderer.h" | 5 #include "cc/output/gl_renderer.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include <set> | 9 #include <set> |
| 10 | 10 |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 57 gpu::SyncToken other; | 57 gpu::SyncToken other; |
| 58 memcpy(&other, arg, sizeof(other)); | 58 memcpy(&other, arg, sizeof(other)); |
| 59 return other == sync_token; | 59 return other == sync_token; |
| 60 } | 60 } |
| 61 | 61 |
| 62 class GLRendererTest : public testing::Test { | 62 class GLRendererTest : public testing::Test { |
| 63 protected: | 63 protected: |
| 64 RenderPass* root_render_pass() { | 64 RenderPass* root_render_pass() { |
| 65 return render_passes_in_draw_order_.back().get(); | 65 return render_passes_in_draw_order_.back().get(); |
| 66 } | 66 } |
| 67 void DrawFrame(Renderer* renderer, const gfx::Rect& viewport_rect) { |
| 68 renderer->DrawFrame(&render_passes_in_draw_order_, 1.f, gfx::ColorProfile(), |
| 69 viewport_rect, viewport_rect, false); |
| 70 } |
| 71 void DrawFrame(Renderer* renderer, |
| 72 const gfx::Rect& viewport_rect, |
| 73 const gfx::Rect& clip_rect) { |
| 74 renderer->DrawFrame(&render_passes_in_draw_order_, 1.f, gfx::ColorProfile(), |
| 75 viewport_rect, clip_rect, false); |
| 76 } |
| 67 | 77 |
| 68 RenderPassList render_passes_in_draw_order_; | 78 RenderPassList render_passes_in_draw_order_; |
| 69 }; | 79 }; |
| 70 | 80 |
| 71 #define EXPECT_PROGRAM_VALID(program_binding) \ | 81 #define EXPECT_PROGRAM_VALID(program_binding) \ |
| 72 do { \ | 82 do { \ |
| 73 EXPECT_TRUE((program_binding)->program()); \ | 83 EXPECT_TRUE((program_binding)->program()); \ |
| 74 EXPECT_TRUE((program_binding)->initialized()); \ | 84 EXPECT_TRUE((program_binding)->initialized()); \ |
| 75 } while (false) | 85 } while (false) |
| 76 | 86 |
| (...skipping 456 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 533 renderer_->SetVisible(false); | 543 renderer_->SetVisible(false); |
| 534 EXPECT_TRUE(renderer_->IsBackbufferDiscarded()); | 544 EXPECT_TRUE(renderer_->IsBackbufferDiscarded()); |
| 535 EXPECT_EQ(1, renderer_client_.set_full_root_layer_damage_count()); | 545 EXPECT_EQ(1, renderer_client_.set_full_root_layer_damage_count()); |
| 536 | 546 |
| 537 AddRenderPass(&render_passes_in_draw_order_, | 547 AddRenderPass(&render_passes_in_draw_order_, |
| 538 RenderPassId(1, 0), | 548 RenderPassId(1, 0), |
| 539 viewport_rect, | 549 viewport_rect, |
| 540 gfx::Transform()); | 550 gfx::Transform()); |
| 541 | 551 |
| 542 renderer_->SetVisible(true); | 552 renderer_->SetVisible(true); |
| 543 renderer_->DrawFrame(&render_passes_in_draw_order_, | 553 DrawFrame(renderer_.get(), viewport_rect); |
| 544 1.f, | |
| 545 viewport_rect, | |
| 546 viewport_rect, | |
| 547 false); | |
| 548 EXPECT_FALSE(renderer_->IsBackbufferDiscarded()); | 554 EXPECT_FALSE(renderer_->IsBackbufferDiscarded()); |
| 549 | 555 |
| 550 SwapBuffers(); | 556 SwapBuffers(); |
| 551 EXPECT_EQ(1u, output_surface_->num_sent_frames()); | 557 EXPECT_EQ(1u, output_surface_->num_sent_frames()); |
| 552 } | 558 } |
| 553 | 559 |
| 554 TEST_F(GLRendererWithDefaultHarnessTest, ExternalStencil) { | 560 TEST_F(GLRendererWithDefaultHarnessTest, ExternalStencil) { |
| 555 gfx::Rect viewport_rect(1, 1); | 561 gfx::Rect viewport_rect(1, 1); |
| 556 EXPECT_FALSE(renderer_->stencil_enabled()); | 562 EXPECT_FALSE(renderer_->stencil_enabled()); |
| 557 | 563 |
| 558 output_surface_->set_has_external_stencil_test(true); | 564 output_surface_->set_has_external_stencil_test(true); |
| 559 | 565 |
| 560 RenderPass* root_pass = | 566 RenderPass* root_pass = |
| 561 AddRenderPass(&render_passes_in_draw_order_, RenderPassId(1, 0), | 567 AddRenderPass(&render_passes_in_draw_order_, RenderPassId(1, 0), |
| 562 viewport_rect, gfx::Transform()); | 568 viewport_rect, gfx::Transform()); |
| 563 root_pass->has_transparent_background = false; | 569 root_pass->has_transparent_background = false; |
| 564 | 570 |
| 565 renderer_->DrawFrame(&render_passes_in_draw_order_, | 571 DrawFrame(renderer_.get(), viewport_rect); |
| 566 1.f, | |
| 567 viewport_rect, | |
| 568 viewport_rect, | |
| 569 false); | |
| 570 EXPECT_TRUE(renderer_->stencil_enabled()); | 572 EXPECT_TRUE(renderer_->stencil_enabled()); |
| 571 } | 573 } |
| 572 | 574 |
| 573 class ForbidSynchronousCallContext : public TestWebGraphicsContext3D { | 575 class ForbidSynchronousCallContext : public TestWebGraphicsContext3D { |
| 574 public: | 576 public: |
| 575 ForbidSynchronousCallContext() {} | 577 ForbidSynchronousCallContext() {} |
| 576 | 578 |
| 577 void getAttachedShaders(GLuint program, | 579 void getAttachedShaders(GLuint program, |
| 578 GLsizei max_count, | 580 GLsizei max_count, |
| 579 GLsizei* count, | 581 GLsizei* count, |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 766 // On DEBUG builds, render passes with opaque background clear to blue to | 768 // On DEBUG builds, render passes with opaque background clear to blue to |
| 767 // easily see regions that were not drawn on the screen. | 769 // easily see regions that were not drawn on the screen. |
| 768 EXPECT_CALL(*context, discardFramebufferEXT(GL_FRAMEBUFFER, _, _)) | 770 EXPECT_CALL(*context, discardFramebufferEXT(GL_FRAMEBUFFER, _, _)) |
| 769 .With(Args<2, 1>(ElementsAre(GL_COLOR_EXT))) | 771 .With(Args<2, 1>(ElementsAre(GL_COLOR_EXT))) |
| 770 .Times(1); | 772 .Times(1); |
| 771 #ifdef NDEBUG | 773 #ifdef NDEBUG |
| 772 EXPECT_CALL(*context, clear(_)).Times(0); | 774 EXPECT_CALL(*context, clear(_)).Times(0); |
| 773 #else | 775 #else |
| 774 EXPECT_CALL(*context, clear(_)).Times(1); | 776 EXPECT_CALL(*context, clear(_)).Times(1); |
| 775 #endif | 777 #endif |
| 776 renderer.DrawFrame(&render_passes_in_draw_order_, | 778 DrawFrame(&renderer, viewport_rect); |
| 777 1.f, | |
| 778 viewport_rect, | |
| 779 viewport_rect, | |
| 780 false); | |
| 781 Mock::VerifyAndClearExpectations(context); | 779 Mock::VerifyAndClearExpectations(context); |
| 782 } | 780 } |
| 783 | 781 |
| 784 TEST_F(GLRendererTest, TransparentBackground) { | 782 TEST_F(GLRendererTest, TransparentBackground) { |
| 785 std::unique_ptr<ClearCountingContext> context_owned(new ClearCountingContext); | 783 std::unique_ptr<ClearCountingContext> context_owned(new ClearCountingContext); |
| 786 ClearCountingContext* context = context_owned.get(); | 784 ClearCountingContext* context = context_owned.get(); |
| 787 | 785 |
| 788 FakeOutputSurfaceClient output_surface_client; | 786 FakeOutputSurfaceClient output_surface_client; |
| 789 std::unique_ptr<OutputSurface> output_surface( | 787 std::unique_ptr<OutputSurface> output_surface( |
| 790 FakeOutputSurface::Create3d(std::move(context_owned))); | 788 FakeOutputSurface::Create3d(std::move(context_owned))); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 804 resource_provider.get()); | 802 resource_provider.get()); |
| 805 | 803 |
| 806 gfx::Rect viewport_rect(1, 1); | 804 gfx::Rect viewport_rect(1, 1); |
| 807 RenderPass* root_pass = | 805 RenderPass* root_pass = |
| 808 AddRenderPass(&render_passes_in_draw_order_, RenderPassId(1, 0), | 806 AddRenderPass(&render_passes_in_draw_order_, RenderPassId(1, 0), |
| 809 viewport_rect, gfx::Transform()); | 807 viewport_rect, gfx::Transform()); |
| 810 root_pass->has_transparent_background = true; | 808 root_pass->has_transparent_background = true; |
| 811 | 809 |
| 812 EXPECT_CALL(*context, discardFramebufferEXT(GL_FRAMEBUFFER, 1, _)).Times(1); | 810 EXPECT_CALL(*context, discardFramebufferEXT(GL_FRAMEBUFFER, 1, _)).Times(1); |
| 813 EXPECT_CALL(*context, clear(_)).Times(1); | 811 EXPECT_CALL(*context, clear(_)).Times(1); |
| 814 renderer.DrawFrame(&render_passes_in_draw_order_, | 812 DrawFrame(&renderer, viewport_rect); |
| 815 1.f, | |
| 816 viewport_rect, | |
| 817 viewport_rect, | |
| 818 false); | |
| 819 | 813 |
| 820 Mock::VerifyAndClearExpectations(context); | 814 Mock::VerifyAndClearExpectations(context); |
| 821 } | 815 } |
| 822 | 816 |
| 823 TEST_F(GLRendererTest, OffscreenOutputSurface) { | 817 TEST_F(GLRendererTest, OffscreenOutputSurface) { |
| 824 std::unique_ptr<ClearCountingContext> context_owned(new ClearCountingContext); | 818 std::unique_ptr<ClearCountingContext> context_owned(new ClearCountingContext); |
| 825 ClearCountingContext* context = context_owned.get(); | 819 ClearCountingContext* context = context_owned.get(); |
| 826 | 820 |
| 827 FakeOutputSurfaceClient output_surface_client; | 821 FakeOutputSurfaceClient output_surface_client; |
| 828 std::unique_ptr<OutputSurface> output_surface( | 822 std::unique_ptr<OutputSurface> output_surface( |
| (...skipping 16 matching lines...) Expand all Loading... |
| 845 gfx::Rect viewport_rect(1, 1); | 839 gfx::Rect viewport_rect(1, 1); |
| 846 AddRenderPass(&render_passes_in_draw_order_, | 840 AddRenderPass(&render_passes_in_draw_order_, |
| 847 RenderPassId(1, 0), | 841 RenderPassId(1, 0), |
| 848 viewport_rect, | 842 viewport_rect, |
| 849 gfx::Transform()); | 843 gfx::Transform()); |
| 850 | 844 |
| 851 EXPECT_CALL(*context, discardFramebufferEXT(GL_FRAMEBUFFER, _, _)) | 845 EXPECT_CALL(*context, discardFramebufferEXT(GL_FRAMEBUFFER, _, _)) |
| 852 .With(Args<2, 1>(ElementsAre(GL_COLOR_ATTACHMENT0))) | 846 .With(Args<2, 1>(ElementsAre(GL_COLOR_ATTACHMENT0))) |
| 853 .Times(1); | 847 .Times(1); |
| 854 EXPECT_CALL(*context, clear(_)).Times(AnyNumber()); | 848 EXPECT_CALL(*context, clear(_)).Times(AnyNumber()); |
| 855 renderer.DrawFrame(&render_passes_in_draw_order_, | 849 DrawFrame(&renderer, viewport_rect); |
| 856 1.f, | |
| 857 viewport_rect, | |
| 858 viewport_rect, | |
| 859 false); | |
| 860 Mock::VerifyAndClearExpectations(context); | 850 Mock::VerifyAndClearExpectations(context); |
| 861 } | 851 } |
| 862 | 852 |
| 863 class TextureStateTrackingContext : public TestWebGraphicsContext3D { | 853 class TextureStateTrackingContext : public TestWebGraphicsContext3D { |
| 864 public: | 854 public: |
| 865 TextureStateTrackingContext() : active_texture_(GL_INVALID_ENUM) { | 855 TextureStateTrackingContext() : active_texture_(GL_INVALID_ENUM) { |
| 866 test_capabilities_.egl_image_external = true; | 856 test_capabilities_.egl_image_external = true; |
| 867 } | 857 } |
| 868 | 858 |
| 869 MOCK_METHOD1(waitSyncToken, void(const GLbyte* sync_token)); | 859 MOCK_METHOD1(waitSyncToken, void(const GLbyte* sync_token)); |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 946 | 936 |
| 947 // scaled_tile_quad also uses GL_LINEAR. | 937 // scaled_tile_quad also uses GL_LINEAR. |
| 948 EXPECT_CALL(*context, drawElements(_, _, _, _)); | 938 EXPECT_CALL(*context, drawElements(_, _, _, _)); |
| 949 | 939 |
| 950 // The remaining quads also use GL_LINEAR because nearest neighbor | 940 // The remaining quads also use GL_LINEAR because nearest neighbor |
| 951 // filtering is currently only used with tile quads. | 941 // filtering is currently only used with tile quads. |
| 952 EXPECT_CALL(*context, drawElements(_, _, _, _)).Times(5); | 942 EXPECT_CALL(*context, drawElements(_, _, _, _)).Times(5); |
| 953 } | 943 } |
| 954 | 944 |
| 955 gfx::Rect viewport_rect(100, 100); | 945 gfx::Rect viewport_rect(100, 100); |
| 956 renderer.DrawFrame(&render_passes_in_draw_order_, | 946 DrawFrame(&renderer, viewport_rect); |
| 957 1.f, | |
| 958 viewport_rect, | |
| 959 viewport_rect, | |
| 960 false); | |
| 961 Mock::VerifyAndClearExpectations(context); | 947 Mock::VerifyAndClearExpectations(context); |
| 962 } | 948 } |
| 963 | 949 |
| 964 class NoClearRootRenderPassMockContext : public TestWebGraphicsContext3D { | 950 class NoClearRootRenderPassMockContext : public TestWebGraphicsContext3D { |
| 965 public: | 951 public: |
| 966 MOCK_METHOD1(clear, void(GLbitfield mask)); | 952 MOCK_METHOD1(clear, void(GLbitfield mask)); |
| 967 MOCK_METHOD4(drawElements, | 953 MOCK_METHOD4(drawElements, |
| 968 void(GLenum mode, GLsizei count, GLenum type, GLintptr offset)); | 954 void(GLenum mode, GLsizei count, GLenum type, GLintptr offset)); |
| 969 }; | 955 }; |
| 970 | 956 |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1023 EXPECT_CALL(*mock_context, drawElements(_, _, _, _)).Times(1); | 1009 EXPECT_CALL(*mock_context, drawElements(_, _, _, _)).Times(1); |
| 1024 | 1010 |
| 1025 // The second render pass is the root one, clearing should be prevented. | 1011 // The second render pass is the root one, clearing should be prevented. |
| 1026 EXPECT_CALL(*mock_context, clear(clear_bits)).Times(0).After( | 1012 EXPECT_CALL(*mock_context, clear(clear_bits)).Times(0).After( |
| 1027 first_render_pass); | 1013 first_render_pass); |
| 1028 | 1014 |
| 1029 EXPECT_CALL(*mock_context, drawElements(_, _, _, _)).Times(AnyNumber()).After( | 1015 EXPECT_CALL(*mock_context, drawElements(_, _, _, _)).Times(AnyNumber()).After( |
| 1030 first_render_pass); | 1016 first_render_pass); |
| 1031 | 1017 |
| 1032 renderer.DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); | 1018 renderer.DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); |
| 1033 renderer.DrawFrame(&render_passes_in_draw_order_, | 1019 DrawFrame(&renderer, viewport_rect); |
| 1034 1.f, | |
| 1035 viewport_rect, | |
| 1036 viewport_rect, | |
| 1037 false); | |
| 1038 | 1020 |
| 1039 // In multiple render passes all but the root pass should clear the | 1021 // In multiple render passes all but the root pass should clear the |
| 1040 // framebuffer. | 1022 // framebuffer. |
| 1041 Mock::VerifyAndClearExpectations(&mock_context); | 1023 Mock::VerifyAndClearExpectations(&mock_context); |
| 1042 } | 1024 } |
| 1043 | 1025 |
| 1044 class ScissorTestOnClearCheckingContext : public TestWebGraphicsContext3D { | 1026 class ScissorTestOnClearCheckingContext : public TestWebGraphicsContext3D { |
| 1045 public: | 1027 public: |
| 1046 ScissorTestOnClearCheckingContext() : scissor_enabled_(false) {} | 1028 ScissorTestOnClearCheckingContext() : scissor_enabled_(false) {} |
| 1047 | 1029 |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1103 RenderPassId root_pass_id(1, 0); | 1085 RenderPassId root_pass_id(1, 0); |
| 1104 RenderPass* root_pass = | 1086 RenderPass* root_pass = |
| 1105 AddRenderPass(&render_passes_in_draw_order_, root_pass_id, viewport_rect, | 1087 AddRenderPass(&render_passes_in_draw_order_, root_pass_id, viewport_rect, |
| 1106 gfx::Transform()); | 1088 gfx::Transform()); |
| 1107 AddQuad(root_pass, viewport_rect, SK_ColorGREEN); | 1089 AddQuad(root_pass, viewport_rect, SK_ColorGREEN); |
| 1108 | 1090 |
| 1109 AddRenderPassQuad(root_pass, child_pass); | 1091 AddRenderPassQuad(root_pass, child_pass); |
| 1110 AddRenderPassQuad(child_pass, grand_child_pass); | 1092 AddRenderPassQuad(child_pass, grand_child_pass); |
| 1111 | 1093 |
| 1112 renderer.DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); | 1094 renderer.DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); |
| 1113 renderer.DrawFrame(&render_passes_in_draw_order_, | 1095 DrawFrame(&renderer, viewport_rect); |
| 1114 1.f, | |
| 1115 viewport_rect, | |
| 1116 viewport_rect, | |
| 1117 false); | |
| 1118 } | 1096 } |
| 1119 | 1097 |
| 1120 class DiscardCheckingContext : public TestWebGraphicsContext3D { | 1098 class DiscardCheckingContext : public TestWebGraphicsContext3D { |
| 1121 public: | 1099 public: |
| 1122 DiscardCheckingContext() : discarded_(0) { | 1100 DiscardCheckingContext() : discarded_(0) { |
| 1123 set_have_post_sub_buffer(true); | 1101 set_have_post_sub_buffer(true); |
| 1124 set_have_discard_framebuffer(true); | 1102 set_have_discard_framebuffer(true); |
| 1125 } | 1103 } |
| 1126 | 1104 |
| 1127 void discardFramebufferEXT(GLenum target, | 1105 void discardFramebufferEXT(GLenum target, |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1141 public: | 1119 public: |
| 1142 explicit NonReshapableOutputSurface( | 1120 explicit NonReshapableOutputSurface( |
| 1143 std::unique_ptr<TestWebGraphicsContext3D> context3d) | 1121 std::unique_ptr<TestWebGraphicsContext3D> context3d) |
| 1144 : FakeOutputSurface(TestContextProvider::Create(std::move(context3d)), | 1122 : FakeOutputSurface(TestContextProvider::Create(std::move(context3d)), |
| 1145 nullptr, | 1123 nullptr, |
| 1146 false) { | 1124 false) { |
| 1147 surface_size_ = gfx::Size(500, 500); | 1125 surface_size_ = gfx::Size(500, 500); |
| 1148 } | 1126 } |
| 1149 void Reshape(const gfx::Size& size, | 1127 void Reshape(const gfx::Size& size, |
| 1150 float scale_factor, | 1128 float scale_factor, |
| 1129 const gfx::ColorProfile& color_profile, |
| 1151 bool has_alpha) override {} | 1130 bool has_alpha) override {} |
| 1152 void set_fixed_size(const gfx::Size& size) { surface_size_ = size; } | 1131 void set_fixed_size(const gfx::Size& size) { surface_size_ = size; } |
| 1153 }; | 1132 }; |
| 1154 | 1133 |
| 1155 TEST_F(GLRendererTest, NoDiscardOnPartialUpdates) { | 1134 TEST_F(GLRendererTest, NoDiscardOnPartialUpdates) { |
| 1156 std::unique_ptr<DiscardCheckingContext> context_owned( | 1135 std::unique_ptr<DiscardCheckingContext> context_owned( |
| 1157 new DiscardCheckingContext); | 1136 new DiscardCheckingContext); |
| 1158 DiscardCheckingContext* context = context_owned.get(); | 1137 DiscardCheckingContext* context = context_owned.get(); |
| 1159 | 1138 |
| 1160 FakeOutputSurfaceClient output_surface_client; | 1139 FakeOutputSurfaceClient output_surface_client; |
| (...skipping 23 matching lines...) Expand all Loading... |
| 1184 { | 1163 { |
| 1185 // Partial frame, should not discard. | 1164 // Partial frame, should not discard. |
| 1186 RenderPassId root_pass_id(1, 0); | 1165 RenderPassId root_pass_id(1, 0); |
| 1187 RenderPass* root_pass = | 1166 RenderPass* root_pass = |
| 1188 AddRenderPass(&render_passes_in_draw_order_, root_pass_id, | 1167 AddRenderPass(&render_passes_in_draw_order_, root_pass_id, |
| 1189 viewport_rect, gfx::Transform()); | 1168 viewport_rect, gfx::Transform()); |
| 1190 AddQuad(root_pass, viewport_rect, SK_ColorGREEN); | 1169 AddQuad(root_pass, viewport_rect, SK_ColorGREEN); |
| 1191 root_pass->damage_rect = gfx::Rect(2, 2, 3, 3); | 1170 root_pass->damage_rect = gfx::Rect(2, 2, 3, 3); |
| 1192 | 1171 |
| 1193 renderer.DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); | 1172 renderer.DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); |
| 1194 renderer.DrawFrame(&render_passes_in_draw_order_, | 1173 DrawFrame(&renderer, viewport_rect, clip_rect); |
| 1195 1.f, | |
| 1196 viewport_rect, | |
| 1197 clip_rect, | |
| 1198 false); | |
| 1199 EXPECT_EQ(0, context->discarded()); | 1174 EXPECT_EQ(0, context->discarded()); |
| 1200 context->reset(); | 1175 context->reset(); |
| 1201 } | 1176 } |
| 1202 { | 1177 { |
| 1203 // Full frame, should discard. | 1178 // Full frame, should discard. |
| 1204 RenderPassId root_pass_id(1, 0); | 1179 RenderPassId root_pass_id(1, 0); |
| 1205 RenderPass* root_pass = | 1180 RenderPass* root_pass = |
| 1206 AddRenderPass(&render_passes_in_draw_order_, root_pass_id, | 1181 AddRenderPass(&render_passes_in_draw_order_, root_pass_id, |
| 1207 viewport_rect, gfx::Transform()); | 1182 viewport_rect, gfx::Transform()); |
| 1208 AddQuad(root_pass, viewport_rect, SK_ColorGREEN); | 1183 AddQuad(root_pass, viewport_rect, SK_ColorGREEN); |
| 1209 root_pass->damage_rect = root_pass->output_rect; | 1184 root_pass->damage_rect = root_pass->output_rect; |
| 1210 | 1185 |
| 1211 renderer.DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); | 1186 renderer.DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); |
| 1212 renderer.DrawFrame(&render_passes_in_draw_order_, | 1187 DrawFrame(&renderer, viewport_rect, clip_rect); |
| 1213 1.f, | |
| 1214 viewport_rect, | |
| 1215 clip_rect, | |
| 1216 false); | |
| 1217 EXPECT_EQ(1, context->discarded()); | 1188 EXPECT_EQ(1, context->discarded()); |
| 1218 context->reset(); | 1189 context->reset(); |
| 1219 } | 1190 } |
| 1220 { | 1191 { |
| 1221 // Full frame, external scissor is set, should not discard. | 1192 // Full frame, external scissor is set, should not discard. |
| 1222 output_surface->set_has_external_stencil_test(true); | 1193 output_surface->set_has_external_stencil_test(true); |
| 1223 RenderPassId root_pass_id(1, 0); | 1194 RenderPassId root_pass_id(1, 0); |
| 1224 RenderPass* root_pass = | 1195 RenderPass* root_pass = |
| 1225 AddRenderPass(&render_passes_in_draw_order_, root_pass_id, | 1196 AddRenderPass(&render_passes_in_draw_order_, root_pass_id, |
| 1226 viewport_rect, gfx::Transform()); | 1197 viewport_rect, gfx::Transform()); |
| 1227 AddQuad(root_pass, viewport_rect, SK_ColorGREEN); | 1198 AddQuad(root_pass, viewport_rect, SK_ColorGREEN); |
| 1228 root_pass->damage_rect = root_pass->output_rect; | 1199 root_pass->damage_rect = root_pass->output_rect; |
| 1229 root_pass->has_transparent_background = false; | 1200 root_pass->has_transparent_background = false; |
| 1230 | 1201 |
| 1231 renderer.DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); | 1202 renderer.DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); |
| 1232 renderer.DrawFrame(&render_passes_in_draw_order_, | 1203 DrawFrame(&renderer, viewport_rect, clip_rect); |
| 1233 1.f, | |
| 1234 viewport_rect, | |
| 1235 clip_rect, | |
| 1236 false); | |
| 1237 EXPECT_EQ(0, context->discarded()); | 1204 EXPECT_EQ(0, context->discarded()); |
| 1238 context->reset(); | 1205 context->reset(); |
| 1239 output_surface->set_has_external_stencil_test(false); | 1206 output_surface->set_has_external_stencil_test(false); |
| 1240 } | 1207 } |
| 1241 { | 1208 { |
| 1242 // Full frame, clipped, should not discard. | 1209 // Full frame, clipped, should not discard. |
| 1243 clip_rect = gfx::Rect(10, 10, 10, 10); | 1210 clip_rect = gfx::Rect(10, 10, 10, 10); |
| 1244 RenderPassId root_pass_id(1, 0); | 1211 RenderPassId root_pass_id(1, 0); |
| 1245 RenderPass* root_pass = | 1212 RenderPass* root_pass = |
| 1246 AddRenderPass(&render_passes_in_draw_order_, root_pass_id, | 1213 AddRenderPass(&render_passes_in_draw_order_, root_pass_id, |
| 1247 viewport_rect, gfx::Transform()); | 1214 viewport_rect, gfx::Transform()); |
| 1248 AddQuad(root_pass, viewport_rect, SK_ColorGREEN); | 1215 AddQuad(root_pass, viewport_rect, SK_ColorGREEN); |
| 1249 root_pass->damage_rect = root_pass->output_rect; | 1216 root_pass->damage_rect = root_pass->output_rect; |
| 1250 | 1217 |
| 1251 renderer.DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); | 1218 renderer.DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); |
| 1252 renderer.DrawFrame(&render_passes_in_draw_order_, | 1219 DrawFrame(&renderer, viewport_rect, clip_rect); |
| 1253 1.f, | |
| 1254 viewport_rect, | |
| 1255 clip_rect, | |
| 1256 false); | |
| 1257 EXPECT_EQ(0, context->discarded()); | 1220 EXPECT_EQ(0, context->discarded()); |
| 1258 context->reset(); | 1221 context->reset(); |
| 1259 } | 1222 } |
| 1260 { | 1223 { |
| 1261 // Full frame, doesn't cover the surface, should not discard. | 1224 // Full frame, doesn't cover the surface, should not discard. |
| 1262 viewport_rect = gfx::Rect(10, 10, 10, 10); | 1225 viewport_rect = gfx::Rect(10, 10, 10, 10); |
| 1263 RenderPassId root_pass_id(1, 0); | 1226 RenderPassId root_pass_id(1, 0); |
| 1264 RenderPass* root_pass = | 1227 RenderPass* root_pass = |
| 1265 AddRenderPass(&render_passes_in_draw_order_, root_pass_id, | 1228 AddRenderPass(&render_passes_in_draw_order_, root_pass_id, |
| 1266 viewport_rect, gfx::Transform()); | 1229 viewport_rect, gfx::Transform()); |
| 1267 AddQuad(root_pass, viewport_rect, SK_ColorGREEN); | 1230 AddQuad(root_pass, viewport_rect, SK_ColorGREEN); |
| 1268 root_pass->damage_rect = root_pass->output_rect; | 1231 root_pass->damage_rect = root_pass->output_rect; |
| 1269 | 1232 |
| 1270 renderer.DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); | 1233 renderer.DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); |
| 1271 renderer.DrawFrame(&render_passes_in_draw_order_, | 1234 DrawFrame(&renderer, viewport_rect, clip_rect); |
| 1272 1.f, | |
| 1273 viewport_rect, | |
| 1274 clip_rect, | |
| 1275 false); | |
| 1276 EXPECT_EQ(0, context->discarded()); | 1235 EXPECT_EQ(0, context->discarded()); |
| 1277 context->reset(); | 1236 context->reset(); |
| 1278 } | 1237 } |
| 1279 { | 1238 { |
| 1280 // Full frame, doesn't cover the surface (no offset), should not discard. | 1239 // Full frame, doesn't cover the surface (no offset), should not discard. |
| 1281 clip_rect = gfx::Rect(100, 100); | 1240 clip_rect = gfx::Rect(100, 100); |
| 1282 viewport_rect = gfx::Rect(50, 50); | 1241 viewport_rect = gfx::Rect(50, 50); |
| 1283 RenderPassId root_pass_id(1, 0); | 1242 RenderPassId root_pass_id(1, 0); |
| 1284 RenderPass* root_pass = | 1243 RenderPass* root_pass = |
| 1285 AddRenderPass(&render_passes_in_draw_order_, root_pass_id, | 1244 AddRenderPass(&render_passes_in_draw_order_, root_pass_id, |
| 1286 viewport_rect, gfx::Transform()); | 1245 viewport_rect, gfx::Transform()); |
| 1287 AddQuad(root_pass, viewport_rect, SK_ColorGREEN); | 1246 AddQuad(root_pass, viewport_rect, SK_ColorGREEN); |
| 1288 root_pass->damage_rect = root_pass->output_rect; | 1247 root_pass->damage_rect = root_pass->output_rect; |
| 1289 | 1248 |
| 1290 renderer.DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); | 1249 renderer.DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); |
| 1291 renderer.DrawFrame(&render_passes_in_draw_order_, | 1250 DrawFrame(&renderer, viewport_rect, clip_rect); |
| 1292 1.f, | |
| 1293 viewport_rect, | |
| 1294 clip_rect, | |
| 1295 false); | |
| 1296 EXPECT_EQ(0, context->discarded()); | 1251 EXPECT_EQ(0, context->discarded()); |
| 1297 context->reset(); | 1252 context->reset(); |
| 1298 } | 1253 } |
| 1299 } | 1254 } |
| 1300 | 1255 |
| 1301 class FlippedScissorAndViewportContext : public TestWebGraphicsContext3D { | 1256 class FlippedScissorAndViewportContext : public TestWebGraphicsContext3D { |
| 1302 public: | 1257 public: |
| 1303 MOCK_METHOD4(viewport, void(GLint x, GLint y, GLsizei width, GLsizei height)); | 1258 MOCK_METHOD4(viewport, void(GLint x, GLint y, GLsizei width, GLsizei height)); |
| 1304 MOCK_METHOD4(scissor, void(GLint x, GLint y, GLsizei width, GLsizei height)); | 1259 MOCK_METHOD4(scissor, void(GLint x, GLint y, GLsizei width, GLsizei height)); |
| 1305 }; | 1260 }; |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1341 gfx::Rect viewport_rect(device_viewport_rect.size()); | 1296 gfx::Rect viewport_rect(device_viewport_rect.size()); |
| 1342 gfx::Rect quad_rect = gfx::Rect(20, 20, 20, 20); | 1297 gfx::Rect quad_rect = gfx::Rect(20, 20, 20, 20); |
| 1343 | 1298 |
| 1344 RenderPassId root_pass_id(1, 0); | 1299 RenderPassId root_pass_id(1, 0); |
| 1345 RenderPass* root_pass = | 1300 RenderPass* root_pass = |
| 1346 AddRenderPass(&render_passes_in_draw_order_, root_pass_id, viewport_rect, | 1301 AddRenderPass(&render_passes_in_draw_order_, root_pass_id, viewport_rect, |
| 1347 gfx::Transform()); | 1302 gfx::Transform()); |
| 1348 AddClippedQuad(root_pass, quad_rect, SK_ColorGREEN); | 1303 AddClippedQuad(root_pass, quad_rect, SK_ColorGREEN); |
| 1349 | 1304 |
| 1350 renderer.DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); | 1305 renderer.DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); |
| 1351 renderer.DrawFrame(&render_passes_in_draw_order_, | 1306 DrawFrame(&renderer, device_viewport_rect); |
| 1352 1.f, | |
| 1353 device_viewport_rect, | |
| 1354 device_viewport_rect, | |
| 1355 false); | |
| 1356 } | 1307 } |
| 1357 | 1308 |
| 1358 TEST_F(GLRendererTest, DrawFramePreservesFramebuffer) { | 1309 TEST_F(GLRendererTest, DrawFramePreservesFramebuffer) { |
| 1359 // When using render-to-FBO to display the surface, all rendering is done | 1310 // When using render-to-FBO to display the surface, all rendering is done |
| 1360 // to a non-zero FBO. Make sure that the framebuffer is always restored to | 1311 // to a non-zero FBO. Make sure that the framebuffer is always restored to |
| 1361 // the correct framebuffer during rendering, if changed. | 1312 // the correct framebuffer during rendering, if changed. |
| 1362 // Note: there is one path that will set it to 0, but that is after the render | 1313 // Note: there is one path that will set it to 0, but that is after the render |
| 1363 // has finished. | 1314 // has finished. |
| 1364 FakeOutputSurfaceClient output_surface_client; | 1315 FakeOutputSurfaceClient output_surface_client; |
| 1365 std::unique_ptr<FakeOutputSurface> output_surface( | 1316 std::unique_ptr<FakeOutputSurface> output_surface( |
| (...skipping 22 matching lines...) Expand all Loading... |
| 1388 gfx::Transform()); | 1339 gfx::Transform()); |
| 1389 AddClippedQuad(root_pass, quad_rect, SK_ColorGREEN); | 1340 AddClippedQuad(root_pass, quad_rect, SK_ColorGREEN); |
| 1390 | 1341 |
| 1391 unsigned fbo; | 1342 unsigned fbo; |
| 1392 gpu::gles2::GLES2Interface* gl = | 1343 gpu::gles2::GLES2Interface* gl = |
| 1393 output_surface->context_provider()->ContextGL(); | 1344 output_surface->context_provider()->ContextGL(); |
| 1394 gl->GenFramebuffers(1, &fbo); | 1345 gl->GenFramebuffers(1, &fbo); |
| 1395 output_surface->set_framebuffer(fbo, GL_RGB); | 1346 output_surface->set_framebuffer(fbo, GL_RGB); |
| 1396 | 1347 |
| 1397 renderer.DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); | 1348 renderer.DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); |
| 1398 renderer.DrawFrame(&render_passes_in_draw_order_, 1.f, device_viewport_rect, | 1349 DrawFrame(&renderer, device_viewport_rect); |
| 1399 device_viewport_rect, false); | |
| 1400 | 1350 |
| 1401 int bound_fbo; | 1351 int bound_fbo; |
| 1402 gl->GetIntegerv(GL_FRAMEBUFFER_BINDING, &bound_fbo); | 1352 gl->GetIntegerv(GL_FRAMEBUFFER_BINDING, &bound_fbo); |
| 1403 EXPECT_EQ(static_cast<int>(fbo), bound_fbo); | 1353 EXPECT_EQ(static_cast<int>(fbo), bound_fbo); |
| 1404 } | 1354 } |
| 1405 | 1355 |
| 1406 TEST_F(GLRendererShaderTest, DrawRenderPassQuadShaderPermutations) { | 1356 TEST_F(GLRendererShaderTest, DrawRenderPassQuadShaderPermutations) { |
| 1407 gfx::Rect viewport_rect(1, 1); | 1357 gfx::Rect viewport_rect(1, 1); |
| 1408 | 1358 |
| 1409 gfx::Rect child_rect(50, 50); | 1359 gfx::Rect child_rect(50, 50); |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1460 | 1410 |
| 1461 AddRenderPassQuad(root_pass, | 1411 AddRenderPassQuad(root_pass, |
| 1462 child_pass, | 1412 child_pass, |
| 1463 0, | 1413 0, |
| 1464 FilterOperations(), | 1414 FilterOperations(), |
| 1465 gfx::Transform(), | 1415 gfx::Transform(), |
| 1466 xfer_mode); | 1416 xfer_mode); |
| 1467 | 1417 |
| 1468 renderer_->DecideRenderPassAllocationsForFrame( | 1418 renderer_->DecideRenderPassAllocationsForFrame( |
| 1469 render_passes_in_draw_order_); | 1419 render_passes_in_draw_order_); |
| 1470 renderer_->DrawFrame(&render_passes_in_draw_order_, | 1420 DrawFrame(renderer_.get(), viewport_rect); |
| 1471 1.f, | |
| 1472 viewport_rect, | |
| 1473 viewport_rect, | |
| 1474 false); | |
| 1475 TestRenderPassProgram(TEX_COORD_PRECISION_MEDIUM, blend_mode); | 1421 TestRenderPassProgram(TEX_COORD_PRECISION_MEDIUM, blend_mode); |
| 1476 | 1422 |
| 1477 // RenderPassColorMatrixProgram | 1423 // RenderPassColorMatrixProgram |
| 1478 render_passes_in_draw_order_.clear(); | 1424 render_passes_in_draw_order_.clear(); |
| 1479 | 1425 |
| 1480 child_pass = AddRenderPass(&render_passes_in_draw_order_, | 1426 child_pass = AddRenderPass(&render_passes_in_draw_order_, |
| 1481 child_pass_id, | 1427 child_pass_id, |
| 1482 child_rect, | 1428 child_rect, |
| 1483 transform_causing_aa); | 1429 transform_causing_aa); |
| 1484 | 1430 |
| 1485 root_pass = AddRenderPass(&render_passes_in_draw_order_, | 1431 root_pass = AddRenderPass(&render_passes_in_draw_order_, |
| 1486 root_pass_id, | 1432 root_pass_id, |
| 1487 viewport_rect, | 1433 viewport_rect, |
| 1488 gfx::Transform()); | 1434 gfx::Transform()); |
| 1489 | 1435 |
| 1490 AddRenderPassQuad( | 1436 AddRenderPassQuad( |
| 1491 root_pass, child_pass, 0, filters, gfx::Transform(), xfer_mode); | 1437 root_pass, child_pass, 0, filters, gfx::Transform(), xfer_mode); |
| 1492 | 1438 |
| 1493 renderer_->DecideRenderPassAllocationsForFrame( | 1439 renderer_->DecideRenderPassAllocationsForFrame( |
| 1494 render_passes_in_draw_order_); | 1440 render_passes_in_draw_order_); |
| 1495 renderer_->DrawFrame(&render_passes_in_draw_order_, | 1441 DrawFrame(renderer_.get(), viewport_rect); |
| 1496 1.f, | |
| 1497 viewport_rect, | |
| 1498 viewport_rect, | |
| 1499 false); | |
| 1500 TestRenderPassColorMatrixProgram(TEX_COORD_PRECISION_MEDIUM, blend_mode); | 1442 TestRenderPassColorMatrixProgram(TEX_COORD_PRECISION_MEDIUM, blend_mode); |
| 1501 | 1443 |
| 1502 // RenderPassMaskProgram | 1444 // RenderPassMaskProgram |
| 1503 render_passes_in_draw_order_.clear(); | 1445 render_passes_in_draw_order_.clear(); |
| 1504 | 1446 |
| 1505 child_pass = AddRenderPass(&render_passes_in_draw_order_, | 1447 child_pass = AddRenderPass(&render_passes_in_draw_order_, |
| 1506 child_pass_id, | 1448 child_pass_id, |
| 1507 child_rect, | 1449 child_rect, |
| 1508 gfx::Transform()); | 1450 gfx::Transform()); |
| 1509 | 1451 |
| 1510 root_pass = AddRenderPass(&render_passes_in_draw_order_, | 1452 root_pass = AddRenderPass(&render_passes_in_draw_order_, |
| 1511 root_pass_id, | 1453 root_pass_id, |
| 1512 viewport_rect, | 1454 viewport_rect, |
| 1513 gfx::Transform()); | 1455 gfx::Transform()); |
| 1514 | 1456 |
| 1515 AddRenderPassQuad(root_pass, | 1457 AddRenderPassQuad(root_pass, |
| 1516 child_pass, | 1458 child_pass, |
| 1517 mask, | 1459 mask, |
| 1518 FilterOperations(), | 1460 FilterOperations(), |
| 1519 gfx::Transform(), | 1461 gfx::Transform(), |
| 1520 xfer_mode); | 1462 xfer_mode); |
| 1521 | 1463 |
| 1522 renderer_->DecideRenderPassAllocationsForFrame( | 1464 renderer_->DecideRenderPassAllocationsForFrame( |
| 1523 render_passes_in_draw_order_); | 1465 render_passes_in_draw_order_); |
| 1524 renderer_->DrawFrame(&render_passes_in_draw_order_, | 1466 DrawFrame(renderer_.get(), viewport_rect); |
| 1525 1.f, | |
| 1526 viewport_rect, | |
| 1527 viewport_rect, | |
| 1528 false); | |
| 1529 TestRenderPassMaskProgram(TEX_COORD_PRECISION_MEDIUM, SAMPLER_TYPE_2D, | 1467 TestRenderPassMaskProgram(TEX_COORD_PRECISION_MEDIUM, SAMPLER_TYPE_2D, |
| 1530 blend_mode); | 1468 blend_mode); |
| 1531 | 1469 |
| 1532 // RenderPassMaskColorMatrixProgram | 1470 // RenderPassMaskColorMatrixProgram |
| 1533 render_passes_in_draw_order_.clear(); | 1471 render_passes_in_draw_order_.clear(); |
| 1534 | 1472 |
| 1535 child_pass = AddRenderPass(&render_passes_in_draw_order_, | 1473 child_pass = AddRenderPass(&render_passes_in_draw_order_, |
| 1536 child_pass_id, | 1474 child_pass_id, |
| 1537 child_rect, | 1475 child_rect, |
| 1538 gfx::Transform()); | 1476 gfx::Transform()); |
| 1539 | 1477 |
| 1540 root_pass = AddRenderPass(&render_passes_in_draw_order_, | 1478 root_pass = AddRenderPass(&render_passes_in_draw_order_, |
| 1541 root_pass_id, | 1479 root_pass_id, |
| 1542 viewport_rect, | 1480 viewport_rect, |
| 1543 gfx::Transform()); | 1481 gfx::Transform()); |
| 1544 | 1482 |
| 1545 AddRenderPassQuad( | 1483 AddRenderPassQuad( |
| 1546 root_pass, child_pass, mask, filters, gfx::Transform(), xfer_mode); | 1484 root_pass, child_pass, mask, filters, gfx::Transform(), xfer_mode); |
| 1547 | 1485 |
| 1548 renderer_->DecideRenderPassAllocationsForFrame( | 1486 renderer_->DecideRenderPassAllocationsForFrame( |
| 1549 render_passes_in_draw_order_); | 1487 render_passes_in_draw_order_); |
| 1550 renderer_->DrawFrame(&render_passes_in_draw_order_, | 1488 DrawFrame(renderer_.get(), viewport_rect); |
| 1551 1.f, | |
| 1552 viewport_rect, | |
| 1553 viewport_rect, | |
| 1554 false); | |
| 1555 TestRenderPassMaskColorMatrixProgram(TEX_COORD_PRECISION_MEDIUM, | 1489 TestRenderPassMaskColorMatrixProgram(TEX_COORD_PRECISION_MEDIUM, |
| 1556 SAMPLER_TYPE_2D, blend_mode); | 1490 SAMPLER_TYPE_2D, blend_mode); |
| 1557 | 1491 |
| 1558 // RenderPassProgramAA | 1492 // RenderPassProgramAA |
| 1559 render_passes_in_draw_order_.clear(); | 1493 render_passes_in_draw_order_.clear(); |
| 1560 | 1494 |
| 1561 child_pass = AddRenderPass(&render_passes_in_draw_order_, | 1495 child_pass = AddRenderPass(&render_passes_in_draw_order_, |
| 1562 child_pass_id, | 1496 child_pass_id, |
| 1563 child_rect, | 1497 child_rect, |
| 1564 transform_causing_aa); | 1498 transform_causing_aa); |
| 1565 | 1499 |
| 1566 root_pass = AddRenderPass(&render_passes_in_draw_order_, | 1500 root_pass = AddRenderPass(&render_passes_in_draw_order_, |
| 1567 root_pass_id, | 1501 root_pass_id, |
| 1568 viewport_rect, | 1502 viewport_rect, |
| 1569 gfx::Transform()); | 1503 gfx::Transform()); |
| 1570 | 1504 |
| 1571 AddRenderPassQuad(root_pass, | 1505 AddRenderPassQuad(root_pass, |
| 1572 child_pass, | 1506 child_pass, |
| 1573 0, | 1507 0, |
| 1574 FilterOperations(), | 1508 FilterOperations(), |
| 1575 transform_causing_aa, | 1509 transform_causing_aa, |
| 1576 xfer_mode); | 1510 xfer_mode); |
| 1577 | 1511 |
| 1578 renderer_->DecideRenderPassAllocationsForFrame( | 1512 renderer_->DecideRenderPassAllocationsForFrame( |
| 1579 render_passes_in_draw_order_); | 1513 render_passes_in_draw_order_); |
| 1580 renderer_->DrawFrame(&render_passes_in_draw_order_, | 1514 DrawFrame(renderer_.get(), viewport_rect); |
| 1581 1.f, | |
| 1582 viewport_rect, | |
| 1583 viewport_rect, | |
| 1584 false); | |
| 1585 TestRenderPassProgramAA(TEX_COORD_PRECISION_MEDIUM, blend_mode); | 1515 TestRenderPassProgramAA(TEX_COORD_PRECISION_MEDIUM, blend_mode); |
| 1586 | 1516 |
| 1587 // RenderPassColorMatrixProgramAA | 1517 // RenderPassColorMatrixProgramAA |
| 1588 render_passes_in_draw_order_.clear(); | 1518 render_passes_in_draw_order_.clear(); |
| 1589 | 1519 |
| 1590 child_pass = AddRenderPass(&render_passes_in_draw_order_, | 1520 child_pass = AddRenderPass(&render_passes_in_draw_order_, |
| 1591 child_pass_id, | 1521 child_pass_id, |
| 1592 child_rect, | 1522 child_rect, |
| 1593 transform_causing_aa); | 1523 transform_causing_aa); |
| 1594 | 1524 |
| 1595 root_pass = AddRenderPass(&render_passes_in_draw_order_, | 1525 root_pass = AddRenderPass(&render_passes_in_draw_order_, |
| 1596 root_pass_id, | 1526 root_pass_id, |
| 1597 viewport_rect, | 1527 viewport_rect, |
| 1598 gfx::Transform()); | 1528 gfx::Transform()); |
| 1599 | 1529 |
| 1600 AddRenderPassQuad( | 1530 AddRenderPassQuad( |
| 1601 root_pass, child_pass, 0, filters, transform_causing_aa, xfer_mode); | 1531 root_pass, child_pass, 0, filters, transform_causing_aa, xfer_mode); |
| 1602 | 1532 |
| 1603 renderer_->DecideRenderPassAllocationsForFrame( | 1533 renderer_->DecideRenderPassAllocationsForFrame( |
| 1604 render_passes_in_draw_order_); | 1534 render_passes_in_draw_order_); |
| 1605 renderer_->DrawFrame(&render_passes_in_draw_order_, | 1535 DrawFrame(renderer_.get(), viewport_rect); |
| 1606 1.f, | |
| 1607 viewport_rect, | |
| 1608 viewport_rect, | |
| 1609 false); | |
| 1610 TestRenderPassColorMatrixProgramAA(TEX_COORD_PRECISION_MEDIUM, blend_mode); | 1536 TestRenderPassColorMatrixProgramAA(TEX_COORD_PRECISION_MEDIUM, blend_mode); |
| 1611 | 1537 |
| 1612 // RenderPassMaskProgramAA | 1538 // RenderPassMaskProgramAA |
| 1613 render_passes_in_draw_order_.clear(); | 1539 render_passes_in_draw_order_.clear(); |
| 1614 | 1540 |
| 1615 child_pass = AddRenderPass(&render_passes_in_draw_order_, | 1541 child_pass = AddRenderPass(&render_passes_in_draw_order_, |
| 1616 child_pass_id, | 1542 child_pass_id, |
| 1617 child_rect, | 1543 child_rect, |
| 1618 transform_causing_aa); | 1544 transform_causing_aa); |
| 1619 | 1545 |
| 1620 root_pass = AddRenderPass(&render_passes_in_draw_order_, | 1546 root_pass = AddRenderPass(&render_passes_in_draw_order_, |
| 1621 root_pass_id, | 1547 root_pass_id, |
| 1622 viewport_rect, | 1548 viewport_rect, |
| 1623 gfx::Transform()); | 1549 gfx::Transform()); |
| 1624 | 1550 |
| 1625 AddRenderPassQuad(root_pass, | 1551 AddRenderPassQuad(root_pass, |
| 1626 child_pass, | 1552 child_pass, |
| 1627 mask, | 1553 mask, |
| 1628 FilterOperations(), | 1554 FilterOperations(), |
| 1629 transform_causing_aa, | 1555 transform_causing_aa, |
| 1630 xfer_mode); | 1556 xfer_mode); |
| 1631 | 1557 |
| 1632 renderer_->DecideRenderPassAllocationsForFrame( | 1558 renderer_->DecideRenderPassAllocationsForFrame( |
| 1633 render_passes_in_draw_order_); | 1559 render_passes_in_draw_order_); |
| 1634 renderer_->DrawFrame(&render_passes_in_draw_order_, | 1560 DrawFrame(renderer_.get(), viewport_rect); |
| 1635 1.f, | |
| 1636 viewport_rect, | |
| 1637 viewport_rect, | |
| 1638 false); | |
| 1639 TestRenderPassMaskProgramAA(TEX_COORD_PRECISION_MEDIUM, SAMPLER_TYPE_2D, | 1561 TestRenderPassMaskProgramAA(TEX_COORD_PRECISION_MEDIUM, SAMPLER_TYPE_2D, |
| 1640 blend_mode); | 1562 blend_mode); |
| 1641 | 1563 |
| 1642 // RenderPassMaskColorMatrixProgramAA | 1564 // RenderPassMaskColorMatrixProgramAA |
| 1643 render_passes_in_draw_order_.clear(); | 1565 render_passes_in_draw_order_.clear(); |
| 1644 | 1566 |
| 1645 child_pass = AddRenderPass(&render_passes_in_draw_order_, | 1567 child_pass = AddRenderPass(&render_passes_in_draw_order_, |
| 1646 child_pass_id, | 1568 child_pass_id, |
| 1647 child_rect, | 1569 child_rect, |
| 1648 transform_causing_aa); | 1570 transform_causing_aa); |
| 1649 | 1571 |
| 1650 root_pass = AddRenderPass(&render_passes_in_draw_order_, | 1572 root_pass = AddRenderPass(&render_passes_in_draw_order_, |
| 1651 root_pass_id, | 1573 root_pass_id, |
| 1652 viewport_rect, | 1574 viewport_rect, |
| 1653 transform_causing_aa); | 1575 transform_causing_aa); |
| 1654 | 1576 |
| 1655 AddRenderPassQuad( | 1577 AddRenderPassQuad( |
| 1656 root_pass, child_pass, mask, filters, transform_causing_aa, xfer_mode); | 1578 root_pass, child_pass, mask, filters, transform_causing_aa, xfer_mode); |
| 1657 | 1579 |
| 1658 renderer_->DecideRenderPassAllocationsForFrame( | 1580 renderer_->DecideRenderPassAllocationsForFrame( |
| 1659 render_passes_in_draw_order_); | 1581 render_passes_in_draw_order_); |
| 1660 renderer_->DrawFrame(&render_passes_in_draw_order_, | 1582 DrawFrame(renderer_.get(), viewport_rect); |
| 1661 1.f, | |
| 1662 viewport_rect, | |
| 1663 viewport_rect, | |
| 1664 false); | |
| 1665 TestRenderPassMaskColorMatrixProgramAA(TEX_COORD_PRECISION_MEDIUM, | 1583 TestRenderPassMaskColorMatrixProgramAA(TEX_COORD_PRECISION_MEDIUM, |
| 1666 SAMPLER_TYPE_2D, blend_mode); | 1584 SAMPLER_TYPE_2D, blend_mode); |
| 1667 } | 1585 } |
| 1668 } | 1586 } |
| 1669 | 1587 |
| 1670 // At this time, the AA code path cannot be taken if the surface's rect would | 1588 // At this time, the AA code path cannot be taken if the surface's rect would |
| 1671 // project incorrectly by the given transform, because of w<0 clipping. | 1589 // project incorrectly by the given transform, because of w<0 clipping. |
| 1672 TEST_F(GLRendererShaderTest, DrawRenderPassQuadSkipsAAForClippingTransform) { | 1590 TEST_F(GLRendererShaderTest, DrawRenderPassQuadSkipsAAForClippingTransform) { |
| 1673 gfx::Rect child_rect(50, 50); | 1591 gfx::Rect child_rect(50, 50); |
| 1674 RenderPassId child_pass_id(2, 0); | 1592 RenderPassId child_pass_id(2, 0); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 1701 gfx::Transform()); | 1619 gfx::Transform()); |
| 1702 | 1620 |
| 1703 AddRenderPassQuad(root_pass, | 1621 AddRenderPassQuad(root_pass, |
| 1704 child_pass, | 1622 child_pass, |
| 1705 0, | 1623 0, |
| 1706 FilterOperations(), | 1624 FilterOperations(), |
| 1707 transform_preventing_aa, | 1625 transform_preventing_aa, |
| 1708 SkXfermode::kSrcOver_Mode); | 1626 SkXfermode::kSrcOver_Mode); |
| 1709 | 1627 |
| 1710 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); | 1628 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); |
| 1711 renderer_->DrawFrame(&render_passes_in_draw_order_, | 1629 DrawFrame(renderer_.get(), viewport_rect); |
| 1712 1.f, | |
| 1713 viewport_rect, | |
| 1714 viewport_rect, | |
| 1715 false); | |
| 1716 | 1630 |
| 1717 // If use_aa incorrectly ignores clipping, it will use the | 1631 // If use_aa incorrectly ignores clipping, it will use the |
| 1718 // RenderPassProgramAA shader instead of the RenderPassProgram. | 1632 // RenderPassProgramAA shader instead of the RenderPassProgram. |
| 1719 TestRenderPassProgram(TEX_COORD_PRECISION_MEDIUM, BLEND_MODE_NONE); | 1633 TestRenderPassProgram(TEX_COORD_PRECISION_MEDIUM, BLEND_MODE_NONE); |
| 1720 } | 1634 } |
| 1721 | 1635 |
| 1722 TEST_F(GLRendererShaderTest, DrawSolidColorShader) { | 1636 TEST_F(GLRendererShaderTest, DrawSolidColorShader) { |
| 1723 gfx::Rect viewport_rect(1, 1); | 1637 gfx::Rect viewport_rect(1, 1); |
| 1724 RenderPassId root_pass_id(1, 0); | 1638 RenderPassId root_pass_id(1, 0); |
| 1725 RenderPass* root_pass; | 1639 RenderPass* root_pass; |
| 1726 | 1640 |
| 1727 gfx::Transform pixel_aligned_transform_causing_aa; | 1641 gfx::Transform pixel_aligned_transform_causing_aa; |
| 1728 pixel_aligned_transform_causing_aa.Translate(25.5f, 25.5f); | 1642 pixel_aligned_transform_causing_aa.Translate(25.5f, 25.5f); |
| 1729 pixel_aligned_transform_causing_aa.Scale(0.5f, 0.5f); | 1643 pixel_aligned_transform_causing_aa.Scale(0.5f, 0.5f); |
| 1730 | 1644 |
| 1731 root_pass = AddRenderPass(&render_passes_in_draw_order_, | 1645 root_pass = AddRenderPass(&render_passes_in_draw_order_, |
| 1732 root_pass_id, | 1646 root_pass_id, |
| 1733 viewport_rect, | 1647 viewport_rect, |
| 1734 gfx::Transform()); | 1648 gfx::Transform()); |
| 1735 AddTransformedQuad(root_pass, | 1649 AddTransformedQuad(root_pass, |
| 1736 viewport_rect, | 1650 viewport_rect, |
| 1737 SK_ColorYELLOW, | 1651 SK_ColorYELLOW, |
| 1738 pixel_aligned_transform_causing_aa); | 1652 pixel_aligned_transform_causing_aa); |
| 1739 | 1653 |
| 1740 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); | 1654 renderer_->DecideRenderPassAllocationsForFrame(render_passes_in_draw_order_); |
| 1741 renderer_->DrawFrame(&render_passes_in_draw_order_, | 1655 DrawFrame(renderer_.get(), viewport_rect); |
| 1742 1.f, | |
| 1743 viewport_rect, | |
| 1744 viewport_rect, | |
| 1745 false); | |
| 1746 | 1656 |
| 1747 TestSolidColorProgramAA(); | 1657 TestSolidColorProgramAA(); |
| 1748 } | 1658 } |
| 1749 | 1659 |
| 1750 class OutputSurfaceMockContext : public TestWebGraphicsContext3D { | 1660 class OutputSurfaceMockContext : public TestWebGraphicsContext3D { |
| 1751 public: | 1661 public: |
| 1752 OutputSurfaceMockContext() { test_capabilities_.post_sub_buffer = true; } | 1662 OutputSurfaceMockContext() { test_capabilities_.post_sub_buffer = true; } |
| 1753 | 1663 |
| 1754 // Specifically override methods even if they are unused (used in conjunction | 1664 // Specifically override methods even if they are unused (used in conjunction |
| 1755 // with StrictMock). We need to make sure that GLRenderer does not issue | 1665 // with StrictMock). We need to make sure that GLRenderer does not issue |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1769 TestContextProvider::Create( | 1679 TestContextProvider::Create( |
| 1770 base::MakeUnique<StrictMock<OutputSurfaceMockContext>>()), | 1680 base::MakeUnique<StrictMock<OutputSurfaceMockContext>>()), |
| 1771 nullptr, | 1681 nullptr, |
| 1772 nullptr) { | 1682 nullptr) { |
| 1773 surface_size_ = gfx::Size(100, 100); | 1683 surface_size_ = gfx::Size(100, 100); |
| 1774 } | 1684 } |
| 1775 virtual ~MockOutputSurface() {} | 1685 virtual ~MockOutputSurface() {} |
| 1776 | 1686 |
| 1777 MOCK_METHOD0(EnsureBackbuffer, void()); | 1687 MOCK_METHOD0(EnsureBackbuffer, void()); |
| 1778 MOCK_METHOD0(DiscardBackbuffer, void()); | 1688 MOCK_METHOD0(DiscardBackbuffer, void()); |
| 1779 MOCK_METHOD3(Reshape, | 1689 MOCK_METHOD4(Reshape, |
| 1780 void(const gfx::Size& size, float scale_factor, bool has_alpha)); | 1690 void(const gfx::Size& size, |
| 1691 float scale_factor, |
| 1692 const gfx::ColorProfile& color_profile, |
| 1693 bool has_alpha)); |
| 1781 MOCK_METHOD0(BindFramebuffer, void()); | 1694 MOCK_METHOD0(BindFramebuffer, void()); |
| 1782 MOCK_METHOD0(GetFramebufferCopyTextureFormat, GLenum()); | 1695 MOCK_METHOD0(GetFramebufferCopyTextureFormat, GLenum()); |
| 1783 MOCK_METHOD1(SwapBuffers_, void(CompositorFrame& frame)); | 1696 MOCK_METHOD1(SwapBuffers_, void(CompositorFrame& frame)); |
| 1784 void SwapBuffers(CompositorFrame frame) override { SwapBuffers_(frame); } | 1697 void SwapBuffers(CompositorFrame frame) override { SwapBuffers_(frame); } |
| 1785 }; | 1698 }; |
| 1786 | 1699 |
| 1787 class MockOutputSurfaceTest : public GLRendererTest { | 1700 class MockOutputSurfaceTest : public GLRendererTest { |
| 1788 protected: | 1701 protected: |
| 1789 virtual void SetUp() { | 1702 virtual void SetUp() { |
| 1790 FakeOutputSurfaceClient output_surface_client_; | 1703 FakeOutputSurfaceClient output_surface_client_; |
| (...skipping 17 matching lines...) Expand all Loading... |
| 1808 RenderPassId render_pass_id(1, 0); | 1721 RenderPassId render_pass_id(1, 0); |
| 1809 RenderPass* render_pass = | 1722 RenderPass* render_pass = |
| 1810 AddRenderPass(&render_passes_in_draw_order_, render_pass_id, | 1723 AddRenderPass(&render_passes_in_draw_order_, render_pass_id, |
| 1811 device_viewport_rect, gfx::Transform()); | 1724 device_viewport_rect, gfx::Transform()); |
| 1812 AddQuad(render_pass, device_viewport_rect, SK_ColorGREEN); | 1725 AddQuad(render_pass, device_viewport_rect, SK_ColorGREEN); |
| 1813 render_pass->has_transparent_background = transparent; | 1726 render_pass->has_transparent_background = transparent; |
| 1814 | 1727 |
| 1815 EXPECT_CALL(output_surface_, EnsureBackbuffer()).WillRepeatedly(Return()); | 1728 EXPECT_CALL(output_surface_, EnsureBackbuffer()).WillRepeatedly(Return()); |
| 1816 | 1729 |
| 1817 EXPECT_CALL(output_surface_, Reshape(device_viewport_rect.size(), | 1730 EXPECT_CALL(output_surface_, Reshape(device_viewport_rect.size(), |
| 1818 device_scale_factor, transparent)) | 1731 device_scale_factor, _, transparent)) |
| 1819 .Times(1); | 1732 .Times(1); |
| 1820 | 1733 |
| 1821 EXPECT_CALL(output_surface_, BindFramebuffer()).Times(1); | 1734 EXPECT_CALL(output_surface_, BindFramebuffer()).Times(1); |
| 1822 | 1735 |
| 1823 EXPECT_CALL(*Context(), drawElements(_, _, _, _)).Times(1); | 1736 EXPECT_CALL(*Context(), drawElements(_, _, _, _)).Times(1); |
| 1824 | 1737 |
| 1825 renderer_->DecideRenderPassAllocationsForFrame( | 1738 renderer_->DecideRenderPassAllocationsForFrame( |
| 1826 render_passes_in_draw_order_); | 1739 render_passes_in_draw_order_); |
| 1827 renderer_->DrawFrame(&render_passes_in_draw_order_, | 1740 renderer_->DrawFrame(&render_passes_in_draw_order_, device_scale_factor, |
| 1828 device_scale_factor, | 1741 gfx::ColorProfile(), device_viewport_rect, |
| 1829 device_viewport_rect, | 1742 device_viewport_rect, false); |
| 1830 device_viewport_rect, | |
| 1831 false); | |
| 1832 } | 1743 } |
| 1833 | 1744 |
| 1834 OutputSurfaceMockContext* Context() { | 1745 OutputSurfaceMockContext* Context() { |
| 1835 return static_cast<OutputSurfaceMockContext*>( | 1746 return static_cast<OutputSurfaceMockContext*>( |
| 1836 static_cast<TestContextProvider*>(output_surface_.context_provider()) | 1747 static_cast<TestContextProvider*>(output_surface_.context_provider()) |
| 1837 ->TestContext3d()); | 1748 ->TestContext3d()); |
| 1838 } | 1749 } |
| 1839 | 1750 |
| 1840 RendererSettings settings_; | 1751 RendererSettings settings_; |
| 1841 FakeOutputSurfaceClient output_surface_client_; | 1752 FakeOutputSurfaceClient output_surface_client_; |
| (...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1988 gfx::PointF(1, 1), SK_ColorTRANSPARENT, vertex_opacity, | 1899 gfx::PointF(1, 1), SK_ColorTRANSPARENT, vertex_opacity, |
| 1989 flipped, nearest_neighbor, false); | 1900 flipped, nearest_neighbor, false); |
| 1990 | 1901 |
| 1991 // DirectRenderer::DrawFrame calls into OverlayProcessor::ProcessForOverlays. | 1902 // DirectRenderer::DrawFrame calls into OverlayProcessor::ProcessForOverlays. |
| 1992 // Attempt will be called for each strategy in OverlayProcessor. We have | 1903 // Attempt will be called for each strategy in OverlayProcessor. We have |
| 1993 // added a fake strategy, so checking for Attempt calls checks if there was | 1904 // added a fake strategy, so checking for Attempt calls checks if there was |
| 1994 // any attempt to overlay, which there shouldn't be. We can't use the quad | 1905 // any attempt to overlay, which there shouldn't be. We can't use the quad |
| 1995 // list because the render pass is cleaned up by DrawFrame. | 1906 // list because the render pass is cleaned up by DrawFrame. |
| 1996 EXPECT_CALL(*processor->strategy_, Attempt(_, _, _)).Times(0); | 1907 EXPECT_CALL(*processor->strategy_, Attempt(_, _, _)).Times(0); |
| 1997 EXPECT_CALL(*validator, AllowCALayerOverlays()).Times(0); | 1908 EXPECT_CALL(*validator, AllowCALayerOverlays()).Times(0); |
| 1998 renderer.DrawFrame(&render_passes_in_draw_order_, 1.f, viewport_rect, | 1909 DrawFrame(&renderer, viewport_rect); |
| 1999 viewport_rect, false); | |
| 2000 Mock::VerifyAndClearExpectations(processor->strategy_); | 1910 Mock::VerifyAndClearExpectations(processor->strategy_); |
| 2001 Mock::VerifyAndClearExpectations(validator.get()); | 1911 Mock::VerifyAndClearExpectations(validator.get()); |
| 2002 | 1912 |
| 2003 // Without a copy request Attempt() should be called once. | 1913 // Without a copy request Attempt() should be called once. |
| 2004 root_pass = AddRenderPass(&render_passes_in_draw_order_, RenderPassId(1, 0), | 1914 root_pass = AddRenderPass(&render_passes_in_draw_order_, RenderPassId(1, 0), |
| 2005 viewport_rect, gfx::Transform()); | 1915 viewport_rect, gfx::Transform()); |
| 2006 root_pass->has_transparent_background = false; | 1916 root_pass->has_transparent_background = false; |
| 2007 | 1917 |
| 2008 overlay_quad = root_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); | 1918 overlay_quad = root_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); |
| 2009 overlay_quad->SetNew(root_pass->CreateAndAppendSharedQuadState(), | 1919 overlay_quad->SetNew(root_pass->CreateAndAppendSharedQuadState(), |
| 2010 viewport_rect, viewport_rect, viewport_rect, resource_id, | 1920 viewport_rect, viewport_rect, viewport_rect, resource_id, |
| 2011 premultiplied_alpha, gfx::PointF(0, 0), | 1921 premultiplied_alpha, gfx::PointF(0, 0), |
| 2012 gfx::PointF(1, 1), SK_ColorTRANSPARENT, vertex_opacity, | 1922 gfx::PointF(1, 1), SK_ColorTRANSPARENT, vertex_opacity, |
| 2013 flipped, nearest_neighbor, false); | 1923 flipped, nearest_neighbor, false); |
| 2014 EXPECT_CALL(*validator, AllowCALayerOverlays()) | 1924 EXPECT_CALL(*validator, AllowCALayerOverlays()) |
| 2015 .Times(1) | 1925 .Times(1) |
| 2016 .WillOnce(::testing::Return(false)); | 1926 .WillOnce(::testing::Return(false)); |
| 2017 EXPECT_CALL(*processor->strategy_, Attempt(_, _, _)).Times(1); | 1927 EXPECT_CALL(*processor->strategy_, Attempt(_, _, _)).Times(1); |
| 2018 renderer.DrawFrame(&render_passes_in_draw_order_, 1.f, viewport_rect, | 1928 DrawFrame(&renderer, viewport_rect); |
| 2019 viewport_rect, false); | |
| 2020 | 1929 |
| 2021 // If the CALayerOverlay path is taken, then the ordinary overlay path should | 1930 // If the CALayerOverlay path is taken, then the ordinary overlay path should |
| 2022 // not be called. | 1931 // not be called. |
| 2023 root_pass = AddRenderPass(&render_passes_in_draw_order_, RenderPassId(1, 0), | 1932 root_pass = AddRenderPass(&render_passes_in_draw_order_, RenderPassId(1, 0), |
| 2024 viewport_rect, gfx::Transform()); | 1933 viewport_rect, gfx::Transform()); |
| 2025 root_pass->has_transparent_background = false; | 1934 root_pass->has_transparent_background = false; |
| 2026 | 1935 |
| 2027 overlay_quad = root_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); | 1936 overlay_quad = root_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); |
| 2028 overlay_quad->SetNew(root_pass->CreateAndAppendSharedQuadState(), | 1937 overlay_quad->SetNew(root_pass->CreateAndAppendSharedQuadState(), |
| 2029 viewport_rect, viewport_rect, viewport_rect, resource_id, | 1938 viewport_rect, viewport_rect, viewport_rect, resource_id, |
| 2030 premultiplied_alpha, gfx::PointF(0, 0), | 1939 premultiplied_alpha, gfx::PointF(0, 0), |
| 2031 gfx::PointF(1, 1), SK_ColorTRANSPARENT, vertex_opacity, | 1940 gfx::PointF(1, 1), SK_ColorTRANSPARENT, vertex_opacity, |
| 2032 flipped, nearest_neighbor, false); | 1941 flipped, nearest_neighbor, false); |
| 2033 EXPECT_CALL(*validator, AllowCALayerOverlays()) | 1942 EXPECT_CALL(*validator, AllowCALayerOverlays()) |
| 2034 .Times(1) | 1943 .Times(1) |
| 2035 .WillOnce(::testing::Return(true)); | 1944 .WillOnce(::testing::Return(true)); |
| 2036 EXPECT_CALL(*processor->strategy_, Attempt(_, _, _)).Times(0); | 1945 EXPECT_CALL(*processor->strategy_, Attempt(_, _, _)).Times(0); |
| 2037 renderer.DrawFrame(&render_passes_in_draw_order_, 1.f, viewport_rect, | 1946 DrawFrame(&renderer, viewport_rect); |
| 2038 viewport_rect, false); | |
| 2039 } | 1947 } |
| 2040 | 1948 |
| 2041 class SingleOverlayOnTopProcessor : public OverlayProcessor { | 1949 class SingleOverlayOnTopProcessor : public OverlayProcessor { |
| 2042 public: | 1950 public: |
| 2043 class SingleOverlayValidator : public OverlayCandidateValidator { | 1951 class SingleOverlayValidator : public OverlayCandidateValidator { |
| 2044 public: | 1952 public: |
| 2045 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { | 1953 void GetStrategies(OverlayProcessor::StrategyList* strategies) override { |
| 2046 strategies->push_back( | 1954 strategies->push_back( |
| 2047 base::WrapUnique(new OverlayStrategySingleOnTop(this))); | 1955 base::WrapUnique(new OverlayStrategySingleOnTop(this))); |
| 2048 strategies->push_back( | 1956 strategies->push_back( |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2150 uv_top_left, uv_bottom_right, SK_ColorTRANSPARENT, | 2058 uv_top_left, uv_bottom_right, SK_ColorTRANSPARENT, |
| 2151 vertex_opacity, flipped, nearest_neighbor, false); | 2059 vertex_opacity, flipped, nearest_neighbor, false); |
| 2152 | 2060 |
| 2153 // Verify that overlay_quad actually gets turned into an overlay, and even | 2061 // Verify that overlay_quad actually gets turned into an overlay, and even |
| 2154 // though it's not drawn, that its sync point is waited on. | 2062 // though it's not drawn, that its sync point is waited on. |
| 2155 EXPECT_CALL(*context, waitSyncToken(MatchesSyncToken(sync_token))).Times(1); | 2063 EXPECT_CALL(*context, waitSyncToken(MatchesSyncToken(sync_token))).Times(1); |
| 2156 EXPECT_CALL(overlay_scheduler, | 2064 EXPECT_CALL(overlay_scheduler, |
| 2157 Schedule(1, gfx::OVERLAY_TRANSFORM_NONE, _, viewport_rect, | 2065 Schedule(1, gfx::OVERLAY_TRANSFORM_NONE, _, viewport_rect, |
| 2158 BoundingRect(uv_top_left, uv_bottom_right))).Times(1); | 2066 BoundingRect(uv_top_left, uv_bottom_right))).Times(1); |
| 2159 | 2067 |
| 2160 renderer.DrawFrame(&render_passes_in_draw_order_, 1.f, viewport_rect, | 2068 DrawFrame(&renderer, viewport_rect); |
| 2161 viewport_rect, false); | |
| 2162 } | 2069 } |
| 2163 | 2070 |
| 2164 } // namespace | 2071 } // namespace |
| 2165 } // namespace cc | 2072 } // namespace cc |
| OLD | NEW |