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 "base/message_loop.h" | 5 #include "base/message_loop.h" |
6 #include "cc/layers/append_quads_data.h" | 6 #include "cc/layers/append_quads_data.h" |
7 #include "cc/output/gl_renderer.h" | 7 #include "cc/output/gl_renderer.h" |
8 #include "cc/quads/draw_quad.h" | 8 #include "cc/quads/draw_quad.h" |
9 #include "cc/quads/picture_draw_quad.h" | 9 #include "cc/quads/picture_draw_quad.h" |
| 10 #include "cc/quads/texture_draw_quad.h" |
10 #include "cc/resources/platform_color.h" | 11 #include "cc/resources/platform_color.h" |
11 #include "cc/resources/sync_point_helper.h" | 12 #include "cc/resources/sync_point_helper.h" |
12 #include "cc/test/fake_picture_pile_impl.h" | 13 #include "cc/test/fake_picture_pile_impl.h" |
13 #include "cc/test/pixel_test.h" | 14 #include "cc/test/pixel_test.h" |
14 #include "gpu/GLES2/gl2extchromium.h" | 15 #include "gpu/GLES2/gl2extchromium.h" |
15 #include "third_party/skia/include/core/SkImageFilter.h" | 16 #include "third_party/skia/include/core/SkImageFilter.h" |
16 #include "third_party/skia/include/core/SkMatrix.h" | 17 #include "third_party/skia/include/core/SkMatrix.h" |
17 #include "third_party/skia/include/effects/SkColorFilterImageFilter.h" | 18 #include "third_party/skia/include/effects/SkColorFilterImageFilter.h" |
18 #include "third_party/skia/include/effects/SkColorMatrixFilter.h" | 19 #include "third_party/skia/include/effects/SkColorMatrixFilter.h" |
19 #include "ui/gfx/rect_conversions.h" | 20 #include "ui/gfx/rect_conversions.h" |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
87 0, // mask_resource_id | 88 0, // mask_resource_id |
88 rect, // contents_changed_since_last_frame | 89 rect, // contents_changed_since_last_frame |
89 gfx::RectF(), // mask_uv_rect | 90 gfx::RectF(), // mask_uv_rect |
90 FilterOperations(), // foreground filters | 91 FilterOperations(), // foreground filters |
91 skia::RefPtr<SkImageFilter>(), // foreground filter | 92 skia::RefPtr<SkImageFilter>(), // foreground filter |
92 FilterOperations()); // background filters | 93 FilterOperations()); // background filters |
93 | 94 |
94 return quad.PassAs<DrawQuad>(); | 95 return quad.PassAs<DrawQuad>(); |
95 } | 96 } |
96 | 97 |
| 98 scoped_ptr<TextureDrawQuad> CreateTestTextureDrawQuad( |
| 99 gfx::Rect rect, |
| 100 SkColor texel_color, |
| 101 SkColor background_color, |
| 102 SharedQuadState* shared_state, |
| 103 ResourceProvider* resource_provider) { |
| 104 SkBitmap image; |
| 105 image.setConfig(SkBitmap::kARGB_8888_Config, rect.width(), rect.height()); |
| 106 image.allocPixels(); |
| 107 image.eraseColor(texel_color); |
| 108 ResourceProvider::ResourceId resource = resource_provider->CreateResource( |
| 109 rect.size(), GL_RGBA, ResourceProvider::TextureUsageAny); |
| 110 resource_provider->SetPixels( |
| 111 resource, |
| 112 static_cast<uint8_t*>(image.getAddr(0, 0)), |
| 113 rect, |
| 114 rect, |
| 115 gfx::Vector2d()); |
| 116 |
| 117 float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f}; |
| 118 |
| 119 scoped_ptr<TextureDrawQuad> quad = TextureDrawQuad::Create(); |
| 120 quad->SetNew(shared_state, |
| 121 rect, |
| 122 gfx::Rect(), |
| 123 resource, |
| 124 true, // premultiplied_alpha |
| 125 gfx::PointF(0.0f, 0.0f), // uv_top_left |
| 126 gfx::PointF(1.0f, 1.0f), // uv_bottom_right |
| 127 vertex_opacity, |
| 128 background_color, |
| 129 false); // flipped |
| 130 return quad.Pass(); |
| 131 } |
| 132 |
97 typedef ::testing::Types<GLRenderer, | 133 typedef ::testing::Types<GLRenderer, |
98 SoftwareRenderer, | 134 SoftwareRenderer, |
99 GLRendererWithExpandedViewport, | 135 GLRendererWithExpandedViewport, |
100 SoftwareRendererWithExpandedViewport> RendererTypes; | 136 SoftwareRendererWithExpandedViewport> RendererTypes; |
101 TYPED_TEST_CASE(RendererPixelTest, RendererTypes); | 137 TYPED_TEST_CASE(RendererPixelTest, RendererTypes); |
102 | 138 |
103 typedef ::testing::Types<GLRenderer, | 139 typedef ::testing::Types<GLRenderer, |
104 GLRendererWithSkiaGPUBackend, | 140 GLRendererWithSkiaGPUBackend, |
105 SoftwareRenderer> RendererTypesWithSkiaGPUBackend; | 141 SoftwareRenderer> RendererTypesWithSkiaGPUBackend; |
106 template <typename RendererType> | 142 template <typename RendererType> |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
211 pass_list.push_back(child_pass.Pass()); | 247 pass_list.push_back(child_pass.Pass()); |
212 pass_list.push_back(root_pass.Pass()); | 248 pass_list.push_back(root_pass.Pass()); |
213 | 249 |
214 EXPECT_TRUE(this->RunPixelTestWithReadbackTarget( | 250 EXPECT_TRUE(this->RunPixelTestWithReadbackTarget( |
215 &pass_list, | 251 &pass_list, |
216 child_pass_ptr, | 252 child_pass_ptr, |
217 base::FilePath(FILE_PATH_LITERAL("green_small.png")), | 253 base::FilePath(FILE_PATH_LITERAL("green_small.png")), |
218 ExactPixelComparator(true))); | 254 ExactPixelComparator(true))); |
219 } | 255 } |
220 | 256 |
| 257 TYPED_TEST(RendererPixelTest, TextureWithoutBackground) { |
| 258 gfx::Rect rect(this->device_viewport_size_); |
| 259 |
| 260 RenderPass::Id id(1, 1); |
| 261 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); |
| 262 |
| 263 scoped_ptr<SharedQuadState> shared_state = |
| 264 CreateTestSharedQuadState(gfx::Transform(), rect); |
| 265 |
| 266 scoped_ptr<TextureDrawQuad> texture_quad = CreateTestTextureDrawQuad( |
| 267 gfx::Rect(this->device_viewport_size_), |
| 268 SkColorSetARGB(128, 0, 255, 0), // Texel color. |
| 269 SK_ColorTRANSPARENT, // Background color. |
| 270 shared_state.get(), |
| 271 this->resource_provider_.get()); |
| 272 pass->quad_list.push_back(texture_quad.PassAs<DrawQuad>()); |
| 273 |
| 274 scoped_ptr<SolidColorDrawQuad> color_quad = SolidColorDrawQuad::Create(); |
| 275 color_quad->SetNew(shared_state.get(), rect, SK_ColorWHITE, false); |
| 276 pass->quad_list.push_back(color_quad.PassAs<DrawQuad>()); |
| 277 |
| 278 RenderPassList pass_list; |
| 279 pass_list.push_back(pass.Pass()); |
| 280 |
| 281 EXPECT_TRUE(this->RunPixelTest( |
| 282 &pass_list, |
| 283 base::FilePath(FILE_PATH_LITERAL("green_alpha.png")), |
| 284 FuzzyPixelOffByOneComparator(true))); |
| 285 } |
| 286 |
| 287 TYPED_TEST(RendererPixelTest, TextureWithBackground) { |
| 288 gfx::Rect rect(this->device_viewport_size_); |
| 289 |
| 290 RenderPass::Id id(1, 1); |
| 291 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); |
| 292 |
| 293 scoped_ptr<SharedQuadState> texture_quad_state = |
| 294 CreateTestSharedQuadState(gfx::Transform(), rect); |
| 295 texture_quad_state->opacity = 0.5f; |
| 296 |
| 297 scoped_ptr<TextureDrawQuad> texture_quad = CreateTestTextureDrawQuad( |
| 298 gfx::Rect(this->device_viewport_size_), |
| 299 SK_ColorTRANSPARENT, // Texel color. |
| 300 SK_ColorGREEN, // Background color. |
| 301 texture_quad_state.get(), |
| 302 this->resource_provider_.get()); |
| 303 pass->quad_list.push_back(texture_quad.PassAs<DrawQuad>()); |
| 304 |
| 305 scoped_ptr<SharedQuadState> color_quad_state = |
| 306 CreateTestSharedQuadState(gfx::Transform(), rect); |
| 307 scoped_ptr<SolidColorDrawQuad> color_quad = SolidColorDrawQuad::Create(); |
| 308 color_quad->SetNew(color_quad_state.get(), rect, SK_ColorWHITE, false); |
| 309 pass->quad_list.push_back(color_quad.PassAs<DrawQuad>()); |
| 310 |
| 311 RenderPassList pass_list; |
| 312 pass_list.push_back(pass.Pass()); |
| 313 |
| 314 EXPECT_TRUE(this->RunPixelTest( |
| 315 &pass_list, |
| 316 base::FilePath(FILE_PATH_LITERAL("green_alpha.png")), |
| 317 FuzzyPixelOffByOneComparator(true))); |
| 318 } |
| 319 |
221 class VideoGLRendererPixelTest : public GLRendererPixelTest { | 320 class VideoGLRendererPixelTest : public GLRendererPixelTest { |
222 protected: | 321 protected: |
223 scoped_ptr<YUVVideoDrawQuad> CreateTestYUVVideoDrawQuad( | 322 scoped_ptr<YUVVideoDrawQuad> CreateTestYUVVideoDrawQuad( |
224 SharedQuadState* shared_state, bool with_alpha, bool is_transparent) { | 323 SharedQuadState* shared_state, bool with_alpha, bool is_transparent) { |
225 gfx::Rect rect(this->device_viewport_size_); | 324 gfx::Rect rect(this->device_viewport_size_); |
226 gfx::Rect opaque_rect(0, 0, 0, 0); | 325 gfx::Rect opaque_rect(0, 0, 0, 0); |
227 | 326 |
228 ResourceProvider::ResourceId y_resource = | 327 ResourceProvider::ResourceId y_resource = |
229 resource_provider_->CreateResource( | 328 resource_provider_->CreateResource( |
230 this->device_viewport_size_, | 329 this->device_viewport_size_, |
(...skipping 1006 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1237 | 1336 |
1238 EXPECT_TRUE(this->RunPixelTest( | 1337 EXPECT_TRUE(this->RunPixelTest( |
1239 &pass_list, | 1338 &pass_list, |
1240 base::FilePath(FILE_PATH_LITERAL("four_blue_green_checkers.png")), | 1339 base::FilePath(FILE_PATH_LITERAL("four_blue_green_checkers.png")), |
1241 ExactPixelComparator(true))); | 1340 ExactPixelComparator(true))); |
1242 } | 1341 } |
1243 #endif // !defined(OS_ANDROID) | 1342 #endif // !defined(OS_ANDROID) |
1244 | 1343 |
1245 } // namespace | 1344 } // namespace |
1246 } // namespace cc | 1345 } // namespace cc |
OLD | NEW |