Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(602)

Side by Side Diff: cc/output/gl_renderer_unittest.cc

Issue 2102203003: Color: Plumb color profile from ui::Compositor to cc::DirectRenderer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase on top of s/ColorProfile/ColorSpace/ Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/output/direct_renderer.cc ('k') | cc/output/output_surface.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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::ColorSpace(),
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::ColorSpace(),
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
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
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
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
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
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
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
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
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::ColorSpace& color_space,
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
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
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
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
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
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
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::ColorSpace& color_space,
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
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::ColorSpace(), 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
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
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
OLDNEW
« no previous file with comments | « cc/output/direct_renderer.cc ('k') | cc/output/output_surface.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698