Chromium Code Reviews| 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" | |
| 6 | |
| 7 #include "base/message_loop.h" | 5 #include "base/message_loop.h" |
| 8 #include "cc/layers/append_quads_data.h" | 6 #include "cc/layers/append_quads_data.h" |
| 7 #include "cc/output/gl_renderer.h" | |
| 9 #include "cc/quads/draw_quad.h" | 8 #include "cc/quads/draw_quad.h" |
| 10 #include "cc/resources/sync_point_helper.h" | 9 #include "cc/resources/sync_point_helper.h" |
| 11 #include "cc/test/pixel_test.h" | 10 #include "cc/test/pixel_test.h" |
| 12 #include "gpu/GLES2/gl2extchromium.h" | 11 #include "gpu/GLES2/gl2extchromium.h" |
| 13 #include "third_party/skia/include/core/SkImageFilter.h" | 12 #include "third_party/skia/include/core/SkImageFilter.h" |
| 14 #include "third_party/skia/include/core/SkMatrix.h" | 13 #include "third_party/skia/include/core/SkMatrix.h" |
| 15 #include "third_party/skia/include/effects/SkColorFilterImageFilter.h" | 14 #include "third_party/skia/include/effects/SkColorFilterImageFilter.h" |
| 16 #include "third_party/skia/include/effects/SkColorMatrixFilter.h" | 15 #include "third_party/skia/include/effects/SkColorMatrixFilter.h" |
| 17 | 16 |
| 18 namespace cc { | 17 namespace cc { |
| 19 namespace { | 18 namespace { |
| 20 | 19 |
| 21 class GLRendererPixelTest : public PixelTest {}; | |
| 22 | |
| 23 scoped_ptr<RenderPass> CreateTestRootRenderPass(RenderPass::Id id, | 20 scoped_ptr<RenderPass> CreateTestRootRenderPass(RenderPass::Id id, |
| 24 gfx::Rect rect) { | 21 gfx::Rect rect) { |
| 25 scoped_ptr<RenderPass> pass = RenderPass::Create(); | 22 scoped_ptr<RenderPass> pass = RenderPass::Create(); |
| 26 const gfx::Rect output_rect = rect; | 23 const gfx::Rect output_rect = rect; |
| 27 const gfx::RectF damage_rect = rect; | 24 const gfx::RectF damage_rect = rect; |
| 28 const gfx::Transform transform_to_root_target; | 25 const gfx::Transform transform_to_root_target; |
| 29 pass->SetNew(id, output_rect, damage_rect, transform_to_root_target); | 26 pass->SetNew(id, output_rect, damage_rect, transform_to_root_target); |
| 30 return pass.Pass(); | 27 return pass.Pass(); |
| 31 } | 28 } |
| 32 | 29 |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 68 0, // mask_resource_id | 65 0, // mask_resource_id |
| 69 rect, // contents_changed_since_last_frame | 66 rect, // contents_changed_since_last_frame |
| 70 gfx::RectF(), // mask_uv_rect | 67 gfx::RectF(), // mask_uv_rect |
| 71 WebKit::WebFilterOperations(), // foreground filters | 68 WebKit::WebFilterOperations(), // foreground filters |
| 72 skia::RefPtr<SkImageFilter>(), // foreground filter | 69 skia::RefPtr<SkImageFilter>(), // foreground filter |
| 73 WebKit::WebFilterOperations()); // background filters | 70 WebKit::WebFilterOperations()); // background filters |
| 74 | 71 |
| 75 return quad.PassAs<DrawQuad>(); | 72 return quad.PassAs<DrawQuad>(); |
| 76 } | 73 } |
| 77 | 74 |
| 75 typedef ::testing::Types<GLRenderer, SoftwareRenderer> RendererTypes; | |
| 76 TYPED_TEST_CASE(RendererPixelTest, RendererTypes); | |
| 77 | |
| 78 // All pixels can be off by one, but any more than that is an error. | |
| 79 class FuzzyPixelOffByOneComparator : public FuzzyPixelComparator { | |
| 80 public: | |
| 81 explicit FuzzyPixelOffByOneComparator(bool discard_alpha) | |
| 82 : FuzzyPixelComparator(discard_alpha, 100.f, 0.f, 1.f, 1, 0) {} | |
| 83 }; | |
| 78 | 84 |
| 79 #if !defined(OS_ANDROID) | 85 #if !defined(OS_ANDROID) |
| 80 TEST_F(GLRendererPixelTest, SimpleGreenRect) { | 86 TYPED_TEST(RendererPixelTest, SimpleGreenRect) { |
| 81 gfx::Rect rect(device_viewport_size_); | 87 gfx::Rect rect(this->device_viewport_size_); |
|
enne (OOO)
2013/04/28 02:56:55
The "this->" requirement is an unfortunate require
| |
| 82 | 88 |
| 83 RenderPass::Id id(1, 1); | 89 RenderPass::Id id(1, 1); |
| 84 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); | 90 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); |
| 85 | 91 |
| 86 gfx::Transform content_to_target_transform; | 92 gfx::Transform content_to_target_transform; |
| 87 scoped_ptr<SharedQuadState> shared_state = | 93 scoped_ptr<SharedQuadState> shared_state = |
| 88 CreateTestSharedQuadState(content_to_target_transform, rect); | 94 CreateTestSharedQuadState(content_to_target_transform, rect); |
| 89 | 95 |
| 90 scoped_ptr<SolidColorDrawQuad> color_quad = SolidColorDrawQuad::Create(); | 96 scoped_ptr<SolidColorDrawQuad> color_quad = SolidColorDrawQuad::Create(); |
| 91 color_quad->SetNew(shared_state.get(), rect, SK_ColorGREEN); | 97 color_quad->SetNew(shared_state.get(), rect, SK_ColorGREEN); |
| 92 | 98 |
| 93 pass->quad_list.push_back(color_quad.PassAs<DrawQuad>()); | 99 pass->quad_list.push_back(color_quad.PassAs<DrawQuad>()); |
| 94 | 100 |
| 95 RenderPassList pass_list; | 101 RenderPassList pass_list; |
| 96 pass_list.push_back(pass.Pass()); | 102 pass_list.push_back(pass.Pass()); |
| 97 | 103 |
| 98 EXPECT_TRUE(RunPixelTest( | 104 EXPECT_TRUE(this->RunPixelTest( |
| 99 &pass_list, | 105 &pass_list, |
| 100 base::FilePath(FILE_PATH_LITERAL("green.png")), | 106 base::FilePath(FILE_PATH_LITERAL("green.png")), |
| 101 ExactPixelComparator(true))); | 107 ExactPixelComparator(true))); |
| 102 } | 108 } |
| 103 | 109 |
| 104 TEST_F(GLRendererPixelTest, FastPassColorFilterAlpha) { | 110 TYPED_TEST(RendererPixelTest, FastPassColorFilterAlpha) { |
| 105 gfx::Rect viewport_rect(device_viewport_size_); | 111 gfx::Rect viewport_rect(this->device_viewport_size_); |
| 106 | 112 |
| 107 RenderPass::Id root_pass_id(1, 1); | 113 RenderPass::Id root_pass_id(1, 1); |
| 108 scoped_ptr<RenderPass> root_pass = | 114 scoped_ptr<RenderPass> root_pass = |
| 109 CreateTestRootRenderPass(root_pass_id, viewport_rect); | 115 CreateTestRootRenderPass(root_pass_id, viewport_rect); |
| 110 | 116 |
| 111 RenderPass::Id child_pass_id(2, 2); | 117 RenderPass::Id child_pass_id(2, 2); |
| 112 gfx::Rect pass_rect(device_viewport_size_); | 118 gfx::Rect pass_rect(this->device_viewport_size_); |
| 113 gfx::Transform transform_to_root; | 119 gfx::Transform transform_to_root; |
| 114 scoped_ptr<RenderPass> child_pass = | 120 scoped_ptr<RenderPass> child_pass = |
| 115 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root); | 121 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root); |
| 116 | 122 |
| 117 gfx::Transform content_to_target_transform; | 123 gfx::Transform content_to_target_transform; |
| 118 scoped_ptr<SharedQuadState> shared_state = | 124 scoped_ptr<SharedQuadState> shared_state = |
| 119 CreateTestSharedQuadState(content_to_target_transform, viewport_rect); | 125 CreateTestSharedQuadState(content_to_target_transform, viewport_rect); |
| 120 shared_state->opacity = 0.5f; | 126 shared_state->opacity = 0.5f; |
| 121 | 127 |
| 122 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create(); | 128 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create(); |
| 123 blue->SetNew(shared_state.get(), | 129 blue->SetNew(shared_state.get(), |
| 124 gfx::Rect(0, | 130 gfx::Rect(0, |
| 125 0, | 131 0, |
| 126 device_viewport_size_.width() / 2, | 132 this->device_viewport_size_.width() / 2, |
| 127 device_viewport_size_.height()), | 133 this->device_viewport_size_.height()), |
| 128 SK_ColorBLUE); | 134 SK_ColorBLUE); |
| 129 scoped_ptr<SolidColorDrawQuad> yellow = SolidColorDrawQuad::Create(); | 135 scoped_ptr<SolidColorDrawQuad> yellow = SolidColorDrawQuad::Create(); |
| 130 yellow->SetNew(shared_state.get(), | 136 yellow->SetNew(shared_state.get(), |
| 131 gfx::Rect(device_viewport_size_.width() / 2, | 137 gfx::Rect(this->device_viewport_size_.width() / 2, |
| 132 0, | 138 0, |
| 133 device_viewport_size_.width() / 2, | 139 this->device_viewport_size_.width() / 2, |
| 134 device_viewport_size_.height()), | 140 this->device_viewport_size_.height()), |
| 135 SK_ColorYELLOW); | 141 SK_ColorYELLOW); |
| 136 | 142 |
| 137 scoped_ptr<SharedQuadState> blank_state = | 143 scoped_ptr<SharedQuadState> blank_state = |
| 138 CreateTestSharedQuadState(content_to_target_transform, viewport_rect); | 144 CreateTestSharedQuadState(content_to_target_transform, viewport_rect); |
| 139 | 145 |
| 140 scoped_ptr<SolidColorDrawQuad> white = SolidColorDrawQuad::Create(); | 146 scoped_ptr<SolidColorDrawQuad> white = SolidColorDrawQuad::Create(); |
| 141 white->SetNew(blank_state.get(), | 147 white->SetNew(blank_state.get(), |
| 142 viewport_rect, | 148 viewport_rect, |
| 143 SK_ColorWHITE); | 149 SK_ColorWHITE); |
| 144 | 150 |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 182 WebKit::WebFilterOperations(), | 188 WebKit::WebFilterOperations(), |
| 183 filter, | 189 filter, |
| 184 WebKit::WebFilterOperations()); | 190 WebKit::WebFilterOperations()); |
| 185 | 191 |
| 186 root_pass->quad_list.push_back(render_pass_quad.PassAs<DrawQuad>()); | 192 root_pass->quad_list.push_back(render_pass_quad.PassAs<DrawQuad>()); |
| 187 | 193 |
| 188 RenderPassList pass_list; | 194 RenderPassList pass_list; |
| 189 pass_list.push_back(child_pass.Pass()); | 195 pass_list.push_back(child_pass.Pass()); |
| 190 pass_list.push_back(root_pass.Pass()); | 196 pass_list.push_back(root_pass.Pass()); |
| 191 | 197 |
| 192 EXPECT_TRUE(RunPixelTest( | 198 // This test has alpha=254 for the software renderer vs. alpha=255 for the gl |
| 199 // renderer so use a fuzzy comparator. | |
| 200 EXPECT_TRUE(this->RunPixelTest( | |
| 193 &pass_list, | 201 &pass_list, |
| 194 base::FilePath(FILE_PATH_LITERAL("blue_yellow_alpha.png")), | 202 base::FilePath(FILE_PATH_LITERAL("blue_yellow_alpha.png")), |
| 195 ExactPixelComparator(false))); | 203 FuzzyPixelOffByOneComparator(false))); |
| 196 } | 204 } |
| 197 | 205 |
| 198 TEST_F(GLRendererPixelTest, FastPassColorFilterAlphaTranslation) { | 206 TYPED_TEST(RendererPixelTest, FastPassColorFilterAlphaTranslation) { |
| 199 gfx::Rect viewport_rect(device_viewport_size_); | 207 gfx::Rect viewport_rect(this->device_viewport_size_); |
| 200 | 208 |
| 201 RenderPass::Id root_pass_id(1, 1); | 209 RenderPass::Id root_pass_id(1, 1); |
| 202 scoped_ptr<RenderPass> root_pass = | 210 scoped_ptr<RenderPass> root_pass = |
| 203 CreateTestRootRenderPass(root_pass_id, viewport_rect); | 211 CreateTestRootRenderPass(root_pass_id, viewport_rect); |
| 204 | 212 |
| 205 RenderPass::Id child_pass_id(2, 2); | 213 RenderPass::Id child_pass_id(2, 2); |
| 206 gfx::Rect pass_rect(device_viewport_size_); | 214 gfx::Rect pass_rect(this->device_viewport_size_); |
| 207 gfx::Transform transform_to_root; | 215 gfx::Transform transform_to_root; |
| 208 scoped_ptr<RenderPass> child_pass = | 216 scoped_ptr<RenderPass> child_pass = |
| 209 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root); | 217 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root); |
| 210 | 218 |
| 211 gfx::Transform content_to_target_transform; | 219 gfx::Transform content_to_target_transform; |
| 212 scoped_ptr<SharedQuadState> shared_state = | 220 scoped_ptr<SharedQuadState> shared_state = |
| 213 CreateTestSharedQuadState(content_to_target_transform, viewport_rect); | 221 CreateTestSharedQuadState(content_to_target_transform, viewport_rect); |
| 214 shared_state->opacity = 0.5f; | 222 shared_state->opacity = 0.5f; |
| 215 | 223 |
| 216 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create(); | 224 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create(); |
| 217 blue->SetNew(shared_state.get(), | 225 blue->SetNew(shared_state.get(), |
| 218 gfx::Rect(0, | 226 gfx::Rect(0, |
| 219 0, | 227 0, |
| 220 device_viewport_size_.width() / 2, | 228 this->device_viewport_size_.width() / 2, |
| 221 device_viewport_size_.height()), | 229 this->device_viewport_size_.height()), |
| 222 SK_ColorBLUE); | 230 SK_ColorBLUE); |
| 223 scoped_ptr<SolidColorDrawQuad> yellow = SolidColorDrawQuad::Create(); | 231 scoped_ptr<SolidColorDrawQuad> yellow = SolidColorDrawQuad::Create(); |
| 224 yellow->SetNew(shared_state.get(), | 232 yellow->SetNew(shared_state.get(), |
| 225 gfx::Rect(device_viewport_size_.width() / 2, | 233 gfx::Rect(this->device_viewport_size_.width() / 2, |
| 226 0, | 234 0, |
| 227 device_viewport_size_.width() / 2, | 235 this->device_viewport_size_.width() / 2, |
| 228 device_viewport_size_.height()), | 236 this->device_viewport_size_.height()), |
| 229 SK_ColorYELLOW); | 237 SK_ColorYELLOW); |
| 230 | 238 |
| 231 scoped_ptr<SharedQuadState> blank_state = | 239 scoped_ptr<SharedQuadState> blank_state = |
| 232 CreateTestSharedQuadState(content_to_target_transform, viewport_rect); | 240 CreateTestSharedQuadState(content_to_target_transform, viewport_rect); |
| 233 | 241 |
| 234 scoped_ptr<SolidColorDrawQuad> white = SolidColorDrawQuad::Create(); | 242 scoped_ptr<SolidColorDrawQuad> white = SolidColorDrawQuad::Create(); |
| 235 white->SetNew(blank_state.get(), | 243 white->SetNew(blank_state.get(), |
| 236 viewport_rect, | 244 viewport_rect, |
| 237 SK_ColorWHITE); | 245 SK_ColorWHITE); |
| 238 | 246 |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 279 WebKit::WebFilterOperations(), | 287 WebKit::WebFilterOperations(), |
| 280 filter, | 288 filter, |
| 281 WebKit::WebFilterOperations()); | 289 WebKit::WebFilterOperations()); |
| 282 | 290 |
| 283 root_pass->quad_list.push_back(render_pass_quad.PassAs<DrawQuad>()); | 291 root_pass->quad_list.push_back(render_pass_quad.PassAs<DrawQuad>()); |
| 284 RenderPassList pass_list; | 292 RenderPassList pass_list; |
| 285 | 293 |
| 286 pass_list.push_back(child_pass.Pass()); | 294 pass_list.push_back(child_pass.Pass()); |
| 287 pass_list.push_back(root_pass.Pass()); | 295 pass_list.push_back(root_pass.Pass()); |
| 288 | 296 |
| 289 EXPECT_TRUE(RunPixelTest( | 297 // This test has alpha=254 for the software renderer vs. alpha=255 for the gl |
| 298 // renderer so use a fuzzy comparator. | |
| 299 EXPECT_TRUE(this->RunPixelTest( | |
| 290 &pass_list, | 300 &pass_list, |
| 291 base::FilePath(FILE_PATH_LITERAL("blue_yellow_alpha_translate.png")), | 301 base::FilePath(FILE_PATH_LITERAL("blue_yellow_alpha_translate.png")), |
| 292 ExactPixelComparator(false))); | 302 FuzzyPixelOffByOneComparator(false))); |
| 293 } | 303 } |
| 294 | 304 |
| 295 TEST_F(GLRendererPixelTest, RenderPassChangesSize) { | 305 TYPED_TEST(RendererPixelTest, RenderPassChangesSize) { |
| 296 gfx::Rect viewport_rect(device_viewport_size_); | 306 gfx::Rect viewport_rect(this->device_viewport_size_); |
| 297 | 307 |
| 298 RenderPass::Id root_pass_id(1, 1); | 308 RenderPass::Id root_pass_id(1, 1); |
| 299 scoped_ptr<RenderPass> root_pass = | 309 scoped_ptr<RenderPass> root_pass = |
| 300 CreateTestRootRenderPass(root_pass_id, viewport_rect); | 310 CreateTestRootRenderPass(root_pass_id, viewport_rect); |
| 301 | 311 |
| 302 RenderPass::Id child_pass_id(2, 2); | 312 RenderPass::Id child_pass_id(2, 2); |
| 303 gfx::Rect pass_rect(device_viewport_size_); | 313 gfx::Rect pass_rect(this->device_viewport_size_); |
| 304 gfx::Transform transform_to_root; | 314 gfx::Transform transform_to_root; |
| 305 scoped_ptr<RenderPass> child_pass = | 315 scoped_ptr<RenderPass> child_pass = |
| 306 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root); | 316 CreateTestRenderPass(child_pass_id, pass_rect, transform_to_root); |
| 307 | 317 |
| 308 gfx::Transform content_to_target_transform; | 318 gfx::Transform content_to_target_transform; |
| 309 scoped_ptr<SharedQuadState> shared_state = | 319 scoped_ptr<SharedQuadState> shared_state = |
| 310 CreateTestSharedQuadState(content_to_target_transform, viewport_rect); | 320 CreateTestSharedQuadState(content_to_target_transform, viewport_rect); |
| 311 | 321 |
| 312 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create(); | 322 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create(); |
| 313 blue->SetNew(shared_state.get(), | 323 blue->SetNew(shared_state.get(), |
| 314 gfx::Rect(0, | 324 gfx::Rect(0, |
| 315 0, | 325 0, |
| 316 device_viewport_size_.width() / 2, | 326 this->device_viewport_size_.width() / 2, |
| 317 device_viewport_size_.height()), | 327 this->device_viewport_size_.height()), |
| 318 SK_ColorBLUE); | 328 SK_ColorBLUE); |
| 319 scoped_ptr<SolidColorDrawQuad> yellow = SolidColorDrawQuad::Create(); | 329 scoped_ptr<SolidColorDrawQuad> yellow = SolidColorDrawQuad::Create(); |
| 320 yellow->SetNew(shared_state.get(), | 330 yellow->SetNew(shared_state.get(), |
| 321 gfx::Rect(device_viewport_size_.width() / 2, | 331 gfx::Rect(this->device_viewport_size_.width() / 2, |
| 322 0, | 332 0, |
| 323 device_viewport_size_.width() / 2, | 333 this->device_viewport_size_.width() / 2, |
| 324 device_viewport_size_.height()), | 334 this->device_viewport_size_.height()), |
| 325 SK_ColorYELLOW); | 335 SK_ColorYELLOW); |
| 326 | 336 |
| 327 child_pass->quad_list.push_back(blue.PassAs<DrawQuad>()); | 337 child_pass->quad_list.push_back(blue.PassAs<DrawQuad>()); |
| 328 child_pass->quad_list.push_back(yellow.PassAs<DrawQuad>()); | 338 child_pass->quad_list.push_back(yellow.PassAs<DrawQuad>()); |
| 329 | 339 |
| 330 scoped_ptr<SharedQuadState> pass_shared_state = | 340 scoped_ptr<SharedQuadState> pass_shared_state = |
| 331 CreateTestSharedQuadState(gfx::Transform(), pass_rect); | 341 CreateTestSharedQuadState(gfx::Transform(), pass_rect); |
| 332 root_pass->quad_list.push_back( | 342 root_pass->quad_list.push_back( |
| 333 CreateTestRenderPassDrawQuad(pass_shared_state.get(), | 343 CreateTestRenderPassDrawQuad(pass_shared_state.get(), |
| 334 pass_rect, | 344 pass_rect, |
| 335 child_pass_id)); | 345 child_pass_id)); |
| 336 | 346 |
| 337 RenderPassList pass_list; | 347 RenderPassList pass_list; |
| 338 pass_list.push_back(child_pass.Pass()); | 348 pass_list.push_back(child_pass.Pass()); |
| 339 pass_list.push_back(root_pass.Pass()); | 349 pass_list.push_back(root_pass.Pass()); |
| 340 | 350 |
| 341 renderer_->SetEnlargePassTextureAmountForTesting(gfx::Vector2d(50, 75)); | 351 this->renderer_->SetEnlargePassTextureAmountForTesting(gfx::Vector2d(50, 75)); |
| 342 | 352 |
| 343 EXPECT_TRUE(RunPixelTest( | 353 EXPECT_TRUE(this->RunPixelTest( |
| 344 &pass_list, | 354 &pass_list, |
| 345 base::FilePath(FILE_PATH_LITERAL("blue_yellow.png")), | 355 base::FilePath(FILE_PATH_LITERAL("blue_yellow.png")), |
| 346 ExactPixelComparator(true))); | 356 ExactPixelComparator(true))); |
| 347 } | 357 } |
| 348 | 358 |
| 349 class GLRendererPixelTestWithBackgroundFilter : public GLRendererPixelTest { | 359 template <typename RendererType> |
| 360 class RendererPixelTestWithBackgroundFilter | |
| 361 : public RendererPixelTest<RendererType> { | |
| 350 protected: | 362 protected: |
| 351 void SetUpRenderPassList() { | 363 void SetUpRenderPassList() { |
| 352 gfx::Rect device_viewport_rect(device_viewport_size_); | 364 gfx::Rect device_viewport_rect(this->device_viewport_size_); |
| 353 | 365 |
| 354 RenderPass::Id root_id(1, 1); | 366 RenderPass::Id root_id(1, 1); |
| 355 scoped_ptr<RenderPass> root_pass = | 367 scoped_ptr<RenderPass> root_pass = |
| 356 CreateTestRootRenderPass(root_id, device_viewport_rect); | 368 CreateTestRootRenderPass(root_id, device_viewport_rect); |
| 357 root_pass->has_transparent_background = false; | 369 root_pass->has_transparent_background = false; |
| 358 | 370 |
| 359 gfx::Transform identity_content_to_target_transform; | 371 gfx::Transform identity_content_to_target_transform; |
| 360 | 372 |
| 361 RenderPass::Id filter_pass_id(2, 1); | 373 RenderPass::Id filter_pass_id(2, 1); |
| 362 gfx::Transform transform_to_root; | 374 gfx::Transform transform_to_root; |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 387 filter_pass_quad->SetNew( | 399 filter_pass_quad->SetNew( |
| 388 shared_state.get(), | 400 shared_state.get(), |
| 389 filter_pass_content_rect_, | 401 filter_pass_content_rect_, |
| 390 filter_pass_id, | 402 filter_pass_id, |
| 391 false, // is_replica | 403 false, // is_replica |
| 392 0, // mask_resource_id | 404 0, // mask_resource_id |
| 393 filter_pass_content_rect_, // contents_changed_since_last_frame | 405 filter_pass_content_rect_, // contents_changed_since_last_frame |
| 394 gfx::RectF(), // mask_uv_rect | 406 gfx::RectF(), // mask_uv_rect |
| 395 WebKit::WebFilterOperations(), // filters | 407 WebKit::WebFilterOperations(), // filters |
| 396 skia::RefPtr<SkImageFilter>(), // filter | 408 skia::RefPtr<SkImageFilter>(), // filter |
| 397 background_filters_); | 409 this->background_filters_); |
| 398 root_pass->quad_list.push_back(filter_pass_quad.PassAs<DrawQuad>()); | 410 root_pass->quad_list.push_back(filter_pass_quad.PassAs<DrawQuad>()); |
| 399 root_pass->shared_quad_state_list.push_back(shared_state.Pass()); | 411 root_pass->shared_quad_state_list.push_back(shared_state.Pass()); |
| 400 } | 412 } |
| 401 | 413 |
| 402 const int kColumnWidth = device_viewport_rect.width() / 3; | 414 const int kColumnWidth = device_viewport_rect.width() / 3; |
| 403 | 415 |
| 404 gfx::Rect left_rect = gfx::Rect(0, 0, kColumnWidth, 20); | 416 gfx::Rect left_rect = gfx::Rect(0, 0, kColumnWidth, 20); |
| 405 for (int i = 0; left_rect.y() < device_viewport_rect.height(); ++i) { | 417 for (int i = 0; left_rect.y() < device_viewport_rect.height(); ++i) { |
| 406 scoped_ptr<SharedQuadState> shared_state = | 418 scoped_ptr<SharedQuadState> shared_state = |
| 407 CreateTestSharedQuadState(identity_content_to_target_transform, | 419 CreateTestSharedQuadState(identity_content_to_target_transform, |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 451 pass_list_.push_back(filter_pass.Pass()); | 463 pass_list_.push_back(filter_pass.Pass()); |
| 452 pass_list_.push_back(root_pass.Pass()); | 464 pass_list_.push_back(root_pass.Pass()); |
| 453 } | 465 } |
| 454 | 466 |
| 455 RenderPassList pass_list_; | 467 RenderPassList pass_list_; |
| 456 WebKit::WebFilterOperations background_filters_; | 468 WebKit::WebFilterOperations background_filters_; |
| 457 gfx::Transform filter_pass_to_target_transform_; | 469 gfx::Transform filter_pass_to_target_transform_; |
| 458 gfx::Rect filter_pass_content_rect_; | 470 gfx::Rect filter_pass_content_rect_; |
| 459 }; | 471 }; |
| 460 | 472 |
| 473 typedef ::testing::Types<GLRenderer, SoftwareRenderer> RendererTypes; | |
| 474 TYPED_TEST_CASE(RendererPixelTestWithBackgroundFilter, RendererTypes); | |
| 475 | |
| 476 typedef RendererPixelTestWithBackgroundFilter<GLRenderer> | |
| 477 GLRendererPixelTestWithBackgroundFilter; | |
| 478 | |
| 479 // TODO(skaslev): The software renderer does not support filters yet. | |
| 461 TEST_F(GLRendererPixelTestWithBackgroundFilter, InvertFilter) { | 480 TEST_F(GLRendererPixelTestWithBackgroundFilter, InvertFilter) { |
| 462 background_filters_.append( | 481 this->background_filters_.append( |
| 463 WebKit::WebFilterOperation::createInvertFilter(1.f)); | 482 WebKit::WebFilterOperation::createInvertFilter(1.f)); |
| 464 | 483 |
| 465 filter_pass_content_rect_ = gfx::Rect(device_viewport_size_); | 484 this->filter_pass_content_rect_ = gfx::Rect(this->device_viewport_size_); |
| 466 filter_pass_content_rect_.Inset(12, 14, 16, 18); | 485 this->filter_pass_content_rect_.Inset(12, 14, 16, 18); |
| 467 | 486 |
| 468 SetUpRenderPassList(); | 487 this->SetUpRenderPassList(); |
| 469 EXPECT_TRUE(RunPixelTest( | 488 EXPECT_TRUE(this->RunPixelTest( |
| 470 &pass_list_, | 489 &this->pass_list_, |
| 471 base::FilePath(FILE_PATH_LITERAL("background_filter.png")), | 490 base::FilePath(FILE_PATH_LITERAL("background_filter.png")), |
| 472 ExactPixelComparator(true))); | 491 ExactPixelComparator(true))); |
| 473 } | 492 } |
| 474 | 493 |
| 494 // Software renderer does not support anti-aliased edges. | |
| 475 TEST_F(GLRendererPixelTest, AntiAliasing) { | 495 TEST_F(GLRendererPixelTest, AntiAliasing) { |
| 476 gfx::Rect rect(0, 0, 200, 200); | 496 gfx::Rect rect(0, 0, 200, 200); |
| 477 | 497 |
| 478 RenderPass::Id id(1, 1); | 498 RenderPass::Id id(1, 1); |
| 479 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); | 499 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); |
| 480 | 500 |
| 481 gfx::Transform red_content_to_target_transform; | 501 gfx::Transform red_content_to_target_transform; |
| 482 red_content_to_target_transform.Rotate(10); | 502 red_content_to_target_transform.Rotate(10); |
| 483 scoped_ptr<SharedQuadState> red_shared_state = | 503 scoped_ptr<SharedQuadState> red_shared_state = |
| 484 CreateTestSharedQuadState(red_content_to_target_transform, rect); | 504 CreateTestSharedQuadState(red_content_to_target_transform, rect); |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 503 CreateTestSharedQuadState(blue_content_to_target_transform, rect); | 523 CreateTestSharedQuadState(blue_content_to_target_transform, rect); |
| 504 | 524 |
| 505 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create(); | 525 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create(); |
| 506 blue->SetNew(blue_shared_state.get(), rect, SK_ColorBLUE); | 526 blue->SetNew(blue_shared_state.get(), rect, SK_ColorBLUE); |
| 507 | 527 |
| 508 pass->quad_list.push_back(blue.PassAs<DrawQuad>()); | 528 pass->quad_list.push_back(blue.PassAs<DrawQuad>()); |
| 509 | 529 |
| 510 RenderPassList pass_list; | 530 RenderPassList pass_list; |
| 511 pass_list.push_back(pass.Pass()); | 531 pass_list.push_back(pass.Pass()); |
| 512 | 532 |
| 513 EXPECT_TRUE(RunPixelTest( | 533 EXPECT_TRUE(this->RunPixelTest( |
| 514 &pass_list, | 534 &pass_list, |
| 515 base::FilePath(FILE_PATH_LITERAL("anti_aliasing.png")), | 535 base::FilePath(FILE_PATH_LITERAL("anti_aliasing.png")), |
| 516 ExactPixelComparator(true))); | 536 ExactPixelComparator(true))); |
| 517 } | 537 } |
| 518 | 538 |
| 539 // This test tests that anti-aliasing works for axis aligned quads. | |
| 540 // Anti-aliasing is only supported in the gl renderer. | |
| 519 TEST_F(GLRendererPixelTest, AxisAligned) { | 541 TEST_F(GLRendererPixelTest, AxisAligned) { |
| 520 gfx::Rect rect(0, 0, 200, 200); | 542 gfx::Rect rect(0, 0, 200, 200); |
| 521 | 543 |
| 522 RenderPass::Id id(1, 1); | 544 RenderPass::Id id(1, 1); |
| 523 gfx::Transform transform_to_root; | 545 gfx::Transform transform_to_root; |
| 524 scoped_ptr<RenderPass> pass = | 546 scoped_ptr<RenderPass> pass = |
| 525 CreateTestRenderPass(id, rect, transform_to_root); | 547 CreateTestRenderPass(id, rect, transform_to_root); |
| 526 | 548 |
| 527 gfx::Transform red_content_to_target_transform; | 549 gfx::Transform red_content_to_target_transform; |
| 528 red_content_to_target_transform.Translate(50, 50); | 550 red_content_to_target_transform.Translate(50, 50); |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 553 CreateTestSharedQuadState(blue_content_to_target_transform, rect); | 575 CreateTestSharedQuadState(blue_content_to_target_transform, rect); |
| 554 | 576 |
| 555 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create(); | 577 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create(); |
| 556 blue->SetNew(blue_shared_state.get(), rect, SK_ColorBLUE); | 578 blue->SetNew(blue_shared_state.get(), rect, SK_ColorBLUE); |
| 557 | 579 |
| 558 pass->quad_list.push_back(blue.PassAs<DrawQuad>()); | 580 pass->quad_list.push_back(blue.PassAs<DrawQuad>()); |
| 559 | 581 |
| 560 RenderPassList pass_list; | 582 RenderPassList pass_list; |
| 561 pass_list.push_back(pass.Pass()); | 583 pass_list.push_back(pass.Pass()); |
| 562 | 584 |
| 563 EXPECT_TRUE(RunPixelTest( | 585 EXPECT_TRUE(this->RunPixelTest( |
| 564 &pass_list, | 586 &pass_list, |
| 565 base::FilePath(FILE_PATH_LITERAL("axis_aligned.png")), | 587 base::FilePath(FILE_PATH_LITERAL("axis_aligned.png")), |
| 566 ExactPixelComparator(true))); | 588 ExactPixelComparator(true))); |
| 567 } | 589 } |
| 568 | 590 |
| 569 static void SyncPointCallback(int* callback_count) { | 591 static void SyncPointCallback(int* callback_count) { |
| 570 ++(*callback_count); | 592 ++(*callback_count); |
| 571 base::MessageLoop::current()->QuitWhenIdle(); | 593 base::MessageLoop::current()->QuitWhenIdle(); |
| 572 } | 594 } |
| 573 | 595 |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 627 base::MessageLoop::current()->Run(); | 649 base::MessageLoop::current()->Run(); |
| 628 | 650 |
| 629 // The sync point should have happened. | 651 // The sync point should have happened. |
| 630 EXPECT_EQ(1, sync_point_callback_count); | 652 EXPECT_EQ(1, sync_point_callback_count); |
| 631 EXPECT_EQ(1, other_callback_count); | 653 EXPECT_EQ(1, other_callback_count); |
| 632 } | 654 } |
| 633 #endif | 655 #endif |
| 634 | 656 |
| 635 } // namespace | 657 } // namespace |
| 636 } // namespace cc | 658 } // namespace cc |
| OLD | NEW |