| 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/message_loop.h" | 5 #include "base/message_loop/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/quads/texture_draw_quad.h" |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 116 bool premultiplied_alpha, | 116 bool premultiplied_alpha, |
| 117 const SharedQuadState* shared_state, | 117 const SharedQuadState* shared_state, |
| 118 ResourceProvider* resource_provider, | 118 ResourceProvider* resource_provider, |
| 119 RenderPass* render_pass) { | 119 RenderPass* render_pass) { |
| 120 SkPMColor pixel_color = premultiplied_alpha ? | 120 SkPMColor pixel_color = premultiplied_alpha ? |
| 121 SkPreMultiplyColor(texel_color) : | 121 SkPreMultiplyColor(texel_color) : |
| 122 SkPackARGB32NoCheck(SkColorGetA(texel_color), | 122 SkPackARGB32NoCheck(SkColorGetA(texel_color), |
| 123 SkColorGetR(texel_color), | 123 SkColorGetR(texel_color), |
| 124 SkColorGetG(texel_color), | 124 SkColorGetG(texel_color), |
| 125 SkColorGetB(texel_color)); | 125 SkColorGetB(texel_color)); |
| 126 std::vector<uint32_t> pixels(rect.size().GetArea(), pixel_color); | 126 size_t num_pixels = static_cast<size_t>(rect.width()) * rect.height(); |
| 127 std::vector<uint32_t> pixels(num_pixels, pixel_color); |
| 127 | 128 |
| 128 ResourceProvider::ResourceId resource = | 129 ResourceProvider::ResourceId resource = resource_provider->CreateResource( |
| 129 resource_provider->CreateResource(rect.size(), | 130 rect.size(), GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, |
| 130 GL_CLAMP_TO_EDGE, | 131 RGBA_8888); |
| 131 ResourceProvider::TextureHintImmutable, | 132 resource_provider->CopyToResource( |
| 132 RGBA_8888); | 133 resource, reinterpret_cast<uint8_t*>(&pixels.front()), rect.size()); |
| 133 resource_provider->SetPixels( | |
| 134 resource, | |
| 135 reinterpret_cast<uint8_t*>(&pixels.front()), | |
| 136 rect, | |
| 137 rect, | |
| 138 gfx::Vector2d()); | |
| 139 | 134 |
| 140 float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f}; | 135 float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f}; |
| 141 | 136 |
| 142 TextureDrawQuad* quad = | 137 TextureDrawQuad* quad = |
| 143 render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); | 138 render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); |
| 144 quad->SetNew(shared_state, | 139 quad->SetNew(shared_state, |
| 145 rect, | 140 rect, |
| 146 gfx::Rect(), | 141 gfx::Rect(), |
| 147 rect, | 142 rect, |
| 148 resource, | 143 resource, |
| 149 premultiplied_alpha, | 144 premultiplied_alpha, |
| 150 gfx::PointF(0.0f, 0.0f), // uv_top_left | 145 gfx::PointF(0.0f, 0.0f), // uv_top_left |
| 151 gfx::PointF(1.0f, 1.0f), // uv_bottom_right | 146 gfx::PointF(1.0f, 1.0f), // uv_bottom_right |
| 152 background_color, | 147 background_color, |
| 153 vertex_opacity, | 148 vertex_opacity, |
| 154 false, // flipped | 149 false, // flipped |
| 155 false); // nearest_neighbor | 150 false); // nearest_neighbor |
| 156 } | 151 } |
| 157 | 152 |
| 158 typedef ::testing::Types<GLRenderer, | 153 typedef ::testing::Types<GLRenderer, |
| 159 SoftwareRenderer, | 154 SoftwareRenderer, |
| 160 GLRendererWithExpandedViewport, | 155 GLRendererWithExpandedViewport, |
| 161 SoftwareRendererWithExpandedViewport> RendererTypes; | 156 SoftwareRendererWithExpandedViewport> RendererTypes; |
| 162 TYPED_TEST_CASE(RendererPixelTest, RendererTypes); | 157 TYPED_TEST_CASE(RendererPixelTest, RendererTypes); |
| 163 | 158 |
| 164 template <typename RendererType> | 159 template <typename RendererType> |
| 160 class SoftwareRendererPixelTest : public RendererPixelTest<RendererType> {}; |
| 161 |
| 162 typedef ::testing::Types<SoftwareRenderer, SoftwareRendererWithExpandedViewport> |
| 163 SoftwareRendererTypes; |
| 164 TYPED_TEST_CASE(SoftwareRendererPixelTest, SoftwareRendererTypes); |
| 165 |
| 166 template <typename RendererType> |
| 165 class FuzzyForSoftwareOnlyPixelComparator : public PixelComparator { | 167 class FuzzyForSoftwareOnlyPixelComparator : public PixelComparator { |
| 166 public: | 168 public: |
| 167 explicit FuzzyForSoftwareOnlyPixelComparator(bool discard_alpha) | 169 explicit FuzzyForSoftwareOnlyPixelComparator(bool discard_alpha) |
| 168 : fuzzy_(discard_alpha), exact_(discard_alpha) {} | 170 : fuzzy_(discard_alpha), exact_(discard_alpha) {} |
| 169 | 171 |
| 170 bool Compare(const SkBitmap& actual_bmp, | 172 bool Compare(const SkBitmap& actual_bmp, |
| 171 const SkBitmap& expected_bmp) const override; | 173 const SkBitmap& expected_bmp) const override; |
| 172 | 174 |
| 173 private: | 175 private: |
| 174 FuzzyPixelOffByOneComparator fuzzy_; | 176 FuzzyPixelOffByOneComparator fuzzy_; |
| (...skipping 690 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 865 while (!rect.IsEmpty()) { | 867 while (!rect.IsEmpty()) { |
| 866 rect.Inset(6, 6, 4, 4); | 868 rect.Inset(6, 6, 4, 4); |
| 867 canvas.drawRect( | 869 canvas.drawRect( |
| 868 SkRect::MakeXYWH(rect.x(), rect.y(), rect.width(), rect.height()), | 870 SkRect::MakeXYWH(rect.x(), rect.y(), rect.width(), rect.height()), |
| 869 paint); | 871 paint); |
| 870 rect.Inset(6, 6, 4, 4); | 872 rect.Inset(6, 6, 4, 4); |
| 871 } | 873 } |
| 872 | 874 |
| 873 ResourceProvider::ResourceId mask_resource_id = | 875 ResourceProvider::ResourceId mask_resource_id = |
| 874 this->resource_provider_->CreateResource( | 876 this->resource_provider_->CreateResource( |
| 875 mask_rect.size(), | 877 mask_rect.size(), GL_CLAMP_TO_EDGE, |
| 876 GL_CLAMP_TO_EDGE, | 878 ResourceProvider::TEXTURE_HINT_IMMUTABLE, RGBA_8888); |
| 877 ResourceProvider::TextureHintImmutable, | |
| 878 RGBA_8888); | |
| 879 { | 879 { |
| 880 SkAutoLockPixels lock(bitmap); | 880 SkAutoLockPixels lock(bitmap); |
| 881 this->resource_provider_->SetPixels( | 881 this->resource_provider_->CopyToResource( |
| 882 mask_resource_id, | 882 mask_resource_id, reinterpret_cast<uint8_t*>(bitmap.getPixels()), |
| 883 reinterpret_cast<uint8_t*>(bitmap.getPixels()), | 883 mask_rect.size()); |
| 884 mask_rect, | |
| 885 mask_rect, | |
| 886 gfx::Vector2d()); | |
| 887 } | 884 } |
| 888 | 885 |
| 889 // This RenderPassDrawQuad does not include the full |viewport_rect| which is | 886 // This RenderPassDrawQuad does not include the full |viewport_rect| which is |
| 890 // the size of the child render pass. | 887 // the size of the child render pass. |
| 891 gfx::Rect sub_rect = gfx::Rect(50, 50, 200, 100); | 888 gfx::Rect sub_rect = gfx::Rect(50, 50, 200, 100); |
| 892 EXPECT_NE(sub_rect.x(), child_pass->output_rect.x()); | 889 EXPECT_NE(sub_rect.x(), child_pass->output_rect.x()); |
| 893 EXPECT_NE(sub_rect.y(), child_pass->output_rect.y()); | 890 EXPECT_NE(sub_rect.y(), child_pass->output_rect.y()); |
| 894 EXPECT_NE(sub_rect.right(), child_pass->output_rect.right()); | 891 EXPECT_NE(sub_rect.right(), child_pass->output_rect.right()); |
| 895 EXPECT_NE(sub_rect.bottom(), child_pass->output_rect.bottom()); | 892 EXPECT_NE(sub_rect.bottom(), child_pass->output_rect.bottom()); |
| 896 | 893 |
| (...skipping 475 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1372 | 1369 |
| 1373 RenderPassList pass_list; | 1370 RenderPassList pass_list; |
| 1374 pass_list.push_back(pass.Pass()); | 1371 pass_list.push_back(pass.Pass()); |
| 1375 | 1372 |
| 1376 EXPECT_TRUE(this->RunPixelTest( | 1373 EXPECT_TRUE(this->RunPixelTest( |
| 1377 &pass_list, | 1374 &pass_list, |
| 1378 base::FilePath(FILE_PATH_LITERAL("anti_aliasing_perspective.png")), | 1375 base::FilePath(FILE_PATH_LITERAL("anti_aliasing_perspective.png")), |
| 1379 FuzzyPixelOffByOneComparator(true))); | 1376 FuzzyPixelOffByOneComparator(true))); |
| 1380 } | 1377 } |
| 1381 | 1378 |
| 1382 TYPED_TEST(RendererPixelTest, PictureDrawQuadIdentityScale) { | 1379 TYPED_TEST(SoftwareRendererPixelTest, PictureDrawQuadIdentityScale) { |
| 1383 gfx::Size pile_tile_size(1000, 1000); | 1380 gfx::Size pile_tile_size(1000, 1000); |
| 1384 gfx::Rect viewport(this->device_viewport_size_); | 1381 gfx::Rect viewport(this->device_viewport_size_); |
| 1385 // TODO(enne): the renderer should figure this out on its own. | 1382 // TODO(enne): the renderer should figure this out on its own. |
| 1386 ResourceFormat texture_format = RGBA_8888; | 1383 ResourceFormat texture_format = RGBA_8888; |
| 1387 bool nearest_neighbor = false; | 1384 bool nearest_neighbor = false; |
| 1388 | 1385 |
| 1389 RenderPassId id(1, 1); | 1386 RenderPassId id(1, 1); |
| 1390 gfx::Transform transform_to_root; | 1387 gfx::Transform transform_to_root; |
| 1391 scoped_ptr<RenderPass> pass = | 1388 scoped_ptr<RenderPass> pass = |
| 1392 CreateTestRenderPass(id, viewport, transform_to_root); | 1389 CreateTestRenderPass(id, viewport, transform_to_root); |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1452 RenderPassList pass_list; | 1449 RenderPassList pass_list; |
| 1453 pass_list.push_back(pass.Pass()); | 1450 pass_list.push_back(pass.Pass()); |
| 1454 | 1451 |
| 1455 EXPECT_TRUE(this->RunPixelTest( | 1452 EXPECT_TRUE(this->RunPixelTest( |
| 1456 &pass_list, | 1453 &pass_list, |
| 1457 base::FilePath(FILE_PATH_LITERAL("green_with_blue_corner.png")), | 1454 base::FilePath(FILE_PATH_LITERAL("green_with_blue_corner.png")), |
| 1458 ExactPixelComparator(true))); | 1455 ExactPixelComparator(true))); |
| 1459 } | 1456 } |
| 1460 | 1457 |
| 1461 // Not WithSkiaGPUBackend since that path currently requires tiles for opacity. | 1458 // Not WithSkiaGPUBackend since that path currently requires tiles for opacity. |
| 1462 TYPED_TEST(RendererPixelTest, PictureDrawQuadOpacity) { | 1459 TYPED_TEST(SoftwareRendererPixelTest, PictureDrawQuadOpacity) { |
| 1463 gfx::Size pile_tile_size(1000, 1000); | 1460 gfx::Size pile_tile_size(1000, 1000); |
| 1464 gfx::Rect viewport(this->device_viewport_size_); | 1461 gfx::Rect viewport(this->device_viewport_size_); |
| 1465 ResourceFormat texture_format = RGBA_8888; | 1462 ResourceFormat texture_format = RGBA_8888; |
| 1466 bool nearest_neighbor = false; | 1463 bool nearest_neighbor = false; |
| 1467 | 1464 |
| 1468 RenderPassId id(1, 1); | 1465 RenderPassId id(1, 1); |
| 1469 gfx::Transform transform_to_root; | 1466 gfx::Transform transform_to_root; |
| 1470 scoped_ptr<RenderPass> pass = | 1467 scoped_ptr<RenderPass> pass = |
| 1471 CreateTestRenderPass(id, viewport, transform_to_root); | 1468 CreateTestRenderPass(id, viewport, transform_to_root); |
| 1472 | 1469 |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1529 return true; | 1526 return true; |
| 1530 } | 1527 } |
| 1531 | 1528 |
| 1532 template<> | 1529 template<> |
| 1533 bool IsSoftwareRenderer<SoftwareRendererWithExpandedViewport>() { | 1530 bool IsSoftwareRenderer<SoftwareRendererWithExpandedViewport>() { |
| 1534 return true; | 1531 return true; |
| 1535 } | 1532 } |
| 1536 | 1533 |
| 1537 // If we disable image filtering, then a 2x2 bitmap should appear as four | 1534 // If we disable image filtering, then a 2x2 bitmap should appear as four |
| 1538 // huge sharp squares. | 1535 // huge sharp squares. |
| 1539 TYPED_TEST(RendererPixelTest, PictureDrawQuadDisableImageFiltering) { | 1536 TYPED_TEST(SoftwareRendererPixelTest, PictureDrawQuadDisableImageFiltering) { |
| 1540 // We only care about this in software mode since bilinear filtering is | 1537 // We only care about this in software mode since bilinear filtering is |
| 1541 // cheap in hardware. | 1538 // cheap in hardware. |
| 1542 if (!IsSoftwareRenderer<TypeParam>()) | 1539 if (!IsSoftwareRenderer<TypeParam>()) |
| 1543 return; | 1540 return; |
| 1544 | 1541 |
| 1545 gfx::Size pile_tile_size(1000, 1000); | 1542 gfx::Size pile_tile_size(1000, 1000); |
| 1546 gfx::Rect viewport(this->device_viewport_size_); | 1543 gfx::Rect viewport(this->device_viewport_size_); |
| 1547 ResourceFormat texture_format = RGBA_8888; | 1544 ResourceFormat texture_format = RGBA_8888; |
| 1548 bool nearest_neighbor = false; | 1545 bool nearest_neighbor = false; |
| 1549 | 1546 |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1586 | 1583 |
| 1587 this->disable_picture_quad_image_filtering_ = true; | 1584 this->disable_picture_quad_image_filtering_ = true; |
| 1588 | 1585 |
| 1589 EXPECT_TRUE(this->RunPixelTest( | 1586 EXPECT_TRUE(this->RunPixelTest( |
| 1590 &pass_list, | 1587 &pass_list, |
| 1591 base::FilePath(FILE_PATH_LITERAL("four_blue_green_checkers.png")), | 1588 base::FilePath(FILE_PATH_LITERAL("four_blue_green_checkers.png")), |
| 1592 ExactPixelComparator(true))); | 1589 ExactPixelComparator(true))); |
| 1593 } | 1590 } |
| 1594 | 1591 |
| 1595 // This disables filtering by setting |nearest_neighbor| on the PictureDrawQuad. | 1592 // This disables filtering by setting |nearest_neighbor| on the PictureDrawQuad. |
| 1596 TYPED_TEST(RendererPixelTest, PictureDrawQuadNearestNeighbor) { | 1593 TYPED_TEST(SoftwareRendererPixelTest, PictureDrawQuadNearestNeighbor) { |
| 1597 gfx::Size pile_tile_size(1000, 1000); | 1594 gfx::Size pile_tile_size(1000, 1000); |
| 1598 gfx::Rect viewport(this->device_viewport_size_); | 1595 gfx::Rect viewport(this->device_viewport_size_); |
| 1599 ResourceFormat texture_format = RGBA_8888; | 1596 ResourceFormat texture_format = RGBA_8888; |
| 1600 bool nearest_neighbor = true; | 1597 bool nearest_neighbor = true; |
| 1601 | 1598 |
| 1602 RenderPassId id(1, 1); | 1599 RenderPassId id(1, 1); |
| 1603 gfx::Transform transform_to_root; | 1600 gfx::Transform transform_to_root; |
| 1604 scoped_ptr<RenderPass> pass = | 1601 scoped_ptr<RenderPass> pass = |
| 1605 CreateTestRenderPass(id, viewport, transform_to_root); | 1602 CreateTestRenderPass(id, viewport, transform_to_root); |
| 1606 | 1603 |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1655 SkCanvas canvas(bitmap); | 1652 SkCanvas canvas(bitmap); |
| 1656 canvas.drawPoint(0, 0, SK_ColorGREEN); | 1653 canvas.drawPoint(0, 0, SK_ColorGREEN); |
| 1657 canvas.drawPoint(0, 1, SK_ColorBLUE); | 1654 canvas.drawPoint(0, 1, SK_ColorBLUE); |
| 1658 canvas.drawPoint(1, 0, SK_ColorBLUE); | 1655 canvas.drawPoint(1, 0, SK_ColorBLUE); |
| 1659 canvas.drawPoint(1, 1, SK_ColorGREEN); | 1656 canvas.drawPoint(1, 1, SK_ColorGREEN); |
| 1660 } | 1657 } |
| 1661 | 1658 |
| 1662 gfx::Size tile_size(2, 2); | 1659 gfx::Size tile_size(2, 2); |
| 1663 ResourceProvider::ResourceId resource = | 1660 ResourceProvider::ResourceId resource = |
| 1664 this->resource_provider_->CreateResource( | 1661 this->resource_provider_->CreateResource( |
| 1665 tile_size, | 1662 tile_size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, |
| 1666 GL_CLAMP_TO_EDGE, | |
| 1667 ResourceProvider::TextureHintImmutable, | |
| 1668 RGBA_8888); | 1663 RGBA_8888); |
| 1669 | 1664 |
| 1670 { | 1665 { |
| 1671 SkAutoLockPixels lock(bitmap); | 1666 SkAutoLockPixels lock(bitmap); |
| 1672 this->resource_provider_->SetPixels( | 1667 this->resource_provider_->CopyToResource( |
| 1673 resource, | 1668 resource, static_cast<uint8_t*>(bitmap.getPixels()), tile_size); |
| 1674 static_cast<uint8_t*>(bitmap.getPixels()), | |
| 1675 gfx::Rect(tile_size), | |
| 1676 gfx::Rect(tile_size), | |
| 1677 gfx::Vector2d()); | |
| 1678 } | 1669 } |
| 1679 | 1670 |
| 1680 RenderPassId id(1, 1); | 1671 RenderPassId id(1, 1); |
| 1681 gfx::Transform transform_to_root; | 1672 gfx::Transform transform_to_root; |
| 1682 scoped_ptr<RenderPass> pass = | 1673 scoped_ptr<RenderPass> pass = |
| 1683 CreateTestRenderPass(id, viewport, transform_to_root); | 1674 CreateTestRenderPass(id, viewport, transform_to_root); |
| 1684 | 1675 |
| 1685 gfx::Transform content_to_target_transform; | 1676 gfx::Transform content_to_target_transform; |
| 1686 SharedQuadState* shared_state = CreateTestSharedQuadState( | 1677 SharedQuadState* shared_state = CreateTestSharedQuadState( |
| 1687 content_to_target_transform, viewport, pass.get()); | 1678 content_to_target_transform, viewport, pass.get()); |
| 1688 | 1679 |
| 1689 TileDrawQuad* quad = pass->CreateAndAppendDrawQuad<TileDrawQuad>(); | 1680 TileDrawQuad* quad = pass->CreateAndAppendDrawQuad<TileDrawQuad>(); |
| 1690 quad->SetNew(shared_state, viewport, gfx::Rect(), viewport, resource, | 1681 quad->SetNew(shared_state, viewport, gfx::Rect(), viewport, resource, |
| 1691 gfx::Rect(tile_size), tile_size, swizzle_contents, | 1682 gfx::Rect(tile_size), tile_size, swizzle_contents, |
| 1692 nearest_neighbor); | 1683 nearest_neighbor); |
| 1693 | 1684 |
| 1694 RenderPassList pass_list; | 1685 RenderPassList pass_list; |
| 1695 pass_list.push_back(pass.Pass()); | 1686 pass_list.push_back(pass.Pass()); |
| 1696 | 1687 |
| 1697 EXPECT_TRUE(this->RunPixelTest( | 1688 EXPECT_TRUE(this->RunPixelTest( |
| 1698 &pass_list, | 1689 &pass_list, |
| 1699 base::FilePath(FILE_PATH_LITERAL("four_blue_green_checkers.png")), | 1690 base::FilePath(FILE_PATH_LITERAL("four_blue_green_checkers.png")), |
| 1700 ExactPixelComparator(true))); | 1691 ExactPixelComparator(true))); |
| 1701 } | 1692 } |
| 1702 | 1693 |
| 1703 TYPED_TEST(RendererPixelTest, PictureDrawQuadNonIdentityScale) { | 1694 TYPED_TEST(SoftwareRendererPixelTest, PictureDrawQuadNonIdentityScale) { |
| 1704 gfx::Size pile_tile_size(1000, 1000); | 1695 gfx::Size pile_tile_size(1000, 1000); |
| 1705 gfx::Rect viewport(this->device_viewport_size_); | 1696 gfx::Rect viewport(this->device_viewport_size_); |
| 1706 // TODO(enne): the renderer should figure this out on its own. | 1697 // TODO(enne): the renderer should figure this out on its own. |
| 1707 ResourceFormat texture_format = RGBA_8888; | 1698 ResourceFormat texture_format = RGBA_8888; |
| 1708 bool nearest_neighbor = false; | 1699 bool nearest_neighbor = false; |
| 1709 | 1700 |
| 1710 RenderPassId id(1, 1); | 1701 RenderPassId id(1, 1); |
| 1711 gfx::Transform transform_to_root; | 1702 gfx::Transform transform_to_root; |
| 1712 scoped_ptr<RenderPass> pass = | 1703 scoped_ptr<RenderPass> pass = |
| 1713 CreateTestRenderPass(id, viewport, transform_to_root); | 1704 CreateTestRenderPass(id, viewport, transform_to_root); |
| (...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1994 this->device_viewport_size_.width() / 2, | 1985 this->device_viewport_size_.width() / 2, |
| 1995 this->device_viewport_size_.height() / 2); | 1986 this->device_viewport_size_.height() / 2); |
| 1996 EXPECT_TRUE(this->RunPixelTestWithReadbackTargetAndArea( | 1987 EXPECT_TRUE(this->RunPixelTestWithReadbackTargetAndArea( |
| 1997 &pass_list, | 1988 &pass_list, |
| 1998 pass_list.front(), | 1989 pass_list.front(), |
| 1999 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png")), | 1990 base::FilePath(FILE_PATH_LITERAL("green_small_with_blue_corner.png")), |
| 2000 ExactPixelComparator(true), | 1991 ExactPixelComparator(true), |
| 2001 &capture_rect)); | 1992 &capture_rect)); |
| 2002 } | 1993 } |
| 2003 | 1994 |
| 2004 TEST_F(GLRendererPixelTest, PictureDrawQuadTexture4444) { | |
| 2005 gfx::Size pile_tile_size(1000, 1000); | |
| 2006 gfx::Rect viewport(this->device_viewport_size_); | |
| 2007 ResourceFormat texture_format = RGBA_4444; | |
| 2008 bool nearest_neighbor = false; | |
| 2009 | |
| 2010 RenderPassId id(1, 1); | |
| 2011 gfx::Transform transform_to_root; | |
| 2012 scoped_ptr<RenderPass> pass = | |
| 2013 CreateTestRenderPass(id, viewport, transform_to_root); | |
| 2014 | |
| 2015 // One viewport-filling blue quad | |
| 2016 scoped_ptr<FakePicturePile> blue_recording = | |
| 2017 FakePicturePile::CreateFilledPile(pile_tile_size, viewport.size()); | |
| 2018 SkPaint blue_paint; | |
| 2019 blue_paint.setColor(SK_ColorBLUE); | |
| 2020 blue_recording->add_draw_rect_with_paint(viewport, blue_paint); | |
| 2021 blue_recording->RerecordPile(); | |
| 2022 scoped_refptr<FakePicturePileImpl> blue_pile = | |
| 2023 FakePicturePileImpl::CreateFromPile(blue_recording.get(), nullptr); | |
| 2024 | |
| 2025 gfx::Transform blue_content_to_target_transform; | |
| 2026 SharedQuadState* blue_shared_state = CreateTestSharedQuadState( | |
| 2027 blue_content_to_target_transform, viewport, pass.get()); | |
| 2028 | |
| 2029 PictureDrawQuad* blue_quad = pass->CreateAndAppendDrawQuad<PictureDrawQuad>(); | |
| 2030 blue_quad->SetNew(blue_shared_state, viewport, gfx::Rect(), viewport, | |
| 2031 gfx::RectF(0.f, 0.f, 1.f, 1.f), viewport.size(), | |
| 2032 nearest_neighbor, texture_format, viewport, 1.f, | |
| 2033 blue_pile.get()); | |
| 2034 | |
| 2035 RenderPassList pass_list; | |
| 2036 pass_list.push_back(pass.Pass()); | |
| 2037 | |
| 2038 EXPECT_TRUE(this->RunPixelTest(&pass_list, | |
| 2039 base::FilePath(FILE_PATH_LITERAL("blue.png")), | |
| 2040 ExactPixelComparator(true))); | |
| 2041 } | |
| 2042 | |
| 2043 TYPED_TEST(RendererPixelTest, WrapModeRepeat) { | 1995 TYPED_TEST(RendererPixelTest, WrapModeRepeat) { |
| 2044 gfx::Rect rect(this->device_viewport_size_); | 1996 gfx::Rect rect(this->device_viewport_size_); |
| 2045 | 1997 |
| 2046 RenderPassId id(1, 1); | 1998 RenderPassId id(1, 1); |
| 2047 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); | 1999 scoped_ptr<RenderPass> pass = CreateTestRootRenderPass(id, rect); |
| 2048 | 2000 |
| 2049 SharedQuadState* shared_state = | 2001 SharedQuadState* shared_state = |
| 2050 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get()); | 2002 CreateTestSharedQuadState(gfx::Transform(), rect, pass.get()); |
| 2051 | 2003 |
| 2052 gfx::Rect texture_rect(4, 4); | 2004 gfx::Size texture_size(4, 4); |
| 2053 SkPMColor colors[4] = { | 2005 SkPMColor colors[4] = { |
| 2054 SkPreMultiplyColor(SkColorSetARGB(255, 0, 255, 0)), | 2006 SkPreMultiplyColor(SkColorSetARGB(255, 0, 255, 0)), |
| 2055 SkPreMultiplyColor(SkColorSetARGB(255, 0, 128, 0)), | 2007 SkPreMultiplyColor(SkColorSetARGB(255, 0, 128, 0)), |
| 2056 SkPreMultiplyColor(SkColorSetARGB(255, 0, 64, 0)), | 2008 SkPreMultiplyColor(SkColorSetARGB(255, 0, 64, 0)), |
| 2057 SkPreMultiplyColor(SkColorSetARGB(255, 0, 0, 0)), | 2009 SkPreMultiplyColor(SkColorSetARGB(255, 0, 0, 0)), |
| 2058 }; | 2010 }; |
| 2059 uint32_t pixels[16] = { | 2011 uint32_t pixels[16] = { |
| 2060 colors[0], colors[0], colors[1], colors[1], | 2012 colors[0], colors[0], colors[1], colors[1], |
| 2061 colors[0], colors[0], colors[1], colors[1], | 2013 colors[0], colors[0], colors[1], colors[1], |
| 2062 colors[2], colors[2], colors[3], colors[3], | 2014 colors[2], colors[2], colors[3], colors[3], |
| 2063 colors[2], colors[2], colors[3], colors[3], | 2015 colors[2], colors[2], colors[3], colors[3], |
| 2064 }; | 2016 }; |
| 2065 ResourceProvider::ResourceId resource = | 2017 ResourceProvider::ResourceId resource = |
| 2066 this->resource_provider_->CreateResource( | 2018 this->resource_provider_->CreateResource( |
| 2067 texture_rect.size(), | 2019 texture_size, GL_REPEAT, ResourceProvider::TEXTURE_HINT_IMMUTABLE, |
| 2068 GL_REPEAT, | |
| 2069 ResourceProvider::TextureHintImmutable, | |
| 2070 RGBA_8888); | 2020 RGBA_8888); |
| 2071 this->resource_provider_->SetPixels( | 2021 this->resource_provider_->CopyToResource( |
| 2072 resource, | 2022 resource, reinterpret_cast<uint8_t*>(pixels), texture_size); |
| 2073 reinterpret_cast<uint8_t*>(pixels), | |
| 2074 texture_rect, | |
| 2075 texture_rect, | |
| 2076 gfx::Vector2d()); | |
| 2077 | 2023 |
| 2078 float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f}; | 2024 float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f}; |
| 2079 TextureDrawQuad* texture_quad = | 2025 TextureDrawQuad* texture_quad = |
| 2080 pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); | 2026 pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); |
| 2081 texture_quad->SetNew( | 2027 texture_quad->SetNew( |
| 2082 shared_state, | 2028 shared_state, gfx::Rect(this->device_viewport_size_), gfx::Rect(), |
| 2083 gfx::Rect(this->device_viewport_size_), | 2029 gfx::Rect(this->device_viewport_size_), resource, |
| 2084 gfx::Rect(), | |
| 2085 gfx::Rect(this->device_viewport_size_), | |
| 2086 resource, | |
| 2087 true, // premultiplied_alpha | 2030 true, // premultiplied_alpha |
| 2088 gfx::PointF(0.0f, 0.0f), // uv_top_left | 2031 gfx::PointF(0.0f, 0.0f), // uv_top_left |
| 2089 gfx::PointF( // uv_bottom_right | 2032 gfx::PointF( // uv_bottom_right |
| 2090 this->device_viewport_size_.width() / texture_rect.width(), | 2033 this->device_viewport_size_.width() / texture_size.width(), |
| 2091 this->device_viewport_size_.height() / texture_rect.height()), | 2034 this->device_viewport_size_.height() / texture_size.height()), |
| 2092 SK_ColorWHITE, | 2035 SK_ColorWHITE, vertex_opacity, |
| 2093 vertex_opacity, | |
| 2094 false, // flipped | 2036 false, // flipped |
| 2095 false); // nearest_neighbor | 2037 false); // nearest_neighbor |
| 2096 | 2038 |
| 2097 RenderPassList pass_list; | 2039 RenderPassList pass_list; |
| 2098 pass_list.push_back(pass.Pass()); | 2040 pass_list.push_back(pass.Pass()); |
| 2099 | 2041 |
| 2100 EXPECT_TRUE(this->RunPixelTest( | 2042 EXPECT_TRUE(this->RunPixelTest( |
| 2101 &pass_list, | 2043 &pass_list, |
| 2102 base::FilePath(FILE_PATH_LITERAL("wrap_mode_repeat.png")), | 2044 base::FilePath(FILE_PATH_LITERAL("wrap_mode_repeat.png")), |
| 2103 FuzzyPixelOffByOneComparator(true))); | 2045 FuzzyPixelOffByOneComparator(true))); |
| 2104 } | 2046 } |
| 2105 | 2047 |
| 2106 #endif // !defined(OS_ANDROID) | 2048 #endif // !defined(OS_ANDROID) |
| 2107 | 2049 |
| 2108 } // namespace | 2050 } // namespace |
| 2109 } // namespace cc | 2051 } // namespace cc |
| OLD | NEW |