OLD | NEW |
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 1107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1118 drawRect(context, content, foregroundDrawingType, rect1); | 1118 drawRect(context, content, foregroundDrawingType, rect1); |
1119 drawRect(context, content, foregroundDrawingType, rect2); | 1119 drawRect(context, content, foregroundDrawingType, rect2); |
1120 getPaintController().endSkippingCache(); | 1120 getPaintController().endSkippingCache(); |
1121 | 1121 |
1122 getPaintController().commitNewDisplayItems(); | 1122 getPaintController().commitNewDisplayItems(); |
1123 | 1123 |
1124 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 3, | 1124 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 3, |
1125 TestDisplayItem(multicol, backgroundDrawingType), | 1125 TestDisplayItem(multicol, backgroundDrawingType), |
1126 TestDisplayItem(content, foregroundDrawingType), | 1126 TestDisplayItem(content, foregroundDrawingType), |
1127 TestDisplayItem(content, foregroundDrawingType)); | 1127 TestDisplayItem(content, foregroundDrawingType)); |
1128 RefPtr<const SkPicture> picture1 = static_cast<const DrawingDisplayItem&>(ge
tPaintController().getDisplayItemList()[1]).picture(); | 1128 sk_sp<const SkPicture> picture1 = sk_ref_sp(static_cast<const DrawingDisplay
Item&>(getPaintController().getDisplayItemList()[1]).picture()); |
1129 RefPtr<const SkPicture> picture2 = static_cast<const DrawingDisplayItem&>(ge
tPaintController().getDisplayItemList()[2]).picture(); | 1129 sk_sp<const SkPicture> picture2 = sk_ref_sp(static_cast<const DrawingDisplay
Item&>(getPaintController().getDisplayItemList()[2]).picture()); |
1130 EXPECT_NE(picture1, picture2); | 1130 EXPECT_NE(picture1, picture2); |
1131 | 1131 |
1132 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { | 1132 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { |
1133 EXPECT_EQ(1u, getPaintController().paintChunks().size()); | 1133 EXPECT_EQ(1u, getPaintController().paintChunks().size()); |
1134 EXPECT_THAT(getPaintController().paintChunks()[0].rasterInvalidationRect
s, UnorderedElementsAre(FloatRect(LayoutRect::infiniteIntRect()))); | 1134 EXPECT_THAT(getPaintController().paintChunks()[0].rasterInvalidationRect
s, UnorderedElementsAre(FloatRect(LayoutRect::infiniteIntRect()))); |
1135 | 1135 |
1136 getPaintController().updateCurrentPaintChunkProperties(&m_rootPaintChunk
Id, PaintChunkProperties()); | 1136 getPaintController().updateCurrentPaintChunkProperties(&m_rootPaintChunk
Id, PaintChunkProperties()); |
1137 } | 1137 } |
1138 | 1138 |
1139 // Draw again with nothing invalidated. | 1139 // Draw again with nothing invalidated. |
(...skipping 11 matching lines...) Expand all Loading... |
1151 EXPECT_EQ(0, numOutOfOrderMatches()); | 1151 EXPECT_EQ(0, numOutOfOrderMatches()); |
1152 EXPECT_EQ(0, numIndexedItems()); | 1152 EXPECT_EQ(0, numIndexedItems()); |
1153 #endif | 1153 #endif |
1154 | 1154 |
1155 getPaintController().commitNewDisplayItems(); | 1155 getPaintController().commitNewDisplayItems(); |
1156 | 1156 |
1157 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 3, | 1157 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 3, |
1158 TestDisplayItem(multicol, backgroundDrawingType), | 1158 TestDisplayItem(multicol, backgroundDrawingType), |
1159 TestDisplayItem(content, foregroundDrawingType), | 1159 TestDisplayItem(content, foregroundDrawingType), |
1160 TestDisplayItem(content, foregroundDrawingType)); | 1160 TestDisplayItem(content, foregroundDrawingType)); |
1161 EXPECT_NE(picture1, static_cast<const DrawingDisplayItem&>(getPaintControlle
r().getDisplayItemList()[1]).picture()); | 1161 EXPECT_NE(picture1.get(), static_cast<const DrawingDisplayItem&>(getPaintCon
troller().getDisplayItemList()[1]).picture()); |
1162 EXPECT_NE(picture2, static_cast<const DrawingDisplayItem&>(getPaintControlle
r().getDisplayItemList()[2]).picture()); | 1162 EXPECT_NE(picture2.get(), static_cast<const DrawingDisplayItem&>(getPaintCon
troller().getDisplayItemList()[2]).picture()); |
1163 | 1163 |
1164 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { | 1164 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { |
1165 EXPECT_EQ(1u, getPaintController().paintChunks().size()); | 1165 EXPECT_EQ(1u, getPaintController().paintChunks().size()); |
1166 EXPECT_THAT(getPaintController().paintChunks()[0].rasterInvalidationRect
s, UnorderedElementsAre( | 1166 EXPECT_THAT(getPaintController().paintChunks()[0].rasterInvalidationRect
s, UnorderedElementsAre( |
1167 FloatRect(100, 100, 100, 100), // Old bounds of |content|. | 1167 FloatRect(100, 100, 100, 100), // Old bounds of |content|. |
1168 FloatRect(100, 100, 100, 100))); // New bounds of |content|. | 1168 FloatRect(100, 100, 100, 100))); // New bounds of |content|. |
1169 | 1169 |
1170 getPaintController().updateCurrentPaintChunkProperties(&m_rootPaintChunk
Id, PaintChunkProperties()); | 1170 getPaintController().updateCurrentPaintChunkProperties(&m_rootPaintChunk
Id, PaintChunkProperties()); |
1171 } | 1171 } |
1172 | 1172 |
1173 // Now the multicol becomes 3 columns and repaints. | 1173 // Now the multicol becomes 3 columns and repaints. |
1174 multicol.setDisplayItemsUncached(); | 1174 multicol.setDisplayItemsUncached(); |
1175 drawRect(context, multicol, backgroundDrawingType, FloatRect(100, 100, 100,
100)); | 1175 drawRect(context, multicol, backgroundDrawingType, FloatRect(100, 100, 100,
100)); |
1176 | 1176 |
1177 getPaintController().beginSkippingCache(); | 1177 getPaintController().beginSkippingCache(); |
1178 drawRect(context, content, foregroundDrawingType, rect1); | 1178 drawRect(context, content, foregroundDrawingType, rect1); |
1179 drawRect(context, content, foregroundDrawingType, rect2); | 1179 drawRect(context, content, foregroundDrawingType, rect2); |
1180 drawRect(context, content, foregroundDrawingType, rect3); | 1180 drawRect(context, content, foregroundDrawingType, rect3); |
1181 getPaintController().endSkippingCache(); | 1181 getPaintController().endSkippingCache(); |
1182 | 1182 |
1183 // We should repaint everything on invalidation of the scope container. | 1183 // We should repaint everything on invalidation of the scope container. |
1184 EXPECT_DISPLAY_LIST(getPaintController().newDisplayItemList(), 4, | 1184 EXPECT_DISPLAY_LIST(getPaintController().newDisplayItemList(), 4, |
1185 TestDisplayItem(multicol, backgroundDrawingType), | 1185 TestDisplayItem(multicol, backgroundDrawingType), |
1186 TestDisplayItem(content, foregroundDrawingType), | 1186 TestDisplayItem(content, foregroundDrawingType), |
1187 TestDisplayItem(content, foregroundDrawingType), | 1187 TestDisplayItem(content, foregroundDrawingType), |
1188 TestDisplayItem(content, foregroundDrawingType)); | 1188 TestDisplayItem(content, foregroundDrawingType)); |
1189 EXPECT_NE(picture1, static_cast<const DrawingDisplayItem&>(getPaintControlle
r().newDisplayItemList()[1]).picture()); | 1189 EXPECT_NE(picture1.get(), static_cast<const DrawingDisplayItem&>(getPaintCon
troller().newDisplayItemList()[1]).picture()); |
1190 EXPECT_NE(picture2, static_cast<const DrawingDisplayItem&>(getPaintControlle
r().newDisplayItemList()[2]).picture()); | 1190 EXPECT_NE(picture2.get(), static_cast<const DrawingDisplayItem&>(getPaintCon
troller().newDisplayItemList()[2]).picture()); |
1191 | 1191 |
1192 getPaintController().commitNewDisplayItems(); | 1192 getPaintController().commitNewDisplayItems(); |
1193 | 1193 |
1194 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { | 1194 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { |
1195 EXPECT_EQ(1u, getPaintController().paintChunks().size()); | 1195 EXPECT_EQ(1u, getPaintController().paintChunks().size()); |
1196 EXPECT_THAT(getPaintController().paintChunks()[0].rasterInvalidationRect
s, UnorderedElementsAre( | 1196 EXPECT_THAT(getPaintController().paintChunks()[0].rasterInvalidationRect
s, UnorderedElementsAre( |
1197 FloatRect(100, 100, 200, 200), // Old bounds of |multicol|. | 1197 FloatRect(100, 100, 200, 200), // Old bounds of |multicol|. |
1198 FloatRect(100, 100, 200, 200), // New bounds of |multicol|. | 1198 FloatRect(100, 100, 200, 200), // New bounds of |multicol|. |
1199 FloatRect(100, 100, 100, 100), // Old bounds of |content|. | 1199 FloatRect(100, 100, 100, 100), // Old bounds of |content|. |
1200 FloatRect(100, 100, 100, 100))); // New bounds of |content|. | 1200 FloatRect(100, 100, 100, 100))); // New bounds of |content|. |
(...skipping 14 matching lines...) Expand all Loading... |
1215 drawRect(context, content, foregroundDrawingType, rect2); | 1215 drawRect(context, content, foregroundDrawingType, rect2); |
1216 getPaintController().endSkippingCache(); | 1216 getPaintController().endSkippingCache(); |
1217 drawRect(context, content, foregroundDrawingType, rect3); | 1217 drawRect(context, content, foregroundDrawingType, rect3); |
1218 | 1218 |
1219 getPaintController().commitNewDisplayItems(); | 1219 getPaintController().commitNewDisplayItems(); |
1220 | 1220 |
1221 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 3, | 1221 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 3, |
1222 TestDisplayItem(content, backgroundDrawingType), | 1222 TestDisplayItem(content, backgroundDrawingType), |
1223 TestDisplayItem(content, foregroundDrawingType), | 1223 TestDisplayItem(content, foregroundDrawingType), |
1224 TestDisplayItem(content, foregroundDrawingType)); | 1224 TestDisplayItem(content, foregroundDrawingType)); |
1225 RefPtr<const SkPicture> picture0 = static_cast<const DrawingDisplayItem&>(ge
tPaintController().getDisplayItemList()[0]).picture(); | 1225 sk_sp<const SkPicture> picture0 = sk_ref_sp(static_cast<const DrawingDisplay
Item&>(getPaintController().getDisplayItemList()[0]).picture()); |
1226 RefPtr<const SkPicture> picture1 = static_cast<const DrawingDisplayItem&>(ge
tPaintController().getDisplayItemList()[1]).picture(); | 1226 sk_sp<const SkPicture> picture1 = sk_ref_sp(static_cast<const DrawingDisplay
Item&>(getPaintController().getDisplayItemList()[1]).picture()); |
1227 RefPtr<const SkPicture> picture2 = static_cast<const DrawingDisplayItem&>(ge
tPaintController().getDisplayItemList()[2]).picture(); | 1227 sk_sp<const SkPicture> picture2 = sk_ref_sp(static_cast<const DrawingDisplay
Item&>(getPaintController().getDisplayItemList()[2]).picture()); |
1228 EXPECT_NE(picture1, picture2); | 1228 EXPECT_NE(picture1, picture2); |
1229 | 1229 |
1230 // Content's cache is invalid because it has display items skipped cache. | 1230 // Content's cache is invalid because it has display items skipped cache. |
1231 EXPECT_FALSE(getPaintController().clientCacheIsValid(content)); | 1231 EXPECT_FALSE(getPaintController().clientCacheIsValid(content)); |
1232 EXPECT_EQ(PaintInvalidationFull, content.getPaintInvalidationReason()); | 1232 EXPECT_EQ(PaintInvalidationFull, content.getPaintInvalidationReason()); |
1233 | 1233 |
1234 // Draw again with nothing invalidated. | 1234 // Draw again with nothing invalidated. |
1235 drawRect(context, content, backgroundDrawingType, rect1); | 1235 drawRect(context, content, backgroundDrawingType, rect1); |
1236 getPaintController().beginSkippingCache(); | 1236 getPaintController().beginSkippingCache(); |
1237 drawRect(context, content, foregroundDrawingType, rect2); | 1237 drawRect(context, content, foregroundDrawingType, rect2); |
1238 getPaintController().endSkippingCache(); | 1238 getPaintController().endSkippingCache(); |
1239 drawRect(context, content, foregroundDrawingType, rect3); | 1239 drawRect(context, content, foregroundDrawingType, rect3); |
1240 | 1240 |
1241 EXPECT_EQ(0, numCachedNewItems()); | 1241 EXPECT_EQ(0, numCachedNewItems()); |
1242 #ifndef NDEBUG | 1242 #ifndef NDEBUG |
1243 EXPECT_EQ(0, numSequentialMatches()); | 1243 EXPECT_EQ(0, numSequentialMatches()); |
1244 EXPECT_EQ(0, numOutOfOrderMatches()); | 1244 EXPECT_EQ(0, numOutOfOrderMatches()); |
1245 EXPECT_EQ(0, numIndexedItems()); | 1245 EXPECT_EQ(0, numIndexedItems()); |
1246 #endif | 1246 #endif |
1247 | 1247 |
1248 getPaintController().commitNewDisplayItems(); | 1248 getPaintController().commitNewDisplayItems(); |
1249 | 1249 |
1250 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 3, | 1250 EXPECT_DISPLAY_LIST(getPaintController().getDisplayItemList(), 3, |
1251 TestDisplayItem(content, backgroundDrawingType), | 1251 TestDisplayItem(content, backgroundDrawingType), |
1252 TestDisplayItem(content, foregroundDrawingType), | 1252 TestDisplayItem(content, foregroundDrawingType), |
1253 TestDisplayItem(content, foregroundDrawingType)); | 1253 TestDisplayItem(content, foregroundDrawingType)); |
1254 EXPECT_NE(picture0, static_cast<const DrawingDisplayItem&>(getPaintControlle
r().getDisplayItemList()[0]).picture()); | 1254 EXPECT_NE(picture0.get(), static_cast<const DrawingDisplayItem&>(getPaintCon
troller().getDisplayItemList()[0]).picture()); |
1255 EXPECT_NE(picture1, static_cast<const DrawingDisplayItem&>(getPaintControlle
r().getDisplayItemList()[1]).picture()); | 1255 EXPECT_NE(picture1.get(), static_cast<const DrawingDisplayItem&>(getPaintCon
troller().getDisplayItemList()[1]).picture()); |
1256 EXPECT_NE(picture2, static_cast<const DrawingDisplayItem&>(getPaintControlle
r().getDisplayItemList()[2]).picture()); | 1256 EXPECT_NE(picture2.get(), static_cast<const DrawingDisplayItem&>(getPaintCon
troller().getDisplayItemList()[2]).picture()); |
1257 } | 1257 } |
1258 | 1258 |
1259 TEST_F(PaintControllerTestBase, OptimizeNoopPairs) | 1259 TEST_F(PaintControllerTestBase, OptimizeNoopPairs) |
1260 { | 1260 { |
1261 FakeDisplayItemClient first("first"); | 1261 FakeDisplayItemClient first("first"); |
1262 FakeDisplayItemClient second("second"); | 1262 FakeDisplayItemClient second("second"); |
1263 FakeDisplayItemClient third("third"); | 1263 FakeDisplayItemClient third("third"); |
1264 | 1264 |
1265 GraphicsContext context(getPaintController()); | 1265 GraphicsContext context(getPaintController()); |
1266 drawRect(context, first, backgroundDrawingType, FloatRect(0, 0, 100, 100)); | 1266 drawRect(context, first, backgroundDrawingType, FloatRect(0, 0, 100, 100)); |
(...skipping 481 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1748 } | 1748 } |
1749 | 1749 |
1750 TEST_F(PaintControllerUnderInvalidationTest, FoldCompositingDrawingInSubsequence
) | 1750 TEST_F(PaintControllerUnderInvalidationTest, FoldCompositingDrawingInSubsequence
) |
1751 { | 1751 { |
1752 testFoldCompositingDrawingInSubsequence(); | 1752 testFoldCompositingDrawingInSubsequence(); |
1753 } | 1753 } |
1754 | 1754 |
1755 #endif // defined(GTEST_HAS_DEATH_TEST) && !OS(ANDROID) | 1755 #endif // defined(GTEST_HAS_DEATH_TEST) && !OS(ANDROID) |
1756 | 1756 |
1757 } // namespace blink | 1757 } // namespace blink |
OLD | NEW |