OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2009 Apple Inc. All rights reserved. | 2 * Copyright (C) 2009 Apple Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
84 DISALLOW_NEW_EXCEPT_PLACEMENT_NEW(); | 84 DISALLOW_NEW_EXCEPT_PLACEMENT_NEW(); |
85 int x; | 85 int x; |
86 int y; | 86 int y; |
87 SkColor oldPixel; | 87 SkColor oldPixel; |
88 SkColor newPixel; | 88 SkColor newPixel; |
89 }; | 89 }; |
90 | 90 |
91 struct PaintInvalidationTracking { | 91 struct PaintInvalidationTracking { |
92 DISALLOW_NEW_EXCEPT_PLACEMENT_NEW(); | 92 DISALLOW_NEW_EXCEPT_PLACEMENT_NEW(); |
93 Vector<PaintInvalidationInfo> trackedPaintInvalidations; | 93 Vector<PaintInvalidationInfo> trackedPaintInvalidations; |
94 RefPtr<SkPicture> lastPaintedPicture; | 94 sk_sp<SkPicture> lastPaintedPicture; |
95 Region paintInvalidationRegionSinceLastPaint; | 95 Region paintInvalidationRegionSinceLastPaint; |
96 Vector<UnderPaintInvalidation> underPaintInvalidations; | 96 Vector<UnderPaintInvalidation> underPaintInvalidations; |
97 }; | 97 }; |
98 | 98 |
99 typedef HashMap<const GraphicsLayer*, PaintInvalidationTracking> PaintInvalidati
onTrackingMap; | 99 typedef HashMap<const GraphicsLayer*, PaintInvalidationTracking> PaintInvalidati
onTrackingMap; |
100 static PaintInvalidationTrackingMap& paintInvalidationTrackingMap() | 100 static PaintInvalidationTrackingMap& paintInvalidationTrackingMap() |
101 { | 101 { |
102 DEFINE_STATIC_LOCAL(PaintInvalidationTrackingMap, map, ()); | 102 DEFINE_STATIC_LOCAL(PaintInvalidationTrackingMap, map, ()); |
103 return map; | 103 return map; |
104 } | 104 } |
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
326 IntRect GraphicsLayer::interestRect() | 326 IntRect GraphicsLayer::interestRect() |
327 { | 327 { |
328 return m_previousInterestRect; | 328 return m_previousInterestRect; |
329 } | 329 } |
330 | 330 |
331 void GraphicsLayer::paint(const IntRect* interestRect, GraphicsContext::Disabled
Mode disabledMode) | 331 void GraphicsLayer::paint(const IntRect* interestRect, GraphicsContext::Disabled
Mode disabledMode) |
332 { | 332 { |
333 if (paintWithoutCommit(interestRect, disabledMode)) { | 333 if (paintWithoutCommit(interestRect, disabledMode)) { |
334 getPaintController().commitNewDisplayItems(offsetFromLayoutObjectWithSub
pixelAccumulation()); | 334 getPaintController().commitNewDisplayItems(offsetFromLayoutObjectWithSub
pixelAccumulation()); |
335 if (RuntimeEnabledFeatures::paintUnderInvalidationCheckingEnabled()) { | 335 if (RuntimeEnabledFeatures::paintUnderInvalidationCheckingEnabled()) { |
336 RefPtr<SkPicture> newPicture = capturePicture(); | 336 sk_sp<SkPicture> newPicture = capturePicture(); |
337 checkPaintUnderInvalidations(*newPicture); | 337 checkPaintUnderInvalidations(*newPicture); |
338 PaintInvalidationTracking& tracking = paintInvalidationTrackingMap()
.add(this, PaintInvalidationTracking()).storedValue->value; | 338 PaintInvalidationTracking& tracking = paintInvalidationTrackingMap()
.add(this, PaintInvalidationTracking()).storedValue->value; |
339 tracking.lastPaintedPicture = newPicture; | 339 tracking.lastPaintedPicture = std::move(newPicture); |
340 tracking.paintInvalidationRegionSinceLastPaint = Region(); | 340 tracking.paintInvalidationRegionSinceLastPaint = Region(); |
341 } | 341 } |
342 } | 342 } |
343 } | 343 } |
344 | 344 |
345 bool GraphicsLayer::paintWithoutCommit(const IntRect* interestRect, GraphicsCont
ext::DisabledMode disabledMode) | 345 bool GraphicsLayer::paintWithoutCommit(const IntRect* interestRect, GraphicsCont
ext::DisabledMode disabledMode) |
346 { | 346 { |
347 ASSERT(drawsContent()); | 347 ASSERT(drawsContent()); |
348 | 348 |
349 if (!m_client) | 349 if (!m_client) |
(...skipping 754 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1104 { | 1104 { |
1105 if (rect == m_contentsRect) | 1105 if (rect == m_contentsRect) |
1106 return; | 1106 return; |
1107 | 1107 |
1108 m_contentsRect = rect; | 1108 m_contentsRect = rect; |
1109 updateContentsRect(); | 1109 updateContentsRect(); |
1110 } | 1110 } |
1111 | 1111 |
1112 void GraphicsLayer::setContentsToImage(Image* image, RespectImageOrientationEnum
respectImageOrientation) | 1112 void GraphicsLayer::setContentsToImage(Image* image, RespectImageOrientationEnum
respectImageOrientation) |
1113 { | 1113 { |
1114 RefPtr<SkImage> skImage = image ? image->imageForCurrentFrame() : nullptr; | 1114 sk_sp<SkImage> skImage = image ? image->imageForCurrentFrame() : nullptr; |
1115 | 1115 |
1116 if (image && skImage && image->isBitmapImage()) { | 1116 if (image && skImage && image->isBitmapImage()) { |
1117 if (respectImageOrientation == RespectImageOrientation) { | 1117 if (respectImageOrientation == RespectImageOrientation) { |
1118 ImageOrientation imageOrientation = toBitmapImage(image)->currentFra
meOrientation(); | 1118 ImageOrientation imageOrientation = toBitmapImage(image)->currentFra
meOrientation(); |
1119 skImage = DragImage::resizeAndOrientImage(skImage.release(), imageOr
ientation); | 1119 skImage = DragImage::resizeAndOrientImage(std::move(skImage), imageO
rientation); |
1120 } | 1120 } |
1121 } | 1121 } |
1122 | 1122 |
1123 if (image && skImage) { | 1123 if (image && skImage) { |
1124 if (!m_imageLayer) { | 1124 if (!m_imageLayer) { |
1125 m_imageLayer = wrapUnique(Platform::current()->compositorSupport()->
createImageLayer()); | 1125 m_imageLayer = wrapUnique(Platform::current()->compositorSupport()->
createImageLayer()); |
1126 registerContentsLayer(m_imageLayer->layer()); | 1126 registerContentsLayer(m_imageLayer->layer()); |
1127 } | 1127 } |
1128 m_imageLayer->setImage(skImage.get()); | 1128 m_imageLayer->setImage(skImage.get()); |
1129 m_imageLayer->layer()->setOpaque(image->currentFrameKnownToBeOpaque()); | 1129 m_imageLayer->layer()->setOpaque(image->currentFrameKnownToBeOpaque()); |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1237 if (WebLayer* layer = platformLayer()) | 1237 if (WebLayer* layer = platformLayer()) |
1238 layer->setElementId(id); | 1238 layer->setElementId(id); |
1239 } | 1239 } |
1240 | 1240 |
1241 void GraphicsLayer::setCompositorMutableProperties(uint32_t properties) | 1241 void GraphicsLayer::setCompositorMutableProperties(uint32_t properties) |
1242 { | 1242 { |
1243 if (WebLayer* layer = platformLayer()) | 1243 if (WebLayer* layer = platformLayer()) |
1244 layer->setCompositorMutableProperties(properties); | 1244 layer->setCompositorMutableProperties(properties); |
1245 } | 1245 } |
1246 | 1246 |
1247 PassRefPtr<SkPicture> GraphicsLayer::capturePicture() | 1247 sk_sp<SkPicture> GraphicsLayer::capturePicture() |
1248 { | 1248 { |
1249 if (!drawsContent()) | 1249 if (!drawsContent()) |
1250 return nullptr; | 1250 return nullptr; |
1251 | 1251 |
1252 IntSize intSize = expandedIntSize(size()); | 1252 IntSize intSize = expandedIntSize(size()); |
1253 GraphicsContext graphicsContext(getPaintController()); | 1253 GraphicsContext graphicsContext(getPaintController()); |
1254 graphicsContext.beginRecording(IntRect(IntPoint(0, 0), intSize)); | 1254 graphicsContext.beginRecording(IntRect(IntPoint(0, 0), intSize)); |
1255 getPaintController().paintArtifact().replay(graphicsContext); | 1255 getPaintController().paintArtifact().replay(graphicsContext); |
1256 return graphicsContext.endRecording(); | 1256 return graphicsContext.endRecording(); |
1257 } | 1257 } |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1328 } | 1328 } |
1329 | 1329 |
1330 oldBitmap.unlockPixels(); | 1330 oldBitmap.unlockPixels(); |
1331 newBitmap.unlockPixels(); | 1331 newBitmap.unlockPixels(); |
1332 | 1332 |
1333 // Visualize under-invalidations by overlaying the new bitmap (containing re
d pixels indicating under-invalidations, | 1333 // Visualize under-invalidations by overlaying the new bitmap (containing re
d pixels indicating under-invalidations, |
1334 // and transparent pixels otherwise) onto the painting. | 1334 // and transparent pixels otherwise) onto the painting. |
1335 SkPictureRecorder recorder; | 1335 SkPictureRecorder recorder; |
1336 recorder.beginRecording(width, height); | 1336 recorder.beginRecording(width, height); |
1337 recorder.getRecordingCanvas()->drawBitmap(newBitmap, 0, 0); | 1337 recorder.getRecordingCanvas()->drawBitmap(newBitmap, 0, 0); |
1338 RefPtr<SkPicture> picture = fromSkSp(recorder.finishRecordingAsPicture()); | 1338 sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture(); |
1339 getPaintController().appendDebugDrawingAfterCommit(*this, picture, offsetFro
mLayoutObjectWithSubpixelAccumulation()); | 1339 getPaintController().appendDebugDrawingAfterCommit(*this, picture, offsetFro
mLayoutObjectWithSubpixelAccumulation()); |
1340 } | 1340 } |
1341 | 1341 |
1342 } // namespace blink | 1342 } // namespace blink |
1343 | 1343 |
1344 #ifndef NDEBUG | 1344 #ifndef NDEBUG |
1345 void showGraphicsLayerTree(const blink::GraphicsLayer* layer) | 1345 void showGraphicsLayerTree(const blink::GraphicsLayer* layer) |
1346 { | 1346 { |
1347 if (!layer) { | 1347 if (!layer) { |
1348 fprintf(stderr, "Cannot showGraphicsLayerTree for (nil).\n"); | 1348 fprintf(stderr, "Cannot showGraphicsLayerTree for (nil).\n"); |
1349 return; | 1349 return; |
1350 } | 1350 } |
1351 | 1351 |
1352 String output = layer->layerTreeAsText(blink::LayerTreeIncludesDebugInfo); | 1352 String output = layer->layerTreeAsText(blink::LayerTreeIncludesDebugInfo); |
1353 fprintf(stderr, "%s\n", output.utf8().data()); | 1353 fprintf(stderr, "%s\n", output.utf8().data()); |
1354 } | 1354 } |
1355 #endif | 1355 #endif |
OLD | NEW |