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

Unified Diff: third_party/WebKit/Source/platform/graphics/paint/PaintController.cpp

Issue 2380683006: SPv2: Add support for tracking raster paint invalidations in testing. (Closed)
Patch Set: none 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/platform/graphics/paint/PaintController.cpp
diff --git a/third_party/WebKit/Source/platform/graphics/paint/PaintController.cpp b/third_party/WebKit/Source/platform/graphics/paint/PaintController.cpp
index 833198a060895d633a0b580c5e0ebc1385c18d77..894815a516947e49ca1e12348db495aece58f461 100644
--- a/third_party/WebKit/Source/platform/graphics/paint/PaintController.cpp
+++ b/third_party/WebKit/Source/platform/graphics/paint/PaintController.cpp
@@ -18,6 +18,15 @@
namespace blink {
+void PaintController::setTracksRasterInvalidations(bool value)
+{
+ if (value)
+ m_paintChunksRasterInvalidationTrackingMap = wrapUnique(new RasterInvalidationTrackingMap<const PaintChunk>);
+ else
+ m_paintChunksRasterInvalidationTrackingMap = nullptr;
+}
+
+
const PaintArtifact& PaintController::paintArtifact() const
{
DCHECK(m_newDisplayItemList.isEmpty());
@@ -538,8 +547,9 @@ void PaintController::generateChunkRasterInvalidationRects(PaintChunk& newChunk)
if (newChunk.beginIndex >= m_currentCachedSubsequenceBeginIndexInNewList)
return;
+ static FloatRect infiniteFloatRect(LayoutRect::infiniteIntRect());
if (!newChunk.id) {
- newChunk.rasterInvalidationRects.append(FloatRect(LayoutRect::infiniteIntRect()));
+ addRasterInvalidationInfo(nullptr, newChunk, infiniteFloatRect);
return;
}
@@ -575,7 +585,25 @@ void PaintController::generateChunkRasterInvalidationRects(PaintChunk& newChunk)
}
// We reach here because the chunk is new.
- newChunk.rasterInvalidationRects.append(FloatRect(LayoutRect::infiniteIntRect()));
+ addRasterInvalidationInfo(nullptr, newChunk, infiniteFloatRect);
+}
+
+void PaintController::addRasterInvalidationInfo(const DisplayItemClient* client, PaintChunk& chunk, const FloatRect& rect)
+{
+ chunk.rasterInvalidationRects.append(rect);
+ if (!m_paintChunksRasterInvalidationTrackingMap)
+ return;
+
+ RasterInvalidationInfo info;
+ info.rect = enclosingIntRect(rect);
+ info.client = client;
+ if (client) {
+ info.clientDebugName = client->debugName();
+ info.reason = client->getPaintInvalidationReason();
+ }
+
+ RasterInvalidationTracking& tracking = m_paintChunksRasterInvalidationTrackingMap->add(&chunk);
+ tracking.trackedRasterInvalidations.append(info);
}
void PaintController::generateChunkRasterInvalidationRectsComparingOldChunk(PaintChunk& newChunk, const PaintChunk& oldChunk)
@@ -598,7 +626,8 @@ void PaintController::generateChunkRasterInvalidationRectsComparingOldChunk(Pain
clientToInvalidate = &m_newDisplayItemList[movedToIndex].client();
// And invalidate in the new chunk into which the item was moved.
PaintChunk& movedToChunk = m_newPaintChunks.findChunkByDisplayItemIndex(movedToIndex);
- movedToChunk.rasterInvalidationRects.append(clientToInvalidate->visualRect());
+
+ addRasterInvalidationInfo(clientToInvalidate, movedToChunk, FloatRect(clientToInvalidate->visualRect()));
} else if (movedToIndex < highestMovedToIndex) {
// The item has been moved behind other cached items, so need to invalidate the area
// that is probably exposed by the item moved earlier.
@@ -611,15 +640,17 @@ void PaintController::generateChunkRasterInvalidationRectsComparingOldChunk(Pain
clientToInvalidate = &oldItem.client();
}
if (clientToInvalidate && invalidatedClientsInOldChunk.add(clientToInvalidate).isNewEntry) {
- newChunk.rasterInvalidationRects.append(m_currentPaintArtifact.getDisplayItemList().visualRect(oldIndex));
+ addRasterInvalidationInfo(clientToInvalidate, newChunk, FloatRect(m_currentPaintArtifact.getDisplayItemList().visualRect(oldIndex)));
+
}
}
HashSet<const DisplayItemClient*> invalidatedClientsInNewChunk;
for (size_t newIndex = newChunk.beginIndex; newIndex < newChunk.endIndex; ++newIndex) {
const DisplayItem& newItem = m_newDisplayItemList[newIndex];
- if (newItem.drawsContent() && !clientCacheIsValid(newItem.client()) && invalidatedClientsInNewChunk.add(&newItem.client()).isNewEntry)
- newChunk.rasterInvalidationRects.append(newItem.client().visualRect());
+ if (newItem.drawsContent() && !clientCacheIsValid(newItem.client()) && invalidatedClientsInNewChunk.add(&newItem.client()).isNewEntry) {
+ addRasterInvalidationInfo(&newItem.client(), newChunk, FloatRect(newItem.client().visualRect()));
+ }
}
}

Powered by Google App Engine
This is Rietveld 408576698