| 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" |
| 11 #include "platform/graphics/paint/ClipRecorder.h" | 11 #include "platform/graphics/paint/ClipRecorder.h" |
| 12 #include "platform/graphics/paint/CompositingRecorder.h" | 12 #include "platform/graphics/paint/CompositingRecorder.h" |
| 13 #include "platform/graphics/paint/DrawingDisplayItem.h" | 13 #include "platform/graphics/paint/DrawingDisplayItem.h" |
| 14 #include "platform/graphics/paint/DrawingRecorder.h" | 14 #include "platform/graphics/paint/DrawingRecorder.h" |
| 15 #include "platform/graphics/paint/SubsequenceRecorder.h" | 15 #include "platform/graphics/paint/SubsequenceRecorder.h" |
| 16 #include "platform/testing/FakeDisplayItemClient.h" | 16 #include "platform/testing/FakeDisplayItemClient.h" |
| 17 #include "testing/gmock/include/gmock/gmock.h" | 17 #include "testing/gmock/include/gmock/gmock.h" |
| 18 #include "testing/gtest/include/gtest/gtest.h" | 18 #include "testing/gtest/include/gtest/gtest.h" |
| 19 #include <memory> | 19 #include <memory> |
| 20 | 20 |
| 21 using testing::UnorderedElementsAre; | 21 using testing::UnorderedElementsAre; |
| 22 | 22 |
| 23 namespace blink { | 23 namespace blink { |
| 24 | 24 |
| 25 namespace { |
| 26 TransformPaintPropertyNode* dummyRootTransform() { |
| 27 DEFINE_STATIC_REF(TransformPaintPropertyNode, rootTransform, |
| 28 (TransformPaintPropertyNode::create( |
| 29 nullptr, TransformationMatrix(), FloatPoint3D()))); |
| 30 return rootTransform; |
| 31 } |
| 32 |
| 33 ClipPaintPropertyNode* dummyRootClip() { |
| 34 DEFINE_STATIC_REF(ClipPaintPropertyNode, rootClip, |
| 35 (ClipPaintPropertyNode::create( |
| 36 nullptr, dummyRootTransform(), |
| 37 FloatRoundedRect(LayoutRect::infiniteIntRect())))); |
| 38 return rootClip; |
| 39 } |
| 40 |
| 41 EffectPaintPropertyNode* dummyRootEffect() { |
| 42 DEFINE_STATIC_REF(EffectPaintPropertyNode, rootEffect, |
| 43 (EffectPaintPropertyNode::create(nullptr, dummyRootTransform
(), dummyRootClip(), 1.0, CompositorFilterOperations()))); |
| 44 return rootEffect; |
| 45 } |
| 46 } // namespace |
| 47 |
| 25 class PaintControllerTestBase : public testing::Test { | 48 class PaintControllerTestBase : public testing::Test { |
| 26 public: | 49 public: |
| 27 PaintControllerTestBase() : m_paintController(PaintController::create()) {} | 50 PaintControllerTestBase() : m_paintController(PaintController::create()) {} |
| 28 | 51 |
| 29 IntRect visualRect(const PaintArtifact& paintArtifact, size_t index) { | 52 IntRect visualRect(const PaintArtifact& paintArtifact, size_t index) { |
| 30 return paintArtifact.getDisplayItemList().visualRect(index); | 53 return paintArtifact.getDisplayItemList().visualRect(index); |
| 31 } | 54 } |
| 32 | 55 |
| 33 protected: | 56 protected: |
| 34 PaintController& getPaintController() { return *m_paintController; } | 57 PaintController& getPaintController() { return *m_paintController; } |
| (...skipping 978 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1013 FakeDisplayItemClient content2("content2", LayoutRect(100, 200, 50, 200)); | 1036 FakeDisplayItemClient content2("content2", LayoutRect(100, 200, 50, 200)); |
| 1014 GraphicsContext context(getPaintController()); | 1037 GraphicsContext context(getPaintController()); |
| 1015 | 1038 |
| 1016 PaintChunkProperties container1Properties; | 1039 PaintChunkProperties container1Properties; |
| 1017 PaintChunkProperties container2Properties; | 1040 PaintChunkProperties container2Properties; |
| 1018 | 1041 |
| 1019 { | 1042 { |
| 1020 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { | 1043 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { |
| 1021 PaintChunk::Id id(container1, backgroundDrawingType); | 1044 PaintChunk::Id id(container1, backgroundDrawingType); |
| 1022 container1Properties.effect = | 1045 container1Properties.effect = |
| 1023 EffectPaintPropertyNode::create(nullptr, 0.5); | 1046 EffectPaintPropertyNode::create(dummyRootEffect(), dummyRootTransform(
), dummyRootClip(), 0.5, CompositorFilterOperations()); |
| 1024 getPaintController().updateCurrentPaintChunkProperties( | 1047 getPaintController().updateCurrentPaintChunkProperties( |
| 1025 &id, container1Properties); | 1048 &id, container1Properties); |
| 1026 } | 1049 } |
| 1027 SubsequenceRecorder r(context, container1); | 1050 SubsequenceRecorder r(context, container1); |
| 1028 drawRect(context, container1, backgroundDrawingType, | 1051 drawRect(context, container1, backgroundDrawingType, |
| 1029 FloatRect(100, 100, 100, 100)); | 1052 FloatRect(100, 100, 100, 100)); |
| 1030 drawRect(context, content1, backgroundDrawingType, | 1053 drawRect(context, content1, backgroundDrawingType, |
| 1031 FloatRect(100, 100, 50, 200)); | 1054 FloatRect(100, 100, 50, 200)); |
| 1032 drawRect(context, content1, foregroundDrawingType, | 1055 drawRect(context, content1, foregroundDrawingType, |
| 1033 FloatRect(100, 100, 50, 200)); | 1056 FloatRect(100, 100, 50, 200)); |
| 1034 drawRect(context, container1, foregroundDrawingType, | 1057 drawRect(context, container1, foregroundDrawingType, |
| 1035 FloatRect(100, 100, 100, 100)); | 1058 FloatRect(100, 100, 100, 100)); |
| 1036 } | 1059 } |
| 1037 { | 1060 { |
| 1038 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { | 1061 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { |
| 1039 PaintChunk::Id id(container2, backgroundDrawingType); | 1062 PaintChunk::Id id(container2, backgroundDrawingType); |
| 1040 container2Properties.effect = | 1063 container2Properties.effect = |
| 1041 EffectPaintPropertyNode::create(nullptr, 0.5); | 1064 EffectPaintPropertyNode::create(dummyRootEffect(), dummyRootTransform(
), dummyRootClip(), 0.5, CompositorFilterOperations()); |
| 1042 getPaintController().updateCurrentPaintChunkProperties( | 1065 getPaintController().updateCurrentPaintChunkProperties( |
| 1043 &id, container2Properties); | 1066 &id, container2Properties); |
| 1044 } | 1067 } |
| 1045 SubsequenceRecorder r(context, container2); | 1068 SubsequenceRecorder r(context, container2); |
| 1046 drawRect(context, container2, backgroundDrawingType, | 1069 drawRect(context, container2, backgroundDrawingType, |
| 1047 FloatRect(100, 200, 100, 100)); | 1070 FloatRect(100, 200, 100, 100)); |
| 1048 drawRect(context, content2, backgroundDrawingType, | 1071 drawRect(context, content2, backgroundDrawingType, |
| 1049 FloatRect(100, 200, 50, 200)); | 1072 FloatRect(100, 200, 50, 200)); |
| 1050 drawRect(context, content2, foregroundDrawingType, | 1073 drawRect(context, content2, foregroundDrawingType, |
| 1051 FloatRect(100, 200, 50, 200)); | 1074 FloatRect(100, 200, 50, 200)); |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1183 FakeDisplayItemClient content2("content2", LayoutRect(100, 200, 50, 200)); | 1206 FakeDisplayItemClient content2("content2", LayoutRect(100, 200, 50, 200)); |
| 1184 GraphicsContext context(getPaintController()); | 1207 GraphicsContext context(getPaintController()); |
| 1185 | 1208 |
| 1186 PaintChunkProperties container1Properties; | 1209 PaintChunkProperties container1Properties; |
| 1187 PaintChunkProperties container2Properties; | 1210 PaintChunkProperties container2Properties; |
| 1188 | 1211 |
| 1189 { | 1212 { |
| 1190 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { | 1213 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { |
| 1191 PaintChunk::Id id(container1, backgroundDrawingType); | 1214 PaintChunk::Id id(container1, backgroundDrawingType); |
| 1192 container1Properties.effect = | 1215 container1Properties.effect = |
| 1193 EffectPaintPropertyNode::create(nullptr, 0.5); | 1216 EffectPaintPropertyNode::create(dummyRootEffect(), dummyRootTransform(
), dummyRootClip(), 0.5, CompositorFilterOperations()); |
| 1194 getPaintController().updateCurrentPaintChunkProperties( | 1217 getPaintController().updateCurrentPaintChunkProperties( |
| 1195 &id, container1Properties); | 1218 &id, container1Properties); |
| 1196 } | 1219 } |
| 1197 drawRect(context, container1, backgroundDrawingType, | 1220 drawRect(context, container1, backgroundDrawingType, |
| 1198 FloatRect(100, 100, 100, 100)); | 1221 FloatRect(100, 100, 100, 100)); |
| 1199 drawRect(context, content1, backgroundDrawingType, | 1222 drawRect(context, content1, backgroundDrawingType, |
| 1200 FloatRect(100, 100, 50, 200)); | 1223 FloatRect(100, 100, 50, 200)); |
| 1201 } | 1224 } |
| 1202 { | 1225 { |
| 1203 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { | 1226 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { |
| 1204 PaintChunk::Id id(container2, backgroundDrawingType); | 1227 PaintChunk::Id id(container2, backgroundDrawingType); |
| 1205 container2Properties.effect = | 1228 container2Properties.effect = |
| 1206 EffectPaintPropertyNode::create(nullptr, 0.5); | 1229 EffectPaintPropertyNode::create(dummyRootEffect(), dummyRootTransform(
), dummyRootClip(), 0.5, CompositorFilterOperations()); |
| 1207 getPaintController().updateCurrentPaintChunkProperties( | 1230 getPaintController().updateCurrentPaintChunkProperties( |
| 1208 &id, container2Properties); | 1231 &id, container2Properties); |
| 1209 } | 1232 } |
| 1210 drawRect(context, container2, backgroundDrawingType, | 1233 drawRect(context, container2, backgroundDrawingType, |
| 1211 FloatRect(100, 200, 100, 100)); | 1234 FloatRect(100, 200, 100, 100)); |
| 1212 drawRect(context, content2, backgroundDrawingType, | 1235 drawRect(context, content2, backgroundDrawingType, |
| 1213 FloatRect(100, 200, 50, 200)); | 1236 FloatRect(100, 200, 50, 200)); |
| 1214 } | 1237 } |
| 1215 getPaintController().commitNewDisplayItems(); | 1238 getPaintController().commitNewDisplayItems(); |
| 1216 | 1239 |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1320 PaintChunkProperties container1BackgroundProperties; | 1343 PaintChunkProperties container1BackgroundProperties; |
| 1321 PaintChunkProperties content1Properties; | 1344 PaintChunkProperties content1Properties; |
| 1322 PaintChunkProperties container1ForegroundProperties; | 1345 PaintChunkProperties container1ForegroundProperties; |
| 1323 PaintChunkProperties container2BackgroundProperties; | 1346 PaintChunkProperties container2BackgroundProperties; |
| 1324 PaintChunkProperties content2Properties; | 1347 PaintChunkProperties content2Properties; |
| 1325 | 1348 |
| 1326 { | 1349 { |
| 1327 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { | 1350 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { |
| 1328 PaintChunk::Id id(container1, backgroundDrawingType); | 1351 PaintChunk::Id id(container1, backgroundDrawingType); |
| 1329 container1BackgroundProperties.effect = | 1352 container1BackgroundProperties.effect = |
| 1330 EffectPaintPropertyNode::create(nullptr, 0.5); | 1353 EffectPaintPropertyNode::create(dummyRootEffect(), dummyRootTransform(
), dummyRootClip(), 0.5, CompositorFilterOperations()); |
| 1331 getPaintController().updateCurrentPaintChunkProperties( | 1354 getPaintController().updateCurrentPaintChunkProperties( |
| 1332 &id, container1BackgroundProperties); | 1355 &id, container1BackgroundProperties); |
| 1333 } | 1356 } |
| 1334 SubsequenceRecorder r(context, container1); | 1357 SubsequenceRecorder r(context, container1); |
| 1335 drawRect(context, container1, backgroundDrawingType, | 1358 drawRect(context, container1, backgroundDrawingType, |
| 1336 FloatRect(100, 100, 100, 100)); | 1359 FloatRect(100, 100, 100, 100)); |
| 1337 { | 1360 { |
| 1338 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { | 1361 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { |
| 1339 PaintChunk::Id id(content1, backgroundDrawingType); | 1362 PaintChunk::Id id(content1, backgroundDrawingType); |
| 1340 content1Properties.effect = | 1363 content1Properties.effect = |
| 1341 EffectPaintPropertyNode::create(nullptr, 0.6); | 1364 EffectPaintPropertyNode::create(dummyRootEffect(), dummyRootTransfor
m(), dummyRootClip(), 0.6, CompositorFilterOperations()); |
| 1342 getPaintController().updateCurrentPaintChunkProperties( | 1365 getPaintController().updateCurrentPaintChunkProperties( |
| 1343 &id, content1Properties); | 1366 &id, content1Properties); |
| 1344 } | 1367 } |
| 1345 SubsequenceRecorder r(context, content1); | 1368 SubsequenceRecorder r(context, content1); |
| 1346 drawRect(context, content1, backgroundDrawingType, | 1369 drawRect(context, content1, backgroundDrawingType, |
| 1347 FloatRect(100, 100, 50, 200)); | 1370 FloatRect(100, 100, 50, 200)); |
| 1348 drawRect(context, content1, foregroundDrawingType, | 1371 drawRect(context, content1, foregroundDrawingType, |
| 1349 FloatRect(100, 100, 50, 200)); | 1372 FloatRect(100, 100, 50, 200)); |
| 1350 } | 1373 } |
| 1351 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { | 1374 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { |
| 1352 PaintChunk::Id id(container1, foregroundDrawingType); | 1375 PaintChunk::Id id(container1, foregroundDrawingType); |
| 1353 container1ForegroundProperties.effect = | 1376 container1ForegroundProperties.effect = |
| 1354 EffectPaintPropertyNode::create(nullptr, 0.5); | 1377 EffectPaintPropertyNode::create(dummyRootEffect(), dummyRootTransform(
), dummyRootClip(), 0.5, CompositorFilterOperations()); |
| 1355 getPaintController().updateCurrentPaintChunkProperties( | 1378 getPaintController().updateCurrentPaintChunkProperties( |
| 1356 &id, container1ForegroundProperties); | 1379 &id, container1ForegroundProperties); |
| 1357 } | 1380 } |
| 1358 drawRect(context, container1, foregroundDrawingType, | 1381 drawRect(context, container1, foregroundDrawingType, |
| 1359 FloatRect(100, 100, 100, 100)); | 1382 FloatRect(100, 100, 100, 100)); |
| 1360 } | 1383 } |
| 1361 { | 1384 { |
| 1362 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { | 1385 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { |
| 1363 PaintChunk::Id id(container2, backgroundDrawingType); | 1386 PaintChunk::Id id(container2, backgroundDrawingType); |
| 1364 container2BackgroundProperties.effect = | 1387 container2BackgroundProperties.effect = |
| 1365 EffectPaintPropertyNode::create(nullptr, 0.7); | 1388 EffectPaintPropertyNode::create(dummyRootEffect(), dummyRootTransform(
), dummyRootClip(), 0.7, CompositorFilterOperations()); |
| 1366 getPaintController().updateCurrentPaintChunkProperties( | 1389 getPaintController().updateCurrentPaintChunkProperties( |
| 1367 &id, container2BackgroundProperties); | 1390 &id, container2BackgroundProperties); |
| 1368 } | 1391 } |
| 1369 SubsequenceRecorder r(context, container2); | 1392 SubsequenceRecorder r(context, container2); |
| 1370 drawRect(context, container2, backgroundDrawingType, | 1393 drawRect(context, container2, backgroundDrawingType, |
| 1371 FloatRect(100, 200, 100, 100)); | 1394 FloatRect(100, 200, 100, 100)); |
| 1372 { | 1395 { |
| 1373 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { | 1396 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { |
| 1374 PaintChunk::Id id(content2, backgroundDrawingType); | 1397 PaintChunk::Id id(content2, backgroundDrawingType); |
| 1375 content2Properties.effect = | 1398 content2Properties.effect = |
| 1376 EffectPaintPropertyNode::create(nullptr, 0.8); | 1399 EffectPaintPropertyNode::create(dummyRootEffect(), dummyRootTransfor
m(), dummyRootClip(), 0.8, CompositorFilterOperations()); |
| 1377 getPaintController().updateCurrentPaintChunkProperties( | 1400 getPaintController().updateCurrentPaintChunkProperties( |
| 1378 &id, content2Properties); | 1401 &id, content2Properties); |
| 1379 } | 1402 } |
| 1380 SubsequenceRecorder r(context, content2); | 1403 SubsequenceRecorder r(context, content2); |
| 1381 drawRect(context, content2, backgroundDrawingType, | 1404 drawRect(context, content2, backgroundDrawingType, |
| 1382 FloatRect(100, 200, 50, 200)); | 1405 FloatRect(100, 200, 50, 200)); |
| 1383 } | 1406 } |
| 1384 } | 1407 } |
| 1385 getPaintController().commitNewDisplayItems(); | 1408 getPaintController().commitNewDisplayItems(); |
| 1386 | 1409 |
| (...skipping 873 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2260 } | 2283 } |
| 2261 | 2284 |
| 2262 TEST_F(PaintControllerUnderInvalidationTest, | 2285 TEST_F(PaintControllerUnderInvalidationTest, |
| 2263 FoldCompositingDrawingInSubsequence) { | 2286 FoldCompositingDrawingInSubsequence) { |
| 2264 testFoldCompositingDrawingInSubsequence(); | 2287 testFoldCompositingDrawingInSubsequence(); |
| 2265 } | 2288 } |
| 2266 | 2289 |
| 2267 #endif // defined(GTEST_HAS_DEATH_TEST) && !OS(ANDROID) | 2290 #endif // defined(GTEST_HAS_DEATH_TEST) && !OS(ANDROID) |
| 2268 | 2291 |
| 2269 } // namespace blink | 2292 } // namespace blink |
| OLD | NEW |