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 f39d34c64f7575a47d6ab605524dd2b3083c5cc8..4728fb0c67c650f3f2a15a33c13eace08ad90903 100644 |
--- a/third_party/WebKit/Source/platform/graphics/paint/PaintController.cpp |
+++ b/third_party/WebKit/Source/platform/graphics/paint/PaintController.cpp |
@@ -23,10 +23,10 @@ namespace blink { |
void PaintController::SetTracksRasterInvalidations(bool value) { |
if (value || |
RuntimeEnabledFeatures::paintUnderInvalidationCheckingEnabled()) { |
- paint_chunks_raster_invalidation_tracking_map_ = |
+ raster_invalidation_tracking_map_ = |
WTF::WrapUnique(new RasterInvalidationTrackingMap<const PaintChunk>); |
} else { |
- paint_chunks_raster_invalidation_tracking_map_ = nullptr; |
+ raster_invalidation_tracking_map_ = nullptr; |
} |
} |
@@ -252,9 +252,10 @@ void PaintController::ProcessNewItem(DisplayItem& display_item) { |
size_t last_chunk_index = new_paint_chunks_.LastChunkIndex(); |
if (new_paint_chunks_.IncrementDisplayItemIndex(display_item)) { |
DCHECK(last_chunk_index != new_paint_chunks_.LastChunkIndex()); |
- if (last_chunk_index != kNotFound) |
- GenerateChunkRasterInvalidationRects( |
+ if (last_chunk_index != kNotFound) { |
+ GenerateRasterInvalidations( |
new_paint_chunks_.PaintChunkAt(last_chunk_index)); |
+ } |
} |
} |
@@ -540,7 +541,7 @@ void PaintController::CommitNewDisplayItems( |
if (RuntimeEnabledFeatures::slimmingPaintV2Enabled() && |
!new_display_item_list_.IsEmpty()) |
- GenerateChunkRasterInvalidationRects(new_paint_chunks_.LastChunk()); |
+ GenerateRasterInvalidations(new_paint_chunks_.LastChunk()); |
int num_slow_paths = 0; |
@@ -599,9 +600,9 @@ void PaintController::CommitNewDisplayItems( |
// The new list will not be appended to again so we can release unused memory. |
new_display_item_list_.ShrinkToFit(); |
- if (paint_chunks_raster_invalidation_tracking_map_) { |
+ if (raster_invalidation_tracking_map_) { |
for (const auto& chunk : current_paint_artifact_.PaintChunks()) |
- paint_chunks_raster_invalidation_tracking_map_->Remove(&chunk); |
+ raster_invalidation_tracking_map_->Remove(&chunk); |
} |
current_paint_artifact_ = PaintArtifact( |
std::move(new_display_item_list_), new_paint_chunks_.ReleasePaintChunks(), |
@@ -674,8 +675,7 @@ void PaintController::AppendDebugDrawingAfterCommit( |
VisualRectForDisplayItem(display_item, offset_from_layout_object)); |
} |
-void PaintController::GenerateChunkRasterInvalidationRects( |
- PaintChunk& new_chunk) { |
+void PaintController::GenerateRasterInvalidations(PaintChunk& new_chunk) { |
DCHECK(RuntimeEnabledFeatures::slimmingPaintV2Enabled()); |
if (new_chunk.begin_index >= |
current_cached_subsequence_begin_index_in_new_list_) |
@@ -683,7 +683,7 @@ void PaintController::GenerateChunkRasterInvalidationRects( |
static FloatRect infinite_float_rect(LayoutRect::InfiniteIntRect()); |
if (!new_chunk.id) { |
- AddRasterInvalidationInfo(nullptr, new_chunk, infinite_float_rect); |
+ AddRasterInvalidation(nullptr, new_chunk, infinite_float_rect); |
return; |
} |
@@ -692,8 +692,7 @@ void PaintController::GenerateChunkRasterInvalidationRects( |
while (next_chunk_to_match_ < old_chunks.size()) { |
const PaintChunk& old_chunk = old_chunks[next_chunk_to_match_]; |
if (new_chunk.Matches(old_chunk)) { |
- GenerateChunkRasterInvalidationRectsComparingOldChunk(new_chunk, |
- old_chunk); |
+ GenerateRasterInvalidationsComparingChunks(new_chunk, old_chunk); |
++next_chunk_to_match_; |
return; |
} |
@@ -717,23 +716,29 @@ void PaintController::GenerateChunkRasterInvalidationRects( |
if (it != out_of_order_chunk_indices_.end()) { |
for (size_t i : it->value) { |
if (new_chunk.Matches(old_chunks[i])) { |
- GenerateChunkRasterInvalidationRectsComparingOldChunk(new_chunk, |
- old_chunks[i]); |
+ GenerateRasterInvalidationsComparingChunks(new_chunk, old_chunks[i]); |
return; |
} |
} |
} |
// We reach here because the chunk is new. |
- AddRasterInvalidationInfo(nullptr, new_chunk, infinite_float_rect); |
+ AddRasterInvalidation(nullptr, new_chunk, infinite_float_rect); |
} |
-void PaintController::AddRasterInvalidationInfo(const DisplayItemClient* client, |
- PaintChunk& chunk, |
- const FloatRect& rect) { |
+void PaintController::AddRasterInvalidation(const DisplayItemClient* client, |
+ PaintChunk& chunk, |
+ const FloatRect& rect) { |
chunk.raster_invalidation_rects.push_back(rect); |
- if (!paint_chunks_raster_invalidation_tracking_map_) |
- return; |
+ if (raster_invalidation_tracking_map_) |
+ TrackRasterInvalidation(client, chunk, rect); |
+} |
+ |
+void PaintController::TrackRasterInvalidation(const DisplayItemClient* client, |
+ PaintChunk& chunk, |
+ const FloatRect& rect) { |
+ DCHECK(raster_invalidation_tracking_map_); |
+ |
RasterInvalidationInfo info; |
info.rect = EnclosingIntRect(rect); |
info.client = client; |
@@ -741,12 +746,10 @@ void PaintController::AddRasterInvalidationInfo(const DisplayItemClient* client, |
info.client_debug_name = client->DebugName(); |
info.reason = client->GetPaintInvalidationReason(); |
} |
- RasterInvalidationTracking& tracking = |
- paint_chunks_raster_invalidation_tracking_map_->Add(&chunk); |
- tracking.tracked_raster_invalidations.push_back(info); |
+ raster_invalidation_tracking_map_->Add(&chunk).invalidations.push_back(info); |
} |
-void PaintController::GenerateChunkRasterInvalidationRectsComparingOldChunk( |
+void PaintController::GenerateRasterInvalidationsComparingChunks( |
PaintChunk& new_chunk, |
const PaintChunk& old_chunk) { |
DCHECK(RuntimeEnabledFeatures::slimmingPaintV2Enabled()); |
@@ -774,9 +777,8 @@ void PaintController::GenerateChunkRasterInvalidationRectsComparingOldChunk( |
// And invalidate in the new chunk into which the item was moved. |
PaintChunk& moved_to_chunk = |
new_paint_chunks_.FindChunkByDisplayItemIndex(moved_to_index); |
- AddRasterInvalidationInfo( |
- client_to_invalidate, moved_to_chunk, |
- FloatRect(client_to_invalidate->VisualRect())); |
+ AddRasterInvalidation(client_to_invalidate, moved_to_chunk, |
+ FloatRect(client_to_invalidate->VisualRect())); |
} else if (moved_to_index < highest_moved_to_index) { |
// The item has been moved behind other cached items, so need to |
// invalidate the area that is probably exposed by the item moved |
@@ -794,7 +796,7 @@ void PaintController::GenerateChunkRasterInvalidationRectsComparingOldChunk( |
if (client_to_invalidate && |
invalidated_clients_in_old_chunk.insert(client_to_invalidate) |
.is_new_entry) { |
- AddRasterInvalidationInfo( |
+ AddRasterInvalidation( |
is_potentially_invalid_client ? nullptr : client_to_invalidate, |
new_chunk, |
FloatRect(current_paint_artifact_.GetDisplayItemList().VisualRect( |
@@ -809,8 +811,8 @@ void PaintController::GenerateChunkRasterInvalidationRectsComparingOldChunk( |
if (new_item.DrawsContent() && !ClientCacheIsValid(new_item.Client()) && |
invalidated_clients_in_new_chunk.insert(&new_item.Client()) |
.is_new_entry) { |
- AddRasterInvalidationInfo(&new_item.Client(), new_chunk, |
- FloatRect(new_item.Client().VisualRect())); |
+ AddRasterInvalidation(&new_item.Client(), new_chunk, |
+ FloatRect(new_item.Client().VisualRect())); |
} |
} |
} |