Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(482)

Side by Side Diff: cc/output/renderer_pixeltest.cc

Issue 2297213003: Fix CSS reference filters with negative transformed children. (Closed)
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/output/overlay_unittest.cc ('k') | cc/output/software_renderer.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 <stddef.h> 5 #include <stddef.h>
6 #include <stdint.h> 6 #include <stdint.h>
7 #include <memory> 7 #include <memory>
8 8
9 #include "base/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
10 #include "cc/base/math_util.h" 10 #include "cc/base/math_util.h"
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 blend_mode, sorting_context_id); 89 blend_mode, sorting_context_id);
90 return shared_state; 90 return shared_state;
91 } 91 }
92 92
93 void CreateTestRenderPassDrawQuad(const SharedQuadState* shared_state, 93 void CreateTestRenderPassDrawQuad(const SharedQuadState* shared_state,
94 const gfx::Rect& rect, 94 const gfx::Rect& rect,
95 RenderPassId pass_id, 95 RenderPassId pass_id,
96 RenderPass* render_pass) { 96 RenderPass* render_pass) {
97 RenderPassDrawQuad* quad = 97 RenderPassDrawQuad* quad =
98 render_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); 98 render_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>();
99 quad->SetNew(shared_state, 99 quad->SetNew(shared_state, rect, rect, pass_id,
100 rect,
101 rect,
102 pass_id,
103 0, // mask_resource_id 100 0, // mask_resource_id
104 gfx::Vector2dF(), // mask_uv_scale 101 gfx::Vector2dF(), // mask_uv_scale
105 gfx::Size(), // mask_texture_size 102 gfx::Size(), // mask_texture_size
106 FilterOperations(), // foreground filters 103 FilterOperations(), // foreground filters
107 gfx::Vector2dF(), // filters scale 104 gfx::Vector2dF(), // filters scale
105 gfx::PointF(), // filter origin
108 FilterOperations()); // background filters 106 FilterOperations()); // background filters
109 } 107 }
110 108
111 void CreateTestTwoColoredTextureDrawQuad(const gfx::Rect& rect, 109 void CreateTestTwoColoredTextureDrawQuad(const gfx::Rect& rect,
112 SkColor texel_color, 110 SkColor texel_color,
113 SkColor texel_stripe_color, 111 SkColor texel_stripe_color,
114 SkColor background_color, 112 SkColor background_color,
115 bool premultiplied_alpha, 113 bool premultiplied_alpha,
116 const SharedQuadState* shared_state, 114 const SharedQuadState* shared_state,
117 ResourceProvider* resource_provider, 115 ResourceProvider* resource_provider,
(...skipping 1291 matching lines...) Expand 10 before | Expand all | Expand 10 after
1409 matrix[13] = matrix[14] = 0; 1407 matrix[13] = matrix[14] = 0;
1410 matrix[15] = matrix[16] = matrix[17] = matrix[19] = 0; 1408 matrix[15] = matrix[16] = matrix[17] = matrix[19] = 0;
1411 matrix[18] = 1; 1409 matrix[18] = 1;
1412 FilterOperations filters; 1410 FilterOperations filters;
1413 filters.Append( 1411 filters.Append(
1414 FilterOperation::CreateReferenceFilter(SkColorFilterImageFilter::Make( 1412 FilterOperation::CreateReferenceFilter(SkColorFilterImageFilter::Make(
1415 SkColorFilter::MakeMatrixFilterRowMajor255(matrix), nullptr))); 1413 SkColorFilter::MakeMatrixFilterRowMajor255(matrix), nullptr)));
1416 1414
1417 RenderPassDrawQuad* render_pass_quad = 1415 RenderPassDrawQuad* render_pass_quad =
1418 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); 1416 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>();
1419 render_pass_quad->SetNew(pass_shared_state, 1417 render_pass_quad->SetNew(pass_shared_state, pass_rect, pass_rect,
1420 pass_rect, 1418 child_pass_id, 0, gfx::Vector2dF(), gfx::Size(),
1421 pass_rect, 1419 filters, gfx::Vector2dF(), gfx::PointF(),
1422 child_pass_id,
1423 0,
1424 gfx::Vector2dF(),
1425 gfx::Size(),
1426 filters,
1427 gfx::Vector2dF(),
1428 FilterOperations()); 1420 FilterOperations());
1429 1421
1430 RenderPassList pass_list; 1422 RenderPassList pass_list;
1431 pass_list.push_back(std::move(child_pass)); 1423 pass_list.push_back(std::move(child_pass));
1432 pass_list.push_back(std::move(root_pass)); 1424 pass_list.push_back(std::move(root_pass));
1433 1425
1434 // This test has alpha=254 for the software renderer vs. alpha=255 for the gl 1426 // This test has alpha=254 for the software renderer vs. alpha=255 for the gl
1435 // renderer so use a fuzzy comparator. 1427 // renderer so use a fuzzy comparator.
1436 EXPECT_TRUE(this->RunPixelTest( 1428 EXPECT_TRUE(this->RunPixelTest(
1437 &pass_list, 1429 &pass_list,
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1481 blank_state, viewport_rect, viewport_rect, SK_ColorWHITE, false); 1473 blank_state, viewport_rect, viewport_rect, SK_ColorWHITE, false);
1482 1474
1483 SharedQuadState* pass_shared_state = 1475 SharedQuadState* pass_shared_state =
1484 CreateTestSharedQuadState(gfx::Transform(), pass_rect, root_pass.get()); 1476 CreateTestSharedQuadState(gfx::Transform(), pass_rect, root_pass.get());
1485 1477
1486 FilterOperations filters; 1478 FilterOperations filters;
1487 filters.Append(FilterOperation::CreateSaturateFilter(0.5f)); 1479 filters.Append(FilterOperation::CreateSaturateFilter(0.5f));
1488 1480
1489 RenderPassDrawQuad* render_pass_quad = 1481 RenderPassDrawQuad* render_pass_quad =
1490 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); 1482 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>();
1491 render_pass_quad->SetNew(pass_shared_state, 1483 render_pass_quad->SetNew(pass_shared_state, pass_rect, pass_rect,
1492 pass_rect, 1484 child_pass_id, 0, gfx::Vector2dF(), gfx::Size(),
1493 pass_rect, 1485 filters, gfx::Vector2dF(), gfx::PointF(),
1494 child_pass_id,
1495 0,
1496 gfx::Vector2dF(),
1497 gfx::Size(),
1498 filters,
1499 gfx::Vector2dF(),
1500 FilterOperations()); 1486 FilterOperations());
1501 1487
1502 RenderPassList pass_list; 1488 RenderPassList pass_list;
1503 pass_list.push_back(std::move(child_pass)); 1489 pass_list.push_back(std::move(child_pass));
1504 pass_list.push_back(std::move(root_pass)); 1490 pass_list.push_back(std::move(root_pass));
1505 1491
1506 // This test blends slightly differently with the software renderer vs. the gl 1492 // This test blends slightly differently with the software renderer vs. the gl
1507 // renderer so use a fuzzy comparator. 1493 // renderer so use a fuzzy comparator.
1508 EXPECT_TRUE(this->RunPixelTest( 1494 EXPECT_TRUE(this->RunPixelTest(
1509 &pass_list, base::FilePath(FILE_PATH_LITERAL("blue_yellow_alpha.png")), 1495 &pass_list, base::FilePath(FILE_PATH_LITERAL("blue_yellow_alpha.png")),
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1553 1539
1554 SharedQuadState* pass_shared_state = 1540 SharedQuadState* pass_shared_state =
1555 CreateTestSharedQuadState(gfx::Transform(), pass_rect, root_pass.get()); 1541 CreateTestSharedQuadState(gfx::Transform(), pass_rect, root_pass.get());
1556 1542
1557 FilterOperations filters; 1543 FilterOperations filters;
1558 filters.Append(FilterOperation::CreateGrayscaleFilter(1.f)); 1544 filters.Append(FilterOperation::CreateGrayscaleFilter(1.f));
1559 filters.Append(FilterOperation::CreateBrightnessFilter(0.5f)); 1545 filters.Append(FilterOperation::CreateBrightnessFilter(0.5f));
1560 1546
1561 RenderPassDrawQuad* render_pass_quad = 1547 RenderPassDrawQuad* render_pass_quad =
1562 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); 1548 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>();
1563 render_pass_quad->SetNew(pass_shared_state, 1549 render_pass_quad->SetNew(pass_shared_state, pass_rect, pass_rect,
1564 pass_rect, 1550 child_pass_id, 0, gfx::Vector2dF(), gfx::Size(),
1565 pass_rect, 1551 filters, gfx::Vector2dF(), gfx::PointF(),
1566 child_pass_id,
1567 0,
1568 gfx::Vector2dF(),
1569 gfx::Size(),
1570 filters,
1571 gfx::Vector2dF(),
1572 FilterOperations()); 1552 FilterOperations());
1573 1553
1574 RenderPassList pass_list; 1554 RenderPassList pass_list;
1575 pass_list.push_back(std::move(child_pass)); 1555 pass_list.push_back(std::move(child_pass));
1576 pass_list.push_back(std::move(root_pass)); 1556 pass_list.push_back(std::move(root_pass));
1577 1557
1578 // This test blends slightly differently with the software renderer vs. the gl 1558 // This test blends slightly differently with the software renderer vs. the gl
1579 // renderer so use a fuzzy comparator. 1559 // renderer so use a fuzzy comparator.
1580 EXPECT_TRUE(this->RunPixelTest( 1560 EXPECT_TRUE(this->RunPixelTest(
1581 &pass_list, 1561 &pass_list,
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
1646 matrix[14] = 1.5f; 1626 matrix[14] = 1.5f;
1647 matrix[15] = matrix[16] = matrix[17] = matrix[19] = 0; 1627 matrix[15] = matrix[16] = matrix[17] = matrix[19] = 0;
1648 matrix[18] = 1; 1628 matrix[18] = 1;
1649 FilterOperations filters; 1629 FilterOperations filters;
1650 filters.Append( 1630 filters.Append(
1651 FilterOperation::CreateReferenceFilter(SkColorFilterImageFilter::Make( 1631 FilterOperation::CreateReferenceFilter(SkColorFilterImageFilter::Make(
1652 SkColorFilter::MakeMatrixFilterRowMajor255(matrix), nullptr))); 1632 SkColorFilter::MakeMatrixFilterRowMajor255(matrix), nullptr)));
1653 1633
1654 RenderPassDrawQuad* render_pass_quad = 1634 RenderPassDrawQuad* render_pass_quad =
1655 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); 1635 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>();
1656 render_pass_quad->SetNew(pass_shared_state, 1636 render_pass_quad->SetNew(pass_shared_state, pass_rect, pass_rect,
1657 pass_rect, 1637 child_pass_id, 0, gfx::Vector2dF(), gfx::Size(),
1658 pass_rect, 1638 filters, gfx::Vector2dF(), gfx::PointF(),
1659 child_pass_id,
1660 0,
1661 gfx::Vector2dF(),
1662 gfx::Size(),
1663 filters,
1664 gfx::Vector2dF(),
1665 FilterOperations()); 1639 FilterOperations());
1666 1640
1667 RenderPassList pass_list; 1641 RenderPassList pass_list;
1668 1642
1669 pass_list.push_back(std::move(child_pass)); 1643 pass_list.push_back(std::move(child_pass));
1670 pass_list.push_back(std::move(root_pass)); 1644 pass_list.push_back(std::move(root_pass));
1671 1645
1672 // This test has alpha=254 for the software renderer vs. alpha=255 for the gl 1646 // This test has alpha=254 for the software renderer vs. alpha=255 for the gl
1673 // renderer so use a fuzzy comparator. 1647 // renderer so use a fuzzy comparator.
1674 EXPECT_TRUE(this->RunPixelTest( 1648 EXPECT_TRUE(this->RunPixelTest(
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
1854 // Set up a mask on the RenderPassDrawQuad. 1828 // Set up a mask on the RenderPassDrawQuad.
1855 RenderPassDrawQuad* mask_quad = 1829 RenderPassDrawQuad* mask_quad =
1856 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); 1830 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>();
1857 mask_quad->SetNew(root_pass_shared_state, sub_rect, sub_rect, child_pass_id, 1831 mask_quad->SetNew(root_pass_shared_state, sub_rect, sub_rect, child_pass_id,
1858 mask_resource_id, 1832 mask_resource_id,
1859 gfx::Vector2dF(2.f / mask_rect.width(), 1833 gfx::Vector2dF(2.f / mask_rect.width(),
1860 2.f / mask_rect.height()), // mask_uv_scale 1834 2.f / mask_rect.height()), // mask_uv_scale
1861 gfx::Size(mask_rect.size()), // mask_texture_size 1835 gfx::Size(mask_rect.size()), // mask_texture_size
1862 FilterOperations(), // foreground filters 1836 FilterOperations(), // foreground filters
1863 gfx::Vector2dF(), // filters scale 1837 gfx::Vector2dF(), // filters scale
1838 gfx::PointF(), // filter origin
1864 FilterOperations()); // background filters 1839 FilterOperations()); // background filters
1865 1840
1866 // White background behind the masked render pass. 1841 // White background behind the masked render pass.
1867 SolidColorDrawQuad* white = 1842 SolidColorDrawQuad* white =
1868 root_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); 1843 root_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
1869 white->SetNew(root_pass_shared_state, 1844 white->SetNew(root_pass_shared_state,
1870 viewport_rect, 1845 viewport_rect,
1871 viewport_rect, 1846 viewport_rect,
1872 SK_ColorWHITE, 1847 SK_ColorWHITE,
1873 false); 1848 false);
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
1948 // Set up a mask on the RenderPassDrawQuad. 1923 // Set up a mask on the RenderPassDrawQuad.
1949 RenderPassDrawQuad* mask_quad = 1924 RenderPassDrawQuad* mask_quad =
1950 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); 1925 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>();
1951 mask_quad->SetNew(root_pass_shared_state, sub_rect, sub_rect, child_pass_id, 1926 mask_quad->SetNew(root_pass_shared_state, sub_rect, sub_rect, child_pass_id,
1952 mask_resource_id, 1927 mask_resource_id,
1953 gfx::Vector2dF(2.f / mask_rect.width(), 1928 gfx::Vector2dF(2.f / mask_rect.width(),
1954 2.f / mask_rect.height()), // mask_uv_scale 1929 2.f / mask_rect.height()), // mask_uv_scale
1955 gfx::Size(mask_rect.size()), // mask_texture_size 1930 gfx::Size(mask_rect.size()), // mask_texture_size
1956 FilterOperations(), // foreground filters 1931 FilterOperations(), // foreground filters
1957 gfx::Vector2dF(), // filters scale 1932 gfx::Vector2dF(), // filters scale
1933 gfx::PointF(), // filter origin
1958 FilterOperations()); // background filters 1934 FilterOperations()); // background filters
1959 1935
1960 // White background behind the masked render pass. 1936 // White background behind the masked render pass.
1961 SolidColorDrawQuad* white = 1937 SolidColorDrawQuad* white =
1962 root_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); 1938 root_pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
1963 white->SetNew(root_pass_shared_state, viewport_rect, viewport_rect, 1939 white->SetNew(root_pass_shared_state, viewport_rect, viewport_rect,
1964 SK_ColorWHITE, false); 1940 SK_ColorWHITE, false);
1965 1941
1966 RenderPassList pass_list; 1942 RenderPassList pass_list;
1967 pass_list.push_back(std::move(child_pass)); 1943 pass_list.push_back(std::move(child_pass));
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
2008 filter_pass_layer_rect_, filter_pass.get()); 1984 filter_pass_layer_rect_, filter_pass.get());
2009 RenderPassDrawQuad* filter_pass_quad = 1985 RenderPassDrawQuad* filter_pass_quad =
2010 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>(); 1986 root_pass->CreateAndAppendDrawQuad<RenderPassDrawQuad>();
2011 filter_pass_quad->SetNew(shared_state, filter_pass_layer_rect_, 1987 filter_pass_quad->SetNew(shared_state, filter_pass_layer_rect_,
2012 filter_pass_layer_rect_, filter_pass_id, 1988 filter_pass_layer_rect_, filter_pass_id,
2013 0, // mask_resource_id 1989 0, // mask_resource_id
2014 gfx::Vector2dF(), // mask_uv_scale 1990 gfx::Vector2dF(), // mask_uv_scale
2015 gfx::Size(), // mask_texture_size 1991 gfx::Size(), // mask_texture_size
2016 FilterOperations(), // filters 1992 FilterOperations(), // filters
2017 gfx::Vector2dF(1.0f, 1.0f), // filters_scale 1993 gfx::Vector2dF(1.0f, 1.0f), // filters_scale
1994 gfx::PointF(), // filters_origin
2018 this->background_filters_); 1995 this->background_filters_);
2019 } 1996 }
2020 1997
2021 const int kColumnWidth = device_viewport_rect.width() / 3; 1998 const int kColumnWidth = device_viewport_rect.width() / 3;
2022 1999
2023 gfx::Rect left_rect = gfx::Rect(0, 0, kColumnWidth, 20); 2000 gfx::Rect left_rect = gfx::Rect(0, 0, kColumnWidth, 20);
2024 for (int i = 0; left_rect.y() < device_viewport_rect.height(); ++i) { 2001 for (int i = 0; left_rect.y() < device_viewport_rect.height(); ++i) {
2025 SharedQuadState* shared_state = CreateTestSharedQuadState( 2002 SharedQuadState* shared_state = CreateTestSharedQuadState(
2026 identity_quad_to_target_transform, left_rect, root_pass.get()); 2003 identity_quad_to_target_transform, left_rect, root_pass.get());
2027 SolidColorDrawQuad* color_quad = 2004 SolidColorDrawQuad* color_quad =
(...skipping 1168 matching lines...) Expand 10 before | Expand all | Expand 10 after
3196 3173
3197 EXPECT_TRUE(this->RunPixelTest( 3174 EXPECT_TRUE(this->RunPixelTest(
3198 &pass_list, base::FilePath(FILE_PATH_LITERAL("spiral.png")), 3175 &pass_list, base::FilePath(FILE_PATH_LITERAL("spiral.png")),
3199 FuzzyPixelOffByOneComparator(true))); 3176 FuzzyPixelOffByOneComparator(true)));
3200 } 3177 }
3201 3178
3202 #endif // !defined(OS_ANDROID) 3179 #endif // !defined(OS_ANDROID)
3203 3180
3204 } // namespace 3181 } // namespace
3205 } // namespace cc 3182 } // namespace cc
OLDNEW
« no previous file with comments | « cc/output/overlay_unittest.cc ('k') | cc/output/software_renderer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698