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 | 515 |
528 TEST_F(GLRendererPixelTest, AxisAligned) { | 516 TEST_F(GLRendererPixelTest, AxisAligned) { |
529 gfx::Rect rect(0, 0, 200, 200); | 517 gfx::Rect rect(0, 0, 200, 200); |
530 | 518 |
531 RenderPass::Id id(1, 1); | 519 RenderPass::Id id(1, 1); |
532 gfx::Transform transform_to_root; | 520 gfx::Transform transform_to_root; |
533 scoped_ptr<RenderPass> pass = | 521 scoped_ptr<RenderPass> pass = |
(...skipping 28 matching lines...) Expand all Loading... |
562 CreateTestSharedQuadState(blue_content_to_target_transform, rect); | 550 CreateTestSharedQuadState(blue_content_to_target_transform, rect); |
563 | 551 |
564 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create(); | 552 scoped_ptr<SolidColorDrawQuad> blue = SolidColorDrawQuad::Create(); |
565 blue->SetNew(blue_shared_state.get(), rect, SK_ColorBLUE); | 553 blue->SetNew(blue_shared_state.get(), rect, SK_ColorBLUE); |
566 | 554 |
567 pass->quad_list.push_back(blue.PassAs<DrawQuad>()); | 555 pass->quad_list.push_back(blue.PassAs<DrawQuad>()); |
568 | 556 |
569 RenderPassList pass_list; | 557 RenderPassList pass_list; |
570 pass_list.push_back(pass.Pass()); | 558 pass_list.push_back(pass.Pass()); |
571 | 559 |
572 renderer_->DrawFrame(&pass_list); | 560 EXPECT_TRUE(RunPixelTest( |
573 | 561 &pass_list, |
574 EXPECT_TRUE(PixelsMatchReference( | |
575 base::FilePath(FILE_PATH_LITERAL("axis_aligned.png")), | 562 base::FilePath(FILE_PATH_LITERAL("axis_aligned.png")), |
576 ExactPixelComparator(true))); | 563 ExactPixelComparator(true))); |
577 } | 564 } |
578 | 565 |
579 #endif | 566 #endif |
580 | 567 |
581 } // namespace | 568 } // namespace |
582 } // namespace cc | 569 } // namespace cc |
OLD | NEW |