| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "cc/output/gl_renderer.h" | 5 #include "cc/output/gl_renderer.h" |
| 6 | 6 |
| 7 #include "cc/layers/append_quads_data.h" | 7 #include "cc/layers/append_quads_data.h" |
| 8 #include "cc/quads/draw_quad.h" | 8 #include "cc/quads/draw_quad.h" |
| 9 #include "cc/test/pixel_test.h" | 9 #include "cc/test/pixel_test.h" |
| 10 #include "third_party/skia/include/core/SkImageFilter.h" | 10 #include "third_party/skia/include/core/SkImageFilter.h" |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 85 CreateTestSharedQuadState(content_to_target_transform, rect); | 85 CreateTestSharedQuadState(content_to_target_transform, rect); |
| 86 | 86 |
| 87 scoped_ptr<SolidColorDrawQuad> color_quad = SolidColorDrawQuad::Create(); | 87 scoped_ptr<SolidColorDrawQuad> color_quad = SolidColorDrawQuad::Create(); |
| 88 color_quad->SetNew(shared_state.get(), rect, SK_ColorGREEN); | 88 color_quad->SetNew(shared_state.get(), rect, SK_ColorGREEN); |
| 89 | 89 |
| 90 pass->quad_list.push_back(color_quad.PassAs<DrawQuad>()); | 90 pass->quad_list.push_back(color_quad.PassAs<DrawQuad>()); |
| 91 | 91 |
| 92 RenderPassList pass_list; | 92 RenderPassList pass_list; |
| 93 pass_list.push_back(pass.Pass()); | 93 pass_list.push_back(pass.Pass()); |
| 94 | 94 |
| 95 renderer_->DrawFrame(&pass_list); | 95 EXPECT_TRUE(RunPixelTest( |
| 96 | 96 &pass_list, |
| 97 EXPECT_TRUE(PixelsMatchReference( | |
| 98 base::FilePath(FILE_PATH_LITERAL("green.png")), | 97 base::FilePath(FILE_PATH_LITERAL("green.png")), |
| 99 ExactPixelComparator(true))); | 98 ExactPixelComparator(true))); |
| 100 } | 99 } |
| 101 | 100 |
| 102 TEST_F(GLRendererPixelTest, fastPassColorFilterAlpha) { | 101 TEST_F(GLRendererPixelTest, FastPassColorFilterAlpha) { |
| 103 gfx::Rect viewport_rect(device_viewport_size_); | 102 gfx::Rect viewport_rect(device_viewport_size_); |
| 104 | 103 |
| 105 RenderPass::Id root_pass_id(1, 1); | 104 RenderPass::Id root_pass_id(1, 1); |
| 106 scoped_ptr<RenderPass> root_pass = | 105 scoped_ptr<RenderPass> root_pass = |
| 107 CreateTestRootRenderPass(root_pass_id, viewport_rect); | 106 CreateTestRootRenderPass(root_pass_id, viewport_rect); |
| 108 | 107 |
| 109 RenderPass::Id child_pass_id(2, 2); | 108 RenderPass::Id child_pass_id(2, 2); |
| 110 gfx::Rect pass_rect(device_viewport_size_); | 109 gfx::Rect pass_rect(device_viewport_size_); |
| 111 gfx::Transform transform_to_root; | 110 gfx::Transform transform_to_root; |
| 112 scoped_ptr<RenderPass> child_pass = | 111 scoped_ptr<RenderPass> child_pass = |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 161 matrix[11] = 0.715f - 0.715f * amount; | 160 matrix[11] = 0.715f - 0.715f * amount; |
| 162 matrix[12] = 1.f - (matrix[10] + matrix[11]); | 161 matrix[12] = 1.f - (matrix[10] + matrix[11]); |
| 163 matrix[13] = matrix[14] = 0; | 162 matrix[13] = matrix[14] = 0; |
| 164 matrix[15] = matrix[16] = matrix[17] = matrix[19] = 0; | 163 matrix[15] = matrix[16] = matrix[17] = matrix[19] = 0; |
| 165 matrix[18] = 1; | 164 matrix[18] = 1; |
| 166 skia::RefPtr<SkColorFilter> colorFilter(skia::AdoptRef( | 165 skia::RefPtr<SkColorFilter> colorFilter(skia::AdoptRef( |
| 167 new SkColorMatrixFilter(matrix))); | 166 new SkColorMatrixFilter(matrix))); |
| 168 skia::RefPtr<SkImageFilter> filter = | 167 skia::RefPtr<SkImageFilter> filter = |
| 169 skia::AdoptRef(SkColorFilterImageFilter::Create(colorFilter.get(), NULL)); | 168 skia::AdoptRef(SkColorFilterImageFilter::Create(colorFilter.get(), NULL)); |
| 170 | 169 |
| 171 scoped_ptr<RenderPassDrawQuad> render_pass_quad = RenderPassDrawQuad::Create()
; | 170 scoped_ptr<RenderPassDrawQuad> render_pass_quad = |
| 171 RenderPassDrawQuad::Create(); |
| 172 render_pass_quad->SetNew(pass_shared_state.get(), | 172 render_pass_quad->SetNew(pass_shared_state.get(), |
| 173 pass_rect, | 173 pass_rect, |
| 174 child_pass_id, | 174 child_pass_id, |
| 175 false, | 175 false, |
| 176 0, | 176 0, |
| 177 pass_rect, | 177 pass_rect, |
| 178 gfx::RectF(), | 178 gfx::RectF(), |
| 179 WebKit::WebFilterOperations(), | 179 WebKit::WebFilterOperations(), |
| 180 filter, | 180 filter, |
| 181 WebKit::WebFilterOperations()); | 181 WebKit::WebFilterOperations()); |
| 182 | 182 |
| 183 root_pass->quad_list.push_back(render_pass_quad.PassAs<DrawQuad>()); | 183 root_pass->quad_list.push_back(render_pass_quad.PassAs<DrawQuad>()); |
| 184 | 184 |
| 185 RenderPassList pass_list; | 185 RenderPassList pass_list; |
| 186 pass_list.push_back(child_pass.Pass()); | 186 pass_list.push_back(child_pass.Pass()); |
| 187 pass_list.push_back(root_pass.Pass()); | 187 pass_list.push_back(root_pass.Pass()); |
| 188 | 188 |
| 189 renderer_->SetEnlargePassTextureAmountForTesting(gfx::Vector2d(50, 75)); | 189 EXPECT_TRUE(RunPixelTest( |
| 190 renderer_->DecideRenderPassAllocationsForFrame(pass_list); | 190 &pass_list, |
| 191 renderer_->DrawFrame(&pass_list); | |
| 192 | |
| 193 EXPECT_TRUE(PixelsMatchReference( | |
| 194 base::FilePath(FILE_PATH_LITERAL("blue_yellow_alpha.png")), | 191 base::FilePath(FILE_PATH_LITERAL("blue_yellow_alpha.png")), |
| 195 ExactPixelComparator(false))); | 192 ExactPixelComparator(false))); |
| 196 } | 193 } |
| 197 | 194 |
| 198 TEST_F(GLRendererPixelTest, fastPassColorFilterAlphaTranslation) { | 195 TEST_F(GLRendererPixelTest, FastPassColorFilterAlphaTranslation) { |
| 199 gfx::Rect viewport_rect(device_viewport_size_); | 196 gfx::Rect viewport_rect(device_viewport_size_); |
| 200 | 197 |
| 201 RenderPass::Id root_pass_id(1, 1); | 198 RenderPass::Id root_pass_id(1, 1); |
| 202 scoped_ptr<RenderPass> root_pass = | 199 scoped_ptr<RenderPass> root_pass = |
| 203 CreateTestRootRenderPass(root_pass_id, viewport_rect); | 200 CreateTestRootRenderPass(root_pass_id, viewport_rect); |
| 204 | 201 |
| 205 RenderPass::Id child_pass_id(2, 2); | 202 RenderPass::Id child_pass_id(2, 2); |
| 206 gfx::Rect pass_rect(device_viewport_size_); | 203 gfx::Rect pass_rect(device_viewport_size_); |
| 207 gfx::Transform transform_to_root; | 204 gfx::Transform transform_to_root; |
| 208 scoped_ptr<RenderPass> child_pass = | 205 scoped_ptr<RenderPass> child_pass = |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 279 WebKit::WebFilterOperations(), | 276 WebKit::WebFilterOperations(), |
| 280 filter, | 277 filter, |
| 281 WebKit::WebFilterOperations()); | 278 WebKit::WebFilterOperations()); |
| 282 | 279 |
| 283 root_pass->quad_list.push_back(render_pass_quad.PassAs<DrawQuad>()); | 280 root_pass->quad_list.push_back(render_pass_quad.PassAs<DrawQuad>()); |
| 284 RenderPassList pass_list; | 281 RenderPassList pass_list; |
| 285 | 282 |
| 286 pass_list.push_back(child_pass.Pass()); | 283 pass_list.push_back(child_pass.Pass()); |
| 287 pass_list.push_back(root_pass.Pass()); | 284 pass_list.push_back(root_pass.Pass()); |
| 288 | 285 |
| 289 renderer_->SetEnlargePassTextureAmountForTesting(gfx::Vector2d(50, 75)); | 286 EXPECT_TRUE(RunPixelTest( |
| 290 renderer_->DecideRenderPassAllocationsForFrame(pass_list); | 287 &pass_list, |
| 291 renderer_->DrawFrame(&pass_list); | |
| 292 | |
| 293 EXPECT_TRUE(PixelsMatchReference( | |
| 294 base::FilePath(FILE_PATH_LITERAL("blue_yellow_alpha_translate.png")), | 288 base::FilePath(FILE_PATH_LITERAL("blue_yellow_alpha_translate.png")), |
| 295 ExactPixelComparator(false))); | 289 ExactPixelComparator(false))); |
| 296 } | 290 } |
| 297 | 291 |
| 298 TEST_F(GLRendererPixelTest, RenderPassChangesSize) { | 292 TEST_F(GLRendererPixelTest, RenderPassChangesSize) { |
| 299 gfx::Rect viewport_rect(device_viewport_size_); | 293 gfx::Rect viewport_rect(device_viewport_size_); |
| 300 | 294 |
| 301 RenderPass::Id root_pass_id(1, 1); | 295 RenderPass::Id root_pass_id(1, 1); |
| 302 scoped_ptr<RenderPass> root_pass = | 296 scoped_ptr<RenderPass> root_pass = |
| 303 CreateTestRootRenderPass(root_pass_id, viewport_rect); | 297 CreateTestRootRenderPass(root_pass_id, viewport_rect); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 335 root_pass->quad_list.push_back( | 329 root_pass->quad_list.push_back( |
| 336 CreateTestRenderPassDrawQuad(pass_shared_state.get(), | 330 CreateTestRenderPassDrawQuad(pass_shared_state.get(), |
| 337 pass_rect, | 331 pass_rect, |
| 338 child_pass_id)); | 332 child_pass_id)); |
| 339 | 333 |
| 340 RenderPassList pass_list; | 334 RenderPassList pass_list; |
| 341 pass_list.push_back(child_pass.Pass()); | 335 pass_list.push_back(child_pass.Pass()); |
| 342 pass_list.push_back(root_pass.Pass()); | 336 pass_list.push_back(root_pass.Pass()); |
| 343 | 337 |
| 344 renderer_->SetEnlargePassTextureAmountForTesting(gfx::Vector2d(50, 75)); | 338 renderer_->SetEnlargePassTextureAmountForTesting(gfx::Vector2d(50, 75)); |
| 345 renderer_->DecideRenderPassAllocationsForFrame(pass_list); | |
| 346 renderer_->DrawFrame(&pass_list); | |
| 347 | 339 |
| 348 EXPECT_TRUE(PixelsMatchReference( | 340 EXPECT_TRUE(RunPixelTest( |
| 341 &pass_list, |
| 349 base::FilePath(FILE_PATH_LITERAL("blue_yellow.png")), | 342 base::FilePath(FILE_PATH_LITERAL("blue_yellow.png")), |
| 350 ExactPixelComparator(true))); | 343 ExactPixelComparator(true))); |
| 351 } | 344 } |
| 352 | 345 |
| 353 class GLRendererPixelTestWithBackgroundFilter : public GLRendererPixelTest { | 346 class GLRendererPixelTestWithBackgroundFilter : public GLRendererPixelTest { |
| 354 protected: | 347 protected: |
| 355 void DrawFrame() { | 348 void SetUpRenderPassList() { |
| 356 gfx::Rect device_viewport_rect(device_viewport_size_); | 349 gfx::Rect device_viewport_rect(device_viewport_size_); |
| 357 | 350 |
| 358 RenderPass::Id root_id(1, 1); | 351 RenderPass::Id root_id(1, 1); |
| 359 scoped_ptr<RenderPass> root_pass = | 352 scoped_ptr<RenderPass> root_pass = |
| 360 CreateTestRootRenderPass(root_id, device_viewport_rect); | 353 CreateTestRootRenderPass(root_id, device_viewport_rect); |
| 361 root_pass->has_transparent_background = false; | 354 root_pass->has_transparent_background = false; |
| 362 | 355 |
| 363 gfx::Transform identity_content_to_target_transform; | 356 gfx::Transform identity_content_to_target_transform; |
| 364 | 357 |
| 365 RenderPass::Id filter_pass_id(2, 1); | 358 RenderPass::Id filter_pass_id(2, 1); |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 445 CreateTestSharedQuadState(identity_content_to_target_transform, | 438 CreateTestSharedQuadState(identity_content_to_target_transform, |
| 446 device_viewport_rect); | 439 device_viewport_rect); |
| 447 scoped_ptr<SolidColorDrawQuad> background_quad = | 440 scoped_ptr<SolidColorDrawQuad> background_quad = |
| 448 SolidColorDrawQuad::Create(); | 441 SolidColorDrawQuad::Create(); |
| 449 background_quad->SetNew(shared_state.get(), | 442 background_quad->SetNew(shared_state.get(), |
| 450 device_viewport_rect, | 443 device_viewport_rect, |
| 451 SK_ColorWHITE); | 444 SK_ColorWHITE); |
| 452 root_pass->quad_list.push_back(background_quad.PassAs<DrawQuad>()); | 445 root_pass->quad_list.push_back(background_quad.PassAs<DrawQuad>()); |
| 453 root_pass->shared_quad_state_list.push_back(shared_state.Pass()); | 446 root_pass->shared_quad_state_list.push_back(shared_state.Pass()); |
| 454 | 447 |
| 455 RenderPassList pass_list; | 448 pass_list_.push_back(filter_pass.Pass()); |
| 456 pass_list.push_back(filter_pass.Pass()); | 449 pass_list_.push_back(root_pass.Pass()); |
| 457 pass_list.push_back(root_pass.Pass()); | |
| 458 | |
| 459 renderer_->DecideRenderPassAllocationsForFrame(pass_list); | |
| 460 renderer_->DrawFrame(&pass_list); | |
| 461 } | 450 } |
| 462 | 451 |
| 452 RenderPassList pass_list_; |
| 463 WebKit::WebFilterOperations background_filters_; | 453 WebKit::WebFilterOperations background_filters_; |
| 464 gfx::Transform filter_pass_to_target_transform_; | 454 gfx::Transform filter_pass_to_target_transform_; |
| 465 gfx::Rect filter_pass_content_rect_; | 455 gfx::Rect filter_pass_content_rect_; |
| 466 }; | 456 }; |
| 467 | 457 |
| 468 TEST_F(GLRendererPixelTestWithBackgroundFilter, InvertFilter) { | 458 TEST_F(GLRendererPixelTestWithBackgroundFilter, InvertFilter) { |
| 469 background_filters_.append( | 459 background_filters_.append( |
| 470 WebKit::WebFilterOperation::createInvertFilter(1.f)); | 460 WebKit::WebFilterOperation::createInvertFilter(1.f)); |
| 471 | 461 |
| 472 filter_pass_content_rect_ = gfx::Rect(device_viewport_size_); | 462 filter_pass_content_rect_ = gfx::Rect(device_viewport_size_); |
| 473 filter_pass_content_rect_.Inset(12, 14, 16, 18); | 463 filter_pass_content_rect_.Inset(12, 14, 16, 18); |
| 474 | 464 |
| 475 DrawFrame(); | 465 SetUpRenderPassList(); |
| 476 EXPECT_TRUE(PixelsMatchReference( | 466 EXPECT_TRUE(RunPixelTest( |
| 467 &pass_list_, |
| 477 base::FilePath(FILE_PATH_LITERAL("background_filter.png")), | 468 base::FilePath(FILE_PATH_LITERAL("background_filter.png")), |
| 478 ExactPixelComparator(true))); | 469 ExactPixelComparator(true))); |
| 479 } | 470 } |
| 480 | 471 |
| 481 TEST_F(GLRendererPixelTest, AntiAliasing) { | 472 TEST_F(GLRendererPixelTest, AntiAliasing) { |
| 482 gfx::Rect rect(0, 0, 200, 200); | 473 gfx::Rect rect(0, 0, 200, 200); |
| 483 | 474 |
| 484 RenderPass::Id id(1, 1); | 475 RenderPass::Id id(1, 1); |
| 485 gfx::Transform transform_to_root; | 476 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); |
| 486 scoped_ptr<RenderPass> pass = | |
| 487 CreateTestRenderPass(id, rect, transform_to_root); | |
| 488 | 477 |
| 489 gfx::Transform red_content_to_target_transform; | 478 gfx::Transform red_content_to_target_transform; |
| 490 red_content_to_target_transform.Rotate(10); | 479 red_content_to_target_transform.Rotate(10); |
| 491 scoped_ptr<SharedQuadState> red_shared_state = | 480 scoped_ptr<SharedQuadState> red_shared_state = |
| 492 CreateTestSharedQuadState(red_content_to_target_transform, rect); | 481 CreateTestSharedQuadState(red_content_to_target_transform, rect); |
| 493 | 482 |
| 494 scoped_ptr<SolidColorDrawQuad> red = SolidColorDrawQuad::Create(); | 483 scoped_ptr<SolidColorDrawQuad> red = SolidColorDrawQuad::Create(); |
| 495 red->SetNew(red_shared_state.get(), rect, SK_ColorRED); | 484 red->SetNew(red_shared_state.get(), rect, SK_ColorRED); |
| 496 | 485 |
| 497 pass->quad_list.push_back(red.PassAs<DrawQuad>()); | 486 pass->quad_list.push_back(red.PassAs<DrawQuad>()); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 511 CreateTestSharedQuadState(blue_content_to_target_transform, rect); | 500 CreateTestSharedQuadState(blue_content_to_target_transform, rect); |
| 512 | 501 |
| 513 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create(); | 502 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create(); |
| 514 blue->SetNew(blue_shared_state.get(), rect, SK_ColorBLUE); | 503 blue->SetNew(blue_shared_state.get(), rect, SK_ColorBLUE); |
| 515 | 504 |
| 516 pass->quad_list.push_back(blue.PassAs<DrawQuad>()); | 505 pass->quad_list.push_back(blue.PassAs<DrawQuad>()); |
| 517 | 506 |
| 518 RenderPassList pass_list; | 507 RenderPassList pass_list; |
| 519 pass_list.push_back(pass.Pass()); | 508 pass_list.push_back(pass.Pass()); |
| 520 | 509 |
| 521 renderer_->DrawFrame(&pass_list); | 510 EXPECT_TRUE(RunPixelTest( |
| 522 | 511 &pass_list, |
| 523 EXPECT_TRUE(PixelsMatchReference( | |
| 524 base::FilePath(FILE_PATH_LITERAL("anti_aliasing.png")), | 512 base::FilePath(FILE_PATH_LITERAL("anti_aliasing.png")), |
| 525 ExactPixelComparator(true))); | 513 ExactPixelComparator(true))); |
| 526 } | 514 } |
| 527 #endif | 515 #endif |
| 528 | 516 |
| 529 } // namespace | 517 } // namespace |
| 530 } // namespace cc | 518 } // namespace cc |
| OLD | NEW |