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

Side by Side Diff: third_party/WebKit/Source/platform/graphics/paint/PaintControllerTest.cpp

Issue 2876033005: Track slow paths in DisplayItemList (Closed)
Patch Set: Created 3 years, 7 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "platform/graphics/paint/PaintController.h" 5 #include "platform/graphics/paint/PaintController.h"
6 6
7 #include "platform/RuntimeEnabledFeatures.h" 7 #include "platform/RuntimeEnabledFeatures.h"
8 #include "platform/graphics/GraphicsContext.h" 8 #include "platform/graphics/GraphicsContext.h"
9 #include "platform/graphics/paint/ClipPathDisplayItem.h" 9 #include "platform/graphics/paint/ClipPathDisplayItem.h"
10 #include "platform/graphics/paint/ClipPathRecorder.h" 10 #include "platform/graphics/paint/ClipPathRecorder.h"
(...skipping 1905 matching lines...) Expand 10 before | Expand all | Expand 10 after
1916 flags.setAntiAlias(true); 1916 flags.setAntiAlias(true);
1917 for (unsigned i = 0; i < count; i++) 1917 for (unsigned i = 0; i < count; i++)
1918 context.DrawPath(path, flags); 1918 context.DrawPath(path, flags);
1919 } 1919 }
1920 1920
1921 TEST_F(PaintControllerTestBase, IsSuitableForGpuRasterizationSinglePath) { 1921 TEST_F(PaintControllerTestBase, IsSuitableForGpuRasterizationSinglePath) {
1922 FakeDisplayItemClient client("test client", LayoutRect(0, 0, 200, 100)); 1922 FakeDisplayItemClient client("test client", LayoutRect(0, 0, 200, 100));
1923 GraphicsContext context(GetPaintController()); 1923 GraphicsContext context(GetPaintController());
1924 DrawPath(context, client, kBackgroundDrawingType, 1); 1924 DrawPath(context, client, kBackgroundDrawingType, 1);
1925 GetPaintController().CommitNewDisplayItems(LayoutSize()); 1925 GetPaintController().CommitNewDisplayItems(LayoutSize());
1926 EXPECT_TRUE( 1926 EXPECT_EQ(GetPaintController().GetPaintArtifact().NumSlowPaths(), 1);
1927 GetPaintController().GetPaintArtifact().IsSuitableForGpuRasterization());
1928 } 1927 }
1929 1928
1930 TEST_F(PaintControllerTestBase, 1929 TEST_F(PaintControllerTestBase,
1931 IsNotSuitableForGpuRasterizationSinglePaintRecordManyPaths) { 1930 IsNotSuitableForGpuRasterizationSinglePaintRecordManyPaths) {
1932 FakeDisplayItemClient client("test client", LayoutRect(0, 0, 200, 100)); 1931 FakeDisplayItemClient client("test client", LayoutRect(0, 0, 200, 100));
1933 GraphicsContext context(GetPaintController()); 1932 GraphicsContext context(GetPaintController());
1934 1933
1935 DrawPath(context, client, kBackgroundDrawingType, 50); 1934 DrawPath(context, client, kBackgroundDrawingType, 50);
1936 GetPaintController().CommitNewDisplayItems(LayoutSize()); 1935 GetPaintController().CommitNewDisplayItems(LayoutSize());
1937 EXPECT_FALSE( 1936 EXPECT_EQ(GetPaintController().GetPaintArtifact().NumSlowPaths(), 50);
1938 GetPaintController().GetPaintArtifact().IsSuitableForGpuRasterization());
1939 } 1937 }
1940 1938
1941 TEST_F(PaintControllerTestBase, 1939 TEST_F(PaintControllerTestBase,
1942 IsNotSuitableForGpuRasterizationMultiplePaintRecordsSinglePathEach) { 1940 IsNotSuitableForGpuRasterizationMultiplePaintRecordsSinglePathEach) {
1943 FakeDisplayItemClient client("test client", LayoutRect(0, 0, 200, 100)); 1941 FakeDisplayItemClient client("test client", LayoutRect(0, 0, 200, 100));
1944 GraphicsContext context(GetPaintController()); 1942 GraphicsContext context(GetPaintController());
1945 GetPaintController().BeginSkippingCache(); 1943 GetPaintController().BeginSkippingCache();
1946 1944
1947 for (int i = 0; i < 50; ++i) 1945 for (int i = 0; i < 50; ++i)
1948 DrawPath(context, client, kBackgroundDrawingType, 50); 1946 DrawPath(context, client, kBackgroundDrawingType, 50);
1949 1947
1950 GetPaintController().EndSkippingCache(); 1948 GetPaintController().EndSkippingCache();
1951 GetPaintController().CommitNewDisplayItems(LayoutSize()); 1949 GetPaintController().CommitNewDisplayItems(LayoutSize());
1952 EXPECT_FALSE( 1950 EXPECT_EQ(GetPaintController().GetPaintArtifact().NumSlowPaths(), 50 * 50);
1953 GetPaintController().GetPaintArtifact().IsSuitableForGpuRasterization());
1954 } 1951 }
1955 1952
1956 TEST_F(PaintControllerTestBase, 1953 TEST_F(PaintControllerTestBase,
1957 IsNotSuitableForGpuRasterizationSinglePaintRecordManyPathsTwoPaints) { 1954 IsNotSuitableForGpuRasterizationSinglePaintRecordManyPathsTwoPaints) {
1958 FakeDisplayItemClient client("test client", LayoutRect(0, 0, 200, 100)); 1955 FakeDisplayItemClient client("test client", LayoutRect(0, 0, 200, 100));
1959 1956
1960 { 1957 {
1961 GraphicsContext context(GetPaintController()); 1958 GraphicsContext context(GetPaintController());
1962 DrawPath(context, client, kBackgroundDrawingType, 50); 1959 DrawPath(context, client, kBackgroundDrawingType, 50);
1963 GetPaintController().CommitNewDisplayItems(LayoutSize()); 1960 GetPaintController().CommitNewDisplayItems(LayoutSize());
1964 EXPECT_FALSE(GetPaintController() 1961 EXPECT_EQ(GetPaintController().GetPaintArtifact().NumSlowPaths(), 50);
1965 .GetPaintArtifact()
1966 .IsSuitableForGpuRasterization());
1967 } 1962 }
1968 1963
1969 client.SetDisplayItemsUncached(); 1964 client.SetDisplayItemsUncached();
1970 1965
1971 { 1966 {
1972 GraphicsContext context(GetPaintController()); 1967 GraphicsContext context(GetPaintController());
1973 DrawPath(context, client, kBackgroundDrawingType, 50); 1968 DrawPath(context, client, kBackgroundDrawingType, 50);
1974 GetPaintController().CommitNewDisplayItems(LayoutSize()); 1969 GetPaintController().CommitNewDisplayItems(LayoutSize());
1975 EXPECT_FALSE(GetPaintController() 1970 EXPECT_EQ(GetPaintController().GetPaintArtifact().NumSlowPaths(), 50);
1976 .GetPaintArtifact()
1977 .IsSuitableForGpuRasterization());
1978 } 1971 }
1979 } 1972 }
1980 1973
1981 TEST_F(PaintControllerTestBase, 1974 TEST_F(PaintControllerTestBase,
1982 IsNotSuitableForGpuRasterizationSinglePaintRecordManyPathsCached) { 1975 IsNotSuitableForGpuRasterizationSinglePaintRecordManyPathsCached) {
1983 FakeDisplayItemClient client("test client", LayoutRect(0, 0, 200, 100)); 1976 FakeDisplayItemClient client("test client", LayoutRect(0, 0, 200, 100));
1984 1977
1985 { 1978 {
1986 GraphicsContext context(GetPaintController()); 1979 GraphicsContext context(GetPaintController());
1987 DrawPath(context, client, kBackgroundDrawingType, 50); 1980 DrawPath(context, client, kBackgroundDrawingType, 50);
1988 GetPaintController().CommitNewDisplayItems(LayoutSize()); 1981 GetPaintController().CommitNewDisplayItems(LayoutSize());
1989 EXPECT_FALSE(GetPaintController() 1982 EXPECT_EQ(GetPaintController().GetPaintArtifact().NumSlowPaths(), 50);
1990 .GetPaintArtifact()
1991 .IsSuitableForGpuRasterization());
1992 } 1983 }
1993 1984
1994 { 1985 {
1995 GraphicsContext context(GetPaintController()); 1986 GraphicsContext context(GetPaintController());
1996 DrawPath(context, client, kBackgroundDrawingType, 50); 1987 DrawPath(context, client, kBackgroundDrawingType, 50);
1997 GetPaintController().CommitNewDisplayItems(LayoutSize()); 1988 GetPaintController().CommitNewDisplayItems(LayoutSize());
1998 EXPECT_FALSE(GetPaintController() 1989 EXPECT_EQ(GetPaintController().GetPaintArtifact().NumSlowPaths(), 50);
1999 .GetPaintArtifact()
2000 .IsSuitableForGpuRasterization());
2001 } 1990 }
2002 } 1991 }
2003 1992
2004 TEST_F( 1993 TEST_F(
2005 PaintControllerTestBase, 1994 PaintControllerTestBase,
2006 IsNotSuitableForGpuRasterizationSinglePaintRecordManyPathsCachedSubsequence) { 1995 IsNotSuitableForGpuRasterizationSinglePaintRecordManyPathsCachedSubsequence) {
2007 FakeDisplayItemClient client("test client", LayoutRect(0, 0, 200, 100)); 1996 FakeDisplayItemClient client("test client", LayoutRect(0, 0, 200, 100));
2008 FakeDisplayItemClient container("container", LayoutRect(0, 0, 200, 100)); 1997 FakeDisplayItemClient container("container", LayoutRect(0, 0, 200, 100));
2009 1998
2010 GraphicsContext context(GetPaintController()); 1999 GraphicsContext context(GetPaintController());
2011 { 2000 {
2012 SubsequenceRecorder subsequence_recorder(context, container); 2001 SubsequenceRecorder subsequence_recorder(context, container);
2013 DrawPath(context, client, kBackgroundDrawingType, 50); 2002 DrawPath(context, client, kBackgroundDrawingType, 50);
2014 } 2003 }
2015 GetPaintController().CommitNewDisplayItems(LayoutSize()); 2004 GetPaintController().CommitNewDisplayItems(LayoutSize());
2016 EXPECT_FALSE( 2005 EXPECT_EQ(GetPaintController().GetPaintArtifact().NumSlowPaths(), 50);
2017 GetPaintController().GetPaintArtifact().IsSuitableForGpuRasterization());
2018 2006
2019 EXPECT_TRUE( 2007 EXPECT_TRUE(
2020 SubsequenceRecorder::UseCachedSubsequenceIfPossible(context, container)); 2008 SubsequenceRecorder::UseCachedSubsequenceIfPossible(context, container));
2021 GetPaintController().CommitNewDisplayItems(LayoutSize()); 2009 GetPaintController().CommitNewDisplayItems(LayoutSize());
2022 EXPECT_FALSE( 2010 EXPECT_EQ(GetPaintController().GetPaintArtifact().NumSlowPaths(), 50);
2023 GetPaintController().GetPaintArtifact().IsSuitableForGpuRasterization());
2024 2011
2025 #if CHECK_DISPLAY_ITEM_CLIENT_ALIVENESS 2012 #if CHECK_DISPLAY_ITEM_CLIENT_ALIVENESS
2026 DisplayItemClient::EndShouldKeepAliveAllClients(); 2013 DisplayItemClient::EndShouldKeepAliveAllClients();
2027 #endif 2014 #endif
2028 } 2015 }
2029 2016
2030 // Temporarily disabled (pref regressions due to GPU veto stickiness: 2017 // Temporarily disabled (pref regressions due to GPU veto stickiness:
2031 // http://crbug.com/603969). 2018 // http://crbug.com/603969).
2032 TEST_F(PaintControllerTestBase, 2019 TEST_F(PaintControllerTestBase,
2033 DISABLED_IsNotSuitableForGpuRasterizationConcaveClipPath) { 2020 DISABLED_IsNotSuitableForGpuRasterizationConcaveClipPath) {
2034 Path path; 2021 Path path;
2035 path.AddLineTo(FloatPoint(50, 50)); 2022 path.AddLineTo(FloatPoint(50, 50));
2036 path.AddLineTo(FloatPoint(100, 0)); 2023 path.AddLineTo(FloatPoint(100, 0));
2037 path.AddLineTo(FloatPoint(50, 100)); 2024 path.AddLineTo(FloatPoint(50, 100));
2038 path.CloseSubpath(); 2025 path.CloseSubpath();
2039 2026
2040 FakeDisplayItemClient client("test client", LayoutRect(0, 0, 200, 100)); 2027 FakeDisplayItemClient client("test client", LayoutRect(0, 0, 200, 100));
2041 GraphicsContext context(GetPaintController()); 2028 GraphicsContext context(GetPaintController());
2042 2029
2043 // Run twice for empty/non-empty m_currentPaintArtifact coverage. 2030 // Run twice for empty/non-empty m_currentPaintArtifact coverage.
2044 for (int i = 0; i < 2; ++i) { 2031 for (int i = 0; i < 2; ++i) {
2045 for (int j = 0; j < 50; ++j) 2032 for (int j = 0; j < 50; ++j)
2046 GetPaintController().CreateAndAppend<BeginClipPathDisplayItem>(client, 2033 GetPaintController().CreateAndAppend<BeginClipPathDisplayItem>(client,
2047 path); 2034 path);
2048 DrawRect(context, client, kBackgroundDrawingType, 2035 DrawRect(context, client, kBackgroundDrawingType,
2049 FloatRect(0, 0, 100, 100)); 2036 FloatRect(0, 0, 100, 100));
2050 for (int j = 0; j < 50; ++j) 2037 for (int j = 0; j < 50; ++j)
2051 GetPaintController().CreateAndAppend<EndClipPathDisplayItem>(client); 2038 GetPaintController().CreateAndAppend<EndClipPathDisplayItem>(client);
2052 GetPaintController().CommitNewDisplayItems(LayoutSize()); 2039 GetPaintController().CommitNewDisplayItems(LayoutSize());
2053 EXPECT_FALSE(GetPaintController() 2040 EXPECT_EQ(GetPaintController().GetPaintArtifact().NumSlowPaths(), 50 * i);
2054 .GetPaintArtifact()
2055 .IsSuitableForGpuRasterization());
2056 } 2041 }
2057 } 2042 }
2058 2043
2059 // Death tests don't work properly on Android. 2044 // Death tests don't work properly on Android.
2060 #if defined(GTEST_HAS_DEATH_TEST) && !OS(ANDROID) 2045 #if defined(GTEST_HAS_DEATH_TEST) && !OS(ANDROID)
2061 2046
2062 class PaintControllerUnderInvalidationTest 2047 class PaintControllerUnderInvalidationTest
2063 : public PaintControllerTestBase, 2048 : public PaintControllerTestBase,
2064 private ScopedPaintUnderInvalidationCheckingForTest { 2049 private ScopedPaintUnderInvalidationCheckingForTest {
2065 public: 2050 public:
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after
2318 TEST_F(PaintControllerUnderInvalidationTest, InvalidationInSubsequence) { 2303 TEST_F(PaintControllerUnderInvalidationTest, InvalidationInSubsequence) {
2319 // We allow invalidated display item clients as long as they would produce the 2304 // We allow invalidated display item clients as long as they would produce the
2320 // same display items. The cases of changed display items are tested by other 2305 // same display items. The cases of changed display items are tested by other
2321 // test cases. 2306 // test cases.
2322 TestInvalidationInSubsequence(); 2307 TestInvalidationInSubsequence();
2323 } 2308 }
2324 2309
2325 #endif // defined(GTEST_HAS_DEATH_TEST) && !OS(ANDROID) 2310 #endif // defined(GTEST_HAS_DEATH_TEST) && !OS(ANDROID)
2326 2311
2327 } // namespace blink 2312 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698